Strix finds working streams automatically. In 30 seconds.
- 67,288 camera models
- 3,636 brands (from Hikvision to AliExpress no-name)
- 102,787 URL patterns (RTSP, HTTP, MJPEG, JPEG, BUBBLE)
- ❌ Bought ZOSI NVR, zero documentation
- ❌ Camera has no RTSP, only weird JPEG snapshots
- ❌ Frigate eating 70% CPU
- ❌ Config breaks after adding each camera
- ❌ Don't understand Frigate syntax
- âś… Auto-discovery - tests 102,787 URL variations in parallel
- âś… Any protocol - No RTSP? Finds HTTP MJPEG
- âś… Config generation - ready Frigate.yml in 2 minutes
- ✅ Sub/Main streams - CPU from 30% → 8%
- âś… Smart merging - adds camera to existing config with 500+ cameras
sudo apt update && command -v docker >/dev/null 2>&1 || curl -fsSL https://get.docker.com | sudo sh && docker run -d --name strix --network host --restart unless-stopped eduard256/strix:latestOpen http://YOUR_SERVER_IP:4567
sudo apt update && command -v docker >/dev/null 2>&1 || curl -fsSL https://get.docker.com | sudo sh && command -v docker-compose >/dev/null 2>&1 || { sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose; } && curl -fsSL https://raw.githubusercontent.com/eduard256/Strix/main/docker-compose.yml -o docker-compose.yml && docker-compose up -dInstallation:
- Go to Settings → Add-ons → Add-on Store
- Click ⋮ (top right) → Repositories
- Add:
https://github.com/eduard256/hassio-strix - Find "Strix" in store
- Click Install
- Enable "Start on boot" and "Show in sidebar"
- Click Start
Known Issues:
- Real-time progress may not display (Ingress SSE limitation)
- Use Docker installation for better experience
http://YOUR_SERVER_IP:4567
- IP Address:
192.168.1.100 - Username:
admin(if required) - Password: your camera password
- Model: optional, improves accuracy
Click "Discover Streams"
Watch real-time progress:
- Which URL is being tested
- How many tested
- Found streams appear instantly
Wait 30-60 seconds.
Strix shows details for each stream:
| Stream | Details |
|---|---|
| Protocol | RTSP, HTTP, MJPEG, JPEG |
| Resolution | 1920x1080, 640x480 |
| FPS | 25, 15, 10 |
| Codec | H264, H265, MJPEG |
| Audio | Yes / No |
Click "Use Stream" → "Generate Frigate Config"
You get ready config:
go2rtc:
streams:
'192_168_1_100_main':
- http://admin:pass@192.168.1.100:8000/video.mjpg
'192_168_1_100_sub':
- http://admin:pass@192.168.1.100:8000/video2.mjpg
cameras:
camera_192_168_1_100:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/192_168_1_100_sub
roles: [detect] # CPU 8% instead of 70%
- path: rtsp://127.0.0.1:8554/192_168_1_100_main
roles: [record] # HD recording
objects:
track: [person, car, cat, dog]
record:
enabled: trueSmart Merging:
- Paste your existing
frigate.ymlwith 500 cameras - Strix adds camera #501 correctly
- Doesn't break structure
- Preserves all settings
Copy config → Paste to frigate.yml → Restart Frigate
Done!
90% of Chinese cameras don't have RTSP. Strix supports everything:
- HTTP MJPEG - most old cameras
- JPEG snapshots - auto-converted to stream via FFmpeg
- RTSP - if available
- HTTP-FLV - some Chinese brands
- BUBBLE - proprietary Chinese NVR/DVR protocol
- ONVIF - auto-discovery
67,288 models from 3,636 brands:
- Known brands: Hikvision, Dahua, Axis, Foscam, TP-Link
- Chinese no-names: ZOSI, Escam, Sricam, Wanscam, Besder
- AliExpress junk: cameras without name, OEM models
- Old systems: NVR/DVR with proprietary protocols
Strix tries all methods in parallel:
1. ONVIF (30% success rate)
- Asks camera directly for stream URLs
- Works for ONVIF-compatible cameras
2. Database Lookup (60% success rate)
- 67,288 models with known working URLs
- Brand and model-specific patterns
3. Popular Patterns (90% success rate)
- 206 most common URL paths
- Works even for unknown cameras
Result: Finds stream for 95% of cameras
What you get:
âś… Main/Sub streams
- Main (HD) for recording
- Sub (low res) for object detection
- CPU usage reduced 5-10x
âś… Ready go2rtc config
- Stream multiplexing
- Protocol conversion
- JPEG → RTSP via FFmpeg
âś… Smart config merging
- Add to existing config
- Preserve structure
- No manual YAML editing
âś… Pre-configured detection
- person, car, cat, dog
- Ready motion recording
- 7 days retention
- Tests 20 URLs in parallel
- Average discovery time: 30-60 seconds
- Complex cameras: 2-3 minutes
- Real-time progress updates via SSE
environment:
- STRIX_API_LISTEN=:8080 # Custom port
- STRIX_LOG_LEVEL=debug # Detailed logs
- STRIX_LOG_FORMAT=json # JSON loggingCreate strix.yaml:
api:
listen: ":8080"Example: strix.yaml.example
In web UI under Advanced:
- Channel - for NVR systems (usually 0)
- Timeout - max discovery time (default: 240s)
- Max Streams - stop after N streams (default: 10)
Check network:
ping 192.168.1.100Camera must be reachable.
Verify credentials:
- Username/password correct?
- Try without credentials (some cameras are open)
Try without model:
- Strix will run ONVIF + 206 popular patterns
- Works for cameras not in database
No problem.
Strix will still find stream via:
- ONVIF (if supported)
- 206 popular URL patterns
- Common ports and paths
- HTTP MJPEG on various ports
- JPEG snapshot endpoints
Help the project:
- Found working stream? Create Issue
- Share model and URL
- We'll add to database
Normal for old cameras.
Strix auto-converts JPEG to stream via FFmpeg:
go2rtc:
streams:
camera_main:
- exec:ffmpeg -loop 1 -framerate 10 -i http://192.168.1.100/snapshot.jpg -c:v libx264 -f rtsp {output}Frigate gets normal 10 FPS stream.
Try another stream:
- Strix usually finds 3-10 variants
- Some may need special FFmpeg parameters
Use sub stream:
- For object detection
- Less CPU load
- Better performance
For new config:
- Strix creates complete
frigate.ymlfrom scratch - Includes go2rtc, camera, object detection
For existing config:
- Paste your current
frigate.yml - Strix adds new camera
- Preserves all existing cameras
- Doesn't break structure
Main/Sub streams:
- Main (HD) - for recording
- Sub (low res) - for detection
- CPU savings 5-10x
Yes.
- Strix runs locally on your network
- Nothing sent to external servers
- Passwords not saved
- Open source - check the code yourself
Yes.
- Database embedded in Docker image
- Internet only needed to download image
- Runs offline after that
REST API available for automation:
GET /api/v1/healthPOST /api/v1/cameras/search
{
"query": "hikvision",
"limit": 10
}POST /api/v1/streams/discover
{
"target": "192.168.1.100",
"username": "admin",
"password": "12345",
"model": "DS-2CD2xxx",
"timeout": 240,
"max_streams": 10
}Returns Server-Sent Events with real-time progress.
Full API documentation: DOCKER.md
- Language: Go 1.24
- Database: 3,636 JSON files
- Image size: 80-90 MB (Alpine Linux)
- Dependencies: FFmpeg/FFprobe for validation
- Concurrency: Worker pool (20 parallel tests)
- Real-time: Server-Sent Events (SSE)
git clone https://github.com/eduard256/Strix
cd Strix
make build
./bin/strixRequirements:
- Go 1.21+
- FFprobe (optional, for stream validation)
- linux/amd64
- linux/arm64
Auto-built and published to Docker Hub on every push to main.
- Add cheap cameras to Home Assistant
- Integrate with Frigate NVR
- Object detection with low CPU
- Motion recording
- Discover streams in old NVR systems
- Find backup cameras without docs
- Migrate from proprietary DVR to Frigate
- Reduce hardware requirements
- Test cameras before deployment
- Verify stream quality
- Find optimal resolution/FPS
- Check codec compatibility
Use sub stream:
- Find both main and sub streams with Strix
- Generate config with both
- Sub for detect, main for record
- CPU drops 5-10x
Example:
inputs:
- path: rtsp://127.0.0.1:8554/camera_sub # 640x480 for detect
roles: [detect]
- path: rtsp://127.0.0.1:8554/camera_main # 1920x1080 for record
roles: [record]In web UI:
- Strix shows all found streams
- Filter by resolution
- Choose optimal FPS
- Select codec (H264 recommended for Frigate)
Check Strix stream details:
- "Has Audio" field shows if audio present
- Some cameras have video-only streams
- Try different stream URL from Strix results
Reduce search scope:
- Specify exact camera model (faster database lookup)
- Lower "Max Streams" (stops after N found)
- Reduce timeout (default 240s)
In Advanced settings:
Max Streams: 5 (instead of 10)
Timeout: 120 (instead of 240)
Found working stream for camera not in database?
- Create Issue
- Provide:
- Camera brand and model
- Working URL pattern
- Protocol (RTSP/HTTP/etc)
- We'll add to database
- GitHub Issues
- Include logs (set
STRIX_LOG_LEVEL=debug) - Camera model and IP (if possible)
- GitHub Discussions
- Describe use case
- Explain expected behavior
- Camera database: ispyconnect.com
- Inspiration: go2rtc by AlexxIT
- Community: Home Assistant, Frigate NVR users
MIT License - use commercially, modify, distribute freely.
See LICENSE file for details.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Docker: Docker Hub
Made for people tired of cameras without documentation
Tested on Chinese AliExpress junk that finally works now.
