M
Matthew Diakonov
12 min read
Incident Review Guide

An incident is never one camera. Review should be a reconstructed path, not a scrubbed tape.

A mailroom theft walks in through the north gate, cuts across the parking lot, passes the lobby window, rides the elevator, opens a wrong mailbox, and leaves through the south alley. Five cameras minimum, often eight. Every other guide to this topic tells you to pick one camera and scrub. That workflow misses the shape of the incident. This guide shows how a single HDMI composite frame, indexed once, turns incident review into a timestamp-ordered path across tiles instead of a serial walk through per-channel playback.

Book a live incident reconstruction on your own DVR
4.9from 50+ properties
One composite frame, 25 tiles indexed together
Cross-tile reconstruction with frame-level time alignment
Evidence packet export in 4 to 7 minutes
DVR keeps recording under its own retention policy

Most incidents are paths, not points

The standard mental model of an incident is a single event on a single camera. A person stands in front of the mailroom at 2:45 a.m. That is the incident. Pick the mailroom camera, rewind to 2:40, watch five minutes, done. Every incident review walkthrough published on the internet is built around that model. The model is wrong about what an incident actually is.

A useful incident record is never a point. It is a path. The person in front of the mailroom at 2:45 got there from somewhere, and left to somewhere else. For a property manager answering a resident complaint, for a detective building a case, for an insurance adjuster writing a claim, the path is the product. The mailroom camera is one frame of it.

On a 25-camera property, a single subject typically appears on between 4 and 8 tiles in the course of a real incident. The reviewer's job is to produce that 4-to-8-row path, not to scrub any one camera. Traditional per-channel review forces the reviewer to reconstruct the path by hand: open channel 1, find the subject, note the time, guess the next likely channel, open it, find the subject again, and so on. That hand-stitching is where the hours go.

A real incident, unfolded across its tiles

Here is what an overnight mailroom theft looks like when you look at it as a sequence of handoffs across tiles instead of a tape on one camera. Eight rows, eight timestamps, one subject. The reviewer never scrubs.

02:41:07 to 02:48:22, one subject, seven tiles touched

North GateParking Row BLobby WElevator AMailroomS StairwellS Alley02:41:07 person_in_zone02:41:44 person_in_zone02:42:30 person_in_zone02:43:10 person_in_zone02:44:55 loiter (dwell 68s)02:46:12 package_tamper02:47:30 person_in_zone02:48:22 person_in_zone

A property manager reading this diagram is done with the review. They know when the subject entered, where they went, what they did, and when they left. Nothing was scrubbed. The eight rows were already sitting in the events table, produced incrementally at the moment each of those frames hit the classifier.

Why the composite-frame index makes the path ordering trivial

The part of cross-camera reconstruction that usually breaks is time alignment. Traditional IP camera rigs have one clock per camera, synchronized over the network via NTP or PTP, and the alignment is good to somewhere between 10 and 500 milliseconds in practice. That envelope is fine when a subject walks for three seconds between cameras. It is not fine when the subject crosses a doorway threshold in a hundred milliseconds and two cameras both see the crossing. Rows come back out of order. The path looks broken.

The composite frame has one clock. The DVR paints all 25 tiles into a single 4K image, pushes it out the HDMI port, Cyrano grabs it at 30 frames per second, and every event row written from that grab carries the same iso8601_ts. Two tiles cannot drift against each other because they were one picture. The cross-tile order is whatever order the rows come out of the frame, which is whatever order the subject touched them inside that 33 millisecond window.

anchor fact

Every tile's event row shares the same iso8601_ts to within 0 ms (one composite frame at 30 fps). Cross-tile reconstruction becomes ORDER BY ts, with no NTP drift between cameras and no recorder-clock alignment step.

0 fpsComposite frame rate off one HDMI tap
0 msShared timestamp envelope across every tile in one frame
0Max tiles indexed in parallel on one edge box
0Typical tiles touched by one real incident

From composite grab to reconstructed path

Here is the data flow end to end. The recorder draws the multiview, the edge box classifies every tile once per frame, and a reconstruction query joins the subject across the tiles they touched.

One composite frame fans out into a timestamp-ordered path

Tile grab
Overlay mask
Per-tile classifier
Re-id embedding
iso8601_ts stamp
Event index
subject_embedding_hash
path[]
tiles_touched
duration_seconds
evidence_packet.pdf

What one reconstructed incident looks like on disk

The path is a flat JSON array with one row per tile hop. The subject_embedding_hash ties the rows to the same person (a cosine match threshold keeps stray rows out). The iso8601_ts ordering is authoritative because every row came out of a composite frame with a single clock.

