src.nth.io/

summaryrefslogtreecommitdiff
path: root/Scrypted-Viewport-v2-Claude-Code-Implementation-Guide.md
AgeCommit message (Collapse)AuthorFilesLines
2026-06-13Tighten protocol; add /wake, callback types, and orientationLuke Hoersten1-167/+222
State model is now strictly wake/sleep, owned by the device: - Local triggers: tap (toggle), idle timeout (sleep only). - Remote triggers: POST /wake, POST /sleep. Scrypted decides why (doorbell, motion, person, schedule) — the device does not know. - /frame is pure paint: 204 when awake, 409 when asleep, no implicit wake. Eliminates the race where an in-flight frame could re-wake a device that just slept on a tap. Orientation: - Configurable via /config; default portrait. - Effective resolution: 480x800 portrait, 800x480 landscape. - Scrypted must render at the effective resolution. Device does not rotate or scale JPEG content. - Orientation flows through mDNS TXT, /health, IP/Loading screens. Callbacks: - Add `type` field carrying the cause: tap or timeout (forward-compat for swipes etc). - Drop wall-clock timestamp (no RTC, no SNTP). Other: - Boot: configured device boots to sleep (backlight off). - /health adds state, last_frame_ms_ago, frame counters, error counters, brightness, orientation, idle_timeout_ms. - idle_timeout_ms: 0 disables; non-zero must be >= 5000; else 400. - First-boot brightness default 80; apply gamma curve to PWM. - Watchdog reboots hung tasks; recovers state from NVS. - On-board status LED indicates network/config state. - mDNS hostname-collision warning; ops notes. - Idempotency table summarizing endpoint safety. - Each viewport is bound 1:1 to a camera in Scrypted-side code. - Reframe "no rendering engine" honestly as "no general-purpose UI framework"; IP and Loading screens are the only locally-drawn UI. Doc sync: v2 implementation guide endpoints, modules, milestones, acceptance criteria, error handling, and tests all updated to match.
2026-06-13Spec wake/sleep, idle timeout, IP screen, BOOT buttonLuke Hoersten1-53/+119
- Couple backlight and Scrypted streaming as a single wake/sleep state owned by the device. - Callback events are idempotent imperatives: wake = "start streaming", sleep = "stop streaming". Scrypted does not track viewport state. - Each viewport is bound to one camera in Scrypted-side code; camera events (doorbell, person, motion) drive streaming. - idle_timeout_ms set by Scrypted via /config (default 60000). Same value on both sides; timers run independently and either can end a session. - Tap input only (long_press/swipes out of scope for v1). Tap is internal; callback carries the resulting state. - IP screen on first boot, after factory reset, and as a 15s BOOT short-press overlay. - Loading screen between wake and the next /frame. - BOOT: short press = IP overlay, hold 5s = factory reset. - Note that Scrypted side is code (Script for v1, custom plugin for v2 with /stream), not configuration.
2026-06-13Flesh out protocol details and add implementation guideLuke Hoersten1-0/+884
Expand README with per-endpoint contracts (response codes, persistence, size limits, idle/wake semantics) and a Scrypted integration section covering registration, frame push, and touch handling. Add v2 implementation guide adapted from the DoorView spec. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>