mirror of
https://github.com/eduard256/Strix
synced 2026-04-21 13:37:27 +00:00
Smart IP camera stream finder. Tests 102K+ URL patterns in 30 seconds. Supports 67K camera models. Generates ready Frigate/go2rtc configs.
- Remove new URL() construction with window.location.origin - Use simple relative path like camera-search API - Fixes stream discovery in HA Ingress environment - Maintains compatibility with direct Docker installations - Version bump to 1.0.3 |
||
|---|---|---|
| .github/workflows | ||
| assets | ||
| cmd/strix | ||
| data | ||
| internal | ||
| pkg/sse | ||
| webui | ||
| .dockerignore | ||
| .gitignore | ||
| .goreleaser.yaml | ||
| CHANGELOG.md | ||
| DEDUPLICATION_TEST_RESULTS.md | ||
| docker-compose.full.yml | ||
| docker-compose.yml | ||
| DOCKER.md | ||
| Dockerfile | ||
| FRIGATE_RECORD_CONFIG.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| README.md | ||
| strix.yaml.example | ||
🦉 Strix - Smart IP Camera Stream Discovery System
Strix is an intelligent IP camera stream discovery system that acts as a bridge between users and streaming servers like go2rtc. It automatically discovers and validates camera streams, eliminating the need for manual URL configuration.
🎯 Features
- Intelligent Camera Search: Fuzzy search across 3,600+ camera models
- Automatic Stream Discovery: ONVIF, database patterns, and popular URL detection
- Real-time Updates: Server-Sent Events (SSE) for live discovery progress
- Universal Protocol Support: RTSP, HTTP, MJPEG, JPEG snapshots, and more
- Smart URL Building: Automatic placeholder replacement and authentication handling
- Concurrent Testing: Fast parallel stream validation with ffprobe
- Memory Efficient: Streaming JSON parsing for large camera databases
- API-First Design: RESTful API with comprehensive documentation
🚀 Quick Start
Docker (Recommended)
# Using Docker Compose (recommended)
docker-compose up -d
# Or using Docker directly
docker run -d \
--name strix \
-p 4567:4567 \
eduard256/strix:latest
# Access at http://localhost:4567
See Docker documentation for more options.
Build from Source
Prerequisites:
- Go 1.21 or higher
- ffprobe (optional, for enhanced stream validation)
# Clone the repository
git clone https://github.com/eduard256/Strix
cd strix
# Install dependencies
make deps
# Build the application
make build
# Run the application
make run
# The server will start on http://localhost:4567
# Open your browser and navigate to http://localhost:4567
📡 API Endpoints
Health Check
GET /api/v1/health
Camera Search
POST /api/v1/cameras/search
{
"query": "zosi zg23213m",
"limit": 10
}
Stream Discovery (SSE)
POST /api/v1/streams/discover
{
"target": "192.168.1.100", # IP or stream URL
"model": "zosi zg23213m", # Optional camera model
"username": "admin", # Optional
"password": "password", # Optional
"timeout": 240, # Seconds (default: 240)
"max_streams": 10, # Maximum streams to find
"channel": 0 # For NVR systems
}
🔍 How It Works
- Camera Search: Intelligent fuzzy matching across brand and model database
- URL Collection: Combines ONVIF discovery, model-specific patterns, and popular URLs
- Stream Validation: Concurrent testing using ffprobe and HTTP requests
- Real-time Updates: SSE streams provide instant feedback on discovered streams
- Smart Filtering: Deduplicates URLs and prioritizes working streams
📁 Project Structure
strix/
├── cmd/strix/ # Application entry point
├── internal/ # Private application code
│ ├── api/ # HTTP handlers and routing
│ ├── camera/ # Camera database and discovery
│ │ ├── database/ # Database loading and search
│ │ ├── discovery/ # ONVIF and stream discovery
│ │ └── stream/ # URL building and validation
│ ├── config/ # Configuration management
│ └── models/ # Data structures
├── pkg/ # Public packages
│ └── sse/ # Server-Sent Events
├── data/ # Camera database (3,600+ models)
│ ├── brands/ # Brand-specific JSON files
│ ├── popular_stream_patterns.json
│ └── query_parameters.json
└── go.mod
🛠️ Configuration
Strix can be configured via strix.yaml file or environment variables.
Configuration File (strix.yaml)
Create a strix.yaml file in the same directory as the binary:
# API Server Configuration
api:
listen: ":4567" # Format: ":port" or "host:port"
Examples:
api:
listen: ":4567" # All interfaces, port 4567 (default)
# listen: "127.0.0.1:4567" # Localhost only
# listen: ":8080" # Custom port
Environment Variables
Environment variables override config file values:
STRIX_API_LISTEN=":4567" # Server listen address (overrides strix.yaml)
STRIX_LOG_LEVEL=info # Log level: debug, info, warn, error
STRIX_LOG_FORMAT=json # Log format: json, text
Configuration Priority
- Environment variable
STRIX_API_LISTEN(highest priority) - Config file
strix.yaml - Default value
:4567(lowest priority)
Quick Start with Custom Port
# Using environment variable
STRIX_API_LISTEN=":8080" ./strix
# Or using config file
cp strix.yaml.example strix.yaml
# Edit strix.yaml, then:
./strix
📊 Camera Database
The system includes a comprehensive database of camera models:
- 3,600+ camera brands
- 150+ popular stream patterns
- 258 query parameter variations
- Automatic placeholder replacement
🔧 Development
# Run tests
make test
# Format code
make fmt
# Run linter
make lint
# Build for all platforms
make build-all
# Development mode with live reload
make dev
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Camera database sourced from ispyconnect.com
- Inspired by go2rtc project
- Built with Go and Chi router
Made with ❤️ for the home automation community
