Smart IP camera stream finder. Tests 102K+ URL patterns in 30 seconds. Supports 67K camera models. Generates ready Frigate/go2rtc configs.
Find a file
eduard256 ded9b507d6 Fix stream discovery URL for Home Assistant Ingress
- 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
2025-11-18 13:59:54 +03:00
.github/workflows Remove Home Assistant addon integration 2025-11-18 00:09:00 +03:00
assets Update demo GIF 2025-11-15 00:16:16 +03:00
cmd/strix Fix stream discovery URL for Home Assistant Ingress 2025-11-18 13:59:54 +03:00
data Add Frigate config merging and camera database updates 2025-11-11 22:32:59 +03:00
internal Fix SSE stream discovery and add ESLint for WebUI 2025-11-12 11:45:46 +03:00
pkg/sse Add multi-authentication support and comprehensive stream discovery 2025-10-29 02:15:21 +03:00
webui Fix stream discovery URL for Home Assistant Ingress 2025-11-18 13:59:54 +03:00
.dockerignore Add Docker support with multi-arch builds 2025-11-12 10:50:50 +03:00
.gitignore Fix SSE stream discovery and add ESLint for WebUI 2025-11-12 11:45:46 +03:00
.goreleaser.yaml Refactor authentication system: centralize credential handling in Builder 2025-11-07 19:08:05 +03:00
CHANGELOG.md Refactor authentication system: centralize credential handling in Builder 2025-11-07 19:08:05 +03:00
DEDUPLICATION_TEST_RESULTS.md Update repository paths and URLs 2025-11-09 18:20:02 +03:00
docker-compose.full.yml Add Docker support with multi-arch builds 2025-11-12 10:50:50 +03:00
docker-compose.yml Add Docker support with multi-arch builds 2025-11-12 10:50:50 +03:00
DOCKER.md Add Docker support with multi-arch builds 2025-11-12 10:50:50 +03:00
Dockerfile Add Docker support with multi-arch builds 2025-11-12 10:50:50 +03:00
FRIGATE_RECORD_CONFIG.md Add dual-stream support for Frigate with optional sub-stream selection 2025-11-06 22:53:50 +03:00
go.mod Fix API paths for Home Assistant Ingress compatibility 2025-11-18 13:35:29 +03:00
go.sum Fix API paths for Home Assistant Ingress compatibility 2025-11-18 13:35:29 +03:00
LICENSE Initial commit 2025-10-28 13:38:52 +03:00
Makefile Add Strix camera discovery system with comprehensive database 2025-10-28 17:45:04 +03:00
README.md Remove Home Assistant addon integration 2025-11-18 00:09:00 +03:00
strix.yaml.example Add unified port configuration system 2025-11-12 10:20:55 +03:00

🦉 Strix - Smart IP Camera Stream Discovery System

Strix Demo

Go Version License API Version

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

# 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
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

  1. Camera Search: Intelligent fuzzy matching across brand and model database
  2. URL Collection: Combines ONVIF discovery, model-specific patterns, and popular URLs
  3. Stream Validation: Concurrent testing using ffprobe and HTTP requests
  4. Real-time Updates: SSE streams provide instant feedback on discovered streams
  5. 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

  1. Environment variable STRIX_API_LISTEN (highest priority)
  2. Config file strix.yaml
  3. 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