🔧 Threadfin Configuration Guide 2026
Threadfin is an IPTV proxy that converts your M3U/Xtream streams into HDHomeRun emulation, so Plex, Jellyfin and Emby see them as a "TV tuner". A complete config guide.
🤔 What is Threadfin?
Threadfin is a fork of xTeVe (inactive since 2022). It runs as a service between your IPTV provider and your media server.
What does it do?
- Combines multiple M3U / Xtream sources into a single playlist
- Merges and maps EPG XMLTV sources
- Emulates the HDHomeRun protocol (what Plex/Jellyfin expect)
- Buffers streams (FFmpeg or native streaming mode)
- Manages connection limits — prevents the provider from blocking you
- Filters channels — remove junk before it reaches Plex
- Custom channel logos and group names
📥 Installation via Docker
version: "3"
services:
threadfin:
image: fyb3roptik/threadfin
container_name: threadfin
ports:
- "34400:34400"
volumes:
- ./conf:/home/threadfin/conf
- ./temp:/tmp/threadfin
environment:
- TZ=Europe/London
- PUID=1000
- PGID=1000
restart: unless-stopped
Start and open
Run docker-compose up -d and open http://server-ip:34400/web/.
First login
By default there is no user — direct access. After that, go to Settings → User and create an admin (strong password!).
📺 Step 1 — Adding a playlist
- Tab Playlist
- Click the "+" button
- Name: e.g. "Provider X"
- M3U URL: paste your URL
- Update on start: on
- Auto-update interval: 24h by default
- Click Save and wait — channels are loaded
Multiple providers
Add multiple playlists — Threadfin combines them. Handy if you have 2 IPTV subscriptions or assemble your own XMLTV.
Xtream Codes instead of M3U?
Convert your Xtream credentials into an M3U URL: http://server.com/get.php?username=USER&password=PASS&type=m3u_plus&output=ts
📅 Step 2 — Adding EPG (XMLTV)
- Tab XMLTV
- Click the "+" button
- Name: e.g. "EPG.best"
- URL: paste the XMLTV URL (see EPG sources)
- Update interval: 12h (plenty)
- Save
Multiple EPG sources
Add multiple XMLTVs — Threadfin merges them automatically. The first loaded source wins in case of a conflict.
🔗 Step 3 — Mapping (channel to EPG)
Crucial: link each channel to an EPG entry, otherwise you get no program guide in Plex/Jellyfin.
Auto mapping
- Tab Mapping
- Select channels
- Click "Set XMLTV" → choose source
- Threadfin tries to match on name/tvg-id
- Status column: ✅ matched or ⚠️ no match
Manually linking a channel to EPG
- Click on the channel
- XMLTV File: choose source
- Channel ID: type the EPG channel id (e.g.
bbcone.uk) - Save
Bulk actions
- Select 20+ channels → "Activate" to make them visible in Plex/Jellyfin
- "Deactivate" — hide trash channels
- "Set channel number" — for traditional channel numbering
- "Change group" — reorganize into categories
⚙️ Step 4 — Settings (the most important)
Buffer mode (CRUCIAL)
Settings → Buffer. Two options:
- FFmpeg — uses FFmpeg to buffer each stream. Recommended. Prevents buffering issues, more reliable.
- Streaming — direct pass-through. Lighter, but problematic with some streams.
For most users: enable FFmpeg mode.
FFmpeg buffer settings
- Buffer Size: 1024 KB (default is fine)
- Buffer Timeout: 1000 ms
- FFmpeg binary path: auto-detect or
/usr/bin/ffmpeg
Streaming — tuner count
Settings → Streaming → Number of tuners. How many channels can stream simultaneously.
- Provider's connection limit: usually 3-5
- Set it to your provider's max
- Lower = safer (you won't get blocked)
- Plex/Jellyfin uses 1 tuner per simultaneous stream + 1 for DVR recording
Connection user-agent
Some providers block the default FFmpeg user-agent. Set a custom one:
Mozilla/5.0 (Linux; Android 10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Mobile Safari/537.36
Or: VLC/3.0.16 LibVLC/3.0.16
🔌 Step 5 — Connecting to Plex / Jellyfin
Plex setup
- Plex → Settings → Live TV & DVR → Set Up Plex DVR
- Plex automatically searches for HDHomeRun on the network → finds Threadfin on port 34400
- Doesn't find it? Click "Don't see your device?" → manually:
http://server-ip:34400 - Select channels → Next
- XMLTV: use Threadfin's XMLTV:
http://server-ip:34400/xmltv/threadfin.xml - Continue → map channels → Done
Jellyfin setup
- Dashboard → Live TV → Add tuner → HDHomeRun
- URL:
http://server-ip:34400 - Save
- Add EPG → XMLTV →
http://server-ip:34400/xmltv/threadfin.xml
🎨 Advanced: filters & channel grouping
Filters
Tab Filter → create rules to automatically show/hide channels:
- Filter:
group-title contains "VOD"→ action: hide - Filter:
name contains "##"→ action: hide (remove placeholders) - Filter:
name contains "4K"→ action: show + group "4K Channels"
Custom channel logos
Replace ugly logo URLs with your own:
- Mapping → channel → Logo URL
- Paste your own URL (e.g. hosted on your NAS)
- Or: use the tv-logo/tv-logos GitHub repo (free HD logos)
🛠 Troubleshooting
"Tuner busy" / "No free tuner"
- Settings → Streaming → increase "Number of tuners"
- Provider's max connections reached — wait until others finish
- FFmpeg crash — restart the Threadfin container
"Stream stops after 30 sec"
- Switch to FFmpeg buffer mode
- Increase buffer size to 2048 KB
- Check disk write speed to /tmp/threadfin
"EPG missing or wrong"
- Mapping not correct — check the Mapping tab "EPG" column
- Timezone not set correctly (TZ env variable)
- The XMLTV source itself is outdated — try another source
"Plex doesn't see Threadfin"
- Plex on a different subnet than Threadfin? Enter the URL manually
- Firewall blocks port 34400
- Threadfin not started — check Docker logs
💾 Backup & restore
The Threadfin config lives in the ./conf volume:
- Backup: copy the entire
conffolder - Important files:
settings.json,data.json,xepg.json - Restore: stop the container, replace the folder, start the container