u/Sky_Linx

StreamVault - a self-hosted media streaming app built with Rails 8 + Hotwire + FFmpeg (just open-sourced)
▲ 55 r/rails

StreamVault - a self-hosted media streaming app built with Rails 8 + Hotwire + FFmpeg (just open-sourced)

Hey r/rails - I open-sourced a project I've been working on and thought the stack might be interesting to share here, since it leans heavily on Rails 8 + Hotwire.

StreamVault is a self-hosted media streaming application: search for movies/TV, pick a stream, watch in-browser with a custom video player, library, watch history, continue-watching, recommendations. It uses RealDebrid to cache the files and FFmpeg to transcode on-the-fly when needed.

What's in the stack:

  • Rails 8.1 with Hotwire (Turbo Drive + Stimulus) — the whole frontend is server-rendered views + a handful of Stimulus controllers. No SPA.
  • Solid Queue / Solid Cache / Solid Cable — the new Rails 7.1+ "no-Redis" stack. Jobs, caching, and websockets all backed by Postgres tables.
  • ActionPolicy for authorisation - everything scoped per-user.
  • Active Record Encryption for API keys at rest.
  • Tailwind (via tailwindcss-rails), dark theme, PWA-installable.
  • PostgreSQL in production (SQLite in dev/test).
  • Docker deployment via docker-compose; assets precompiled in the image.

The interesting Rails-y bits:

  • A custom video player written as a Stimulus controller (~47 KB) handling HLS playback, seeking, audio-track selection, subtitle burning, resume, stall recovery, and progress tracking via background jobs.
  • On-the-fly transcoding: the app pipes a RealDebrid HTTPS stream into FFmpeg and serves the remuxed/transcoded output back to the browser as a stream. Deciding "remux vs transcode" based on the source codec/container is a fun bit of logic.
  • A factory service (StreamProvider) that queries Torrentio and Comet in parallel and picks the best candidate, with fallback.
  • Recommendations via TMDB collaborative filtering over the user's watch history.

Repo (full README with architecture, env vars, proxy setup): https://github.com/vitobotta/StreamVault

Curious what people think of the Solid Queue/Cache/Cable stack in production - it's been solid for me but I'd love to hear others' experiences. Also happy to answer questions about the transcoding pipeline or the Stimulus video player.

Edit: some people just love being rude for no particular reason. I came here to share a project I thought others might find useful without having anything to gain from it nor needing to "convince" anyone or justify anything. Some people are truly unbelievable.

u/Sky_Linx — 8 days ago