- www/config.html: stop prefilling the ONVIF host with the camera IP so
the onvif block is only emitted when the user opts in.
- pkg/generate/config.go: apply Go2RTC.SubStreamName before deriving the
Frigate restream path so go2rtc.streams and ffmpeg.inputs stay in sync
on rename (matches the existing main-stream order).
Protocols like Xiaomi need credentials (tokens) in a separate top-level
YAML section, not in the stream URL itself. Introduce a registry pattern
mirroring streams.HandleFunc / tester.RegisterSource:
- pkg/generate/registry.go: ExtractFunc + RegisterExtract
- Extractors clean the URL (strip ?token=...) and return section/key/value
- writeCredentials emits sorted sections between go2rtc: and cameras:
- upsertCredentials in addToConfig merges into existing sections:
* replaces value if key exists (token refresh)
* inserts in sorted order if new
* creates new top-level section before cameras: if missing
Xiaomi registers its extractor from internal/xiaomi/xiaomi.go. Adding
Tapo/Ring/Roborock later is one line + a small function in their
internal/*/ module -- zero changes in pkg/generate/.
Frontend needs access to icons (e.g. mihome.webp for Xiaomi page).
The //go:embed directive was limited to *.html only, so binary
assets in www/icons/ were never served.
- xiaomi.html: 6-state machine (loading, login, captcha, verify, region, notfound)
- index.html: navigateXiaomi redirects type=xiaomi probes to xiaomi.html
- icons/mihome.webp: 944B Mi Home logo for hero section
- Flow: detect Xiaomi via miIO probe -> login Mi Cloud -> pick region
-> fetch device list -> match camera by IP -> create.html?url=xiaomi://...
Port internal/xiaomi from go2rtc with stateless adaptation:
- Token passed via URL query (?token=) instead of persistent config
- tester.RegisterSource replaces streams.HandleFunc
- Stream handler extracts token from URL and populates in-memory cloud cache
- Device list endpoint embeds url-encoded token into each camera URL
- Auth flow (login/captcha/verify) unchanged from upstream
- Add testOnvif(): resolves all profiles via ONVIF client, tests
each RTSP stream, returns two Results per profile (onvif + rtsp)
with shared screenshot
- Route onvif:// URLs in worker.go alongside homekit://
- Classify onvif:// streams as recommended in test.html
- Harden create.html against undefined/null URL values
- Add onvif.html: credentials form, Discover Streams button,
fallback to Standard Discovery and HomeKit Pairing
- Update index.html routing: onvif type -> onvif.html with all
probe params (onvif_url, onvif_port, onvif_name, onvif_hardware,
mdns_* for HomeKit fallback)
Design guide with principles, layout patterns, component usage,
navigation rules, and checklist. References homekit.html as the
design gold standard and design-system.html for components.
Add true-center layout pattern, back-wrapper for floating navigation,
PIN digit input component with all states, and centered page demo
with HomeKit logo example. Document PIN input JS pattern.
Replace text-only header with official HomeKit house icon and
"Apple HomeKit" label. Pin input centered on screen, back button
aligned to container edge. Remove device info table and decorative
elements for a cleaner look matching the rest of the frontend.
Rebuild homekit.html with centered layout, cleaner PIN input,
and consistent styling matching the rest of the frontend.
Add www/design-system.html as a living component reference
for all UI elements used across the Strix frontend.
Add three docker-compose variants: standalone Strix,
Strix + Frigate, and Strix + go2rtc. Update README with
Docker Compose install instructions linking to the files.
- Add worker_homekit.go with direct hap.Dial + GetImage flow
- Bypass SRTP/Producer pipeline for homekit:// URLs
- Route homekit:// streams to dedicated handler in worker.go
- Add POST /api/homekit/pair endpoint that calls hap.Pair() from go2rtc
- Rewrite homekit.html with PIN input UI (XXX-XX-XXX format)
- Auto-advance between digit fields, paste support, error/success states
- On successful pairing, redirect to create.html with homekit:// URL
- Pass mdns_port and mdns_paired from probe to homekit.html
- Detect HomeKit cameras regardless of pairing status
Unicast mDNS queries (direct to IP:5353) are ignored by some HomeKit
devices. Switch to multicast (224.0.0.251:5353) and filter responses
by sender IP. Also consider mDNS response as reachability signal.
Split probe timeouts: 100ms for ports/DNS/HTTP, 120ms total to give
mDNS extra time. HomeKit responds in ~0.2ms via multicast.
ICMP requires root or CAP_NET_RAW which is not available in
unprivileged containers. Probe now relies solely on port scanning
for reachability detection, which works without any special
permissions. Add port 51826 (HomeKit) to both default and
database-loaded port lists.
Detect local network IP address using ip route / hostname -I / ifconfig
fallback chain and display it in the post-install summary box so users
can immediately open Strix from other devices on the network.