🚀 MediaFusion 6.0.0 Released
A complete Rust rewrite bringing major performance, reliability, and feature improvements.
🌟 Major Highlights
- Full Rust rewrite — The entire backend is now a native Rust/Axum application replacing the legacy Python/FastAPI server for dramatically improved performance and stability.
- Embedded React frontend — The React SPA is now compiled directly into the server binary; no separate Node.js build or frontend server required.
- PostgreSQL-native types — All 14 Postgres enums now use native Rust enum types with compile-time SQL validation via sqlx macros, eliminating runtime type mismatches.
- Admin genre management — New admin-managed genre system with per-type hide/show toggles, replacing the hardcoded adult genre filter with a flexible seeded database.
- NSFW content filtering — ONNX-based NSFW classifier for poster scanning, stream keyword blocking with word-boundary matching, and admin review dashboard.
- Keyword blocklist system — Admin-managed keyword filter and whitelist with runtime reload, version-tagged cache invalidation, and a precomputed
is_keyword_blockedcolumn for fast queries. - M3U/IPTV import — Full M3U and Xtream playlist import with live channel classification, catalog linking, placeholder poster generation, and m3u_url re-sync support.
- Database Manager — Complete admin database UI with row counts, filters, bulk edit/delete, orphan cleanup, maintenance (VACUUM/ANALYZE), export (CSV/JSON/SQL), and import.
- Task Manager & Scheduler — Admin-controlled IMDb import settings, cron job management with live status, and scheduler panel for cron control.
- Torrin debrid provider — New Torrin file-based debrid service added alongside existing Real-Debrid, TorBox, Seedr, and others.
- Usenet playback support — Usenet stream playback with nzb_guid support and provider-aware playback URLs.
- DMM hashlist ingestion — Full DMM hashlist worker with strict metadata matching and local IMDB FTS search.
- Real-time SSE updates — Server-Sent Events for live task and scheduler updates, replacing frontend polling.
- My Streams revamp — Contributors now have direct controls over their streams with deep links and provider-aware stream ID pinning.
- Episode link clearing — Per-file episode metadata clearing for torrent files, with
clearvariant syntax in the frontend. - Browser-based scraper bypass — Cloudflare challenge solving via browserless v2 JS evaluation for sport-video.org.ua and ext_to.
- Contribution bot (Telegram) — Full Telegram contribution bot with multi-step wizard, webhook dispatcher, and per-user channel support.
- Metadata search & relinking — New metadata match search API, stream relink UI, and file-level episode annotation dialogs.
- MediaFlow proxy routing — All debrid/usenet API calls now optionally route through MediaFlow proxy with IP forwarding.
- Egress watchdog — TCP keepalive and egress watchdog for k8s/gost tunnel staleness prevention with configurable fail thresholds.
🐛 Bug Fixes
- 🔧 Fixed MDBList catalog config sync and stale cache keys
- 🔧 Fixed series stream_media_link gap causing
total_streams = 0and hidden series in catalogs - 🔧 Fixed all metadata suggestion fields (poster, genres, cast, crew, catalogs) applying correctly on approval
- 🔧 Fixed media deletion cascade to clean up dependent streams and invalidate caches
- 🔧 Fixed adult genre blocking by propagating adult flag from genre link via new trigger
- 🔧 Fixed TVDB JWT auth flow — no longer logs users out on upstream 401
- 🔧 Fixed keyword-blocked recompute running unconditionally on every restart
- 🔧 Fixed advisory-lock leak in migrations that blocked restarts
- 🔧 Fixed AIOStreams header-based config being ignored on public stream routes
- 🔧 Fixed M3U analyze/import response contract mismatch causing false errors
- 🔧 Fixed web UI logout triggered by non-auth 401 responses from content endpoints
- 🔧 Fixed placeholder poster generation when upstream poster URL fetch fails
- 🔧 Fixed scheduler never enqueueing cron jobs when
last_enqueued_atis NULL - 🔧 Fixed stream validation rejecting valid torrents, usenet, and telegram streams
- 🔧 Fixed HDR multi-select format handling in the stream edit UI
- 🔧 Fixed DMM hashlist test keyword mapped to wrong field
- 🔧 Fixed RealDebrid filename block patterns breaking legitimate content
- 🔧 Fixed IMDb import COPY transaction lacking proper rollback handling
- 🔧 Fixed series episode metadata not persisting for user-created series
- 🔧 Fixed catalog search cache key missing search parameter
- 🔧 Fixed TorBox DIFF_ISSUE race condition causing silent failures
- 🔧 Fixed seedr cache check using wrong endpoint and form encoding
⚡ Performance
- 🚀 jemalloc allocator — Replaced glibc malloc with tikv-jemallocator to eliminate RSS memory growth
- 🚀 Database optimizations — HOT-update fixes,
lower(title,type)functional index, partial FK indexes, and fillfactor=85 for stream/media tables - 🚀 Catalog genre query — Replaced expensive 3-table JOIN with EXISTS subquery over small genre table
- 🚀 Live search cooldown — Stream cache lock now persists 5 minutes instead of clearing on every successful response (25× faster warm queries: ~2000ms → ~75ms)
- 🚀 Rate limiter cache — Replaced unbounded HashMap with moka cache (1024 entries, 1-hour TTL) to prevent memory growth
- 🚀 Connection pool hardening — Configurable pool settings with
after_connecthooks forstatement_timeoutand idle transaction cleanup - 🚀 Keyword filtering — Precomputed
is_keyword_blockedboolean column with partial index replaces O(N_rows × N_keywords) per-query scans
📚 Documentation
- 📖 Complete MkDocs documentation site (28 pages) auto-deployed to GitHub Pages
- 📖 Comprehensive environment reference covering 180+ configuration variables in 18 groups
- 📖 Database ERD with Mermaid diagrams reflecting the v6 schema
- 📖 Updated architecture docs reflecting the Rust/Axum/Tokio stack
- 📖 New Telegram integration guide covering bot setup and channel scraping
- 📖 Stream formatting documentation with full template variable reference
🤝 Contributors
@IbbyLabs, @funkypenguin, @constantindjonkam, @luigibarretta, @vctrez, @karunthomas and @mhdzumair