Commit Graph
100 Commits
Author SHA1 Message Date
eduard256 ffe77cb9c4 Merge develop into main for v2.1.0 release 2026-04-08 11:31:03 +00:00
eduard256 29e03ce85a Release v2.1.0 2026-04-08 11:30:58 +00:00
eduard256 e47c0f7ce6 Add top-1000 checkbox to ONVIF page, classify JPEG streams as alternative
- Add checked-by-default checkbox to also test popular stream patterns
- Move JPEG-only streams (no H264/H265) to Alternative group in test results
2026-04-08 11:27:08 +00:00
eduard256 0fb7356a5e Add ONVIF stream handler for tester
- 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
2026-04-08 11:00:32 +00:00
eduard256 ce4b777e98 Add ONVIF camera page and probe routing
- 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)
2026-04-08 10:50:05 +00:00
eduard256 5be8d4aa00 Add ONVIF probe detector via unicast WS-Discovery
- Add ProbeONVIF() prober: sends unicast WS-Discovery to ip:3702,
  parses XAddrs, Name, Hardware from response (no auth needed)
- Add ONVIFResult struct to probe models
- Register ONVIF detector with highest priority (before HomeKit)
- Fix homekit.html back-wrapper max-width to match design system
2026-04-08 10:31:46 +00:00
eduard256 1291e6a5b6 Add frontend_design_strix skill for UI page creation
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.
2026-04-08 09:49:25 +00:00
eduard256 699ddda39b Update design system with centered layout, PIN input, floating back button
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.
2026-04-08 09:39:36 +00:00
eduard256 89c5d83a6f Refine HomeKit page: add Apple HomeKit logo, centered layout, back button
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.
2026-04-08 09:30:31 +00:00
eduard256 8398832960 Redesign HomeKit page, add design system reference
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.
2026-04-08 08:54:40 +00:00
eduard256 a16799fa8d Add Docker Compose files for Strix, Frigate, and go2rtc setups
Add three docker-compose variants: standalone Strix,
Strix + Frigate, and Strix + go2rtc. Update README with
Docker Compose install instructions linking to the files.
2026-04-05 14:47:54 +00:00
eduard256 0652e53bc7 Update README: add HomeKit protocol and StrixAHKCamFake reference 2026-04-05 14:41:19 +00:00
eduard256 528ec8e00b Add HomeKit stream testing via HAP snapshot
- 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
2026-04-05 12:58:26 +00:00
eduard256 a9820abc37 Add HomeKit camera pairing support
- 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
2026-04-05 12:43:06 +00:00
eduard256 e2e24c7578 Switch mDNS probe to multicast, use mDNS for reachability
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.
2026-04-05 12:06:11 +00:00
eduard256 f084135701 Remove ICMP ping from probe, add HomeKit port 51826
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.
2026-04-05 11:54:24 +00:00
eduard256 4e9ffd1440 Show LAN IP instead of localhost in install summary
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.
2026-04-05 10:45:46 +00:00
eduard256 83659c9a82 Replace double dashes with single dashes 2026-04-05 10:36:48 +00:00
eduard256 e0ccef8683 Replace double dashes with single dashes 2026-04-05 10:36:47 +00:00
eduard256 166feceab9 Add StrixCamFake link to DEVELOPERS.md 2026-04-05 10:36:11 +00:00
eduard256 66f9131cff Add StrixCamFake link to DEVELOPERS.md 2026-04-05 10:36:10 +00:00
eduard256 8cf3195b51 Add StrixCamFake link to README 2026-04-05 10:35:51 +00:00
eduard256 600141d11b Add StrixCamFake link to README 2026-04-05 10:35:50 +00:00
eduard256 608d4989ff Link feature bullets to corresponding screenshots 2026-04-05 10:28:55 +00:00
eduard256 5fb1efe599 Link feature bullets to corresponding screenshots 2026-04-05 10:28:54 +00:00
eduard256 2ab8106b01 Add supported cameras link to quick links 2026-04-05 10:25:42 +00:00
eduard256 acc456f3f5 Add supported cameras link to quick links 2026-04-05 10:25:41 +00:00
eduard256 22baefd57f Add camera database browse and contribute links 2026-04-05 10:23:33 +00:00
eduard256 f06d60f6ff Add camera database browse and contribute links 2026-04-05 10:23:32 +00:00
eduard256 6044df6ee4 Add horizontal rule before demo GIF 2026-04-05 10:20:39 +00:00
eduard256 56c02f6b72 Add horizontal rule before demo GIF 2026-04-05 10:20:38 +00:00
eduard256 43632fb8c2 Add live demo, video, and API docs links after banner 2026-04-05 10:19:33 +00:00
eduard256 55a4a62752 Add live demo, video, and API docs links after banner 2026-04-05 10:19:32 +00:00
eduard256 4c1fab86b1 Add separator between logo and title 2026-04-05 10:18:26 +00:00
eduard256 1c50564548 Add separator between logo and title 2026-04-05 10:18:25 +00:00
eduard256 1efe3cc9ba Add STRIX text next to logo in header 2026-04-05 10:17:40 +00:00
eduard256 21c96d6548 Add STRIX text next to logo in header 2026-04-05 10:17:39 +00:00
eduard256 4ea3485c9b Move API reference to DEVELOPERS.md 2026-04-05 10:15:47 +00:00
eduard256 dd8966a8d7 Move API reference to DEVELOPERS.md 2026-04-05 10:15:46 +00:00
eduard256 74eed5ede9 Redesign README header with centered layout and feature list 2026-04-05 10:09:26 +00:00
eduard256 96354f018f Redesign README header with centered layout and feature list 2026-04-05 10:09:25 +00:00
eduard256 75947be26b Remove title text from README header 2026-04-05 10:03:45 +00:00
eduard256 e4a28fe61a Remove title text from README header 2026-04-05 10:03:44 +00:00
eduard256 4cb00ec85f Left-align logo and badges in README 2026-04-05 10:03:15 +00:00
eduard256 2fc9be2d9f Left-align logo and badges in README 2026-04-05 10:03:14 +00:00
eduard256 0cf9f7d44e Remove logo caption from README 2026-04-05 10:02:39 +00:00
eduard256 39da8d2d50 Remove logo caption from README 2026-04-05 10:02:38 +00:00
eduard256 8c1a6b1b0e Add MIT license and license badge 2026-04-05 10:02:03 +00:00
eduard256 258f3712c2 Add MIT license and license badge 2026-04-05 10:02:02 +00:00
eduard256 2db7ae6f25 Move badges above icon in README 2026-04-05 10:00:31 +00:00
eduard256 bb740a04bc Move badges above icon in README 2026-04-05 10:00:30 +00:00
eduard256 09bd2ce220 Use PNG icon in README 2026-04-05 09:00:15 +00:00
eduard256 8a4201936a Use PNG icon in README 2026-04-05 09:00:10 +00:00
eduard256 0a30496991 Add README for v2.0.0 2026-04-05 08:58:55 +00:00
eduard256 eb6719237d Add README for v2.0.0 2026-04-05 08:58:23 +00:00
eduard256 ded8aebcad Merge develop into main for v2.0.0 release
# Conflicts:
#	DOCKER.md
#	README.md
2026-04-05 08:32:14 +00:00
eduard256 e2f84ec0f6 Release v2.0.0 2026-04-05 08:32:05 +00:00
eduard256 5f21a91ff9 Add universal Linux installer script
Bash installer that works on any Linux distro:
- Auto-detects OS and architecture
- Installs Docker via get.docker.com if missing
- Installs Docker Compose plugin if missing
- Auto-discovers local Frigate and go2rtc instances
- Interactive dialogs with 10s timeouts
- Generates docker-compose.yml and .env in /opt/strix/
- Supports install and update modes
- CLI flags for non-interactive use (--yes, --version, --no-logo)
- Returns machine-readable status for parent scripts (Proxmox LXC)
2026-04-05 08:13:28 +00:00
eduard256 44ab0651cb Add DVRIP protocol support
- Register dvrip stream handler using go2rtc pkg/dvrip
- Add default port 34567 for dvrip scheme in URL builder
2026-04-03 21:01:39 +00:00
eduard256 51b11e233f Add RTMP protocol support
Register rtmp, rtmps, rtmpx stream handlers using go2rtc
pkg/rtmp.DialPlay for TCP connect, handshake, and play.
2026-04-03 20:33:30 +00:00
eduard256 d59816543d Add direct stream URL input support to web UI 2026-04-03 20:03:45 +00:00
eduard256 4880e1ad14 Add 15s timeout for HTTP handler requests
Cameras under load may accept TCP connection but never respond,
hanging tester workers indefinitely. Context timeout on the HTTP
request ensures workers are released.
2026-04-03 19:26:17 +00:00
eduard256 6abb8409cb Add HTTP/HTTPS protocol support for snapshots and streams
Register http, https, httpx handlers with content-type detection:
- image/jpeg: single JPEG snapshots via go2rtc image.Open
- multipart/x-mixed-replace: MJPEG streams via mpjpeg.Open
- application/vnd.apple.mpegurl: HLS via hls.OpenURL
- auto-detect fallback via magic.Open (MPEG-TS, raw MJPEG, etc.)

