v1.7.1 β Production-ready audiobook metadata archival with SQLite storage, authentication, and hybrid Cloudflare defense.
- π Archival & Preservation - Long-term backup of audiobook metadata with 90-day retention and automatic pruning
- π€ Automated Daemon - Runs every 60 minutes collecting new releases
- π§² Magnet Link Generation - Complete magnet URIs with comprehensive tracker lists
- π‘ RSS 2.0 Feed - Valid XML feed compatible with all torrent clients
- π Web UI - Gradient interface with full-text search across collected magnets
- π Authentication - Setup wizard, password protection, and brute-force lockout
- βοΈ Settings UI - Browser-based configuration at
/settingsβ no file editing required - ποΈ SQLite Storage - MagnetStore with FTS5 full-text search; replaces flat-file storage
- π Resilient Scraping - RetryEngine with exponential back-off and circuit breaker
- π‘οΈ Cloudflare Resistant - Multi-layer defense: curl_cffi β cloudscraper β proxy fallback
- β»οΈ Zero Maintenance - Self-healing with deduplication and schema monitoring
- π³ Easy Deployment - One-line Proxmox installer, Docker Hub image
Runs on any Linux system with Python 3. Tested on Proxmox LXC containers and works with all RSS-capable torrent clients.
β οΈ Security Note: BIND includes a built-in authentication system (Setup Wizard, Password Protection, Bruteforce Lockout). However, for maximum security, we still recommend running behind a reverse proxy (nginx, Caddy, Cloudflare Tunnel) if exposing to the public internet.
The easiest and most reliable way to deploy BIND is through our automated Proxmox LXC installer. This single command creates a fully isolated container, installs all dependencies, and configures BIND for production use.
One-Line Installation:
bash <(curl -sL https://raw.githubusercontent.com/StarlightDaemon/BIND/main/scripts/install-proxmox-lxc.sh)What This Does:
- β Creates a new LXC container with Ubuntu
- β Prompts for configuration (Container ID, hostname, RAM, disk, IP address)
- β Installs Python 3, Git, and all BIND dependencies
- β Configures systemd services for auto-start
- β Displays your Web UI and RSS feed URLs
Installation Time: ~3 minutes
Default Resources: 512MB RAM, 4GB disk, 1 CPU core
After Installation:
- π‘ RSS Feed:
http://YOUR-CONTAINER-IP:5050/feed.xml - π Web UI:
http://YOUR-CONTAINER-IP:5050/ - π View Logs:
pct exec <CTID> -- journalctl -u bind -f - π§ Enter Container:
pct enter <CTID>
Note: Requires Proxmox VE with an Ubuntu 22.04/24.04 template. Download one with:
pveam update && pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst
π¦ Alternative: Already Have a Container/VM?
If you already have an existing LXC container, VM, or bare-metal Debian/Ubuntu system:
Option 1: Simple Install (uses defaults)
bash <(curl -sL https://raw.githubusercontent.com/StarlightDaemon/BIND/main/scripts/install.sh)Option 2: Interactive Install (custom configuration)
bash <(curl -sL https://raw.githubusercontent.com/StarlightDaemon/BIND/main/scripts/install-interactive.sh)π³ Docker Installation
Option 1: Docker Hub (Recommended)
docker run -d \
--name bind \
-p 5050:5050 \
-v bind_data:/opt/bind/data \
starlightdaemon/bind:latestOption 2: Build from source
git clone https://github.com/StarlightDaemon/BIND.git
cd BIND
docker-compose up -dβοΈ Manual Installation
git clone https://github.com/StarlightDaemon/BIND.git
cd BIND
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Run daemon (collects magnets every 60 minutes)
python -m src.bind daemon --interval 60
# Run RSS server (separate terminal)
python -m src.rss_serverpct enter <container-id>
cd /opt/bind
scripts/update.shThe update script will:
- β Check for updates
- β Show what's new
- β Backup current version
- β Update code and dependencies
- β Restart services
- β Verify everything works
- β Rollback on failure
pct enter <container-id>
cd /opt/bind
git pull
source venv/bin/activate
pip install -r requirements.txt
systemctl restart bind.service bind-rss.service- Usage Guide - RSS setup, storage info, configuration
- Troubleshooting - Common issues and solutions
- Architecture - System design and data flow diagrams
- FAQ - Frequently asked questions
- Roadmap - Future enhancements and features
- Releases - v1.0 release notes and changelog
- Design System - Web UI theming reference
π¦ Dependencies
BIND uses 8 carefully chosen dependencies:
| Package | Purpose |
|---|---|
| curl_cffi | TLS fingerprinting for Cloudflare bypass (Layer 1) |
| cloudscraper | Fallback Cloudflare bypass (Layer 2) |
| beautifulsoup4 | Parses HTML to extract magnet links |
| lxml | Fast XML/HTML parser backend for BeautifulSoup |
| click | Command-line interface framework |
| schedule | Lightweight daemon scheduling (cron alternative) |
| flask | RSS server and web UI |
| gunicorn | Production WSGI server |
All dependencies are actively maintained and essential to BIND's functionality.
π Project Structure
BIND/
βββ src/
β βββ core/
β β βββ scraper.py # Hybrid Waterfall scraper (curl_cffi β cloudscraper)
β β βββ storage.py # MagnetStore β SQLite + FTS5
β β βββ retry.py # RetryEngine β exponential back-off
β β βββ magnet.py # Magnet URI construction
β β βββ egress_manager.py # Proxy / egress routing
β β βββ tracker_manager.py # Tracker list management
β β βββ schema_monitor.py # DB schema health checks
β β βββ migrate.py # SQLite migrations
β βββ bind.py # Daemon with circuit breaker & deduplication
β βββ rss_server.py # RSS feed + Web UI + Settings UI
β βββ config_manager.py # Environment / config.env loading
β βββ security.py # Auth, setup wizard, brute-force lockout
βββ docker/
β βββ Dockerfile.single # Single-container Docker image
βββ deployment/
β βββ bind.service # Systemd daemon service
β βββ bind-rss.service # Systemd RSS service
βββ scripts/
β βββ install.sh # One-line installer
β βββ install-proxmox-lxc.sh # Proxmox LXC installer
β βββ update.sh # In-place updater
βββ requirements.txt # Pinned dependencies
βοΈ Configuration (Environment Variables)
BIND is configured via environment variables in systemd service files. See docs/CONFIGURATION.md for complete guide.
Common settings:
ABB_URL- Target domain (default:http://audiobookbay.lu)BIND_PROXY- HTTP/SOCKS5 proxy for scrapingBASE_URL- RSS feed base URL overrideBIND_DB_PATH- SQLite database path (default:data/bind.db)CIRCUIT_BREAKER_THRESHOLD- Failures before circuit opens (default: 3)CIRCUIT_BREAKER_COOLDOWN- Cooldown period in seconds (default: 300)
Configuration Sources (Precedence Order):
- CLI Flags (e.g.
--interval 120manually) - Highest priority - Environment Variables (from
config.envor systemd) - Defaults (Hardcoded fallback)
To change configuration:
- π Web UI: Go to
http://YOUR-IP:5050/settings(Recommended) - π File: Edit
/opt/bind/config.envand runsystemctl restart bind - π₯οΈ Systemd: Override via
systemctl edit bind(Advanced)
- Runtime Data:
data/bind.db(SQLite database) - Config Key:
BIND_DB_PATH - Precedence: Environment Variables >
config.env> Hardcoded Defaults - Security:
credentials.jsonand logs are ignored by git. Do not commit secrets.
BIND is configured via environment variables in bind.service or bind-rss.service:
| Variable | Default | Description |
|---|---|---|
BIND_PROXY |
None |
Optional HTTP/SOCKS5 proxy (e.g., socks5://user:pass@host:1080) |
ABB_URL |
http://audiobookbay.lu |
Target domain (change if site moves) |
BASE_URL |
Auto-detected | Override RSS feed base URL |
BIND_DB_PATH |
data/bind.db |
Path to SQLite database (Packaged: /opt/bind/data/bind.db) |
PORT |
5050 |
Web UI and RSS feed port (change if conflicting) |
CIRCUIT_BREAKER_THRESHOLD |
3 |
Failures before scraper pauses |
CIRCUIT_BREAKER_COOLDOWN |
300 |
Seconds to wait after pausing |
License: MIT - For educational, archival, and preservation purposes.
- β Archives publicly available metadata for digital preservation
- β Creates local backups of torrent magnet links
- β Supports audiobook collection management
- β Stores metadata only (no copyrighted content)
- β Host, provide, or distribute copyrighted content
- β Store or transmit actual audiobook files
- β Facilitate piracy or copyright infringement
- β Link directly to infringing material
Ensure compliance with copyright laws in your jurisdiction. BIND archives metadata only - not copyrighted works. Use only for public domain and legally distributable content.
By using BIND, you agree to use it solely for legal, educational, and archival purposes in accordance with applicable laws.
# Setup
git clone https://github.com/StarlightDaemon/BIND.git && cd BIND
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
pip install pytest pytest-cov pytest-mock ruff
# Run Tests
pytest -v # All tests
pytest --cov=src # With coverage
# Linting
ruff check src/ tests/ # Check issues
ruff format src/ tests/ # Auto-formatLightweight and focused: ~2,400 lines of code, 8 dependencies, minimal resource usage.
BIND archives publicly available audiobook metadata for digital preservation and personal library indexing while respecting intellectual property rights.