Streaming
On-demand HLS
Videos transcode to HLS via ffmpeg as they are needed. Cached renditions are served directly from the SvelteKit app — no separate media server required.
Self-hosted media, documented
Obscura is a video-first, self-hosted media browser. Galleries, audio, performers, and plugin-powered metadata are first-class — and the whole thing fits in one Docker image.
Manages
Choose a track
Most readers fall into one of three roles. Pick the one that matches what you are about to do — every page links to the others when you need them.
Install with Docker, mount your media, and start scanning. Library organization, settings, and operations live here.
Quick start→02 · DevelopersUnderstand the systemSvelteKit, the worker, Postgres, and the shared packages. How code moves from the UI all the way to the database.
Architecture→03 · Plugin authorsBuild a metadata providerManifests, capabilities, auth, and the execution envelope. Write providers in TypeScript, Python, or as a Stash adapter.
Build plugins→What it does
Streaming
Videos transcode to HLS via ffmpeg as they are needed. Cached renditions are served directly from the SvelteKit app — no separate media server required.
Metadata
Native TypeScript and Python plugins, plus Stash-compatible scrapers, expose providers for movies, series, performers, galleries, and audio behind one identify engine.
Operations
pg-boss handles scan, probe, thumbnail, sprite, HLS, and import jobs. The Operations dashboard mirrors job state so you always know what the worker is doing.
Library
Movies, flat series, and seasoned series are inferred from depth under each library root. Sidecars merge cleanly without overwriting your edits.
Identify
A Stash-compatible perceptual hash pipeline lets you identify videos against StashBox-protocol servers and contribute fingerprints back to the community index.
Deploy
PostgreSQL, ffmpeg, the SvelteKit web server, and the worker ship as a single image. Mount /data and /media, expose port 8008, and you are running.
The interface
The whole UI follows one design language. Read the Design Language doc for the full spec.
Library activity, recent scans, and provider status read like a control room — dense, dark, and only colorful when something is active.

A cinematic scene detail page with HLS playback, trickplay sprites, transcripts, subtitle controls, and inline metadata editing.

Browse, search, and play from any phone on your LAN. Touch targets, sheets, and bottom navigation are designed before the desktop expansion.

Ready when you are