Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StreamIt

Build your own streaming service.

A self-hosted media server and native Rust client with a real video engine, plus emulation and cloud gaming — your personal cloud for games and media, with a full-screen launcher for handhelds like the Steam Deck and ROG Ally.


⚠️ This is an ALPHA build

It is a long way from a release. Things are missing, things are broken, and things will change without warning. See Known issues below — that list is not exhaustive, it is what is currently known.

Run it on a copy of your library, not your only copy. Expect to reinstall, rescan, and occasionally start over.

You must supply your own API keys. No keys are bundled with this project and none ever will be. See Metadata providers.

What it is

Three programs:

  • The server — indexes your media, fetches metadata, decides how to deliver each file, and transcodes only when it has to. Runs headless with a browser admin panel.
  • The client — a native desktop app with its own video engine. This is where you watch things.
  • Emulation — a libretro frontend, shipped as a client-side plugin, with per-game fixes converted from the emulator projects' own databases.

Why another one

The player is native, not a web view. Video is demuxed, decoded and synchronised by a real engine built on FFmpeg, then drawn straight into the window. No <video> element, no JavaScript, no browser media stack — which is what makes hardware decoding, stereoscopic 3D and headset output possible at all.

Direct play actually means direct play. The server asks the client what it can decode and takes the answer seriously. A native client that handles MKV/HEVC/AC3 gets the file byte for byte.

It works before you configure it. No forced account, no mandatory login, no setup checklist between a fresh install and playing something.

Features

Playback

  • Native FFmpeg-based demux/decode/AV-sync with hardware decode and automatic software fallback
  • Direct play with per-client capability negotiation; HLS transcode as a fallback
  • Stereoscopic 3D (side-by-side) with passthrough and 2D modes
  • Headset output via OpenXR
  • Skip intro/recap/credits, autoplay next, scrub-bar thumbnails
  • Multi-track audio and subtitles, chapters, per-title playback overrides

Library

  • Automatic scanning with metadata and artwork
  • Grouping by genre, and for games by genre and system
  • Match correction when automatic matching gets something wrong
  • Watch state, watchlist, continue watching, incognito playback

Games

  • ROM library served from the server, streamed to the client
  • Emulator cores installed from the libretro project with one click
  • Per-game fixes bundled from PCSX2, Dolphin and DuckStation
  • Controllers over USB and Bluetooth: Xbox, PlayStation, 8BitDo and others, with steering wheels, joysticks and flight controllers
  • Optional local game library — lists games already installed by Steam and other PC storefronts and launches them through their own launcher

Server

  • Streaming defaults enforced server-side: quality ceilings, transcode and direct-play switches, hardware encoder selection with real detection
  • API key management, plugin management, connected devices
  • Optional multi-user with a profile picker and per-account passwords

Security

  • TLS 1.3 between client and server, with the server's identity pinned by each client on first connection. No certificate to obtain, no domain to own — the only thing to configure is a port.

Known issues

Current as of this alpha. Not exhaustive.

Playback

  • Over-under 3D does not play. Side-by-side works; files marked OU, HOU or Half-OU are detected but the player cannot split the frame yet.
  • wasm-opt crashes during the admin panel build, so the shipped web assets are unoptimised.

Metadata

  • Per-episode metadata does not download. Episodes take their names from the filename; real episode titles, air dates and stills are not fetched.
  • Ratings do not appear yet. The pipeline exists end to end but nothing renders on screen.
  • Game metadata needs IGDB credentials. IGDB authenticates through Twitch, so a Twitch application's client ID and secret are required. Without them, games get box art from libretro but no descriptions, genres or release dates.
  • tvdb search is not implemented; it is listed but always returns nothing.

Library

  • A library scanned by an older build may contain duplicate entries. A migration removes them, but rescan after upgrading.
  • Compressed disc images (.rvz, .chd, .7z, archives) cannot be identified by content. They are named from their file and their console is guessed from the extension.

Emulation

  • No emulator core, ROM, BIOS or firmware ships with this project, and games are never downloaded for you. Cores are downloaded from the libretro project only when you ask for one.
  • Multi-disc games list one entry per disc, and disc switching is manual.

Platform

  • Windows only, in practice. The code is being made portable but Linux and macOS are not yet built or tested. Do not expect them to work.
  • The desktop client and the browser admin panel are still one crate, which makes some of the above harder to fix than it should be.

Gaps

  • "Optimize" in the item menu is not implemented.
  • The server does not yet stop you running two instances against one database.

Metadata providers

StreamIt ships no API keys. Register with whichever providers you want and enter your own keys in the server's API Management page, or through the first-run wizard.

Provider Needs Covers
TMDB API key Films, TV
OMDb API key Ratings (including Rotten Tomatoes)
TVmaze nothing TV
IGDB Twitch client ID + secret Games
libretro nothing Game box art

Keys are stored in your server's own database and are never sent anywhere except to the provider they belong to. The admin panel never displays a stored key back to you.

Without any keys, scanning still works — you get titles from filenames.

Getting started

Grab the installers from Releases: install the server on the machine holding your media, the client on anything you want to watch from. The setup wizard handles the rest.

The client finds servers on your network automatically. If it cannot, you can enter an address by hand.

Building from source

Requires a recent stable Rust toolchain.

cargo build --release

The desktop client additionally needs FFmpeg development libraries and a matching libclang; dev-tools/README.md explains the specific versions and why they matter.

Contributing

Issues and pull requests are welcome. Given the alpha status, opening an issue before a large change is worthwhile — parts of this are still moving.

Licence

GNU General Public License v3.0 — see LICENSE.

About

Build your own streaming service. Self-hosted media server and native Rust client with a real video engine, plus emulation and cloud gaming - your personal cloud for games and media, with a full-screen launcher for handhelds like the Steam Deck and ROG Ally.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages