C
Cyrano Security
14 min read
Portfolio operations guide

Running many security video monitoring systems is a different problem from running one.

The first page of search results pretends the plural does not exist. Every vendor sells a camera bundle, a recorder, or a monitoring contract as if you only have one site. The moment you have eight, nothing composes. Alerts do not deduplicate. Camera names clash. Clocks drift. The only thing that makes N properties behave like one queryable system is a structured event payload that every unit emits the same way.

This guide is about that payload. Nine fields plus a thumbnail, keyed on property, layout_id, and tile.label. Once it exists, cross-site correlation is a two-minute SQL query.

Without it, it is a full-time job.

Show me the multi-site event stream
4.9from 50+ properties
One event schema across every DVR brand
Up to 25 tiles per unit, one unit per recorder
Capture to WhatsApp in 5 to 15 seconds per site
Installs in under 2 minutes on each existing recorder

What the top SERP results quietly assume

Lorex, GW Security, and the wired-kit vendors sell a box of cameras, a recorder, and cable runs for one address. Pelco and Eagle Eye pitch enterprise VMS software that technically covers multiple sites but bills per-camera and requires a professional services engagement to federate. AMAROK and Deep Sentinel lease you a remote monitoring subscription, priced per site per month, with a human watching tiles on the other end.

None of those answers engage the portfolio problem directly. A regional manager running eight apartment buildings does not need more cameras, a bigger VMS, or a second NOC. They need the events that are already possible from the cameras they already own to show up in one place, with the same shape, labeled by property. That is what is missing from every result on the first page.

The answer in this guide is to move the problem up one layer. Stop thinking about cameras and recorders at all. Think about events and the keys that join them.

The exact shape of one event

Nine fields plus a thumbnail. Every Cyrano unit in the portfolio emits this identical shape. The field names are the join keys for everything downstream.

cyrano.event.json
Primary key

property + layout_id + tile.label

This triplet is stable across firmware updates, DVR reboots, and layout changes. If the recorder switches from 4x4-std to 5x5-std, layout_id changes and tile.index shifts, but tile.label (the recorder-overlaid camera name) does not.

Forensic field

overlay_mask

Lists which DVR overlays were masked before inference, usually clock + cam_name_strip + channel_bug. On review, this is the field that proves the model did not fire on baked-in pixels. At portfolio scale, identical recorder models share the same mask template.

From many systems to one stream

Each site keeps its own cameras, its own recorder, its own monitor. The Cyrano unit at each property emits events with identical keys. A portfolio dashboard becomes a straight join.

N properties, one schema

Property A: Hikvision DS-7716, 5x5-std
Property B: Dahua XVR, 4x4-std
Property C: Lorex NVR, 3x3-std
Property D: Uniview, 4x4-std
Unified event bus
Portfolio dashboard (Retool, Grafana, Metabase)
WhatsApp group routing by property
PagerDuty / Opsgenie incident webhook

Cross-site correlation is a SQL query, not a project

Because every event carries property, event_class, and iso8601_ts, finding the same incident class firing at multiple sites within a few minutes is one query. This is the thing the plural of the keyword is actually asking for.

portfolio_correlation.sql
cyrano portfolio query

The nine fields, and what each one unlocks at portfolio scale

tile.label

The camera name as the recorder already overlays it. Stable across reboots. Human-readable in alerts. Primary join key with property.

property

Site identifier assigned at install. The first line of every WhatsApp alert. The groupby column on every dashboard chart.

layout_id

Recorder layout descriptor like 4x4-std or 5x5-std. Changes when the operator reconfigures the multiview. Proves which grid the event came from.

tile.index

Row-major tile position starting at 0. Pairs with tile.coords so a reviewer can recompute the exact crop that was inferred.

tile.coords

x, y, w, h of the tile in the captured frame. Deterministic for a given layout_id. Lets downstream tooling re-crop the source multiview for audit.

overlay_mask

Which DVR overlays were masked before inference. Typically clock + cam_name_strip + channel_bug. The forensic field.

event_class

Detection label. person_in_zone, vehicle_dwell, loiter, tamper. The equality filter on every portfolio query.

iso8601_ts

Recorder-clock timestamp. The between-filter column for cross-site time-window correlation.

latency_ms

Capture-to-delivery latency per event. Charted per property, a stuck uplink surfaces as a p95 spike long before staff notice missing alerts.

1 schema / N properties

A portfolio stops being a pile of camera walls the moment every unit emits the same event shape.

Cyrano field deployment notes

What goes wrong without a shared payload

This is the failure mode multi-site operators run into with off-the-shelf VMS federation or per-site monitoring contracts. Every field that is missing or inconsistent creates a manual reconciliation step.

The multi-site reconciliation problem, frame by frame

01 / 05

Camera names clash across sites

Property A calls the loading dock camera "CH3". Property B calls it "Rear Dock". Property C calls it "LD-NE". No cross-site query works until someone renames 400 cameras.

Metrics a portfolio operator actually reads

