Skip to content

StreamKit

Build and run real-time media pipelines on your own infrastructure. Live video compositing, speech-to-text, voice agents, real-time media processing — composable, observable, self-hosted.
StreamKit UI demo preview

StreamKit is built for developers who need to process real-time media — whether you’re compositing live video with overlays, building voice features, or prototyping AI-powered audio/video pipelines.

  • Video compositing — Combine live video inputs with text/image overlays using the built-in compositor (PiP, z-ordering, crop/zoom, rotation), with CPU and GPU backends. Encoded via VP9 or AV1 for real-time transport, with a visual scene editor in the Web UI
  • Live web surfaces — Render any web page (including WebGL) to video frames via the Servo browser engine and composite them into live streams as overlays or standalone sources
  • Live transcription — Ingest audio via MoQ, run Whisper or SenseVoice STT, stream transcription updates to clients
  • Voice agents — TTS-powered bots using Kokoro, Piper, or Matcha that respond to audio input
  • Real-time translation — Bilingual streams with live subtitles using NLLB or Helsinki models
  • Audio processing — Mixing, gain control, format conversion, encoding/decoding pipelines
  • Content analysis — VAD for speech detection, keyword spotting, or custom safety filters

Server

A single binary (skit) that serves the web UI and exposes an HTTP API and a WebSocket endpoint to create and manage pipelines.

Pipelines

Pipelines are directed acyclic graphs (DAGs) of nodes. You can author them in the web UI or as YAML.

Execution

Run pipelines as request/response batch jobs (HTTP) or as long-lived sessions you can inspect and update while they run (WebSocket).

Extensions

Add nodes via plugins (plugin::native::* or plugin::wasm::*) or embed JavaScript logic with core::script (with allowlists and limits).

Run the server (Docker):

Terminal window
TAG=v0.5.0 # replace with the latest release tag
docker run --rm \
-p 127.0.0.1:4545:4545/tcp \
-p 127.0.0.1:4545:4545/udp \
ghcr.io/streamer45/streamkit:${TAG} \
skit serve

Then open http://localhost:4545 to access the web UI.

No install required — these hit a public instance of the speech gateway example, a thin HTTP front-end over StreamKit oneshot pipelines (Kokoro TTS and Whisper STT).

Text to speech (returns Opus audio, piped straight to ffplay):

Terminal window
curl -d 'Hello from StreamKit' https://tts.streamkit.dev | ffplay -nodisp -autoexit -

Speech to text — pipe the synthesized audio straight back into STT (no local file needed) and get back newline-delimited JSON:

Terminal window
curl -fsSd 'StreamKit transcribes speech' https://tts.streamkit.dev | curl -fsS --data-binary @- https://stt.streamkit.dev

StreamKit supports two pipeline execution modes:

  • Oneshot: stateless batch processing via HTTP (POST /api/v1/process). Good for request/response workflows.
  • Dynamic: long-running sessions you can inspect and reconfigure at runtime (web UI + WebSocket).

Dynamic sessions use MoQ (Media over QUIC) over WebTransport (QUIC/UDP) for real-time media transport. This is why the Docker example publishes both TCP and UDP on port 4545.

WebSocket is currently the control plane (sessions, graph edits, and telemetry). WebSocket transport nodes for media are being considered for a future release.

See: