All Studio apps
Vision & CCTV

Presence

zones · schedule

Know when a workstation or post is left unattended — or manned outside the schedule.

streamhub.studio/studio/presence
Presence
The problem

Some posts must be staffed: a reception desk, a security booth, a control room, a service counter. Watching a wall of cameras to catch an empty chair does not scale, and after-hours activity at a desk is easy to miss entirely. Presence turns "is this station manned?" into an event your systems can act on.

Use cases

Workforce

Manned-desk assurance

Mark the reception or help-desk zone and fire presence.absent when it stays empty past a threshold, so a supervisor knows the post was left before a customer does.

Industrial / HSE

Control-room occupancy

A control or operator station that must never be empty during a shift: an absent-then-returned pair gives you an auditable timeline of every gap.

Security

After-hours activity

presence.after_hours flags a person present at a workstation outside the configured work window and days — a quiet signal that something is happening off-schedule.

How it works

Input

Live HLS + drawn zones

A worker samples the app's live stream over HLS at low FPS. You draw the workstation zones on a live frame right in the dashboard; they persist as normalized rectangles.

Detect

Person-in-zone occupancy

YOLOv8 person detection (open-source, CPU-viable) plus point-in-zone occupancy and absence timers, all evaluated against your work schedule and timezone.

Signed callback

absent / returned / after-hours

The three events flow through the app's HMAC-signed webhooks and MQTT; an optional extra webhook URL gets the same raw JSON.

Your system

Timeline + your workflow

A per-zone occupancy timeline lands in the dashboard tab and in per-app SQLite; your systems consume the events to alert, log or escalate.

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.

presence.absent presence.returned presence.after_hours

Scope & limits

  • It detects a person in a zone — not identity, attention or activity. It answers "is someone there?", not "who?" or "are they working?".
  • Camera placement drives accuracy: an overhead or high-angle view of the zone counts reliably; frontal, low-angle or heavily occluded views miss.
  • The schedule uses an IANA timezone — set it (a Docker host is usually UTC), or after-hours logic drifts.

Minimum requirements

  • CPU-only by default: yolov8n at ~2 fps needs roughly 0.5 core per monitored room, plus HLS decode — budget ~1 core and keep a second core of headroom.
  • RAM: ~1.5 GB per worker (person model + runtime). Disk grows slowly (occupancy history in SQLite).
  • GPU optional: any CUDA GPU makes larger models and higher FPS cheap, but is never required for a single room.

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.