Dispatcharr
IPTV/EPG stream manager. Consolidates M3U playlists and EPG data and exposes channels to Jellyfin via HDHomeRun emulation.
Where it runs
- Host: PVE LXC 113 (
192.168.1.254) - UI: http://192.168.1.254:9191
- Login:
dispatchuser (password set on first-run wizard) - Managed by: Komodo (server
dispatcharr, Stackdispatcharr) - Compose file:
dispatcharr/docker-compose.ymlin homelab-docker repo
Docker
Installed via apt (not snap) inside the LXC. Use docker compose (with a space).
Komodo Periphery
Periphery agent runs as a Docker container on the LXC. It connects outbound to
Komodo Core (ws://192.168.1.226:9120) — no inbound port needs to be open.
- Compose file:
/opt/komodo/periphery.yml - Keys:
/opt/komodo/keys/periphery.key(shared from Nexuskomodo_keysvolume)
Restart Periphery if it disconnects:
ssh root@192.168.1.227 "pct exec 113 -- docker compose -f /opt/komodo/periphery.yml restart"
Komodo Stack Notes
Stack uses files_on_host: true with:
run_directory: /opt/homelab-docker/dispatcharrfile_paths: ["docker-compose.yml"]
The file_paths must be set explicitly — Komodo defaults to compose.yaml.
Repo on LXC
homelab-docker is cloned at /opt/homelab-docker. Komodo pulls it when the
webhook procedure runs (Repo: homelab-docker-dispatcharr). Manual pull:
ssh root@192.168.1.227 "pct exec 113 -- git -C /opt/homelab-docker pull"
M3U Sources
Sources are added via Settings → M3U Accounts. Currently configured:
These are free, community-maintained streams (iptv-org). Individual streams go down occasionally — expect some dead channels at any given time.
Output Endpoints
All endpoints are unauthenticated (public within the LAN):
| Endpoint | Purpose |
|---|---|
http://192.168.1.254:9191/hdhr |
HDHomeRun emulation (Jellyfin tuner URL) |
http://192.168.1.254:9191/hdhr/lineup.json |
Channel lineup JSON |
http://192.168.1.254:9191/output/m3u/ |
M3U playlist of your channels |
http://192.168.1.254:9191/output/epg |
XMLTV guide data for your channels |
Jellyfin Integration
Jellyfin (LXC 101, 192.168.1.250:8096) is configured to use Dispatcharr as
its Live TV source. Config lives in /etc/jellyfin/livetv.xml on LXC 101.
- Tuner type: HD HomeRun →
http://192.168.1.254:9191/hdhr - EPG type: XMLTV →
http://192.168.1.254:9191/output/epg - Tuner count: 10 simultaneous streams
The config in /etc/jellyfin/livetv.xml uses <Path> (not <Url>) for the XMLTV
listing provider — this is a Jellyfin quirk. Using <Url> causes a
NullReferenceException on every guide refresh with no EPG data loaded.
Relevant snippet from livetv.xml:
<ListingsProviderInfo>
<Id>dispatcharr-epg</Id>
<Type>xmltv</Type>
<Path>http://192.168.1.254:9191/output/epg</Path>
<EnableAllTuners>true</EnableAllTuners>
</ListingsProviderInfo>
When you add new channels in Dispatcharr, refresh the guide in Jellyfin: Dashboard → Scheduled Tasks → Refresh Guide → Run Now
Or via API:
curl -s -X POST "http://192.168.1.250:8096/ScheduledTasks/Running/bea9b218c97bbf98c5dc1303bdb9a0ca" \
-H "Authorization: MediaBrowser Token=\"YOUR_API_KEY\""
Channel Logos in Jellyfin
Jellyfin pulls channel logos from the XMLTV EPG <icon> tags. Dispatcharr
proxies logos through http://192.168.1.254:9191/api/channels/logos/{id}/cache/.
After a guide refresh, logos appear automatically if the channel has one set in
Dispatcharr. Set or override logos via Dispatcharr → Channels → edit channel →
Logo field.
EPG / Guide Data
The iptv-org free streams carry minimal EPG data. Most channels will show "No program information" in the guide. Options to improve this:
- Leave it as-is — channels still play fine without guide data.
- Add a dedicated EPG source in Dispatcharr — Settings → EPG Sources → Add. Some providers publish XMLTV URLs alongside their M3U feeds.
Renovate Note
ghcr.io/dispatcharr/dispatcharr only publishes latest — no semver tags.
Renovate will not open auto-update PRs. Check the GHCR page or GitHub releases
periodically and pull the image manually when a new version drops:
ssh root@192.168.1.227 "pct exec 113 -- docker compose -f /opt/homelab-docker/dispatcharr/docker-compose.yml pull && docker compose -f /opt/homelab-docker/dispatcharr/docker-compose.yml up -d"
Troubleshooting
# Dispatcharr container logs
ssh root@192.168.1.227 "pct exec 113 -- docker logs dispatcharr --tail 50"
# Periphery connection to Komodo
ssh root@192.168.1.227 "pct exec 113 -- docker logs komodo-periphery --tail 20"
# Stream count in DB
ssh root@192.168.1.227 "pct exec 113 -- docker exec dispatcharr python manage.py shell -c \
'from apps.channels.models import Stream, Channel; print(Stream.objects.count(), \"streams,\", Channel.objects.count(), \"channels\")'"
Automation
Infrastructure
Services
- Dashy
- Bookstack
- Tandoor
- Home Assistant
- Pinchflat
- FreshRSS
- Frigate
- Wyze-Bridge
- Mosquitto
- Dispatcharr
- Proxmox LXC Services
Operations
- How to Update Apps
- Backup & Restore Strategy
- Maintenance Schedule
- Useful Commands
- Restore Proxmox Containers
- NAS NFS Share for LXC
- SSH Public Key onto Nexus