Homepage app add-on to display Plex recently added media
3.6K
A lightweight, 100% vibe coded proxy that displays your Plex recently added media in Homepage as a poster card iframe widget, split by library section. Optionally shows an On Deck row, click-through links to Plex Web, a NEW badge on recent posters, and a progress bar on in-progress media.
/health endpoint for Docker and Homepage liveness checks/ui endpoint to preview the widget directly in a browserlinux/amd64 and linux/arm64Visit the /ui endpoint directly in your browser to preview the widget at any time:
http://YOUR_HOST_IP:3051/ui
This is the same page Homepage embeds as an iframe — useful for checking the layout, verifying posters load, and confirming section filtering before adding it to your dashboard.
Each Plex library has a numeric section ID. To find yours, temporarily add DEBUG_SECRET to your environment (see Debug Endpoints below) and visit:
http://YOUR_HOST_IP:3051/debug-sections?secret=YOUR_SECRET
This returns a JSON list of all your libraries with their IDs, titles, and types. Once you have the IDs you want, add them to SECTIONS and remove or comment out DEBUG_SECRET.
services:
plex-proxy:
image: cm2339/plex-proxy-recent:latest
container_name: plex-proxy
restart: unless-stopped
environment:
- PLEX_URL=http://YOUR_PLEX_IP:32400
- PLEX_TOKEN=YOUR_PLEX_TOKEN
- LIMIT=10
- SECTIONS=1,2,3 # comma-separated section IDs
#- PLEX_CLICKTHROUGH=true # optional: clicking a poster opens it in Plex Web
#- SHOW_ON_DECK=true # optional: show an ▶️ On Deck row above recently added
#- SHOW_PROGRESS_BAR=true # optional: show watch progress bar on On Deck posters (default true)
#- NEW_BADGE_HOURS=48 # optional: gold NEW badge on recent posters (0 to disable)
#- REFRESH_INTERVAL=300 # optional: auto-refresh in seconds (0 = disabled)
#- DEBUG_SECRET= # optional: enables debug endpoints when set
ports:
- "3051:3001"
networks:
- homepage_net
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3001/health', r => process.exit(r.statusCode === 200 ? 0 : 1)).on('error', () => process.exit(1))"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
networks:
homepage_net:
external: true
name: homepage_default # match your Homepage network name
- Media:
- Plex Recently Added:
icon: plex.png
href: http://YOUR_PLEX_IP:32400/web
description: Latest movies, shows & music
widget:
type: iframe
src: http://YOUR_HOST_IP:3051/ui
classes: h-96
referrerPolicy: same-origin
allowFullscreen: false
| Variable | Required | Default | Description |
|---|---|---|---|
PLEX_URL | ✅ | — | Plex server URL including port |
PLEX_TOKEN | ✅ | — | Your X-Plex-Token |
LIMIT | ❌ | 10 | Max items shown per section |
SECTIONS | ❌ | all | Comma-separated library section IDs to include |
PORT | ❌ | 3001 | Internal port the proxy listens on |
PLEX_CLICKTHROUGH | ❌ | false | Set to true to make posters link directly to that item in Plex Web |
SHOW_ON_DECK | ❌ | false | Set to true to show an ▶️ On Deck row above recently added sections |
SHOW_PROGRESS_BAR | ❌ | true | Set to false to hide the watch progress bar on On Deck posters |
NEW_BADGE_HOURS | ❌ | 48 | Hours after which the NEW badge disappears. Set to 0 to disable entirely |
REFRESH_INTERVAL | ❌ | 0 | Auto-refresh interval in seconds. Set to e.g. 300 for every 5 minutes. 0 disables |
DEBUG_SECRET | ❌ | disabled | Enables debug endpoints when set — remove after initial setup |
Debug endpoints are disabled by default. They are only active when DEBUG_SECRET is set, and every request must include the secret as a query parameter. Remove or comment out DEBUG_SECRET once your setup is complete.
/debug-sectionsReturns a JSON list of all your Plex libraries with their section IDs. Use this to find the IDs for the SECTIONS variable.
http://YOUR_HOST_IP:3051/debug-sections?secret=YOUR_SECRET
Example response:
[
{ "id": "1", "title": "Movies", "type": "movie" },
{ "id": "2", "title": "TV Shows", "type": "show" },
{ "id": "3", "title": "Music", "type": "artist" }
]
/debugReturns raw recently added metadata from Plex. Useful for inspecting what fields are available or troubleshooting missing posters and titles.
http://YOUR_HOST_IP:3051/debug?secret=YOUR_SECRET
Open Plex Web → any media item → ⋮ → Get Info → View XML → copy the X-Plex-Token value from the URL.
The container must share a Docker network with Homepage. Check your network name with:
docker network ls | grep homepage
If Homepage is running under a different network name, update the name: field under networks in the compose file to match.
Content type
Image
Digest
sha256:94c861241…
Size
46.1 MB
Last updated
1 day ago
docker pull cm2339/plex-proxy-recent