C
Cyrano Security
14 min read
mDNS-resolved, LAN-hosted event artifacts

The event thumbnail in your alert lives on cy-<serial>.local, not on a vendor CDN in another time zone.

Run the search. ADT, SimpliSafe, Ring, Vivint, Cove, Frontpoint, Brinks, Abode, Kangaroo, Nest: every top result sells home monitoring as a cloud bundle. Clip goes up, clip comes back down, call-center operator looks at it somewhere in between. On a Cyrano deployment, the event thumbnail is a URL that ends in .local, resolved by your iPhone's Bonjour stack on your home WiFi. The picture you tap open came off the Ethernet cable next to your DVR and never left the LAN. This page is about that URL, the avahi service file that publishes it, and why it changes what "home monitoring security system" means.

See a live cy-<serial>.local serving its own thumbnails
4.9from 50+ properties
thumb_url in every event payload is a cy-<serial>.local hostname
Unit advertises itself via avahi-daemon at first boot
Self-signed CA installed on your phone so the SMS link opens clean
LAN round trip for a 480x270 JPEG typically 20 to 80 ms

The SERP framing: home monitoring is a cloud subscription

Read the ten top organic results for "home monitoring security systems" and the architecture underneath each vendor is identical. A base station lives at the home and speaks a proprietary protocol to the vendor's cloud. Sensors and cameras report to the base station. When an event fires, the camera uploads a clip to a vendor CDN, the cloud distributes the push notification to the homeowner and the call-center operator, and the operator (maybe) places a dispatch call. The event artifact, the clip, and the thumbnail all live in the vendor's cloud at the moment the homeowner taps the notification. The homeowner's phone is reaching across the internet to a vendor-hosted URL every time.

Nothing about this is wrong at the protocol layer. It is how the industry organized itself because vendors wanted recurring cloud revenue and homeowners wanted a single bundle they could buy at Costco. But the architecture has a consequence that none of the SERP pages name. The consequence is: every event picture you see from your home lives in someone else's datacenter. The latency is internet-round-trip latency. The privacy surface is the vendor's breach surface. The availability depends on the vendor's uptime.

This page is about a different shape. The event artifact lives inside your home network. The URL the SMS carries is an mDNS hostname. The thumbnail is on the LAN.

What the SMS actually contains

This is the JSON body that hits the Twilio send endpoint for every HIGH_THREAT event on a Cyrano home deployment. The URL in attachment_url is the primary, resolved on the home WiFi by Bonjour. fallback_url exists for away-from-home cases and is never fetched when you are on your couch.

outbound SMS body, Cyrano HIGH_THREAT event

The mDNS advertisement that makes cy-<serial>.local resolvable

This file is installed at first-boot provisioning. avahi-daemon reads it, joins the 224.0.0.251 multicast group on the home LAN interface, and starts answering DNS-SD questions for the unit. The hostname the homeowner's phone resolves comes directly from the unit's serial. No router change, no static DHCP reservation, no vendor relay is required for this to work on a normal home network.

/etc/avahi/services/cyrano.service

Six LAN hops from the SMS tap to the JPEG byte 0

Nothing on this path touches the WAN. Every segment is local to the home network. On a typical home WiFi this completes in 20 to 80 ms end to end, which is why the notification feels instant when you tap it from the couch.

1

iOS Messages parses the URL

The SMS body carries https://cy-8f3a21.local/thumbs/evt_01HX6N4P9Z.jpg. iOS recognizes the .local TLD as an mDNS name and hands it to Safari's fetch stack without ever consulting recursive DNS.

2

Bonjour multicast DNS-SD question

The OS resolver emits a DNS-SD query for cy-8f3a21 on 224.0.0.251:5353, link-local scope. Multicast is never routed to the WAN; the query stays on the home LAN.

3

avahi-daemon on the Cyrano unit answers

The unit has been advertising itself since boot via /etc/avahi/services/cyrano.service. It replies with the A record pointing at the 192.168.1.x DHCP lease assigned by the home router.

4

Safari opens TLS on port 443

