Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.1.0] - 2026-04-01
Initial public release.
Added
Core
- Media library scanner with ffprobe-based metadata extraction (codec, resolution, bitrate, audio tracks, duration, file size)
- SQLite database for persistent file records and operation history
- Scan result caching; incremental rescans update existing records
- Flask + Flask-SocketIO backend with real-time progress delivery to the browser
Transcoding
- Hardware-accelerated transcoding via NVIDIA NVENC, Intel QSV, AMD AMF, and VAAPI
- Automatic VAAPI device detection across
/dev/dri/renderD* on multi-GPU systems
- Smart CUDA fallback: attempts full GPU pipeline first, automatically retries with CPU-assisted scaling on incompatible sources (e.g. BDRemux)
- CPU transcoding with H.264, H.265, VP9, and AV1 (libx264, libx265, libvpx-vp9, libaom-av1)
- CRF quality control, preset selection, and resolution downscaling
- Optional backup copy of original before transcoding; one-click restore from the Originals page
- Skip backup mode for network drives (
don't keep backup copy checkbox)
- Per-file transcoding lock preventing concurrent audio operations on the same file
- Transcoding task queue panel (offcanvas sidebar) with per-task progress ring and stop button
Audio track management
- Extract individual audio tracks from video files (copy codec, preserves language/title metadata)
- Remove audio tracks from video files (remux in place)
- Add external audio tracks to video files with automatic sync (trim if longer, pad with silence if shorter)
- Audio track library page listing all extracted tracks
UI
- Responsive media library table powered by DataTables (search, sort, pagination)
- Per-file detail page with stream inspector, thumbnail strip, transcoding form, audio controls, and operation history
- Originals page for managing backup copies
- Configure page for directories and output paths
- Tokyo Night dark theme with JetBrains Mono font throughout
- Tab title animation during scan (
* scanning... mctl)
- Transcoding progress reflected in browser tab title
Auth
- Username/password authentication with bcrypt hashing
- First-run registration flow (no pre-seeded credentials)
- Admin password reset via
config.json flag
Notifications
- Persistent notification center (offcanvas sidebar) with unread badge on bell icon
- Real-time toast notifications for all background operations (transcoding, audio, scan, restore)
- Toast auto-dismiss after 5 s; hover pauses timer and marks notification as read
- Cross-tab badge synchronisation via BroadcastChannel API
- Per-notification delete; mark all read; clear all
Infrastructure
- SQLite connection lifecycle management via context manager (no file descriptor leaks)
- Thumbnail generation and cache invalidation on file change
- Transcoding savings statistics (files transcoded, bytes saved, percent reduction)
config.json auto-generated from config.example.json on first run