Plex IPTV M3U Guide Data: Fix Missing EPG, Wrong Times, Logos

Short answer: Plex never reads your M3U's guide tags directly. It reads an XMLTV file, and it ties each listing to a channel through one ID. When that ID doesn't match, you get "No information" in the grid. When the offset on the listing times is wrong, the whole guide slides by hours. Nearly every broken Plex IPTV guide is one of those two problems, and both are fixed in the tuner emulator before Plex ever sees the data.

At a glance

Guide data for an M3U source in Plex

Guide format Plex wants XMLTV, by file path or URL
The link that matters M3U tvg-id = XMLTV channel id
Where to fix mapping The emulator first, Plex second
Guide hours off? The +0000 offset on each listing
Logos tvg-logo in the M3U, or icon in XMLTV

How the guide reaches Plex

Plex's Live TV & DVR feature was built for hardware tuners, mainly HDHomeRun boxes. It has no field where you paste an M3U playlist. So an IPTV source reaches Plex through a tuner emulator, a small server such as Threadfin, xTeVe (its unmaintained predecessor) or Dispatcharr that pretends to be an HDHomeRun on your network. If you haven't set that up yet, our Threadfin setup guide covers installation and our Plex and M3U overview explains the whole arrangement.

The guide travels a separate route from the video. In practice there are four hops:

  1. Your provider gives you an M3U playlist and, usually, an XMLTV guide URL.
  2. The emulator loads both, and you match each channel to its listings.
  3. The emulator publishes its own, cleaned XMLTV file, with only the channels you kept.
  4. Plex reads that file during setup and then refreshes it on a schedule.

The important consequence: Plex should be pointed at the emulator's XMLTV, not your provider's original. The emulator renames and renumbers channels, so the original file's IDs won't line up with what Plex sees as channels.

The ID that ties a channel to its listings

An M3U entry for a channel looks something like this:

#EXTINF:-1 tvg-id="bbcnews.uk" tvg-name="BBC News" tvg-logo="https://…/bbcnews.png" group-title="News",BBC News
http://example-provider/stream/1234.ts

And the matching parts of the XMLTV file look like this:

<channel id="bbcnews.uk">
  <display-name>BBC News</display-name>
  <icon src="https://…/bbcnews.png"/>
</channel>
<programme channel="bbcnews.uk" start="20261009180000 +0000" stop="20261009183000 +0000">
  <title>BBC News at Six</title>
</programme>

The match is exact and case-sensitive. bbcnews.uk and BBCNews.uk are different channels as far as software is concerned, and so is a trailing space. Display names aren't used for matching by most tools, which is why a channel can be called exactly the same thing in both files and still show no guide.

Field Lives in What it does for the guide
tvg-id M3U Must equal the XMLTV channel id
tvg-name M3U Fallback for name-based matching in some tools
tvg-logo M3U Channel artwork
channel id XMLTV The key every listing points to
programme channel XMLTV Which channel a listing belongs to
start / stop XMLTV Listing times, with a UTC offset

Some providers leave tvg-id empty on half their channels, or reuse one ID for an HD and an SD version. That's not something Plex can work around. It has to be patched in the emulator. Our tvg-id troubleshooting guide goes deeper into finding the mismatches in a large file.

Map it in the emulator first

In Threadfin, guide matching happens on the Mapping page, after you've added the playlist and the XMLTV file under Settings. The EPG source should be set to XEPG, which is the mode where Threadfin builds its own guide from your mapping rather than passing the provider's file straight through.

Each active channel row has an XMLTV file and an XMLTV channel field. Where tvg-id matched cleanly, these fill themselves. Where they didn't, the row shows no guide source, and you pick the right channel from the list. A few habits save a lot of time:

  • Filter before you map. Mapping 300 channels you'll never watch is wasted work. Cut the playlist down by group first, then map what's left.
  • Use the bulk editor for channels from the same family, such as regional variants that should share one guide source.
  • Park strays as inactive rather than deleting them, so they stay findable if the provider reshuffles.
  • Save, then check the output file. Open the emulator's XMLTV URL in a browser and search for a channel you just mapped. If its programmes are there, Plex will get them.

Dispatcharr and similar tools follow the same idea with different screens: assign an EPG source to each channel, then publish a combined XMLTV feed. Whatever the tool, the rule is that the output file must carry the same channel IDs that the emulator advertises to Plex as tuner channels.

Then point Plex at the XMLTV

When you add the emulator as a tuner under Settings → Live TV & DVR → Set Up Plex DVR, Plex finds the device, then asks for a postcode or region to load its own guide. For an IPTV source, skip that. Below the region field there's a link reading roughly "Have an XMLTV guide on your server? Click here to use that instead." Paste the emulator's XMLTV URL there, for Threadfin something like http://192.168.1.20:34400/xmltv/threadfin.xml.

Use the server's LAN address, not localhost, unless Plex and the emulator run on the same machine and you're certain how Plex resolves it. Mixed Docker setups are where localhost quietly points somewhere else.

