# encoderPro **GPU-Accelerated Media Re-Encoding with Web Dashboard** Modern, intelligent video encoding system with quality checking, state tracking, and a beautiful web interface for monitoring and control. --- ## Features ### Core Encoding - **Smart Quality Detection** - Analyzes source quality and warns before degradation - **GPU Acceleration** - NVIDIA NVENC, Intel QSV, or CPU encoding - **State Tracking** - SQLite database tracks all processed files - **Subtitle Detection** - Only processes files with subtitle streams - **Resume Capability** - Interrupt and resume without losing progress - **Profile-Based Encoding** - Pre-configured quality profiles for different use cases ### Web Dashboard - **Real-Time Monitoring** - Live stats, progress, and activity feed - **Job Control** - Start, stop, and manage encoding jobs - **File Management** - Browse files, select specific movies to re-encode - **Profile Selection** - Choose encoding profiles from the UI - **Quality Analysis** - View file details, quality scores, and savings - **System Health** - Monitor GPU/CPU usage, disk space, encoder status ### Quality Features - **Pre-Encode Analysis** - Calculate quality scores before encoding - **Degradation Detection** - Warn if encoding will lower quality - **HDR Detection** - Identify HDR content for special handling - **Bitrate Analysis** - Calculate bits-per-pixel for quality assessment - **Skip Protection** - Optionally skip files that would degrade --- ## Quick Start **For complete setup instructions, see [UNRAID-DEPLOYMENT.md](UNRAID-DEPLOYMENT.md)** The deployment guide includes: - NVIDIA GPU setup (RTX series) - Intel Arc GPU setup (A-Series, integrated graphics) - CPU-only setup - Directory permissions (critical!) - Troubleshooting common issues - Performance tuning ### Quick Example (Intel Arc) ```bash # Build image docker build -f Dockerfile.intel -t encoderpro-intel:latest . # Fix permissions (REQUIRED!) chown -R 1000:1000 /mnt/user/appdata/encoderpro/{db,logs} chown -R 1000:1000 /mnt/user/temp/encoderpro-work chown -R 1000:1000 /mnt/user/archive/movies # Run dashboard docker run -d \ --name encoderpro-dashboard-intel \ --device=/dev/dri:/dev/dri \ -e GPU_TYPE=intel \ -p 5000:5000 \ -v /mnt/user/movies:/movies \ -v /mnt/user/archive/movies:/archive \ -v /mnt/user/appdata/encoderpro/config.yaml:/config/config.yaml:ro \ -v /mnt/user/appdata/encoderpro/db:/db \ -v /mnt/user/appdata/encoderpro/logs:/logs \ --restart unless-stopped \ encoderpro-intel:latest dashboard # Access dashboard at http://your-server:5000 ``` --- ## Configuration ### Main Config File (config.yaml) ```yaml # Directory paths movies_dir: /movies # Source movies archive_dir: /archive # Original file archive work_dir: /work # Temporary work directory # Encoding profiles profiles: default: balanced_gpu definitions: high_quality_gpu: encoder: nvidia_nvenc_h265 quality: 19 # Lower = better quality preset: slow description: "Highest quality NVENC encoding" balanced_gpu: encoder: nvidia_nvenc_h265 quality: 23 preset: medium description: "Balanced quality and speed" fast_cpu: encoder: cpu_x265 quality: 23 preset: fast description: "Fast CPU encoding" # Quality checking quality_check: enabled: true warn_threshold: 10.0 # Warn if quality drops >10 points error_threshold: 20.0 # Error if quality drops >20 points skip_on_degradation: false # Skip files that would degrade prompt_on_warning: true # Processing options subtitle_check: enabled: true # Only process files with subtitles batch_size: 10 # Process this many files before pausing parallel_jobs: 1 # Number of simultaneous encodes ``` ### Environment Variables ```bash # Dashboard settings DASHBOARD_HOST=0.0.0.0 DASHBOARD_PORT=5000 DASHBOARD_DEBUG=false # File paths MOVIES_DIR=/movies ARCHIVE_DIR=/archive WORK_DIR=/work STATE_DB=/db/state.db LOG_DIR=/logs CONFIG_FILE=/config/config.yaml REENCODE_SCRIPT=/app/reencode.py ``` --- ## Usage ### Web Dashboard 1. **Access the dashboard** at `http://localhost:5000` 2. **Scan your library** - Click "📂 Scan Library" to populate database 3. **Configure settings** - Set encoding profile and quality thresholds 4. **Select files** - Choose specific movies to re-encode, or process all 5. **Start encoding** - Click "▶️ Start Processing" 6. **Monitor progress** - View real-time stats, activity, and logs ### Command Line ```bash # Scan library only (no encoding) python reencode.py -c config.yaml --scan-only # Process with default profile python reencode.py -c config.yaml # Use specific profile python reencode.py -c config.yaml --profile high_quality_gpu # Check quality only python reencode.py -c config.yaml --check-quality # Show statistics python reencode.py -c config.yaml --stats # Reset specific files python reencode.py -c config.yaml --reset-file /movies/movie.mkv ``` --- ## Encoding Profiles ### Pre-Configured Profiles | Profile | Encoder | CRF | Use Case | |---------|---------|-----|----------| | **quality_gpu** | NVENC H.265 | 19 | Highest quality, larger files | | **balanced_gpu** | NVENC H.265 | 23 | Balanced quality/size (default) | | **space_saver** | NVENC H.265 | 28 | Maximum compression | | **quality_cpu** | x265 | 19 | CPU-based high quality | | **balanced_cpu** | x265 | 23 | CPU-based balanced | | **intel_qsv** | Intel QSV | 23 | Intel Quick Sync | ### Custom Profiles Create custom profiles by editing `config.yaml`: ```yaml profiles: definitions: my_profile: encoder: nvidia_nvenc_h265 quality: 21 preset: medium description: "My custom settings" ``` --- ## Quality Checking encoderPro analyzes source files before encoding to prevent quality degradation. ### Quality Score (0-100) Based on **bits per pixel (bpp)**: - **95-100**: Near lossless (>0.5 bpp) - **85-95**: Excellent (0.3-0.5 bpp) - **70-85**: Good (0.2-0.3 bpp) - **50-70**: Acceptable (0.1-0.2 bpp) - **<50**: Poor (<0.1 bpp) ### Degradation Thresholds - **Warn Threshold (10)**: Shows warning if quality drops >10 points - **Error Threshold (20)**: Stops encoding if quality drops >20 points - **Skip on Degradation**: Automatically skip files that would degrade ### Example ``` Source: 4K BluRay Remux - Bitrate: 40 Mbps - Resolution: 3840x2160 - Quality Score: 92 (Excellent) Target: CRF 23 NVENC - Estimated Bitrate: 12 Mbps - Quality Score: 78 (Good) - Degradation: -14 points ⚠️ WARNING Action: Encode with warning, or skip if skip_on_degradation=true ``` --- ## Database Management ### Database Tools ```bash # Initialize new database python init_database.py # View database statistics python dbmanage.py stats # Reset file states python dbmanage.py reset --state completed # Export to CSV python dbmanage.py export files.csv # Cleanup orphaned entries python dbmanage.py cleanup ``` ### Database Schema **Files Table:** - `id`: Primary key - `filepath`: Full path to file - `relative_path`: Display path - `state`: pending, processing, completed, failed, skipped - `has_subtitles`: Subtitle detection result - `original_size`: Original file size - `encoded_size`: Encoded file size - `error_message`: Failure/skip reason - `profile_name`: Encoding profile used - `encoder_used`: Actual encoder used - `fps`: Encoding speed - Timestamps: created_at, updated_at, started_at, completed_at --- ## API Reference See [DASHBOARD-API.md](DASHBOARD-API.md) for complete API documentation. ### Key Endpoints - `GET /api/stats` - Processing statistics - `GET /api/files` - File list with filtering - `GET /api/profiles` - Available encoding profiles - `POST /api/jobs/start` - Start encoding - `POST /api/jobs/stop` - Stop encoding - `POST /api/jobs/reencode-selected` - Queue specific files - `GET /api/health` - System health check --- ## Deployment See **[UNRAID-DEPLOYMENT.md](UNRAID-DEPLOYMENT.md)** for complete deployment instructions including: - Step-by-step setup for NVIDIA, Intel Arc, and CPU - Directory permissions configuration - Unraid template configuration - Performance tuning guides - Troubleshooting common issues --- ## Troubleshooting ### Common Issues **"No files found in database"** - Run library scan: Click "📂 Scan Library" in dashboard - Or: `python reencode.py -c config.yaml --scan-only` **"Reencode script not found"** - Check `REENCODE_SCRIPT` environment variable - Ensure `/app/reencode.py` exists in container **"Config file not found"** - Mount config directory: `-v /path/to/config:/config` - Set `CONFIG_FILE=/config/config.yaml` **"PyYAML not installed"** - Install: `pip install pyyaml` - Or rebuild Docker image **"GPU not detected"** - NVIDIA: Install nvidia-docker2, use `--gpus all` - Intel: Use `--device=/dev/dri:/dev/dri` - Check: `ffmpeg -encoders | grep nvenc` or `grep qsv` **Dashboard shows errors** - Check logs: `docker logs encoderpro` - Check browser console (F12) - Verify paths and permissions ### Debug Mode ```bash # Enable debug logging export DASHBOARD_DEBUG=true python dashboard.py # Or in Docker docker run -e DASHBOARD_DEBUG=true ... ``` --- ## Architecture ### Components - **reencode.py** - Core encoding engine - **dashboard.py** - Flask web server - **quality_checker.py** - Quality analysis module - **templates/** - HTML templates - **static/** - CSS/JS assets ### Workflow 1. **Scan** - Discover media files, detect subtitles 2. **Analyze** - Check quality, calculate scores 3. **Queue** - Add to database as "pending" 4. **Process** - Encode files in order 5. **Verify** - Check output quality 6. **Archive** - Move original to archive 7. **Complete** - Update database, log results --- ## Contributing Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md). --- ## Documentation - **[UNRAID-DEPLOYMENT.md](UNRAID-DEPLOYMENT.md)** - Complete deployment guide (START HERE) - **[DASHBOARD-API.md](DASHBOARD-API.md)** - Complete API reference - **[DASHBOARD-GUIDE.md](DASHBOARD-GUIDE.md)** - Web dashboard user guide - **[QUALITY-GUIDE.md](QUALITY-GUIDE.md)** - Quality analysis guide - **[QUALITY-CHECKING.md](QUALITY-CHECKING.md)** - Quality checking technical details - **[FEATURE-SUMMARY.md](FEATURE-SUMMARY.md)** - New feature documentation - **[SECURITY-FIXES.md](SECURITY-FIXES.md)** - Security improvements - **[STUCK-PROCESSING-FIX.md](STUCK-PROCESSING-FIX.md)** - Stuck file handling --- ## License MIT License - See [LICENSE](LICENSE) for details. --- ## Support - **Issues**: https://github.com/yourusername/encoderPro/issues - **Documentation**: https://encoderpro.readthedocs.io - **Discord**: https://discord.gg/encoderpro --- ## Version **3.2.0** - Security hardened, CSRF protection, stuck file handling, direct Docker commands