- 01
Single binary, embedded UI.
The SvelteKit build is baked into the Rust binary via rust-embed. One file boots the server and serves the SPA.
- 02
Library scan + TMDb enrichment.
Parallel filesystem walk via jwalk, technical metadata via ffprobe, titles and posters from TMDb — for both movies and TV. Posters are proxied locally so clients never hit TMDb directly.
- 03
Movies and TV.
Series → seasons → episodes are scanned, identified from SxxEyy / 1x01 filenames (with a season-dir fallback), enriched with TMDb episode stills, and played from a shared player component.
- 04
Direct play with byte ranges.
If your browser can decode the file, Mythos streams it raw with HTTP range requests. Resume points are debounced and persisted per-user across movies and episodes.
- 05
HLS transcoding, ABR up to 4K.
For browser-incompatible codecs (HEVC, AV1, DTS, …) Mythos spawns an ffmpeg session, segments to HLS, and tears it down when the player goes away. The ABR ladder runs from 360p through 2160p with H.264 Level 5.1 hints — and tiers that would only upscale get pruned from the master per-source so a 1080p file is never offered 4K. A manual quality picker in the player sits next to Auto, exposing every source-feasible tier.
- 06
Hardware-accelerated, end-to-end.
NVENC, QSV, VAAPI, and VideoToolbox are probed and smoke-tested at startup. The NVENC path stays on the GPU end-to-end (NVDEC + scale_cuda), and a build with the encoder compiled in but a missing driver falls back to CPU cleanly.
- 07
HDR→SDR tonemapping.
4K HEVC HDR sources are tonemapped on the way out via a configurable pipeline — software, tonemapx (jellyfin-ffmpeg's SIMD CPU kernel), VAAPI, OpenCL, or CUDA — picked from filters Mythos probes for at startup. Hable / Mobius / Reinhard / BT.2390 algorithms; admin-editable from the settings UI.
- 08
Subtitles done right.
Text subtitles ride along as WebVTT sidecars — embedded streams and .srt files dropped next to the video (or in a sibling Subs/ directory) are both picked up. Image subtitles (PGS/VobSub) burn in during transcode so they survive every device. Continue-watching and auto-play-next stitch episodes together across the library.
- 09
Title search across the library.
A single search box queries movies and series together via GET /api/search — case-insensitive prefix match against the sort title. Results render inline with keyboard navigation (↑/↓ to walk, Enter to open). Backed by SQLite LIKE today; will graduate to FTS5 once libraries get big enough to chug.
- 10
Playback that survives navigation.
The player is hoisted into the root layout and managed by a singleton session — start a movie, hit PiP, and the modal collapses into an 88 px bar pinned to the bottom of the page. Browse anywhere; the same <video> / HLS session keeps playing. Click the small video to expand back to fullscreen; Esc minimizes instead of closing. The library page itself gets a Plex-style vertical alphabet rail that strips leading articles ("The Matrix" buckets under M).
- 11
Native clients, not just the browser.
Beyond the embedded web UI there's a fleet of native clients talking to the same REST API: a Qt 6 + cxx-qt desktop app (apps/mythos-qt/) that swaps <video>+hls.js for libmpv so HEVC, AV1, and HDR direct-play without the browser codec gauntlet; a Kotlin + Jetpack Compose Android build that ships both a phone/foldable app and a D-pad-native Google TV app on Media3/ExoPlayer; a SwiftUI Apple TV app on AVPlayer; and an LG webOS TV launcher. They build with their own toolchains (Gradle, Xcode, ares-package); only the Qt app is a Cargo workspace member.
- 12
Pair every client with every server.
The server stays single-tenant, but each client keeps its own list of paired Mythos servers and fans browse, search, and continue-watching out across all of them at once — tiles, images, and playback all route back to the server they came from. The only server-side support is a public GET /api/server-info that hands back a display name and version so a freshly-paired server can be labelled.
- 13
Collections, cast & crew, and sharing.
Movies group into Plex-style collections — auto-generated from TMDb franchises or hand-curated. Detail pages carry a cast & crew strip (top billing plus directors / writers / producers) with cached headshots. And libraries have an owner and a visibility: public to every user, or restricted to the owner, admins, and explicit shares — invisible content returns 404, never 403.