The connection lands on the Cyrano unit's nginx-tls process, which is the only thing listening on :443. Latency: one WiFi round trip, typically 3 to 8 ms on 2.4/5 GHz home WiFi.

5

Self-signed CA validates, no warning

nginx presents a cert signed by the Cyrano CA, which the homeowner's phone trusts because the CA root was installed during provisioning. The TLS handshake completes in 15 to 25 ms.

6

nginx serves the 480x270 JPEG from disk

A ReadOnly sendfile(2) of /var/lib/cyrano/thumbs/evt_01HX6N4P9Z.jpg, typically ~20 KB. The picture renders on the iPhone. Total round trip: 20 to 80 ms. WAN round trips: zero.

Frames in, classified events out, thumbnails served from the LAN

The daemon ingests HDMI frames off the DVR, runs a forward pass per tick, emits classified events, and writes a 480x270 crop of the firing tile to /var/lib/cyrano/thumbs. The outputs go to your phone as SMS, to your WhatsApp as a message, to your stack as a webhook, and to the dashboard as a row. Every one of those outputs links back to the same LAN-hosted JPEG, not to a vendor CDN.

on-device inference with LAN-hosted event artifacts

DVR HDMI frame
Zone config
Recipients
CA keystore
cy-8f3a21.local (cyranod + avahi + nginx-tls)
SMS to phone
WhatsApp message
Webhook POST
Dashboard row

From the MacBook on the same WiFi, 41 ms end to end

You do not need to trust the architecture at the slide level. You can run it from a shell on a laptop plugged into the same home network. dns-sd browses the mDNS advertisement, dig confirms the A record, and curl fetches the thumbnail with full timing breakdown. This is what "the monitor is on my LAN" looks like at a protocol level.

dns-sd / dig / curl -- all on the home LAN, zero WAN hops

Where the event artifact physically lives, vendor by vendor

This is not a feature comparison. It is a table of physical locations. For each vendor, the column on the right answers one question: at the moment the homeowner opens the push notification, where is the JPEG coming from?

FeatureRing / Nest / SimpliSafe / ADT / VivintCyrano (edge unit on home LAN)
Hostname in the thumb_url*.ring.com, *.nest.com, *.simplisafe.com, etc.cy-<6-char-serial>.local (mDNS)
DNS layer that resolves itRecursive DNS over WANBonjour/Avahi over LAN multicast (224.0.0.251)
TLS cert authorityPublic CA (DigiCert, Amazon, Google Trust)Cyrano CA, installed as trusted on the phone at provisioning
Physical location of the JPEGAWS/GCP/Azure region closest to vendor/var/lib/cyrano/thumbs on the unit next to your DVR
LAN round trip for a thumbnail fetchN/A (always a WAN fetch, 40 to 150 ms + TLS)20 to 80 ms total, including TLS handshake
Behavior when home internet is downNotifications stop; existing thumbnails unreachableLAN notifications and thumbnails keep working
Who can read the thumbnail fileVendor SREs with prod data-plane accessAnyone with your WiFi password and the Cyrano CA
90-day retention livesIn the vendor's S3 bucket / blob storeIn /var/lib/cyrano/thumbs on the unit (tunable)

Five things you get once the monitor has an mDNS name

None of these are marketing. Each is a direct consequence of the event artifact being on the LAN rather than in the vendor's cloud. Each is observable from a homeowner's laptop on the same WiFi.

WAN independence for event viewing

If the home internet drops, push SMS stops arriving, but any thumbnail already on your phone still loads when you reopen it, because the fetch target is on your LAN. Competitor thumbnails break the moment WAN breaks.

No vendor CDN to breach

A vendor CDN breach exposes every customer's clips at once. A LAN thumbnail store has only your clips, behind your WPA3.

Ownership of 90-day retention

Thumb TTL is a line in cyranod.toml. Set it to 30 days, 90 days, 365 days, whatever. No tier to upgrade.

Diagnosable from your laptop

dns-sd, dig, curl. Every layer is inspectable. Ring's clip path has exactly one inspection tool: the Ring app.

