All Studio apps
Vision & CCTV Edge

Crowd

density · threshold

Count heads per zone from sampled frames and alert only when a crowd truly persists past your threshold.

streamhub.studio/studio/crowd

Interface preview coming soon

The problem

A single busy frame is not a crowd — someone walking past the camera should not trip an alarm. Crowd counts heads per zone from periodic snapshots and only raises an alert when the count stays over your threshold across multiple cycles, so you hear about a genuine build-up, not a passing spike.

Use cases

Venues / Events

Build-up detection

Watch an entrance, a concourse or a platform and get an annotated alert when the head count in a zone stays high across several cycles — early warning before it becomes a crush.

Retail

Queue & floor density

Track how busy a checkout area or section is over the day and flag sustained overcrowding for staff to respond to.

Public safety

Gathering awareness

Per-zone head counts give an objective density signal for a space, with the snapshot attached to every threshold alert for a human to confirm.

How it works

Input

Sampled HLS + polygon zones

A worker takes periodic snapshots of the live stream over HLS. You draw polygon zones on a live frame and tag each; geometry persists per stream as normalized points.

Detect

YOLO11 head count per zone

Each snapshot is counted per zone. A multi-cycle threshold means the count must stay over your limit across several samples before it counts as a crowd.

Signed callback

count / threshold

crowd.count carries the live per-zone number; crowd.threshold fires only on a sustained breach, with the zone, tag, threshold and an optional snapshot URL, through the app's signed callbacks.

Your system

Overview + your workflow

Live counts and threshold alerts show in the app tab; every event persists in the app's own crowd database for your reporting.

Events it emits

Declared in the plugin manifest and relayed through the app's HMAC-signed callbacks (webhook + MQTT). Anything a worker tries to emit that is not on this list is rejected — no core-event spoofing.

crowd.count crowd.threshold

Scope & limits

  • It is a per-zone head count with a sustained threshold — not precise crowd-flow analytics. Per-stream zones, tags and thresholds resolve as model defaults → tag config → per-stream override.
  • Very dense, heavily overlapping crowds undercount; an overhead or elevated view counts far better than a low frontal one.
  • Runs co-located on the master or distributed per-stream on edge nodes — one worker per stream, scheduled onto whichever node has capacity.

Minimum requirements

  • CPU-only is fine: because it works on periodic snapshots rather than every frame, crowd is one of the lightest models to stack across streams.
  • RAM: ~1.5 GB per worker. The yolo11n weights (~6 MB) auto-download on first run.
  • GPU optional: any CUDA GPU makes higher sample rates and more streams cheap — budget ~200 MB VRAM per stream on a GPU edge node.

Numbers are the plugin authors' honest measurements, not marketing. GPU is optional on every vision plugin except where noted.

Runs as a full app

Every Studio app is a first-class application, not a config modal — and it does not have to live inside StreamHub.

Full-page dashboard view

Opens as its own page inside the tenant app — zones, live panels, history and settings on one surface, not squeezed into a dialog.

Its own database

Keeps its state in a dedicated per-app SQLite database — reads, alerts, occupancy and evidence rows — that you own and can query.

Exportable bundle

Download the app as a self-contained bundle — worker, Dockerfile, compose and an env template — to self-host on your own infra and extend, talking back over the REST API and signed webhooks.

Have cameras or streams to put to work?

Tell us what you are monitoring and we will scope the right apps, wire them into your systems and run them with you. The software is open source — the deployment and operation is what we do.