{"id":36982883,"url":"https://github.com/streamer45/streamkit","last_synced_at":"2026-04-05T20:03:03.848Z","repository":{"id":330733265,"uuid":"1026320588","full_name":"streamer45/streamkit","owner":"streamer45","description":"StreamKit is a self-hosted real-time media processing engine with pluggable node-based pipelines","archived":false,"fork":false,"pushed_at":"2026-03-29T22:05:56.000Z","size":27635,"stargazers_count":11,"open_issues_count":8,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-30T00:18:24.367Z","etag":null,"topics":["ai","audio-processing","engine","media","moq","quic","real-time","rust","self-hosted","stt","tts"],"latest_commit_sha":null,"homepage":"https://streamkit.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/streamer45.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-07-25T17:20:28.000Z","updated_at":"2026-03-29T19:24:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"3d051380-d3f7-4517-a263-657783e33111","html_url":"https://github.com/streamer45/streamkit","commit_stats":null,"previous_names":["streamer45/streamkit"],"tags_count":22,"template":false,"template_full_name":null,"purl":"pkg:github/streamer45/streamkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/streamer45%2Fstreamkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/streamer45%2Fstreamkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/streamer45%2Fstreamkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/streamer45%2Fstreamkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/streamer45","download_url":"https://codeload.github.com/streamer45/streamkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/streamer45%2Fstreamkit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31448219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T15:22:31.103Z","status":"ssl_error","status_checked_at":"2026-04-05T15:22:00.205Z","response_time":75,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","audio-processing","engine","media","moq","quic","real-time","rust","self-hosted","stt","tts"],"created_at":"2026-01-13T22:54:20.038Z","updated_at":"2026-04-05T20:03:03.841Z","avatar_url":"https://github.com/streamer45.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nSPDX-FileCopyrightText: © 2025 StreamKit Contributors\n\nSPDX-License-Identifier: MPL-2.0\n--\u003e\n\n\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cimg src=\"ui/src/assets/logo.png\" alt=\"StreamKit Logo\" height=\"120\"\u003e\n  \u003cbr\u003e\n  StreamKit\n  \u003cbr\u003e\n\u003c/h1\u003e\n\u003ch4 align=\"center\"\u003eBuild and run real-time media pipelines on your own infrastructure\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\u003cem\u003eSpeech-to-text, voice agents, live audio/video processing — composable, observable, self-hosted.\u003c/em\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://streamkit.dev\"\u003e\u003cimg src=\"https://img.shields.io/badge/docs-streamkit.dev-blue?style=flat-square\" alt=\"Documentation\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://demo.streamkit.dev\"\u003e\u003cimg src=\"https://img.shields.io/badge/demo-try%20it%20live-brightgreen?style=flat-square\" alt=\"Live Demo\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MPL%202.0-blue?style=flat-square\" alt=\"License: MPL-2.0\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003cstrong\u003e\u003ca href=\"https://demo.streamkit.dev\"\u003eTry the live demo\u003c/a\u003e\u003c/strong\u003e — no install required\u003c/p\u003e\n\u003cbr\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/public/screenshots/monitor_view.png\" alt=\"StreamKit web UI (Monitor View): visual pipeline editor\" width=\"800\"\u003e\n  \u003cbr\u003e\n  \u003cem\u003ePipeline monitor showing real-time media processing with node metrics\u003c/em\u003e\n\u003c/p\u003e\n\n**StreamKit** is a self-hostable media processing server (written in Rust). You run a single binary (`skit`), then compose pipelines as a node graph (DAG) made from built-in nodes, plugins, and scriptable logic — via a web UI, YAML, or API.\n\nIt operates in two distinct modes:\n\n1. **Dynamic (Real-time):** Long-running, interactive sessions (voice agents, live streams) that you can patch and tune live via the Web UI or WebSocket API.\n2. **Oneshot (Stateless):** Request/response processing (batch transcription, file conversion) via a simple HTTP API.\n\nDefine your pipeline once, run it how you need.\n\n## Contents\n\n- [Project status](#project-status)\n- [Use cases](#use-cases)\n- [Core concepts](#core-concepts)\n- [Quickstart (Docker)](#quickstart-docker)\n- [What's included](#whats-included)\n- [Development](#development)\n- [Coding agents](#coding-agents)\n- [Docs \u0026 links](#docs--links)\n- [Acknowledgments](#acknowledgments)\n- [License](#license)\n\n## Project status\n\nStreamKit is still in its infancy and very much a work in progress. It's usable for tinkering and building prototypes, but it is not yet \"production-hardened\".\n\nPlease keep in mind:\n\n- **Breaking changes** are likely (configs, APIs, node behavior, pipeline formats).\n- **Docs/tests are incomplete** and you may run into sharp edges, UI quirks, or missing features.\n- **Performance and security** haven't been fully audited; avoid exposing it to untrusted networks unless you've reviewed and hardened your deployment.\n- **Linux x86_64 only** today (ARM and other platforms are on the roadmap).\n\nIf you try it and something feels off, please open an issue (or a small PR). For live help, join our [Discord](https://discord.gg/dcvxCzay47).\n\n## Use cases\n\n- **Speech pipelines** — Build a transcription service: ingest audio via MoQ, run Whisper STT, stream transcription updates to clients.\n- **Real-time translation** — Bilingual streams with live subtitles using NLLB or Helsinki translation models.\n- **Voice agents** — TTS-powered bots that respond to audio input with Kokoro, Piper, or Matcha.\n- **Video compositing** — Combine camera feeds with overlays and PiP layouts using the built-in compositor (CPU or GPU via wgpu), encoded with VP9 or AV1 for real-time transport.\n- **Dynamic UI overlays** — Render scriptable, data-driven overlays (scoreboards, lower thirds, watermarks) using the Slint plugin and composite them into live video.\n- **Audio processing** — Mixing, gain control, format conversion, and custom routing.\n- **Batch processing** — High-throughput file conversion or offline transcription using the Oneshot HTTP API.\n- **Your idea** — Add your own node or plugin and compose it into a pipeline\n\n## Core concepts\n\n- **Pipelines** are node graphs (DAGs) that process real-time streams and requests.\n- **Execution modes**:\n  - **Oneshot**: stateless request/response pipelines (batch over HTTP)\n  - **Dynamic**: long-running sessions you can inspect and reconfigure while they run\n- **Transport**: real-time media over MoQ/WebTransport (QUIC) plus a WebSocket control plane for UI and automation (WebSocket transport nodes are on the roadmap; in the near term, non-media streams may also ride MoQ)\n- **Plugins**: native (C ABI, in-process) and WASM (Component Model).\n- **Media focus**: audio (Opus, WAV, OGG, FLAC, MP3) and video (VP9, AV1 encode/decode, compositing with CPU/GPU backends, WebM muxing). See the [roadmap](ROADMAP.md) for what's next.\n\n## Quickstart (Docker)\n\n\u003e **Want to skip the setup?** [Try the live demo](https://demo.streamkit.dev) to explore StreamKit instantly in your browser.\n\nThe fastest way to get started is using pre-built Docker images from GitHub Container Registry (GHCR). The image serves the web UI and includes sample pipelines.\n\n\u003e [!CAUTION]\n\u003e StreamKit ships with built-in authentication (auto-enabled on non-loopback binds). If you see the login page, run `skit auth print-admin-token` and paste the token; admins can mint additional tokens in **Admin → Access Tokens**. Do not disable auth when exposing it beyond localhost; see \u003chttps://streamkit.dev/guides/authentication/\u003e and \u003chttps://streamkit.dev/guides/security/\u003e.\n\n\u003e [!NOTE]\n\u003e Official Docker images are published for `linux/amd64` (x86_64). On ARM hosts (Raspberry Pi, Apple Silicon, etc.), use “Build from Source” or run with amd64 emulation.\n\n### CPU-only\n\n```bash\ndocker run --rm \\\n  -p 127.0.0.1:4545:4545/tcp \\\n  -p 127.0.0.1:4545:4545/udp \\\n  ghcr.io/streamer45/streamkit:latest \\\n  skit serve # optional: this is the image default\n\n# Open http://localhost:4545 in your browser\n# Press Ctrl+C to stop\n```\n\n### Demo image (batteries included)\n\nThe `:latest-demo` image bundles core plugins plus the models needed by the shipped sample pipelines (much larger image; intended for demos/evaluation, not production).\n\n```bash\ndocker run --rm --name streamkit-demo \\\n  -p 127.0.0.1:4545:4545/tcp \\\n  -p 127.0.0.1:4545:4545/udp \\\n  ghcr.io/streamer45/streamkit:latest-demo\n```\n\n\u003e [!NOTE]\n\u003e In Docker, StreamKit binds to `0.0.0.0` inside the container so published ports work. With `auth.mode=auto`, this means built-in auth is enabled by default.\n\u003e To log in, print the bootstrap admin token and paste it into `http://localhost:4545/login`:\n\u003e\n\u003e ```bash\n\u003e docker exec streamkit-demo skit auth print-admin-token --raw\n\u003e ```\n\n\u003e [!NOTE]\n\u003e Linux-only (no login): run with host networking and bind to loopback inside the container to keep auth disabled in `auth.mode=auto`:\n\u003e\n\u003e ```bash\n\u003e docker run --rm --name streamkit-demo \\\n\u003e   --network host \\\n\u003e   -e SK_SERVER__ADDRESS=127.0.0.1:4545 \\\n\u003e   ghcr.io/streamer45/streamkit:latest-demo\n\u003e ```\n\nIf you want the OpenAI-powered sample pipelines, pass `OPENAI_API_KEY` without putting it directly in the command:\n\n```bash\n# Inherit OPENAI_API_KEY from your current shell environment (recommended).\n# (Make sure it's set on the host before you run this.)\ndocker run --rm --env OPENAI_API_KEY \\\n  -p 127.0.0.1:4545:4545/tcp -p 127.0.0.1:4545:4545/udp \\\n  ghcr.io/streamer45/streamkit:latest-demo\n```\n\nOr use an env-file so the secret never appears in your shell history:\n\n```bash\nprintf 'OPENAI_API_KEY=%s\\n' 'sk-...' \u003e streamkit.env\nchmod 600 streamkit.env\ndocker run --rm --env-file streamkit.env \\\n  -p 127.0.0.1:4545:4545/tcp -p 127.0.0.1:4545:4545/udp \\\n  ghcr.io/streamer45/streamkit:latest-demo\n```\n\n### Next steps\n\n- Open the UI at `http://localhost:4545` and load an example from the **Samples** list (bundled in the image under `/opt/streamkit/samples/pipelines`).\n- See [DOCKER.md](DOCKER.md) for volumes, env vars, GPU verification, and troubleshooting.\n- For GPU acceleration (selected plugins), see the docs: \u003chttps://streamkit.dev/deployment/gpu/\u003e\n\n## What's included\n\n- Low-latency, real-time pipelines with backpressure and streaming semantics\n- Node graph model (DAG) with built-in nodes plus modular extensions\n- Web UI for building/inspecting pipelines and a client CLI (`skit-cli`) for scripting (included in GitHub Release tarballs)\n- Load testing + observability building blocks (see `samples/loadtest/` and `samples/grafana-dashboard.json`)\n- Video compositing with CPU (tiny-skia) and GPU (wgpu) backends, VP9 and AV1 codec support, and a dedicated compositor UI in the web interface\n- Optional ML plugins + models (mounted externally by default): Whisper/SenseVoice (STT), Kokoro/Piper/Matcha (TTS), NLLB/Helsinki (translation), Slint (dynamic UI overlays). Some models may have restrictive licenses (e.g. NLLB is CC-BY-NC); review model licenses before production use.\n\n## Development\n\nStreamKit is a Rust workspace with a React web UI (builder + monitor) (Vite + Bun). Most tasks are wrapped in `just`:\n\n```bash\njust dev   # backend + UI (hot reload)\njust test  # Rust + UI tests\njust build # release build\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for prerequisites and setup, or run `just --list` for all commands.\n\n## Coding agents\n\nContributions made with coding agents (Claude/Codex/etc.) are welcome, but should be **supervised** and **reviewed by a human** before merge. Treat agent output like untrusted code: verify correctness, security, licensing, and style.\n\nSee [AGENTS.md](AGENTS.md) for repo-specific agent guidance.\n\n## Docs \u0026 links\n\n- [streamkit.dev](https://streamkit.dev) - Documentation site (source in `docs/`; run `just docs` locally)\n- [ROADMAP.md](ROADMAP.md) - Planned features and milestones toward v1.0\n- [DOCKER.md](DOCKER.md) - Docker deployment guide (CPU/GPU images)\n- [Systemd Deployment](https://streamkit.dev/deployment/systemd/) - Install from GitHub Releases and run via `systemd`\n- [samples/pipelines/](samples/pipelines/) - Example pipelines you can load and adapt\n- [samples/loadtest/](samples/loadtest/) - Load test configs for `skit-cli lt`\n- [MoQ](https://moq.dev/) - Media over QUIC (MoQ) project\n- [Discord](https://discord.gg/dcvxCzay47) - Community server\n\n## Acknowledgments\n\n- Huge credits to the [**Media over QUIC (MoQ)** project](https://github.com/moq-dev/moq). StreamKit's real-time functionality heavily relies on it.\n\n## License\n\nMozilla Public License 2.0 - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstreamer45%2Fstreamkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstreamer45%2Fstreamkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstreamer45%2Fstreamkit/lists"}