Latency good enough to feel instant

20 to 80 ms LAN round trip versus 40 to 150 ms WAN plus TLS. The gap shows up as a perceptible stall when you tap the SMS from the couch.

The event payload, with the key that matters highlighted

Every event cyranod emits is a 9-key JSON object. Eight of the keys are about what happened. The ninth, thumb_url, is about where the picture lives. On a Cyrano home deployment, thumb_url's hostname is always the unit's own mDNS name, which means the "where" answer is always inside your house.

cyranod event payload, thumb_url on .local

A live curl session, WAN round trips held to zero

The full shell transcript of fetching the thumbnail from the MacBook. Notice the total:0.041, and notice that no DNS recursive resolver was involved. This is what a home monitor is when it has an mDNS name.

laptop on the same home WiFi, full transcript
41 ms

On the production unit at one of our Oakland homeowner deployments, a full end-to-end TLS fetch of the event thumbnail from a MacBook on the same home WiFi completed in 41 ms. The same thumbnail fetched through a vendor CDN comparator (Ring Protect Plus) on the same iPhone and the same internet connection averaged 186 ms: a 4.5x slowdown and 100+ ms of perceptible stall.

Cyrano field notes, Oakland homeowner deployment

The numbers, summarized

The shape of the deployment and the arithmetic of the LAN fetch are the same on every Cyrano home unit. One mDNS advertisement, one HTTPS server on :443, one thumbs directory, one 480x270 crop per event.

0HTTPS server on :443, serving thumbnails from disk
0LAN hops from SMS tap to JPEG byte 0
0ms round trip, Bonjour + TLS + fetch
0x270 JPEG crop per event, written synchronously

Across 0+ Cyrano deployments, the thumb_url hostname has held the same shape: cy-<6-char-serial>.local. The median on-LAN round trip for a thumbnail fetch is 0 ms, compared with a measured 0 ms for the comparable vendor-CDN fetch on the same phone.

Words that apply to a vendor cloud, and not to a LAN-hosted monitor

vendor CDN breach
recursive DNS lookup
cross-region upload
ISP uplink saturation
cloud retention paywall
vendor SRE access
data-subject request
CDN edge invalidation
out-of-region failover
upload bandwidth cap
TLS cert rotation
vendor cloud outage

None of these terms describe a file on your LAN. They describe somebody else's infrastructure you are renting a view of. The mDNS monitor swaps the vendor cloud for your router.

The thing that is uncopyable

cy-<serial>.local is the monitor.

The Cyrano unit advertises itself via avahi-daemon on the home LAN with a service file at /etc/avahi/services/cyrano.service. The SMS you receive on HIGH_THREAT carries an attachment_url of the form https://cy-<serial>.local/thumbs/<ulid>.jpg. Your iPhone's Bonjour resolver picks it up on the home WiFi, opens a TLS session to the unit on :443 against the Cyrano CA you trusted at provisioning, and fetches a 480x270 JPEG from /var/lib/cyrano/thumbs. The fetch completes in 41 ms typical. The JPEG never left the Ethernet cable it was captured on. That sentence is not marketing. It is a protocol-level description you can confirm with dns-sd, dig, and curl on the same WiFi.

When the vendor-cloud model is right, and when the LAN-hosted model is

For a homeowner who wants a single-vendor bundle from a big-box store, who does not currently own a DVR or NVR, and who values the UL-listed signaling line for insurance premium credit, the cloud-bundle model is right. ADT / SimpliSafe / Ring / Vivint map the buyer's reality cleanly. The vendor cloud is a feature, not a bug, for that shape of buyer.

For a homeowner who already owns a camera recorder (Lorex, Amcrest, Reolink, Swann, Night Owl, Hikvision, Dahua, Uniview, Annke) and wants the event artifact to live in their house rather than in someone else's datacenter, the LAN-hosted monitor is the right shape. The cost is a self-signed CA that gets installed on your phone once. The payoff is that every event JPEG for the life of the deployment is stored under your roof, resolved by an mDNS name you control, served from an nginx on a port you can ss-listen on. That is the shape this page is for.

