EmbyStream
PART 1. About
EmbyStream is a highly customizable, decoupled frontend/backend application for Emby. It is written entirely in Rust for ultimate performance and memory safety.
To learn more about the architecture of a decoupled Emby setup, please refer to Wiki.
Screenshot:
PART 2. Features
- Dual-Mode Support: Can operate as both a frontend and backend service simultaneously, or as standalone services.
- Universal Compatibility: Supports all versions of Emby.
- Multiple Backend Types:
disk: For locally mounted storage.openlist: For integration with OpenList.direct_link: For direct links or CDN streaming.
- STRM Format Support: Perfectly compatible with
.strmfiles, integrating seamlessly with plugins like StrmAssistant. - Link Encryption: Secures data transmission with link encryption.
- Link Expiration Protection: All generated media links automatically expire after a configurable duration, preventing unauthorized redistribution.
- User-Agent Filtering: Includes both allowlist and denylist modes for precise access control.
- Anti-Reverse Proxy Filtering: Prevents unauthorized playback by restricting access to a specified host.
PART 3. Install
From Cargo Crates
cargo install embystream
From Source (with Cargo)
-
Clone the repository:
git clone https://github.com/Open-PiliPili/EmbyStream.git -
Enter the directory and build the project:
cd EmbyStream && cargo build --release -
Copy the compiled binary to your system's PATH:
Linux:
cp ./target/release/embystream /usr/binmacOS:
cp ./target/release/embystream /usr/local/bin
From Docker
You can access the Docker Hub URL below and use Docker to install the image.
DockerHub: openpilipili/embystream
From Binaries
You can download pre-compiled binaries for macOS and Linux from the GitHub Releases page. Simply unzip the file and add the embystream executable to your $PATH.
PART 4. RUN
Create config.toml based on one of the two templates below, and modify the contents as needed afterward.
💡 Note: The dual mode simply requires you to fill in both the frontend and backend configuration sections, and set the
stream_modein the template configuration file todual.
With Binaries
## Default
/usr/bin/embystream run
## Custom
/usr/bin/embystream run --config "$HOME/.config/embystream/config.toml"
With Docker Run
docker run -d \
--name ${CONTAINER_NAME:-embystream} \
-p 50001:50001 \
-e TZ="Asia/Shanghai" \
-e PUID=1000 \
-e PGID=1000 \
-e UMASK=022 \
-v ./config/config.toml:/config/embystream/config.toml \
--privileged \
--log-driver json-file \
--log-opt max-size=50m \
--log-opt max-file=3 \
--restart unless-stopped \
openpilipili/embystream:latest
With Docker Compose Run
Reference: docker-compose.yaml
docker-compose pull && docker-compose up -d
PART 5. CLI
Another Emby streaming application (frontend/backend separation) written in Rust.
Usage: embystream [COMMAND]
Commands:
run
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
PART 6. License
Copyright (c) 2025 open-pilipili.
EmbyStream is licensed under the GPL-V3 License.