Vision camera setup and operator runbook
This is the end-to-end guide for connecting a physical location and its RTSP cameras to Bites Vision, proving the event path, activating rules, and handling the resulting review work.URLs
- Production Vision dashboard: https://bites.com/vision/ops
- Local development dashboard: https://dash.test/vision/ops
- Mac Frigate UI after installation: https://localhost:8971
- Mac Bridge health endpoint:
http://127.0.0.1:8081/health - Orin Frigate UI:
https://<orin-lan-ip>:8971 - Orin Bridge health endpoint:
http://127.0.0.1:8080/health
What is connected to what
Before starting
You need:- workspace-owner access in Bites;
- one Apple Silicon Mac or JetPack 6 / L4T R36 Jetson Orin;
- the repository checked out on that appliance;
- a fixed RTSP camera reachable from the appliance over the site LAN;
- a dedicated camera account rather than an administrator account; and
- the camera’s RTSP port and stream path, preferably an H.264 substream.
554, MQTT, Ollama, Frigate’s internal port 5000,
the Docker socket, or camera credentials to the public internet.
Complete setup flow
1. Select the correct workspace
Open Bites Vision, use the workspace switcher, and confirm the workspace name before proceeding. Users see only sites and cameras belonging to their active workspace.2. Create the site and one-time token
- Select Add BOOX. This opens the Add StoreBrain appliance wizard.
- Enter the physical site’s name.
- Enter its IANA timezone, for example
Africa/Cairo. - Choose the evidence-retention period. Fourteen days is the normal starting value.
- Leave Bridge HTTPS endpoint empty for the first outbound-ingest test.
- Select Create site and token.
- Copy the complete Vision Bridge environment block immediately.
3A. Install on an Apple Silicon Mac
Run the interactive installer from the repository:600 .env, starts the services, and verifies frames.
For an existing completed environment file:
deploy/vision-mac/.env already contains all production values, use:
VISION_DASHBOARD_URL=https://bites.com. Remove
COMPOSE_PROFILES=local-dashboard; that profile and
VISION_DASHBOARD_URL=http://dashboard-proxy are only for local dash.test.
Use --skip-vlm when testing only object detection and event delivery. Rules
that require visible-action descriptions will remain unavailable until the VLM
is enabled.
3B. Install on NVIDIA Jetson Orin
On JetPack 6 / L4T R36:4. Verify the appliance before creating a rule
Mac:- Frigate reports camera frames and recording processing;
camera_fpsanddetection_fpsare greater than zero;- Vision Bridge is healthy and its durable outbox is not growing indefinitely;
- the appliance reports the expected workspace/site identity;
- Ollama has the configured VLM when action-description rules are required; and
- the RTSP credential appears only in the local ignored
.env.
restaurant_focus zone is suitable for connectivity testing, not
for production measurements.
5. Create a rule before expecting detections
Vision intentionally starts Frigate with an empty tracked-object list. The required detector labels come from this site’s rules:- Active rules add alert labels.
- Shadow rules add detection labels and collect evidence for evaluation.
- Disabled rules add no labels.
- A label is removed after the last active or shadow rule requiring it is disabled.
- Select the connected site.
- Write a supported rule, for example
When a person enters the packing zone, create a review case. - Review the compiled objects, zones, sequence, and capabilities.
- Save it in Shadow first.
- Wait up to
VISION_RULE_SYNC_INTERVAL_SECONDS—60 seconds by default.
6. Trigger an object-detection rule
Use a safe, controlled test:- Confirm the rule is Shadow or Active.
- Confirm its required class appears in Frigate’s tracked-object list.
- Stand outside the configured zone until no stale track remains.
- Enter the zone carrying the expected object, or place the object clearly in view.
- Remain visible for several detection frames.
- Leave the zone and allow the track to end.
- Wait for Bridge to deliver its outbox.
- Select Refresh data in Bites Vision.
7. Trigger a sequential rule
For a sequence such as “person enters, then a box is added”:- Author the parent rule with its ordered steps and expected time window.
- Keep it in Shadow.
- Wait for all required labels to appear in the appliance manifest.
- Start with an empty, stable zone.
- Have one person enter the zone.
- Add the visible box within the configured sequence window.
- End both tracks by leaving the zone or holding the scene stable.
- Open Rules to inspect the shadow match and Review to inspect any resulting case/evidence.
needs_confirmation.
8. Trigger a visible-action/VLM rule
Rules such assomeone is writing require the appliance to report a configured
VLM. They compile to described_activity and begin in Shadow.
- Confirm
VISION_VLM_MODELmatches Frigate’sgenai.model. - Confirm Ollama is running and the model is available.
- Create the action rule in Bites.
- Wait for the manifest revision to apply.
- Perform the action clearly in the configured zone.
- Confirm an
object.trackedevent is followed byobject.described. - Review the description and evidence manually.
Optional online Qwen fallback
When creating the appliance, enable Use online Qwen if local Qwen does not respond, enter the provider key, and copy the newly generated environment block. The key is included only in the block in your browser; the dashboard does not receive or store it. The default is Alibaba Model Studio’s OpenAI-compatible endpoint withqwen3-vl-plus.
Local Ollama remains primary. After 90 seconds without a local description, the
Bridge re-checks Frigate’s rule-managed GenAI allowlist. It sends one snapshot
only if that label is still required by an Active or Shadow rule. Disabling the
last rule for a label therefore stops new cloud calls for that label. The
resulting event is marked cloud_vlm_fallback with exact cloud/<model>
provenance and still requires human confirmation.
How to use each Vision tab
Live
Shows the newest retained snapshot and health for cameras that have reported to the selected site. Continuous live video remains local to Frigate. Use this tab to verify whether the correct camera and zone are reporting.Review
Contains cases produced by active rules or explicit review routing. Open a case, inspect its rationale and evidence, then resolve it, mark it as not an issue, or leave a resolution note. Never make a disciplinary decision from a model label without reviewing the underlying evidence and business context.Rules
Create natural-language rules, inspect their compiled primitives, and control Disabled, Shadow, and Active state. Use Shadow to validate camera position, false positives, timing windows, and evidence quality before promotion.Operations
Shows station and operational metrics derived from accepted observations. A missing metric may mean the necessary rule, zone, or camera has not been configured—it does not prove that nothing happened.Quality
Shows inspections, human-preview work, corrective actions, and golden-set agreement. Read-only quality reporting works without a configured grader. Actual automated quality grading remains unavailable in production until a real structured grader passes the golden-set acceptance gate; production does not silently useSimulatedGrader.
Inventory
Shows movement profiles and inventory proposals. Proposals require human approval; Vision observations do not directly mutate inventory balances.Evidence and private remote access
Outbound events work without an inbound tunnel. To let authenticated Bites users retrieve retained snapshots or clips, expose only Vision Bridge through an identity-gated private network. For Orin, the installer normally configures this. To run it again:tailscale serve status, open the site’s
settings in Bites, and save it as Bridge endpoint. Test /health from the
Bites server or another specifically authorized tag:vision-dashboard node.
Use the policy template at
deploy/vision-orin/tailscale/policy.hujson.example. Remove or narrow any
default allow-all grant; Tailscale grants are additive. Never use Tailscale
Funnel because Funnel makes the endpoint public.
The tunnel must never expose:
- RTSP or port
554; - Frigate’s internal unauthenticated port
5000; - MQTT or port
1883; - Ollama or port
11434; - the Docker socket; or
- camera credentials.
Multiple cameras and multiple sites
One appliance can serve multiple cameras at one physical site. Duplicatego2rtc.streams.restaurant_camera and cameras.restaurant_camera in the
relevant Frigate config, give every camera a stable unique name, validate the
configuration, and restart.
Use a low-resolution H.264 substream for detection and the main stream for
recording when available. Draw zones independently for every fixed view.
Create a separate Bites site/token for:
- a different physical location;
- another customer workspace; or
- an independently managed Frigate appliance that needs separate lifecycle and health reporting.
Routine operations
Mac:Safe isolated test before using a real camera
On Apple Silicon, the repository includes a full fake-camera lifecycle. It generates RTSP, runs ONNX inference through CoreML, applies a rule manifest, delivers a tenant-scoped event to a mock dashboard, optionally runs Qwen3-VL, restarts the services, and removes its test volumes:./test-cycle.sh --skip-vlm to test detection and delivery without the VLM,
or ./test-cycle.sh --keep-running to inspect the test Frigate UI at
https://localhost:18971 after assertions.
Troubleshooting
Acceptance checklist
A site is operational only when all items below are true:- The site was created in the intended workspace.
- The one-time site token is stored only on the appliance.
- The camera is reachable locally and reports non-zero FPS.
- A real operational zone replaces any placeholder zone.
- Bridge reports the correct organization, workspace, site, and appliance.
- A Shadow rule applies its required detector labels.
- A controlled trigger produces a tenant-scoped event.
- The camera appears in Live with fresh health.
- The rule produces the expected shadow match or review case.
- Evidence loads through an authenticated private Bridge endpoint when remote evidence is required.
- Human review is completed before a rule is promoted to Active.
- No RTSP, MQTT, Ollama, Docker, or unauthenticated Frigate port is public.
What Vision does not claim
- YOLO object labels do not describe intent.
- A VLM description is not proof of ownership or wrongdoing.
- A container does not prove its contents.
- Absence of a detection does not prove absence of an event.
- A simulated grader is never a production quality measurement.
- Inventory proposals do not directly change inventory without approval.