openvibers/openvibe.cam STATUS.json
STATUS.json
| 1 | { |
| 2 | "repository": "OpenVibers/OpenVibe.Cam", |
| 3 | "version": "0.1.0", |
| 4 | "stage": "product", |
| 5 | "code": true, |
| 6 | "wave": "W21", |
| 7 | "plan": "OpenVibe.Cam: the camera app, private cameras with revocable viewer grants, the still Live's cam button takes, and F1 familiar faces for the owner's own cameras — a photo and a still saved to OpenVibe.Pics by reference, with no picture bytes in Cam and no face template or crop here", |
| 8 | "runtime": "node 22, express 4, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9", |
| 9 | "port": "5160", |
| 10 | "domain": "openvibe.cam", |
| 11 | "contracts": "openvibe-contracts v0.419.0", |
| 12 | "sdk": "openvibe-sdk v0.161.0", |
| 13 | "shared": "openvibe-shared v4.237.0", |
| 14 | "packages": [ |
| 15 | "openvibe-contracts v0.419.0", |
| 16 | "openvibe-sdk v0.161.0", |
| 17 | "openvibe-shared v4.237.0" |
| 18 | ], |
| 19 | "summary": "OpenVibe.Cam is the camera app, the private wall for cameras a person owns, the API Live's cam button calls, and F1's event timeline. The camera preview, timer, burst, grid and filter run in the browser; a photo is posted to Cam and forwarded to OpenVibe.Pics with the person's own Network token. A camera is private: its owner sees it, and a viewer sees it only while a grant naming them is unrevoked and unexpired, checked on every read, so a revocation is refused at once. Familiar faces proxy the owner's own token to OpenVibe.Vision's library; Cam keeps only the Vision library id and no template or crop. A detection becomes one event with a 10 s/20 s clip reference, a still, away-mode priority, a Network notification, a private link and a police export.", |
| 20 | "works": [ |
| 21 | "Cameras: pair a phone, browser, Pi or IP camera; a Live stream id is read from Live and must be on the owner's channel; the slot defaults to the stream's managed slot", |
| 22 | "The owner's camera page: rename, source, status, slot and note; unpair; the private wall at /w/<id>", |
| 23 | "Viewer grants: one canonical subject and an expiry (1–90 days), @username resolved through Network identity.subject.resolve, one unrevoked grant per camera and viewer, extension instead of duplication", |
| 24 | "Revocation is immediate: the wall checks revoked_at and expires_at on every read and answers 404 to a stranger, including staff with no grant", |
| 25 | "The camera app: live preview, timer, 3-shot burst, grid, on-device colour/light/softness, caption; the picture goes to Pics", |
| 26 | "The Live cam button: POST /api/v1/stills reads Media's GET /live/:slot/frame.jpg, uploads the JPEG to Pics with the viewer's own token, and returns the chat line", |
| 27 | "Photos and stills are stored by reference (Pics slug, page link, direct link, filter, caption); no image bytes, no face template and no classification", |
| 28 | "F1 familiar faces: a camera setting (region, quiet hours), the owner's Vision library id, and proxy enrol/match/mute/delete calls with the owner's own token", |
| 29 | "F1 event timeline: person/package/vehicle/animal/loiter/door, 10 s before and 20 s after clip references, a still, away mode and louder unknown/door alerts, muted names and camera quiet hours", |
| 30 | "F1 private share links (sha256 only) and the police export file with time and place", |
| 31 | "A still is unlisted by default (the chat link opens it) or private to its owner; a photo on a camera wall is unlisted, otherwise private", |
| 32 | "Sign-in with OpenVibe.Network (PKCE S256, cam_at/cam_rt/cam_oauth), truthful readiness and loopback metrics", |
| 33 | "Account export and deletion over cameras, grants given and received, photos and stills", |
| 34 | "Server-rendered pages with stable cm- ids/classes, cache headers, discovery artifacts and deploy files" |
| 35 | ], |
| 36 | "notYet": [ |
| 37 | "The public camera directory, map, categories and follow-a-cam: v2; v1 makes nothing public and queues no Search document", |
| 38 | "Timelapses and the AI highlight of the day: v2; Media has no timelapse", |
| 39 | "Face to face (random/group video, CAM-3): blocked on the owner's go/no-go after the safety gate and legal review", |
| 40 | "Video capture in the camera app: MediaHub's POST /api/v1/videos chunked upload is the path; v1 stores photos and stills only", |
| 41 | "Streamerless pairing of an IP camera: ingest is Live's RTMP path; v1 pairs and reads a Live slot", |
| 42 | "A Search relay: nothing is public in v1, so there is no cam_outbox", |
| 43 | "A staff moderation screen: staff have no bypass of camera privacy; a takedown is a report to Pics or Network" |
| 44 | ], |
| 45 | "outboundCapabilities": [ |
| 46 | "network.notifications.push" |
| 47 | ], |
| 48 | "capabilitiesRegistered": false, |
| 49 | "serviceManifestRegistered": false, |
| 50 | "deployed": false, |
| 51 | "placeholderInSites": false, |
| 52 | "features": [ |
| 53 | "the <ov-camera> element at /embed/ov-camera.js: facing, filters, timer, mode and upload attributes; ov-camera:capture and ov-camera:error; start/stop/capture/flip; shadow DOM with --ov-camera-accent and --ov-camera-radius", |
| 54 | "camera app", |
| 55 | "photos to Pics", |
| 56 | "my cameras", |
| 57 | "private wall", |
| 58 | "viewer grants", |
| 59 | "grant revocation", |
| 60 | "familiar faces (Vision library proxy)", |
| 61 | "event timeline, away mode and notifications", |
| 62 | "private event links and police export", |
| 63 | "Live cam button stills", |
| 64 | "account export and deletion", |
| 65 | "Network sign-in", |
| 66 | "server-rendered pages", |
| 67 | "discovery", |
| 68 | "deploy files" |
| 69 | ], |
| 70 | "deployment": "not deployed: the unit and nginx vhost are deploy/systemd/openvibe-cam.service and deploy/nginx/openvibe.cam.conf", |
| 71 | "updated": "2026-11-13" |
| 72 | } |
| 73 |