Broadcaster

Broadcaster

Docker app from paloooz's Repository

Overview

Create your own 24/7 TV channels from your media library with a retro CRT-style web interface. Broadcaster generates and hosts HTTP Live Streams from local content using FFMpeg with NVIDIA GPU hardware acceleration.

Broadcaster

Generate and host HTTP Live Streams from local video content using FFMpeg. Broadcaster will create playlists of your video files and live stream the playlist. It will orchestrate time keeping to make sure anyone watching your stream is in the same position. If no one is watching, the timeline keeps going, just like old school TV stations.

How It Works

Broadcaster pre-generates HLS segments for all your videos on first startup. This transcoding process runs in the background and can take a while depending on your library size and hardware. Once transcoded, videos are cached and don't need to be re-encoded on subsequent startups.

The web UI is available immediately at startup, but channels won't appear until at least one video has been transcoded. You can monitor transcoding progress in the Docker logs or console output.

Prerequisites

  • Broadcaster uses FFMpeg to encode your videos to h264 for HTTP Live Streaming.
  • If you have an Nvidia GPU, it is highly recommended you have ffmpeg compiled with Nvidia's non-free h264_nvenc codec.
  • If you have an Intel CPU with Intel QuickSync, you can try the h264_qsv codec.
  • Without either of these, you'll have to use a software codec like libx264 which will be slower. You can set the codec in the config.txt.

Getting Started

Clone the repository:

git clone https://github.com/theodoreroddy/Broadcaster.git

Change into the Broadcaster directory and run npm install:

cd ./Broadcaster
npm install

Define your channels in a channels.json file:

[{
  "type": "shuffle",
  "name": "My Channel",
  "slug": "mychannel",
  "paths": [
    "/path/to/videos"
  ]
}]

The type specifies the playlist type:

  • shuffle: will shuffle the files and play them in a random order.
  • alphabetical: will play the files back in alphabetical order.

The name is a human readable name for the channel and the slug specifies the directory name the channel will use.

Start your server:

npm start

Monitoring Progress

On first run, Broadcaster will transcode all videos in your library. Monitor progress with:

# Docker
docker logs -f broadcaster

# Or if running directly
npm start

You'll see output like:

[PreGenerator] Transcoding: My Video.mkv (1/50)
[PreGenerator] Transcoding complete: My Video.mkv

Channels will appear in the web UI as their videos finish transcoding.

Install Broadcaster on Unraid in a few clicks.

Find Broadcaster in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Broadcaster Review the template variables and paths Click Install

Requirements


    Before first run:
    1. Media Directory - Point to your media library (read-only access)
    2. NVIDIA GPU - Requires NVIDIA Container Toolkit installed on Unraid (Community Applications: Nvidia-Driver)

    After first run, create a channels.json in your Data Directory:
    }>

    See https://github.com/theodorecharles/Broadcaster for full documentation

Download Statistics

5,109
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
tedcharles/broadcaster:latest
Last Updated2025-12-10
First Seen2025-12-09

Runtime arguments

Web UI
http://[IP]:[PORT:12121]/
Network
bridge
Shell
bash
Privileged
false
Extra Params
--runtime=nvidia

Template configuration

WebUI PortPorttcp

Web interface port

Target
12121
Default
12121
Value
12121
Data DirectoryPathrw

Storage for HLS streams, config files (channels.json, config.txt), and logs

Target
/data
Default
/mnt/user/appdata/broadcaster
Value
/mnt/user/appdata/broadcaster
Media DirectoryPathro

Your media files (movies, TV shows, etc.)

Target
/media
Default
/mnt/user/media
Value
/mnt/user/media
NVIDIA GPU IDVariable

GPU ID to use (0 for first GPU, or 'all' for all GPUs). Run 'nvidia-smi' to see available GPUs.

Target
NVIDIA_VISIBLE_DEVICES
Default
0
Value
0
NVIDIA Driver CapabilitiesVariable

NVIDIA driver capabilities (leave as 'all')

Target
NVIDIA_DRIVER_CAPABILITIES
Default
all
Value
all