With a unified event stream these become dashboard tiles instead of monthly spreadsheet exercises.

0 tilesper Cyrano unit, per recorder
0structured fields emitted per event
0sp95 capture-to-delivery latency
0 mininstall time on an active recorder

Across a 10-recorder deployment that works out to up to

0
simultaneous tile-level detections feeding one event bus.

How one event flows from tile to portfolio dashboard

Per-tile event, end to end

DVR at siteCyrano unitEvent busWhatsApp groupPortfolio dashboardHDMI multiview frameParse layout_id, apply overlay_mask, infer per tilePOST event (9 fields + thumbnail)Route by property to groupIndex for cross-site query

A portfolio rollout, site by site

1

Inventory recorders, not cameras

One Cyrano per recorder. A building with two DVRs gets two units. Count recorders across the portfolio, not cameras.

2

Assign property identifiers

Each site gets a short human-readable property string. This lands in every event. It is the groupby on every future dashboard.

3

Install at each site in one visit

Under 2 minutes per recorder. HDMI in, HDMI pass-through out, network, power. Wall monitor keeps working.

4

Confirm layout_id and overlay_mask

Cyrano auto-detects the recorder's layout at boot. Identical recorder models share the same overlay_mask template, so calibration is one-and-done per model.

5

Wire events into one destination

WhatsApp group plus a webhook to a shared bus. After this step, adding a new property is a drop-in; the schema already matches.

What a portfolio operator gets, versus the first-page alternatives

FeaturePer-site camera kit or monitoring contractCyrano across a portfolio
Event shape across sitesPer-site CSV export, per-vendor schemaIdentical nine-field payload from every unit
Cross-site correlationManual reconciliation of camera names and clocksOne SQL query on property + event_class + ts
Recorder brand mixBrand lock-in or pro-services federationWorks across Hikvision, Dahua, Lorex, Uniview, etc.
Inference locationCloud upload or remote human-watcher NOCEdge, per property, video stays on device
Per-site installRewire, new cameras, or contract onboardingUnder 2 minutes on the existing recorder
Adding a site next monthNew integration project, new billing tierDrop-in. Same schema. New property identifier.

Recorder brands already seen in portfolio deployments

A single portfolio routinely contains three or more of these. The inference layer stays the same because it reads the HDMI multiview after the recorder has already normalized the feeds.

Hikvision DS-7xxx
Dahua XVR
Dahua NVR
Lorex
Amcrest
Reolink NVR
Uniview
Swann
Night Owl
Q-See
ANNKE
EZVIZ
Bosch DIVAR
Honeywell Performance
Panasonic WJ-NX

The ecosystem around the event stream

The payload is the interface. Anything that accepts a webhook or can query a SQL table can consume it. That is the point.

Cyrano event bus
WhatsApp
PagerDuty
Opsgenie
Retool
Metabase
Grafana
Slack
Webhook

What a portfolio operator should confirm before rollout

Each box below is cheap to check on site one. Skipping any of them creates a reconciliation debt that compounds at each new property.

Portfolio readiness checklist

  • Every recorder has an HDMI output connected to a guard monitor
  • Every recorder is NTP-synced to the same time source
  • Each site has been assigned a short property identifier string
  • Camera names in the recorder OSD match what staff would call them in an alert
  • Outbound network from each site allows WhatsApp Business API or the chosen webhook
  • One owner is designated for the unified event bus (a person, not a role)

See the event stream across a live 12-recorder portfolio

A 20 minute walk-through of the payload landing at one WhatsApp group and one dashboard, keyed by property.

Book the walk-through

Frequently asked questions

Why does the plural of security video monitoring systems matter? Is this just a wording thing?

The plural is the whole problem. A single-site operator has one recorder, one guard monitor, and one camera count to worry about. A multi-site operator has 3 to 50 of each, often on different DVR brands with different layouts, and usually with different people answering the phone at each site. The top search results for this phrase quietly assume the single-site case and sell you one kit. The moment you run more than one, every question shifts: how do alerts deduplicate across sites, how do you compare event counts site to site, how do you tell a portfolio dashboard that a person flagged at property A tile 3 at 11:04 looks like the same person flagged at property B tile 7 at 11:07. None of that is possible unless every event from every unit carries the same structured payload. That is the thesis of this guide.

What does one structured event from Cyrano actually look like?

Nine fields plus a thumbnail, emitted as JSON. tile.label is the camera name as the recorder already overlays it (for example "Loading Dock NE"). tile.index is the row-major position in the multiview grid starting at 0. tile.coords gives x, y, w, h in the captured frame so you can reproduce the crop. property is the site identifier you assigned at install. layout_id is the recorder's layout like 4x4-std or 5x5-std. overlay_mask lists which DVR overlays were masked before inference (typically clock + cam_name_strip + channel_bug). event_class is the detection label (person_in_zone, vehicle_dwell, loiter, tamper, etc.). iso8601_ts is the recorder-clock timestamp. latency_ms is capture-to-delivery time. The thumbnail is a 480x270 JPEG crop of the relevant tile. Every Cyrano unit in the portfolio emits this identical shape.