incidents/inc_01HW9Q7F.json

The same record as the filter chips a reviewer sees in the dashboard

02:41:07 North Gate02:41:44 Parking Row B02:42:30 Lobby W02:43:10 Elevator A02:44:55 Mailroom Interior02:46:12 Mailroom Interior02:47:30 South Stairwell02:48:22 South Alley

The 7 minute incident review workflow

This is the actual sequence a property manager runs through when a resident files an incident report at 9 a.m. on Monday. The goal is not to watch an incident unfold. The goal is to produce an evidence-quality packet that answers the question the resident is going to ask next.

1

Open the dashboard and set the time window

The resident says the package was there Sunday night and gone Monday morning. Set the window to Sunday 18:00 to Monday 09:00. The events table returns every row in that envelope across all 25 tiles.

2

Filter by the classes that matter for this incident

For a mailroom theft: person_in_zone plus loiter plus package_tamper. For a vehicle break-in: person_in_zone plus vehicle_dwell plus tamper. The filter turns the full event list into the subset that could plausibly be the incident.

3

Find the anchor event and trigger the reconstruction

Click the first thumbnail that looks like the incident (here, the 02:46:12 package_tamper on Mailroom Interior). The dashboard pulls the subject's re-id embedding and queries every tile for matching embeddings in the surrounding 10 minute window.

4

Verify the path makes physical sense

The dashboard renders the reconstructed path as a 4 to 8 row table with thumbnails. The reviewer glances at each one to confirm it is the same subject (usually obvious from clothing) and that the tile handoffs match the property's physical adjacency.

5

Export the evidence packet

One click. The packet is a PDF with the header (incident_id, property, subject hash, total duration), one row per tile hop (ts, tile label, event class, thumbnail), and a link back to the underlying DVR clip for each row. Typical packet is 8 to 12 pages.

6

Hand the packet to police, insurance, or the resident

The detective or adjuster reads the packet in under a minute. If they want the raw footage for any specific row, each row has a direct link into the DVR's playback client. The DVR is the archive. The packet is the index.

Why the per-channel workflow can't produce the same output

It is worth being specific about why traditional DVR playback review cannot reach the same result, even with infinite patience. The failure is structural, not a matter of effort.

First, the DVR's index is per-channel. To reconstruct a path across eight channels on a Hikvision iVMS or a Dahua SmartPSS, a reviewer runs the smart search eight times, manually compares motion segments, and stitches plausible handoffs into a spreadsheet. Every hop in the stitch is a place where the reviewer's judgement replaces a clock.

Second, the camera clocks drift. Even with NTP, IP camera clocks on a flat LAN drift by tens of milliseconds, and analog-plus-DVR rigs have no sync at all beyond the DVR's own wall clock applied at encode time. That drift is invisible on a 30 second event. It is lethal on a handoff that took 200 ms. The reviewer sees out-of-order rows and starts to doubt the sequence, which is the worst possible outcome for an evidence packet.

FeaturePer-channel DVR scrubbingCyrano path reconstruction
How review is framedOne channel at a time, reviewer stitches the restOne subject across every tile they touched
How time alignment worksPer-camera clocks, NTP drift of 10 to 500 msOne composite frame, one clock, 33 ms envelope
Ordering primitive across tilesReviewer's best guess, typed into a spreadsheetORDER BY iso8601_ts on the events table
Typical review time, one incident, 25 camera property90 minutes to 3 hours of scrubbing plus stitching4 to 7 minutes from dashboard open to packet export
Subject identity across camerasReviewer eyeballs the clothing in each playback tabRe-id embedding match plus adjacency plus temporal continuity
Evidence packetUSB drive of MP4 clips, reviewer writes the narrativeOrdered table of tile hops plus thumbnails, one click export
Original footage retentionUnchanged.Unchanged. DVR keeps recording its own blobs under its own policy.
Install cost on an existing DVRAlready installed. Incident cost is hours per packet.One HDMI tap, one Ethernet, one power, 2 minutes physical

Six incident classes the reconstruction handles natively

Every one of these starts with the same query shape (time window plus event class filter) and produces the same output (a timestamp-ordered path across tiles). The difference is which classes make it into the filter and which physical adjacencies the path walks through.

Mailroom package theft

Classes: person_in_zone, loiter, package_tamper. Typical path: entry point, lobby, elevator or stairwell, mailroom, exit point. Typical duration: 3 to 8 minutes. Typical tiles touched: 5 to 7.

Vehicle break-in

