All apps · 0 apps
LivePoster
Docker app from drgonzo65's Repository
Overview
Readme
View on GitHubLivePoster
A media poster display server that monitors your home theater systems (Kaleidescape, Plex, Jellyfin, Nvidia Shield) and displays movie/TV posters. When media is playing, it shows the current content. When idle, it cycles through your Kaleidescape library as a slideshow.
Features
- Real-time monitoring of multiple media systems
- Automatic detection of currently playing content with progress bar
- Priority system: Kaleidescape > Plex > Jellyfin
- Automatic slideshow when idle (can enable/disable per movie)
- Beautiful web-based display interface
- Management UI for metadata review and correction
- Settings UI for easy configuration (no need to edit files)
- Metadata caching for fast startup times
- TMDb & OMDb integration for rich movie data and Rotten Tomatoes scores
- Docker support for easy deployment on Unraid
- Responsive design for any screen size
- Smooth transitions and animations
Supported Systems
- Kaleidescape - TCP/IP control protocol integration
- Plex - Full API integration
- Jellyfin - Full API integration
- Nvidia Shield - Via Plex or Jellyfin client
Installation
New here? Start with SETUP.md — a step-by-step guide covering credentials, working out which Kaleidescape address goes where, and first run.
Option 1: Unraid (Community Applications)
Search for LivePoster in the Apps tab and click Install. All settings are exposed as template fields; see UNRAID-QUICKSTART.md.
Option 2: Docker (Recommended elsewhere)
A prebuilt image is published, so there's nothing to compile:
docker run -d --name liveposter -p 3000:3000 \
-v ./cache:/app/.cache --env-file .env \
drgonzo65/liveposter:latest
Or with the included docker-compose.yml:
docker compose up -d
Then open http://localhost:3000, and configure via the settings UI at http://localhost:3000/manage.html
See DOCKER.md for secrets, updating, and building your own image, or UNRAID-QUICKSTART.md for Unraid.
Option 3: Node.js
- Install dependencies:
npm install
- Copy the environment example file:
cp .env.example .env
- Edit
.envand configure your systems:
# Server Configuration
PORT=3000
# TheMovieDB - both values are required
TMDB_API_KEY=your_tmdb_api_key_here
TMDB_READ_TOKEN=your_tmdb_read_token_here
# Kaleidescape - PLAYER_HOST reports what's playing; SERVER_HOST holds the movies.
# Leave SERVER_HOST blank on an all-in-one system such as a Strato V.
KALEIDESCAPE_PLAYER_HOST=192.168.1.50
KALEIDESCAPE_PORT=10000
KALEIDESCAPE_SERVER_HOST=
# Plex Configuration
PLEX_URL=http://192.168.1.60:32400
PLEX_TOKEN=your_plex_token_here
# Jellyfin Configuration
JELLYFIN_URL=http://192.168.1.61:8096
JELLYFIN_API_KEY=your_jellyfin_api_key_here
# Polling interval in milliseconds (default: 10000 = 10 seconds)
POLL_INTERVAL=10000
# Idle slideshow interval in milliseconds (default: 30000 = 30 seconds)
SLIDESHOW_INTERVAL=30000
See SETUP.md for how to obtain each credential.
Getting API Keys
Plex Token
- Sign in to Plex Web App
- Open any media item and click "Get Info" or "..."
- Click "View XML"
- Look for
X-Plex-Tokenin the URL
Or visit: https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/
Jellyfin API Key
- Sign in to Jellyfin Dashboard
- Go to Dashboard > API Keys
- Click "+" to create a new API key
- Name it "LivePoster" and save
Kaleidescape
No authentication is required, but which device you point at matters:
KALEIDESCAPE_PLAYER_HOSTmust be the player — it reports what's playing (port 10000)KALEIDESCAPE_SERVER_HOSTmust be the device holding your movies — a Terra movie server, or the same player on an all-in-one system such as a Strato V
On an all-in-one system, set KALEIDESCAPE_PLAYER_HOST and leave KALEIDESCAPE_SERVER_HOST
blank; it falls back to the same address.
Pointing KALEIDESCAPE_PLAYER_HOST at a movie server is the most common setup mistake —
the slideshow works but "Now Playing" never appears. See
SETUP.md for commands that
identify each device.
Usage
Start the server:
npm start
Or for development with auto-reload:
npm run dev
Then open your browser to:
http://localhost:3000
How It Works
- Monitoring: The server polls all configured systems every 10 seconds (configurable)
- Priority: If multiple systems are playing, it shows content in this order:
- Kaleidescape (highest priority)
- Plex
- Jellyfin (lowest priority)
- Idle Mode: When nothing is playing, it displays random posters from your Kaleidescape library
- Display: The web interface automatically updates when playback state changes
Web Interfaces
- Main Display:
http://localhost:3000- The poster display - Management UI:
http://localhost:3000/manage.html- Review and fix movie metadata - Settings UI: Click "⚙️ Settings" in management UI - Configure all API keys and systems
API Endpoints
Status & Library
GET /api/status- Current playback stateGET /api/library?source=all- Get library (sources: all, kaleidescape, plex, jellyfin)GET /api/random?source=all- Get random movie from library for slideshowGET /api/config- Server configurationGET /api/health- Health checkGET /api/loading- Loading status during startup
Metadata Management
GET /api/movies/all?source=all- Get all movies with metadata quality indicatorsGET /api/movies/search?title=MovieName&year=2020- Search TMDb for alternative matchesPOST /api/movies/update- Update movie metadata with correct TMDb matchPOST /api/movies/toggle-slideshow- Enable/disable movie in slideshow
Settings
GET /api/settings- Get current configuration. API keys and tokens are returned masked, never in fullPOST /api/settings- Save configuration to.cache/settings.json(persists across container updates)
Configuration
Configuration comes from environment variables (or the Settings UI, which
overrides them). Any variable can also be supplied as <NAME>_FILE pointing at a
file containing the value — see Docker secrets.
| Variable | Purpose |
|---|---|
PORT |
Server port (default: 3000) |
TMDB_API_KEY |
TMDb API key, v3 auth — required |
TMDB_READ_TOKEN |
TMDb read access token, v4 auth — required |
OMDB_API_KEY |
OMDb key, for Rotten Tomatoes scores (optional) |
KALEIDESCAPE_PLAYER_HOST |
Kaleidescape player IP — reports what's playing |
KALEIDESCAPE_SERVER_HOST |
Device holding the movie library; blank = same as KALEIDESCAPE_PLAYER_HOST |
KALEIDESCAPE_PORT |
Control port (default: 10000) |
PLEX_URL / PLEX_TOKEN |
Plex server and token |
JELLYFIN_URL / JELLYFIN_API_KEY |
Jellyfin server and API key |
POLL_INTERVAL |
How often to check for playback (ms, default 10000) |
SLIDESHOW_INTERVAL |
How often to change slides when idle (ms, default 30000) |
DISPLAY_SCALE |
Text scaling for the display (default 1.0) |
KALEIDESCAPE_ENABLED / PLEX_ENABLED / JELLYFIN_ENABLED |
Set to false to switch a system off without clearing its settings (default on) |
KALEIDESCAPE_DEBUG |
Set to 1 to log every control-protocol message. Off by default — it's two lines per command per poll |
Troubleshooting
Kaleidescape not connecting
- Verify the IP address is correct
- Check that port 10000 is not blocked by firewall
- Ensure control protocol is enabled on your Kaleidescape player
Plex not working
- Verify your Plex token is correct
- Make sure the Plex server URL is accessible from the machine running LivePoster
- Check that your Plex server is running
Jellyfin not working
- Verify your API key is correct
- Ensure the Jellyfin URL is accessible
- Check that your Jellyfin server is running
No posters showing
- Check the server logs for errors
- Verify at least one system is configured
- Make sure you have movies in your library
Project Structure
liveposter/
├── lib/
│ ├── kaleidescape.js # Kaleidescape TCP/IP control client
│ ├── plex.js # Plex API integration
│ ├── jellyfin.js # Jellyfin API integration
│ ├── tmdb.js # TheMovieDB metadata enrichment
│ ├── omdb.js # OMDb lookups (Rotten Tomatoes scores)
│ ├── cache.js # Metadata cache manager
│ └── monitor.js # Media monitoring service
├── public/
│ ├── index.html # Poster display
│ ├── app.js # Display logic
│ ├── style.css # Styles
│ ├── manage.html # Metadata manager + settings UI
│ └── manage.js # Manager logic
├── .cache/ # Metadata cache + saved settings (mount this in Docker)
├── server.js # Express server
├── package.json
├── .env.example
├── SETUP.md # Full setup guide
├── DOCKER.md # Docker / Unraid deployment
└── README.md
Credits
Inspired by posterr by petersem.
License
MIT
Media gallery
Install LivePoster on Unraid in a few clicks.
Find LivePoster 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.
Requirements
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
drgonzo65/liveposter:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3000]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Web interface port
- Target
- 3000
- Default
- 3000
- Value
- 3000
Stores the metadata cache and any settings saved from the web UI. Keep this mapped or you re-scan your library on every update.
- Target
- /app/.cache
- Default
- /mnt/user/appdata/liveposter/cache
- Value
- /mnt/user/appdata/liveposter/cache
TheMovieDB API Key (v3 auth). Free from themoviedb.org - Settings, API.
- Target
- TMDB_API_KEY
TheMovieDB API Read Access Token (v4 auth), from the same page as the API key. Both values are required.
- Target
- TMDB_READ_TOKEN
IP of your Kaleidescape PLAYER - the device that reports what is playing (e.g. 192.168.1.50). On an all-in-one system such as a Strato V, this is your only Kaleidescape setting.
- Target
- KALEIDESCAPE_PLAYER_HOST
IP of the Kaleidescape MOVIE SERVER that stores your library, such as a Terra (e.g. 192.168.1.51). Leave blank if the player and server are the same device.
- Target
- KALEIDESCAPE_SERVER_HOST
Kaleidescape control protocol port
- Target
- KALEIDESCAPE_PORT
- Default
- 10000
- Value
- 10000
Jellyfin server URL including port (e.g. http://192.168.1.61:8096)
- Target
- JELLYFIN_URL
Jellyfin API key, from Dashboard, API Keys
- Target
- JELLYFIN_API_KEY
Plex server URL including port (e.g. http://192.168.1.60:32400)
- Target
- PLEX_URL
Plex authentication token (X-Plex-Token)
- Target
- PLEX_TOKEN
Optional. Adds Rotten Tomatoes scores. Free key from omdbapi.com.
- Target
- OMDB_API_KEY
Text scaling for the display, 0.5 to 3.0. Also adjustable live in the settings UI.
- Target
- DISPLAY_SCALE
- Default
- 1.0
- Value
- 1.0
How often to check for playback changes (milliseconds)
- Target
- POLL_INTERVAL
- Default
- 10000
- Value
- 10000
How long each poster stays on screen when idle (milliseconds)
- Target
- SLIDESHOW_INTERVAL
- Default
- 30000
- Value
- 30000