EmbyStream
About
EmbyStream is a reverse proxy and stream gateway for Emby: a frontend gateway talks to Emby and rewrites traffic; a backend gateway serves or redirects media with signed, expiring links. You can run either side alone or both in dual mode (two ports). The stack is async Rust (Hyper / Tokio) with optional TLS on the backend listener.
Architecture background: EmbyStream Wiki.
Screenshot:
Features (overview)
- Stream modes:
frontend,backend, ordual(distinct ports required in dual). - Storage drivers (
[[BackendNode]].type): Disk, OpenList, DirectLink, WebDav, plus StreamRelay for chaining gateways without decryptingsign. - STRM-friendly paths, path rewrite rules, and optional fallback video when a file is missing.
- Signed / encrypted playback URLs with expiry; per-node redirect vs proxy and per-device speed limits.
- User-Agent allow/deny; anti–reverse-proxy host checks on the frontend (and per node where configured).
- Interactive config wizard:
embystream config template/config show; use--lang zhfor Simplified Chinese prompts and localized--help(defaulten). - CORS / OPTIONS, playlist handling, API response caching on the forward path, and HTTP/2 TLS for the backend via
[Http2]or CLI overrides.
Detailed behavior and every TOML field: Configuration reference.
Documentation
| Document | Description |
|---|---|
| User guide | Deployment patterns, security notes, Docker notes, first-time setup |
| Configuration reference | All config sections, scenarios, and examples (English) |
| CLI usage | run, config, flags |
Install
From crates.io
cargo install embystream
From source
git clone https://github.com/Open-PiliPili/EmbyStream.git
cd EmbyStream && cargo build --release
Install the binary (example paths):
- Linux:
cp ./target/release/embystream /usr/local/bin/ - macOS:
cp ./target/release/embystream /usr/local/bin/
Docker
Image: Docker Hub — openpilipili/embystream. Mount your config.toml and publish the ports that match your config (the bundled template listens on 60001 / 60002).
Prebuilt binaries
See GitHub Releases.
Run
- Start from the template
src/config/config.toml.templateor runembystream config template. - Adjust
[Emby],[[BackendNode]], and ports for your layout (see User guide). - Start the service:
embystream run
embystream run --config "$HOME/.config/embystream/config.toml"
Docker (example): map host port to the same port as listen_port in your config.
docker run -d \
--name ${CONTAINER_NAME:-embystream} \
-p 60001:60001 \
-e TZ="Asia/Shanghai" \
-v ./config/config.toml:/config/embystream/config.toml \
--log-driver json-file \
--log-opt max-size=50m \
--log-opt max-file=3 \
--restart unless-stopped \
openpilipili/embystream:latest
Compose: template/docker/docker-compose.yaml (update published ports if you change listen_port).
Note: Examples that set
PUID/PGID/privilegedare optional host policies; the minimal image does not map PUID/PGID internally.
CLI (summary)
Use embystream run to start gateways. Pass --lang zh (global) for Chinese wizard text and Chinese top-level --help. Details: CLI usage.
License
Copyright (c) 2025 open-pilipili.
EmbyStream is licensed under the GPL-3.0.