Classes: person_in_zone, vehicle_dwell, tamper. Path walks through the parking entry, the target row, the vehicle itself, and the exit. Duration: 2 to 4 minutes. Tiles touched: 3 to 5.

Trespass on gated property

Classes: person_in_zone at gate, loiter along fence line, person_in_zone in interior areas. Duration: highly variable, 1 minute to an hour. Tiles touched: 4 to 12 depending on property size.

Overnight vandalism

Classes: person_in_zone, loiter, tamper. Path often doubles back on the same tile. Duration: 5 to 20 minutes. Tiles touched: 3 to 6. Dwell on the target tile is usually the longest hop.

Unauthorized unit entry attempt

Classes: person_in_zone plus tamper on entry hardware. Path is short and localized: hallway plus unit door tile. Duration: under 2 minutes. Tiles touched: 2 to 3.

Service disagreement or dispute

Classes: person_in_zone, loiter, plus vehicle_entry and vehicle_exit if on a driveway. Path is a timeline across the shared space, used to establish who arrived when and who left when.

What goes in the evidence packet, and why that order matters

The packet is not a summary of the incident. It is an ordered, timestamped table of contents over the underlying DVR footage, built so that a detective or adjuster can read it top to bottom and reach the conclusion themselves.

Evidence packet row order, top to bottom

  1. 01Header: incident_id, property name, total duration, tiles_touched, reviewer initials, export timestamp, subject_embedding_hash.
  2. 02Path rows, in timestamp order, each with iso8601_ts, tile label (OCR'd from the DVR's cam_name_strip), event class, dwell time, and a 480 by 270 thumbnail.
  3. 03Clickable links back to the underlying DVR clip for every row. The clip opens seeked to ts minus 10 seconds so the reader sees context, not just the peak frame.
  4. 04Physical adjacency map: a simple floorplan with the touched tiles highlighted in order, so the reader can verify the path walks through the property the way a real person would.
  5. 05Chain-of-custody line: who produced the packet, what version of the classifier wrote the rows, and the hash of the exported PDF. The DVR's own recording is the primary evidence. The packet is the index into it.

Detectives read the packet in under a minute because every row is already in the format they would have typed into their report anyway: time, location, description. They dig into the DVR clips only when the packet surfaces something worth digging into. The work the reviewer used to do (watch hours of footage, write a narrative, produce a USB of clips) collapses into the click that exported the packet.

Two checks before you trust any reconstruction

Path reconstruction is only as good as two inputs: the tile-label OCR at install time, and the physical adjacency map. Both live in the property configuration and both are worth verifying before an incident actually matters.

The label check is: open the review dashboard, read the filter chips, and confirm they match the names painted on the DVR's on-screen display. If the DVR shows “Mailroom Interior” and the chip reads “Mailroom Interior”, the cam_name_strip OCR landed. If the chip reads “CH5”, the OCR step was skipped at install and every packet will refer to cameras by channel number, which is the last thing a detective wants to read.

The adjacency check is: take any event in the last 24 hours, trigger a reconstruction on it, and look at the resulting path. If the path walks from the Pool Deck directly to the Loading Dock NE with no intermediate tile, either the physical map is wrong or the re-id match grabbed the wrong subject. Both are fixable. The worst outcome is a packet that looks clean on paper but describes a path that cannot have happened.

Reconstruct last night's incident on your own DVR, live

15 minute call. We plug Cyrano into a running recorder and reconstruct a real incident from the footage you already have, end to end, while you watch.

Frequently asked questions

Why does every incident review guide tell me to pick one camera first?

Because the tool they assume you are using is the DVR's playback client, which is indexed by channel. Every built-in DVR workflow starts with 'pick a channel.' That framing puts the reviewer inside a single camera's timeline before they know which camera the incident actually touched. For most real incidents, a trespasser or a package thief or a vehicle break-in visibly appears on four to eight different tiles in sequence. The first tile you pick is almost never the one with the most useful angle. Reconstruction fixes this by putting a path across tiles in front of the reviewer before they pick anything.

What does cross-tile reconstruction actually mean in practice?

It means the review dashboard returns every event row tagged to a specific subject, in timestamp order, across every tile that subject appeared on. For a mailroom theft that starts at the north gate at 02:41:07 and ends in the south alley at 02:48:22, you get a chronological table: 02:41:07 North Gate, 02:41:44 Parking Row B, 02:42:30 Lobby W, 02:43:10 Elevator A, 02:44:55 Mailroom Interior, 02:46:12 Mailroom Interior, 02:47:30 South Stairwell, 02:48:22 South Alley. Eight rows. Eight thumbnails. One scroll. That is the incident. Playback on any single camera misses 7 of those 8 moments.

