Short answer: Plex can't take an M3U link itself, so on a NAS or home server the usual way to add one is to run Threadfin in a Docker container next to Plex. Threadfin loads the playlist and guide, then shows up on your network as an HDHomeRun tuner that Plex adds under Live TV & DVR. On a Synology that means Container Manager, on Unraid it's a Community Apps template, and on a Raspberry Pi it's the same image on 64-bit Raspberry Pi OS. The part that trips people up is networking: in Docker's default bridge mode Plex usually can't discover Threadfin on its own, so you either use host networking or type the NAS's LAN address and port 34400 into Plex by hand.
At a glance
M3U to Plex on a NAS
| Container image | fyb3roptik/threadfin |
| Port | 34400 (web, tuner, playlist and guide) |
| Keep settings in | A volume mapped to /home/threadfin/conf |
| In Plex, enter | NAS-IP:34400, never "localhost" |
| Avoid | Telly images; they haven't been updated in years |
Decide where each piece runs
Three things are involved: the Plex server, Threadfin, and whatever stores your recordings. They don't have to live together, and on small hardware they shouldn't.
| Your hardware | Threadfin | Plex server |
|---|---|---|
| Synology with an Intel CPU (e.g. DS224+, DS423+) | On the NAS | On the NAS, with hardware transcoding |
| Synology with an ARM or AMD Ryzen CPU | On the NAS | Consider a PC or mini PC instead |
| Unraid server | Docker app | Docker app, with GPU or iGPU passed through |
| Raspberry Pi 4 or 5 | Fine | Weak for live TV; put Plex elsewhere |
| Mini PC (Intel N100 class) | Fine | Good, Quick Sync handles several live streams |
The reason for the Plex column: Plex's support pages say live TV requires the server to transcode, and warn that some NAS devices can't. Threadfin itself is light; it filters text files and relays streams. Plex is the part that needs muscle.
Whatever you choose, you also need a playlist you're entitled to use: one your licensed provider issues, public broadcaster streams, or your own encoder. A NAS doesn't change what's legal to stream. And if you'll record, you need a Plex Pass; Plex says live viewing alone through a tuner is free.
Synology: Container Manager
On DSM 7.2 and later, Docker is called Container Manager and installs from Package Center. The "Project" feature takes a compose file, which is the tidiest way to do this.
- In File Station, create a folder such as
docker/threadfin/conf. - Open Container Manager → Project → Create. Name it "threadfin", set the path to
docker/threadfin, and choose to create a compose file. - Paste a compose file like this:
services:
threadfin:
image: fyb3roptik/threadfin:latest
container_name: threadfin
network_mode: host
environment:
- TZ=America/New_York
volumes:
- ./conf:/home/threadfin/conf
restart: unless-stopped
- Finish the wizard and let it pull the image. Then open
http://[NAS-IP]:34400/web/.
Host networking is used here so Plex can discover Threadfin automatically; the networking section explains the trade-off. Set TZ to your own time zone. It affects how guide times are written, and a wrong zone is a common cause of a guide that's exactly a few hours off.
If DSM's firewall is on, allow TCP 34400 from your local network under Control Panel → Security → Firewall.
Unraid: Community Apps
Unraid has the easiest path. With the Community Applications plugin installed, open the Apps tab and search "Threadfin". Templates fill in the image, port and config path for you.
- Pick the template and check the Network Type. "Host" gives automatic discovery; "Bridge" works with a manual IP in Plex.
- Confirm the config path points into
appdata, for example/mnt/user/appdata/threadfin, so it's included in your appdata backups. - Apply, then open the WebUI from the container's icon menu.
If Plex also runs as a Docker app on the same Unraid box, give both containers the same network setting, or use the server's LAN IP when connecting them. Inside a container, "localhost" means the container itself, not the server.
Raspberry Pi
Threadfin's Docker image is published for 64-bit ARM as well as x86 (check the image's tags page if a pull fails), so a Raspberry Pi 4 or 5 running 64-bit Raspberry Pi OS can use the same compose file as above after installing Docker. It's a good home for Threadfin: low power, always on, and unaffected by your main PC rebooting.
Running Plex on the same Pi for live TV is another matter. Live TV is transcoded on the server, and a Pi has no hardware transcoding that Plex uses for this, so one HD stream can be its limit and MPEG-2 channels can be too much. The better split is Threadfin on the Pi and Plex on a PC, mini PC or capable NAS, connected by IP.
Use a decent SSD or high-endurance card for the Pi's system drive. Threadfin rewrites its cache and guide files regularly, and cheap microSD cards wear out.
Networking: bridge, host and discovery
Real HDHomeRun tuners announce themselves on the local network, and Plex listens for that. Docker's default bridge network sits behind its own small NAT, so those announcements often never reach Plex.
| Mode | Plex finds it automatically? | Notes |
|---|---|---|
| Host | Usually | Container uses the NAS's own address; watch for port clashes |
| Bridge with "34400:34400" | Often not | Works fine with a manual address in Plex |
| Macvlan (own IP) | Yes, from other devices | The NAS itself can't reach the container without extra setup |
Bridge mode with a manual IP is perfectly reliable and is what many people end up using. Discovery is a convenience, not a requirement.
Whichever mode you choose, give the NAS a fixed address, either set on the NAS or reserved in your router. Plex stores the tuner by IP, and a changed address after a power cut shows up as a dead tuner.
Connecting Plex
First finish Threadfin's own setup in its web page: tuner count matching your plan's stream limit, XEPG as the guide source, your M3U and XMLTV, then filter and activate the channels you want. Our Threadfin setup guide covers each of those screens.
Then, in Plex Web:
- Settings → your server → Live TV & DVR, and start the tuner setup (the button has read "Set Up Plex DVR", and some recent versions say "Set Up Plex Tuner").
- If Threadfin isn't listed, enter it manually as
[NAS-IP]:34400. - For the guide, choose the XMLTV option and enter
http://[NAS-IP]:34400/xmltv/threadfin.xml. Plex needs the uncompressed file. - Check the channel list and finish.
If Plex runs on the same NAS in its own container, the same addresses apply. Don't use localhost or 127.0.0.1 unless both containers share the host network. For the wider picture of playlists in Plex, see Plex and M3U.
Keeping it always on
A NAS setup is meant to run untouched for months. A short checklist gets it there:
-
Restart policy
unless-stopped, so Threadfin returns after updates and power cuts. - Start order. If Plex starts before Threadfin after a reboot, it may mark the tuner offline. A rescan in Live TV & DVR fixes it; on Unraid, put Threadfin above Plex in the container start order.
- Updates. Pull a new image every month or two. Settings survive because they live in the mapped config folder.
- Backups. Copy the config folder somewhere else. Rebuilding channel mappings by hand is the slow part of any rebuild.
- Disk sleep. If recordings go to the NAS, make sure drive hibernation doesn't cut in at the start of a recording.
- Wired connection for the NAS and, ideally, the TVs. Wi-Fi is where most "Plex live TV keeps buffering" reports begin.
When it doesn't work
| Symptom | Likely cause on a NAS | Fix |
|---|---|---|
| Web page won't open | Port not mapped or firewall | Check 34400 mapping and NAS firewall |
| Plex can't add the device | "localhost" used, or wrong IP | Use the NAS LAN IP and port |
| Settings lost after update | No config volume | Map /home/threadfin/conf to a NAS folder |
| Guide hours off | Container time zone | Set TZ, restart, refresh the Plex guide |
| Plays briefly, then stops | Plex can't transcode fast enough | Check the Plex Dashboard; move Plex to stronger hardware |
| "Max connections" from the source | Tuner count higher than your plan | Lower it to your plan's limit |
For guides that are consistently a few hours wrong, our EPG timezone guide shows how to measure the offset, and our max connections guide explains the last row.
Quick answers
Can I add an M3U to Plex on a Synology NAS? Yes, by running Threadfin in Container Manager and adding it to Plex as a tuner. Plex itself has no M3U field.
Which Docker image should I use? fyb3roptik/threadfin, the maintained Threadfin image. Telly images haven't been updated in years.
Do I need host networking? Only for automatic discovery. In bridge mode, enter the NAS's IP and port 34400 in Plex manually.
Can a Raspberry Pi run this? Threadfin runs well on a Pi 4 or 5. Plex live TV on the same Pi is weak because live TV is transcoded on the server.
Why can't Plex in Docker reach Threadfin at localhost? Inside a container, localhost is the container itself. Use the NAS's LAN address.
Where are Threadfin's settings stored? In /home/threadfin/conf inside the container. Map it to a NAS folder so updates don't wipe them.
Why is my guide a few hours off? Usually the container's time zone. Set the TZ variable and refresh the guide in Plex.
Synology, Unraid and Plex rename menus between versions, and Docker image tags change. Plex hardware transcoding support depends on your NAS model's CPU. Use only playlists you're licensed to watch. Checked October 2026.