Plex then shows a channel list with a guide match for each row. Where the IDs agree, the matches are already right. Where they don't, each row has a drop-down to pick a listing manually. After setup, the same screen is reachable from the DVR's entry in Settings → Live TV & DVR, under the option to edit channel mapping; the exact wording differs a little between server versions.

One thing Plex can't do is merge two guide sources for one tuner. If half your channels come from an antenna and half from IPTV, they're separate tuners with separate guides, or you merge the XMLTV files upstream before Plex reads them.

Fix it by symptom

What you see Usual cause Fix
No guide on any channel Plex pointed at provider's file, or file unreachable Use the emulator's XMLTV URL with a LAN IP; open it in a browser to confirm
"No information" on some channels tvg-id missing or mismatched Assign the XMLTV channel in the emulator's mapping
Right shows on the wrong channel Two channels mapped to one ID, or renumbering after setup Fix the duplicate, then re-check Plex's channel mapping
Guide shifted by whole hours Wrong UTC offset in the listings See the time section below
Guide runs out after a day Short XMLTV window or stale emulator file Schedule the emulator's EPG update; ask the provider about guide length
New channels appear with no guide Provider added channels; mapping not updated Map them, then rescan or refresh in Plex
Plex shows 0 channels Usually not a guide problem: tuner unreachable or nothing active Check the emulator's device address and that channels are active

If the grid is empty in other apps too, the fault is upstream of Plex. Our EPG not loading guide works through that case.

When the guide is hours off

Every XMLTV listing carries its own time and offset: 20261009180000 +0000 means 18:00 UTC. Plex converts that to your server's time zone. The guide ends up wrong when the offset in the file is wrong, typically a provider writing local times but labelling them +0000.

Measure before changing anything. Pick a programme with a fixed, known start, such as a news bulletin on the hour, and compare it with the guide. If the error is a whole number of hours and the same on every channel from that source, it's an offset problem. If it's 30 or 60 minutes on only some days, it's more likely daylight saving handled badly at the source.

Fix it in one place only. Many emulators and EPG tools have a time-shift setting per XMLTV source. Apply the correction there, so Plex receives correct times, and don't also adjust the server clock or the Plex time zone. Correcting the same error twice is the classic way to end up with a guide that's right for half the year. Also confirm the Plex server host itself has the right time zone; a Docker container left on UTC is a common culprit. Our EPG timezone guide has the step-by-step version of this.

Logos that won't show

Plex takes channel artwork from the guide data it's given. Threadfin passes along the tvg-logo from the playlist, or the icon from the XMLTV channel, and its mapping screen lets you paste a different logo URL per channel.

  • Broken links are the usual cause. Open the logo URL in a browser; if it fails there, it fails in Plex.
  • Plex caches artwork. After changing a logo, refresh the guide and give clients time, or clear the app's cache on a stubborn TV.
  • Odd shapes such as very wide banners can look cropped. A square or near-square PNG on a transparent background tends to display best.

Keeping the guide filled

A guide needs feeding. Two schedules matter: how often the emulator re-downloads the provider's XMLTV, and how often Plex re-reads the emulator's file. Set the emulator to update daily, at a quiet hour, after the provider usually publishes. Plex refreshes guide data on its own schedule, and there's a manual refresh option on the DVR's settings page when you've just fixed a mapping and don't want to wait.

Keep the channel list lean as well. Plex's guide gets slow with very large lineups, and a widely reported cap of around 480 channels per tuner means extras never appear at all. Fewer channels also means a smaller XMLTV file and a faster refresh.

Where the data comes from matters too. A lawful provider that gives you a playlist for third-party players normally supplies its own XMLTV. Antenna channels from an HDHomeRun use Plex's own guide in supported countries, with no XMLTV work at all. And public free channels from broadcasters or ad-supported services often come with guide files from the same source. Grabbing guide data from random shared files is how mismatched IDs start.

Quick answers

Does Plex read EPG data from the M3U file? No. Plex reads an XMLTV guide file or URL. The M3U's tvg-id tag is only used to match each channel to its entry in that XMLTV.

Why do some channels say "No information" in Plex? Their tvg-id doesn't match any channel id in the XMLTV file, or the emulator hasn't assigned them a guide source. Map them in the emulator, then check Plex's channel mapping.

Which XMLTV URL should I give Plex? The tuner emulator's own XMLTV output, not the provider's original file, because the emulator renames and renumbers channels.

Why is my Plex IPTV guide a few hours off? The listings carry the wrong UTC offset, or the server's time zone is wrong. Measure the error against a known programme, then correct it once at the source.

How do I change channel logos in Plex Live TV? Change tvg-logo in the playlist or the logo field in the emulator's mapping, then refresh the guide in Plex. Plex caches artwork, so changes can take a while to appear.

Can I combine antenna and IPTV guides in Plex? Not on one tuner. Each tuner has its own guide source, so either keep them as separate tuners or merge the XMLTV files before Plex reads them.

How often does Plex update the guide? Plex refreshes on its own schedule, and the DVR settings page has a manual refresh. Set the emulator to update its source daily so Plex always has fresh data to read.


Plex menu wording, Threadfin's screens and providers' guide formats all change between versions. The 480-channel figure is widely reported by users rather than published by Plex, so treat it as a guide. Checked October 2026.