Uses go2rtc tcp.Do for Basic + Digest auth and TLS handling.
2026-04-03 16:03:45 +00:00
eduard256 8ce89bec75 Always include port in URL for protocols with raw TCP dial
Bubble protocol uses net.DialTimeout with u.Host directly,
which requires explicit port. Add portRequired set to force
port in generated URLs for such protocols.
2026-04-01 17:53:00 +00:00
eduard256 8e8f568251 Add bubble protocol support
- Register bubble stream handler using go2rtc pkg/bubble
- Add default port 80 for bubble scheme
2026-04-01 17:24:02 +00:00
eduard256 20d5ad2f0b Fix screenshot URL path: remove leading slash 2026-04-01 16:07:22 +00:00
eduard256 f34a7b96c7 Add go2rtc module, test/config/urls pages, Frigate config fixes 2026-03-26 22:45:32 +00:00
eduard256 8dc8ba1096 Add resolution extraction from JPEG screenshots in tester 2026-03-26 10:40:41 +00:00
eduard256 74b4b61198 Add frontend pages, move static to www/, add resolution to tester
Frontend:
- index.html: probe device, navigate to standard/homekit by type
- standard.html: camera config, model search with multi-select
- create.html: stream URL list, custom URL input, create test session
- homekit.html: HomeKit device info, contact links, fallback to standard