How does that payload make multi-site correlation possible without custom engineering?

If every event everywhere has the same ten keys, a portfolio SQL query is trivial: select property, event_class, iso8601_ts, tile.label from events where event_class = 'person_in_zone' and iso8601_ts between T1 and T2 and property in (A, B, C). Without the structured payload you are stitching together CSV exports from 8 different NVR software clients by hand, matching camera names that are inconsistent, and guessing clock drift. With the payload, cross-site correlation is a two minute SQL query or a Retool dashboard. This is the difference between running multiple isolated monitoring systems and running one federated one.

What is overlay_mask and why does it matter at portfolio scale?

Every DVR stamps three things onto the HDMI multiview before sending it out: a running clock, a per-tile camera name strip, and a channel bug or mode badge. If you ran object detection naively the model would fixate on those pixels because they change every second. Cyrano masks them before inference and records which ones were masked as overlay_mask on the event. At portfolio scale the useful property is that identical recorder models share the same overlay_mask template. If you have 10 Hikvision DS-7716 recorders running 5x5-std, one overlay calibration applies to all 10. You do not calibrate site by site, and you have a paper trail proving the mask was applied every time.

How many Cyrano units does a multi-building portfolio need?

One unit per recorder. Each unit covers up to 25 camera tiles pulled from a single HDMI multiview. A 4x4 layout covers 16 tiles. A 5x5 covers 25. A site with two recorders (north wing, south wing, for example) needs two units. A 12-building portfolio where each building runs a single DVR needs 12 units. Because the event shape is identical across units, the number of units does not change the downstream plumbing. A new property added next month drops into the same event pipeline on the same schema.

Can Cyrano handle a portfolio that runs mixed DVR brands across sites?

Yes. Supported recorders include Hikvision DS-7xxx, Dahua XVR and NVR, Lorex, Amcrest, Reolink NVR, Uniview, Swann, Night Owl, Q-See, ANNKE, EZVIZ, Bosch DIVAR, Honeywell Performance, Panasonic WJ-NX, and most white-label rebrands. The recorder handles its own layout and overlay conventions. Cyrano detects the layout_id at boot, masks the correct overlays, and emits the same event shape regardless of brand. A portfolio mixing Hikvision at six properties, Dahua at three, and Lorex at one produces a single unified event stream with no per-brand integration work.

What delivery endpoints make sense when multiple sites share an on-call team?

Three common patterns. First, a single WhatsApp group for the regional manager plus the on-call operator at each property, where every event routes with property name in the first line so on-call can triage at a glance. Second, a webhook into an existing incident management tool (Opsgenie, PagerDuty, or a Retool-backed dashboard) where routing rules decide who gets paged based on property, event_class, and time of day. Third, a hybrid where the webhook feeds a portfolio dashboard and the WhatsApp delivery doubles as a per-site notification for property staff. Because the event payload is identical across units, any of these patterns is a matter of configuration, not engineering.

How fast is the capture to delivery path when running many units at once?

Each unit has its own latency budget: 5 to 15 seconds end to end, with median around 7 to 8 seconds. Running 12 units does not slow any individual unit because each one is edge-local, inferring on its own frames, and shipping its own events. The portfolio stream is the union of per-unit streams. If one property's uplink is congested, latency_ms on that site's events climbs while neighboring sites stay fast. The metric is visible on every event which means you can chart p50 and p95 latency per property and detect a slow uplink before staff notice missed alerts.

What about clock drift across recorders in different buildings?

iso8601_ts on every event is the recorder's own clock as captured from the multiview. Clock drift between recorders is real and matters for correlation. The simple operational answer is to NTP every recorder to the same source. The useful product answer is that Cyrano records the recorder's clock and its own wall clock at capture, so a portfolio dashboard can compute per-site drift from the difference and flag recorders that have walked more than a few seconds away from reference. Drift then becomes a maintenance ticket, not a silent source of bad correlation.

Does any footage leave the building?

Video frames stay on the Cyrano unit sitting next to the recorder. Inference is edge-local. What leaves each property is the structured event payload (the ten fields above) plus a 480x270 thumbnail crop of the tile that triggered the event. There is no continuous outbound video stream and no cloud archive of raw footage. Long-form storage stays on the recorder, which was already doing that job before Cyrano arrived.

How long does installation take at each site in a portfolio rollout?

Under 2 minutes per recorder if a guard monitor is already connected, which it is on essentially every commercial DVR deployment. The HDMI cable from the DVR to the wall monitor unplugs from the monitor, plugs into Cyrano's HDMI input, and a second HDMI cable from Cyrano's pass-through output goes back into the wall monitor. Network in, power in. The wall continues to show the same multiview because the pass-through preserves the signal. For a 12-site portfolio this means a one-day drive route per technician, not a multi-week integration project.

🛡️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.