// the find
superstreamerapp/superstreamer
An open, scalable, online streaming setup. All-in-one toolkit from ingest to adaptive video playback. Built for developers in need of video tooling.
Superstreamer is a self-hostable video pipeline that covers the full stack: ffmpeg transcoding, HLS CMAF packaging to S3, server-side ad/bumper stitching via HLS interstitials, and a player facade on top of HLS.js. It targets developers who need to stand up streaming infrastructure without paying Mux or Cloudflare Stream. The scope is ambitious and the architecture is mostly sane.
- The stitcher's HLS interstitials approach is the right call — server-side ad insertion without client-side SDK hell, with VAST and VMAP support baked in. The Cloudflare Workers deployment for the stitcher puts playlist manipulation at the edge, which is where latency actually matters.
- The bolt package gives a typed BullMQ wrapper that keeps the transcoding job graph clean. Pipeline, transcode, and package steps are separate workers with clear contracts, so failures are isolated and retryable.
- Docker Compose setup actually works as advertised — artisan, stitcher, api, and the dashboard come up together with sane defaults. Most 'all-in-one' repos make this painful.
- The monorepo boundaries are honest: artisan handles ffmpeg, stitcher handles playlist manipulation, api handles asset management. Each has its own Dockerfile and can be deployed independently.
- 56 forks against 1406 stars is a bad ratio — people are watching, not building. That usually means the self-hosting story has friction that doesn't show up in the README. No DRM support (Widevine, FairPlay) makes this a non-starter for any commercial content, which limits the actual user base.
- The VAST client is vendored under extern/ as raw JS with hand-written TypeScript declarations instead of taking the npm package. They'll miss upstream bug fixes silently, and the declarations are frozen at whatever version they forked.
- Mixed runtime story: artisan and stitcher run on Bun, the dashboard on Node/Vite. That's two different runtime environments to debug when something breaks in production, and Bun's worker_threads compatibility still has edge cases with ffmpeg child process handling.
- Last meaningful push was February 2026 and the changelog shows slow release cadence. The interstitials spec is still evolving in Safari and Chrome, so a project that isn't actively tracking the HLS spec changes will drift out of compatibility.