How is the reconstruction possible without perfect clock sync across cameras?

Because Cyrano classifies the HDMI composite, not the cameras. The DVR paints all 25 tiles into one frame, Cyrano grabs that frame once every 33 milliseconds at 30 frames per second, and every per-tile event written out of that frame carries the identical iso8601_ts. Two tiles cannot have clock drift between them because they were one picture. Cross-tile sort becomes a literal ORDER BY ts. Traditional IP camera rigs depend on NTP or PTP to keep 25 separate clocks aligned, and even small drift breaks ordering on fast events where someone crosses a doorway in under a second. The composite-frame approach sidesteps the problem.

What about identity? How do you know it is the same person across tiles?

Two signals. The first is temporal continuity: a person who disappears off tile A at 02:41:44 and appears on tile B at 02:41:46, and tile A and tile B are physically adjacent on the property map, is almost certainly the same person. The second is an embedding match at index time: the per-tile classifier crops the subject, computes a lightweight re-identification embedding, and writes that embedding into the event row. Cross-tile reconstruction is then cosine-similarity over the embedding plus the temporal and adjacency checks. Not perfect. Good enough to triage every real incident without manual tab-switching.

My DVR already has a smart search feature. Isn't that enough?

Not for incident reconstruction. DVR smart search is scoped to a single channel and returns motion segments, sometimes tagged with a weak object class. It cannot show you a subject's path across channels because its index is per-channel and its clock ordering across channels is not guaranteed. To reconstruct a path across eight cameras on a Hikvision or Dahua NVR, you run the smart search eight times, manually compare motion segments for plausible handoffs, and stitch the timeline together in a spreadsheet. The reconstruction dashboard collapses all of that into one query.

What does the evidence packet look like when I hand it to police or insurance?

A PDF with one row per tile, ordered by timestamp, each row carrying the iso8601 timestamp, the tile's human-readable label (OCR'd from the DVR's on-screen camera name strip at install time), the event class, a 480 by 270 thumbnail, and a link to the underlying recorder clip for full context. The DVR itself still holds every frame under whatever retention policy was in place, so the packet works as a table of contents over the raw footage. A typical mailroom-theft packet is 8 to 12 rows across 2 to 3 minutes of real incident time. Detectives read it in under a minute.

Can I reconstruct an incident that happened last week, or does this only work in real time?

Either. The event index is persistent. Once the composite-frame pipeline writes a row, it lives in the events table for as long as the retention policy allows. Most properties set that to 90 days by default. So when a resident reports a package missing from the mailroom three days ago, the dashboard runs the reconstruction query against historical events without replaying any video. The raw DVR recording is also still there as a fallback for the rare window that the classifier missed.

What events can actually be reconstructed? Is it only people?

Today: person_in_zone, loiter, vehicle_dwell, vehicle_entry, vehicle_exit, tamper, and package_tamper. The vehicle classes mean that a subject's path can include the parking lot camera tiles even if they were in a car the whole way in, then became a pedestrian at the garage. Coverage keeps expanding. For the common incidents (theft, trespass, vehicle break-in, vandalism), the classifier surface is already wide enough to produce a usable reconstruction. Events outside the classifier surface still show up as raw footage on the DVR, just not as index rows.

How long does a full incident review take with this setup?

For a typical single-subject incident on a 25-camera property: about 4 to 7 minutes from opening the dashboard to having a zipped evidence packet. Breakdown: 20 seconds to set the time window, 15 seconds to confirm the subject across the first two thumbnails, 2 to 3 minutes to scan the full path and verify no false handoffs, 1 to 2 minutes to click export. Compare that to the traditional workflow on the same incident, which is typically 90 minutes to 3 hours of scrubbing across channels on the DVR, plus another hour to stitch the clips into a coherent story.

What's the one thing a property manager should verify before their next review?

That the tile labels on the review dashboard match the names painted on the monitor. That is the anchor of the whole system. If the DVR's on-screen label reads 'Mailroom Interior' and the review filter chip also reads 'Mailroom Interior', the rest of the pipeline is grounded in names the property manager already uses. If the filter chips read 'CH1, CH2, CH3', the install step that OCRs the cam_name_strip was skipped, and the incident packet will be painful to read in front of a detective. Check the chips first. Then run a test reconstruction on any event from the last 24 hours to confirm the path orders the way you expect.

🛡️CyranoEdge AI Security for Apartments
© 2026 Cyrano. All rights reserved.

How did this page land for you?

React to reveal totals

Comments ()

Leave a comment to see what others are saying.

Public and anonymous. No signup.