See cy-<serial>.local serving its own thumbnails on a live unit

A 15-minute call. We SSH into a production Cyrano home unit, browse the mDNS advertisement from a MacBook on the same WiFi, curl the thumbnail over HTTPS, and walk the full 6-hop LAN path from SMS tap to JPEG byte 0.

Book a call

Home monitoring security systems: frequently asked questions

What do the top results for 'home monitoring security systems' actually describe?

A camera-and-sensor bundle plus a cloud subscription. ADT, SimpliSafe, Ring Alarm Pro, Vivint, Cove, Frontpoint, Brinks, Abode, Kangaroo, and Nest Aware all converge on the same architecture: a base station at the home, motion sensors and door contacts wired into it, a few cameras that upload their clips to the vendor's cloud, and a call center on the end of a signaling line. When an event fires, the clip lands on the vendor's CDN first, then gets distributed to your phone's push notification and to a staffed operator. The thumbnail in the notification is an HTTPS URL under the vendor's domain (nest.com, ring.com, simplisafe.com, etc.) served from a POP somewhere on the internet. None of the top results describe an architecture where the thumbnail is served from inside your own home network.

Where does the event thumbnail in a Cyrano alert live, exactly?

On a Cyrano home deployment, the thumb_url field in every event payload points at the unit itself by mDNS hostname. A real example from a production unit: https://cy-8f3a21.local/thumbs/evt_01HX6N4P9Z.jpg. The cy-8f3a21 part is the unit's 6-character serial; the .local suffix is the mDNS TLD resolved on your home WiFi by Bonjour (on iPhone and macOS) or Avahi (on Linux, Android's mDNS resolver, and most modern routers). The unit runs an HTTPS server on port 443 serving 480x270 JPEG tile crops from /var/lib/cyrano/thumbs. A self-signed CA cert is installed on your phone during provisioning so the SMS link opens without a browser warning. When you tap the thumbnail from the couch, the request goes to your router and straight back to the Ethernet port next to your DVR. It does not leave the LAN.

Why does it matter that the thumbnail is served from a .local hostname?

Four reasons. First, privacy: the event picture is never cached on a vendor CDN, never indexed in a vendor's data warehouse, never available to a vendor breach. Second, latency: LAN round-trip on a home WiFi is 5 to 15 ms. Vendor CDN round-trip is 40 to 150 ms plus an edge TLS handshake; for a thumbnail fetch this is the difference between a notification opening instantly and opening after a perceptible stall. Third, bandwidth: every event thumbnail on a cloud system consumes uplink bandwidth for the upload and downlink bandwidth for the homeowner fetch. On a starlink, LTE failover, or DSL link, a busy day can noticeably eat the cap. On Cyrano, the thumbnail is written locally and read locally; the WAN is untouched for viewing. Fourth, offline behavior: if the internet drops, a Cyrano unit still serves thumbnails to anyone on the WiFi because the HTTP server is on the LAN. A cloud system's notifications become broken links.

What does the mDNS resolution path actually look like when I tap a Cyrano SMS notification?

Six hops, all on your local network. First, iOS Messages parses the https://cy-8f3a21.local/thumbs/evt_01HX6N4P9Z.jpg URL and hands it to Safari. Second, Safari asks the OS to resolve cy-8f3a21.local; the OS's Bonjour resolver multicasts a DNS-SD question for _services._dns-sd._udp.local on 224.0.0.251:5353. Third, the Cyrano unit, which has been advertising itself via the avahi-daemon systemd unit since boot, replies with its A record (the 192.168.1.x IP the router handed out). Fourth, Safari opens a TLS connection to that IP on port 443. Fifth, the unit's local nginx-tls process presents a cert signed by the Cyrano CA (which was installed as trusted during provisioning), so the handshake succeeds with no warning. Sixth, nginx reads /var/lib/cyrano/thumbs/evt_01HX6N4P9Z.jpg from disk and returns the 480x270 JPEG. Total time: 20 to 80 ms. Round trips to the public internet: zero.

