Add Frigate-backed starter camera config

This commit is contained in:
OpenClaw
2026-04-18 23:03:30 +00:00
parent 3c728ca7a7
commit fc43381ed9
5 changed files with 77 additions and 26 deletions

View File

@@ -2,6 +2,8 @@
visionLabs Roku is a private Roku app scaffold for viewing home security cameras on a TV.
The current starter path is Frigate-backed, with Roku reading a static inventory of cameras that are managed by Frigate instead of embedding raw camera credentials in the app.
## Product direction
- Brand family follows the user's existing `Labs` naming pattern.
@@ -12,7 +14,7 @@ visionLabs Roku is a private Roku app scaffold for viewing home security cameras
## Technical direction
- Roku SceneGraph app
- Camera feeds delivered as HLS where possible
- Camera feeds delivered from Frigate in a Roku-friendly format, ideally HLS
- Static JSON config for the first prototype
- Future backend for editing, persistence, and auth
@@ -22,16 +24,18 @@ visionLabs Roku is a private Roku app scaffold for viewing home security cameras
- `source/main.brs` - app entry point
- `components/MainScene.xml` - initial SceneGraph UI
- `components/MainScene.brs` - scene behavior
- `config/cameras.json` - static sample camera config
- `config/cameras.json` - static Frigate-backed starter camera config
- `docs/FRIGATE_SETUP.md` - notes for mapping cameras through Frigate
- `docs/ROADMAP.md` - delivery phases and constraints
## Notes
Roku is not a great target for raw RTSP feeds. The clean path is to expose camera streams as HLS, either directly from the NVR or through a relay/transcoder layer.
Roku is not a great target for raw RTSP feeds. With Frigate in the middle, the clean path is to let Frigate manage discovery, auth, and stream brokering, then expose a Roku-friendly live feed format from there.
## Next steps
1. Replace sample camera URLs in `config/cameras.json`
2. Load config into the UI
3. Render a static multi-camera grid
4. Add edit mode and persistence strategy
1. Set the real Frigate base URL in `config/cameras.json`
2. Map the four starter cameras in Frigate using the same IDs as the Roku config
3. Load config into the UI
4. Render a static multi-camera grid
5. Add edit mode and persistence strategy

View File

@@ -25,7 +25,7 @@
translation="[80, 260]"
width="1760"
height="120"
text="Project scaffold is live. Next step: load static cameras.json and render HLS camera tiles."
text="Project scaffold is live. Next step: load Frigate camera config and render the first Roku camera grid."
font="font:MediumSystemFont"
color="0x8B949EFF" />
</children>

View File

@@ -1,5 +1,10 @@
{
"appName": "visionLabs",
"backend": {
"type": "frigate",
"baseUrl": "http://YOUR-FRIGATE-HOST:5000",
"notes": "Keep raw camera credentials in Frigate or go2rtc, not in the Roku repo."
},
"layout": {
"type": "grid",
"columns": 2,
@@ -7,28 +12,32 @@
},
"cameras": [
{
"id": "front-door",
"name": "Front Door",
"streamUrl": "https://example.invalid/front-door/index.m3u8",
"snapshotUrl": "https://example.invalid/front-door.jpg"
"id": "cam195",
"name": "Cam 195",
"frigateCamera": "cam195",
"host": "192.168.0.195",
"onvif": true
},
{
"id": "driveway",
"name": "Driveway",
"streamUrl": "https://example.invalid/driveway/index.m3u8",
"snapshotUrl": "https://example.invalid/driveway.jpg"
"id": "cam196",
"name": "Cam 196",
"frigateCamera": "cam196",
"host": "192.168.0.196",
"onvif": true
},
{
"id": "garage",
"name": "Garage",
"streamUrl": "https://example.invalid/garage/index.m3u8",
"snapshotUrl": "https://example.invalid/garage.jpg"
"id": "cam201",
"name": "Cam 201",
"frigateCamera": "cam201",
"host": "192.168.0.201",
"onvif": true
},
{
"id": "back-yard",
"name": "Back Yard",
"streamUrl": "https://example.invalid/back-yard/index.m3u8",
"snapshotUrl": "https://example.invalid/back-yard.jpg"
"id": "cam228",
"name": "Cam 228",
"frigateCamera": "cam228",
"host": "192.168.0.228",
"onvif": true
}
]
}

37
docs/FRIGATE_SETUP.md Normal file
View File

@@ -0,0 +1,37 @@
# visionLabs Frigate setup
This project now assumes Frigate is the backend that owns camera auth, camera discovery, and stream handling.
## Starter inventory
The first four cameras are currently modeled as:
- `cam195` -> `192.168.0.195`
- `cam196` -> `192.168.0.196`
- `cam201` -> `192.168.0.201`
- `cam228` -> `192.168.0.228`
All four are ONVIF-capable and should be added to Frigate using matching camera IDs where possible.
## Important rule
Do not commit raw camera passwords to this repo.
Keep camera credentials inside:
- Frigate config
- go2rtc config
- a local secret file outside version control
## What to update next
1. Set the real Frigate base URL in `config/cameras.json`
2. Confirm the Frigate camera IDs match `cam195`, `cam196`, `cam201`, and `cam228`
3. Decide which Frigate live endpoint format the Roku app should consume first
4. Add snapshot and live tile loading in the SceneGraph UI
## Why this shape works
- Roku does not want to manage ONVIF directly
- Roku is happier when Frigate handles the camera-side protocol mess
- This keeps the app focused on layout, browsing, and playback

View File

@@ -2,10 +2,10 @@
## Phase 1
- Static packaged camera config
- Static packaged Frigate-backed camera config
- Simple Roku SceneGraph shell
- One screen with a fixed camera grid
- HLS-backed streams only
- Frigate-managed live feeds in a Roku-friendly format
## Phase 2
@@ -28,5 +28,6 @@
## Constraints
- Roku does not directly fit raw RTSP workflows well
- Frigate should own camera auth and camera-side protocol details
- HLS is the safest first-class playback target
- Packaged JSON is fine for V1 but not enough for runtime editing