embystream 0.0.28

Another Emby streaming application (frontend/backend separation) written in Rust.
Documentation

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, or dual (distinct ports required in dual).
  • Storage drivers ([[BackendNode]].type): Disk, OpenList, DirectLink, WebDav, plus StreamRelay for chaining gateways without decrypting sign.
  • 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 zh for Simplified Chinese prompts and localized --help (default en).
  • 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
Google OAuth Desktop App Setup Step-by-step Google Cloud Console setup for embystream auth google
Google OAuth Desktop App 创建教程 从 0 到 1 创建 Desktop app OAuth Client 的新手教程

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

  1. Start from the template src/config/config.toml.template or run embystream config template.
  2. Adjust [Emby], [[BackendNode]], and ports for your layout (see User guide).
  3. 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 / privileged are 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.

If you want to use the googleDrive backend and need Google OAuth credentials, start with:

License

Copyright (c) 2025 open-pilipili.

EmbyStream is licensed under the GPL-3.0.