NOTE: Major refactoring is to be expected next year on-and-off given time. It will be alpha-ready for testing and feedback later.
Beam is a high-performance, scalable media server to stream video, audio, and other content with real-time transcoding capabilities. It is ideal for home labs, small business that need to stream content on a variety of devices.
- HLS/DASH streaming
- Real-time remuxing/transcoding with hardware acceleration (NVENC, VAAPI)
- Fully-distributed and Kubernetes-native architecture
Beam originally started as a project to surpass the limitations of Jellyfin, a popular open-source media server. Jellyfin is a great project, but we need a more modern, straightforward solution that is as easy to use but more feature-rich and actively developed.
Beam consists of multiple backend services that work together to provide a seamless media streaming experience. The main components are:
beam-stream: Media streaming service that handles live transcoding, caching, and streaming of media files (Rust/GraphQL/gRPC/ffmpeg).
Currently, there is one client app to interact with Beam:
beam-web: Web frontend that provides a user-friendly interface to browse and stream media content (TypeScript/React).
-
Clone the repository:
git clone https://github.com/justin13888/beam.git cd beam -
Configure environment variables:
cp .env.example .env
-
Start the services:
# Using Podman podman compose up -d # Or using Docker docker compose up -d
-
Access the application:
- Frontend: http://localhost:8080
- Backend API: http://localhost:8000
- GraphQL Playground: http://localhost:8000/graphql
For production deployments, we recommend reviewing all configurations in .env but at least:
-
Security:
- Change
POSTGRES_PASSWORDto a strong, unique password - Use HTTPS with a reverse proxy (nginx, Caddy, Traefik)
- Set
SERVER_URLandC_STREAM_SERVER_URLto your public domain
- Change
-
Storage:
- Set
HOST_VIDEO_DIRto your media library location - Ensure sufficient disk space for
HOST_CACHE_DIR - Consider using external volumes for
HOST_POSTGRES_DATA
- Set
-
Performance:
- Enable hardware acceleration for transcoding (configure in beam-stream)
- Set
ENABLE_METRICS=truefor monitoring - Adjust
RUST_LOGtoinfoorwarnin production
See individual README files for each component.
To spin up entire dependency stack with Docker Compose for testing, run:
podman compose -f compose.dependencies.yaml upThis project is licensed under the AGPL License - see the LICENSE file for details.