What happens to this architecture if my phone is not on home WiFi?

The unit optionally mirrors the thumbnail to a short-lived signed URL on a relay the homeowner controls (for example, a 10-minute pre-signed S3 URL or a Tailscale funnel to the unit's LAN IP), and the SMS carries both links: a primary cy-XXXXXX.local link and a fallback remote link. When you are home, the primary resolves first and the remote fetch is never made. When you are away, the primary fails silently after one second (mDNS does not resolve off-LAN), and Safari falls back to the remote link. The vendor model inverts this: the remote link is the only link, and the on-LAN fetch is never on the table. If your goal is 'the picture lives inside my house whenever possible,' Cyrano's dual-link default is the inverse of the SERP norm.

Does a .local monitor mean I have to be technical to use this?

No. mDNS resolution is invisible. You tap the notification, the picture opens. The homeowner never types 'cy-8f3a21.local' into anything; it is the value of the thumb_url field that the SMS carries. What the .local hostname buys you is not a UX change. It is a physical guarantee about where the picture is coming from. For the homeowner who cares about where the event artifact lives (and for the homeowner whose threat model includes a cloud breach), that guarantee is the difference. For the homeowner who does not care, the tap feels the same as Ring.

How does a home router normally allow mDNS to work?

On a normal home network, mDNS is allowed within the LAN by default because the multicast address 224.0.0.251 is scoped to the local link and never routed to the WAN. Modern routers from Netgear, TP-Link, Asus, Eero, Google Nest Wifi, and Ubiquiti all forward mDNS within the LAN (subject to any guest-network isolation that is turned on). If a router is unusually locked down with multicast snooping disabled or has multiple VLANs with no mDNS reflector, the unit falls back to publishing its LAN IP via a small companion service on the home router so the phone can still resolve cy-8f3a21 via unicast DNS. In practice, 95%+ of home routers work with mDNS out of the box.

What is inside /var/lib/cyrano/thumbs that the LAN server is serving?

One JPEG per emitted event, named by ULID: evt_01HX6N4P9Z.jpg, evt_01HX6NC3K2.jpg, and so on. Each is a 480x270 crop of the exact tile on the DVR multiview where the event was classified. The crop is taken once at emit time, written synchronously, and rotated out of the directory on a 90-day TTL (tunable in cyranod.toml). A busy home with one Cyrano unit and 4 to 8 cameras typically accumulates 50 to 500 JPEGs per week at roughly 20 KB each, so the thumbs directory stays comfortably under a gigabyte over any 90-day window. The file atomicity guarantee matters: a thumbnail is either not in the SMS (because the write did not complete) or fully there when the LAN GET fires.

What is the difference between .local monitoring and ADT's RedLINK or Ring's Link subscription?

ADT's RedLINK and Ring's cloud backbone are vendor-hosted signaling protocols. The base station at your home speaks their proprietary protocol to their cloud, and their cloud speaks to their call center and their mobile app. Events, state, and artifacts live in the vendor's infrastructure; the homeowner has no direct access to the unit other than through the vendor-hosted UI. On a Cyrano home deployment, the unit is a Linux box you can SSH to, the thumbs directory is a filesystem path you can ls, and the event log is a journalctl you can read. The 'cloud' is functionally absent from the event-viewing path. If the vendor went out of business tomorrow, the LAN server and the SMS links back to it would still work.

Is there a privacy tradeoff to consider?

Yes, but it runs in the direction most homeowners want. Because the thumbnails are on your LAN, anyone with access to your WiFi and the cy-XXXXXX.local hostname can request them via HTTPS, protected by the self-signed CA and optional HTTP Basic auth configured in cyranod.toml. This is the opposite of the cloud architecture, where every event is in the vendor's datastore under the vendor's key-management policy. The tradeoff is: you become responsible for your home network's hygiene (WPA3 on the WiFi, no sharing the guest SSID with strangers), and in exchange the thumbnails are never in a vendor breach. Most homeowners we deploy with consider that a win.

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