Backend:
- Move static files to www/ package with embed (go2rtc pattern)
- Add initStatic() in api with FileServer
- Add width/height to test results from H264 SPS parsing
- Contribute links to gostrix.github.io with auto-filled params
2026-03-26 10:18:40 +00:00
eduard256 0ecf1eb75f Use app.Env for consistent env var access in frigate module 2026-03-25 19:41:25 +00:00
eduard256 e2fdf0d3d6 Add Frigate config proxy with auto-discovery 2026-03-25 19:20:07 +00:00
eduard256 fe4a5dfa2e Simplify Frigate detection, use known HA addon hostname 2026-03-25 19:08:23 +00:00
eduard256 5fdeca8701 Add raw Supervisor API response to frigate check endpoint 2026-03-25 18:58:53 +00:00
eduard256 124007ea31 Rebuild dev image 2026-03-25 18:46:56 +00:00
eduard256 62dcd89fc5 Simplify listHAAddons to return raw Supervisor API JSON 2026-03-25 18:37:53 +00:00
eduard256 a9ab7e2ba6 Add Frigate autodiscovery via HA Supervisor API 2026-03-25 18:30:38 +00:00
eduard256 b060a5372e Add frigate connectivity check endpoint 2026-03-25 18:15:31 +00:00
eduard256 0bf2a83e9d Add probe detector skill 2026-03-25 17:42:22 +00:00
eduard256 bfeae738e3 Add add_protocol skill, update release skills with DB download step 2026-03-25 17:37:20 +00:00
eduard256 4d171f69c7 Add Dockerfile, fix SQLite immutable mode, URL-encode credentials
- Dockerfile: multi-stage build with golang:1.26 and alpine + ffmpeg
- SQLite: use file: URI with immutable=1 for read-only access
- URL builder: encode user/pass with PathEscape/QueryEscape for
  special characters (@, \, :, etc.)
- Health endpoint: truncate uptime to seconds
- Release skill: update smoke test to /api endpoint
- Remove unused ValidateID function
2026-03-25 11:28:47 +00:00
eduard256 27117900eb Rewrite Strix from scratch as single binary
Complete architecture rewrite following go2rtc patterns:
- pkg/ for pure logic (camdb, tester, probe, generate)
- internal/ for application glue with Init() modules
- Single HTTP server on :4567 with all endpoints
- zerolog with password masking and memory ring buffer
- Environment-based config only (no YAML files)

API endpoints: /api/search, /api/streams, /api/test,
/api/probe, /api/generate, /api/health, /api/log

