Video Streaming with Laravel
By Daniel Samson · 2026-04-25
I looked at Jellyfin, decided I'd rather run something built for exactly how I watch, and ended up building Samson Media — a Laravel streaming platform for my own library. It turned out better than Jellyfin for what I want, and here's how it actually works.
The core idea: pre-transcode, never on-the-fly
Jellyfin's biggest pain is on-the-fly transcoding — it hammers the server mid-playback and still trips over certain clients and codecs. Samson Media does the opposite. Every file is converted once, ahead of time, in a background pipeline: H.264/AAC MP4 with the moov atom moved to the front for faststart. The result is that every client direct-plays every title. No transcode storms, no "this device can't play this format", no buffering while a CPU melts somewhere.
From "I want it" to "I'm watching it"
The whole acquisition-to-library path is automated. Transmission pulls torrents from behind a Gluetun VPN, files land in WebDAV, a scheduler scans for new media, fetches TMDB metadata, and dispatches a conversion job. A worker transcodes to streamable MP4, extracts subtitles to VTT, drops marker files so future scans skip it, and the title appears in the library with posters and metadata already attached. One step from wanting something to watching it.
Durable jobs with Barn
FFmpeg jobs are long and fragile, so they don't run inline — they run through Barn, a job daemon that keeps work alive across SSH disconnects, restarts and crashes, with durable, inspectable state. No more "the transcode died because a box rebooted halfway through". The library just keeps converting in the background whatever happens to the machines.
Search that actually finds things
Meilisearch via Laravel Scout gives typo-tolerant search across movies, shows, episodes and people. avengrs finds Avengers; spiderman finds Spider-Man. After years of Jellyfin search never once finding what I typed, this alone justified the project.
A UI built for me, not for everyone
The front end is Laravel 12 with Inertia, React 19, TailwindCSS and Radix — TMDB-rich metadata, a Discover page, and proper keyboard control: Ctrl+K to search, h / l to page through results like Vim (yes, I know, I have a problem). It's built around how I actually browse rather than a generic media-server menu.
Running it like a grown-up
It isn't a NAS plugin — it runs on my K3s cluster with blue-green deploys, Laravel Horizon for the queues, an HA Postgres database, rack-aware storage, and a CDN in front of the media. Wildly over-engineered for an audience of one. Enormous fun, and a genuinely resilient little platform.
So is it better than Jellyfin?
For me, unambiguously yes — every file direct-plays, the search works, acquisition is automatic, and the interface is shaped to my habits. Jellyfin is a brilliant general-purpose server that has to please everybody and run anywhere. Samson Media only has to please me. That's the whole advantage, and it turns out to be a big one. I did, in fact, do better than Jellyfin — for my own definition of better, which is the only one that matters in your own house.