What it is
NixStream is a self-hosted video platform for VOD, live streaming, sharing, and API access. Upload and transcode video, go live from OBS, share with a password or embed link, or pull everything through client API. It's MIT licensed.
Built for people who have a lot of video (footage, course content, dailies, event recordings) and want to own it outright instead of renting Vimeo/Frame.io storage, with the ability to go live occasionally without extra tooling..
What it does
VOD
Multi bitrate HLS/DASH output, thumbnails and sprites generated automatically, Whisper based subtitles, imports from Vimeo/Drive/Dropbox, and collections so you can organize your video library instead of one big list.
Live
RTMP ingest from OBS, HLS/DASH while the stream is live, and optional auto recording to VOD once stream ends. It also supports multistreaming, same RTMP feed gets forwarded to YouTube, Twitch, or other destination without re-transcoding for each platform separately. It's good for occasional live event, not really built to run dozens of concurrent channels off one box.
Sharing
Public links, password protected links, email invites, or embeds. All of it can be triggered through client API too instead of going through admin panel every time.
Security
Domain and geo rules, signed edge delivery, AES-128 encryption on VOD segments, API key auth on /api/client/v1/*. Live streams use signed URLs instead of AES since encrypting live segments in real time isn't really practical.
Codecs
H.264, H.265, and AV1 all supported for encoding. H.264 is what actually gets used in production most of time, since device compatibility for H.265/AV1 is still not consistent enough. HEVC live is known to be flaky on both CPU and GPU right now, that's mentioned directly in the repo as a limitation.
Architecture
Stack is Laravel (PHP) for the app layer, with few standalone Go binaries doing the heavy lifting:
Browser --> Nginx --> Laravel --> MySQL / Redis
Laravel --> Queue --> media-vod (Go) --> Storage (Local / S3 / R2)
OBS --> media-live (Go) --> Storage
Player --> nixstream-edge (Go) --> Storage
- media-vod and media-live come from separate repo, zaynin-engine
- nixstream-edge handles signed playback and AES-128 decryption at the edge
- manifest generation is its own component too (zaynin-manifest)
- custom player is built on shaka-core (snapencode-player)
Docker bundles all the prebuilt Go binaries, so you don't need to clone or build the other repos yourself unless you're modifying them.
Running it
git clone https://github.com/Muntader/nixstream.git
cd nixstream/nixstream
./install.sh
Needs Docker 24+, Compose v2, 8GB RAM, 4+ CPU cores. Install script prints admin password once at the end, it's not stored in .env so save it somewhere.
For HTTPS:
./install.sh --ssl your-domain.com
By default FFmpeg and Whisper run CPU only in the Docker images. NVENC works if you wire up GPU FFmpeg on host yourself, but it's not enabled out of the box.
Worth knowing before you commit hardware
- HEVC/H.265 live is unreliable right now, H.264 is the safer choice if you're going live
- This is built for personal or small team self hosting, not meant to replace a CDN like Akamai
- Playback goes through nixstream-edge, not directly through public/storage, running without Edge means no signed URLs or AES playback

Top comments (0)