Dependencies: go2rtc v1.9.14, go-sqlite3, miekg/dns, zerolog
2026-03-25 10:38:46 +00:00
eduard256 51b0d06062 Fix database link to homepage 2026-03-23 20:25:03 +00:00
eduard256 3b29188924 Fix database link to homepage 2026-03-23 20:25:02 +00:00
eduard256 efd04367cf Add camera database browse link to README 2026-03-23 20:21:00 +00:00
eduard256 3a18390f42 Add camera database browse link to README 2026-03-23 20:20:59 +00:00
eduard256 cbe1a428b2 Add camera contribution link to README 2026-03-23 20:17:03 +00:00
eduard256 87c96970a6 Add camera contribution link to README 2026-03-23 20:12:13 +00:00
eduard256 7cab640bf2 Add Podman installation docs with required capabilities
Document NET_RAW and NET_ADMIN capabilities needed for network
scanning when running Strix with Podman. Includes podman run,
podman-compose, and Quadlet (systemd) setup instructions.

Addresses #6
2026-03-22 17:57:24 +00:00
eduard256 9e493a2bac Add Podman installation docs with required capabilities
Document NET_RAW and NET_ADMIN capabilities needed for network
scanning when running Strix with Podman. Includes podman run,
podman-compose, and Quadlet (systemd) setup instructions.

Addresses #6
2026-03-22 17:56:10 +00:00
eduard256 3fafdbc6ce Separate structured logs from human-readable output
Move SetupLogger() to a standalone function called before config.Load()
so the logger is available from the very start. Replace all fmt.Printf
calls in config.go with slog calls. Redirect banner and endpoint info
to stderr, keeping stdout clean for structured log output (JSON/text).

Fixes #5
2026-03-22 17:44:16 +00:00
eduard256 4fe5ae9447 URL-encode credentials with special characters in stream URLs
Passwords containing @, #, :, ?, /, %, &, space and other special
characters broke URL parsing, causing streams to not be detected.

Replaced fmt.Sprintf string concatenation with url.URL struct for
building RTSP/HTTP URLs. Credentials in userinfo are now handled via
url.UserPassword() which encodes special chars automatically.

Split replacePlaceholders into two phases:
- Phase 1: safe placeholders (channel, width, IP, port)
- Phase 2: credential placeholders with context-aware encoding:
  - Query string: url.Values.Set + Encode (auto percent-encoding)
  - Path segments: url.PathEscape

Normal passwords (letters, digits, -._~) produce identical URLs
as before -- encoding is a no-op for safe characters.

Fixes #10
2026-03-22 17:13:38 +00:00
eduard256 3acc966658 Mask URL-encoded passwords in debug logs
SecretStore.Add now registers both plain text and URL-encoded forms
of the password. Fixes cases where passwords with special characters
(e.g. @, #, :) appear percent-encoded in URLs but were not matched
by the masking handler.
2026-03-20 19:59:22 +00:00
eduard256 8cf05a1576 Fix credentials leaking in debug logs (#4)
Add a secret-masking slog.Handler that automatically replaces registered
passwords with "***" in all log output. Secrets are registered per-scan
when a discovery request arrives and unregistered when it completes.

This approach masks credentials everywhere they appear in logs — URL
userinfo, query parameters, path segments, and Go HTTP error messages —
without modifying any business logic in scanner, builder, tester, or
ONVIF components. API responses are unaffected and still return full
URLs with credentials for frontend use.
2026-03-20 11:03:01 +00:00
eduard256 c95740137d Merge icon variants from develop 2026-03-19 12:56:31 +00:00
eduard256 e269e243da Add icon variants with dark background and transparent versions 2026-03-19 12:44:20 +00:00
eduard256 0205e32257 Merge develop into main for v1.0.11 release 2026-03-19 11:33:03 +00:00
eduard256 c576b09e8b Release v1.0.11 2026-03-19 11:32:58 +00:00
eduard256 25f1907fc3 Register HEAD route for health endpoint in chi router 2026-03-19 11:25:57 +00:00
eduard256 cc8c3e4f14 Fix health endpoint HEAD method support, add icon assets
- Allow HEAD requests on /api/v1/health for Docker/CasaOS healthcheck
  compatibility (wget --spider sends HEAD)
- Add project icon in SVG, 192x192 PNG and 512x512 PNG formats
2026-03-19 11:17:22 +00:00
eduard256 4bd2de78dc Merge develop into main for v1.0.10 release 2026-03-17 07:27:07 +00:00