I recently ran into a strange problem with Jellyfin’s Live TV guide. After Jellyfin crashed, I restarted the server and could access it again, but the guide was a mess. There was no programming information, and channels I’d previously deleted had somehow returned.

I use ErsatzTV to generate my Live TV channels. Jellyfin gets the channel list through an M3U playlist and the schedule through an XMLTV feed. That meant I had a few places to look—and also a few places I could accidentally make things worse if I started resetting everything at once.

I eventually got it working again: the expected channels were back, the old ones were gone, and shows appeared in the right timeslots. I can’t point to one conclusively proven cause for every symptom, though. What I can share is the order of checks that helped me narrow it down.

The short answer

Check what your tuner is sending, check your guide data separately, then investigate what Jellyfin does with them. Don’t start by deleting caches or recreating your Live TV configuration.

For an M3U/XMLTV setup, two different sources are involved:

Channel source M3U playlist Channels and stream addresses
Schedule source XMLTV guide Program listings and times
Import + channel mapping Jellyfin Live TV guide Both sources need to line up
Two feeds, one guide. Valid channels don't automatically mean valid listings, or vice versa.

Jellyfin’s Live TV setup guide documents these as separate tuner and guide-provider inputs. That distinction is the whole reason I wouldn’t treat an empty guide as proof that XMLTV has failed.

1. Check the M3U channel list first

In Jellyfin’s administrator Dashboard, open Live TV and look under Tuner Devices. With an M3U tuner, the configuration points to either a playlist file or a URL.

Before changing that configuration, open or retrieve the playlist independently, if you have access to it. A typical M3U channel entry begins with #EXTINF and may include a tvg-id alongside the channel name.

Here’s what I’d check:

  • Does the source load at all?
  • Does it list the channels you’re expecting?
  • Are the previously deleted channels still in that upstream playlist?
  • Do the channel identifiers look consistent with the guide data?

If a removed channel is still in the playlist, I’d investigate the source before blaming Jellyfin’s guide. If the playlist has already been updated, that doesn’t prove a Jellyfin cache problem; it just tells you where to look next.

During my investigation, the upstream channel list was returning the channels I actually wanted. That was a good reason not to start rebuilding ErsatzTV.

2. Look at the XMLTV data on its own

Jellyfin configures TV Guide Data Providers separately from tuner devices. For XMLTV, the input can be a file or feed containing channel definitions and program entries.

I’d check whether the guide source is accessible, whether it contains program entries, and whether their times cover the period I’m trying to view.

A feed can have a perfectly respectable file size and still lack current listings. Likewise, the presence of <programme> elements doesn’t guarantee Jellyfin has imported or matched them.

At one point in my troubleshooting notes, the source check reported eight channel entries and 1,049 scheduled program entries, while Jellyfin was still reporting zero programs. Those numbers were useful as a snapshot of my setup, not as a rule for how many entries a working guide needs.

That mismatch was the important part. It told me there was data available upstream, so my next question was what happened when Jellyfin tried to use it.

If you test your own feed, keep its URL and any embedded access credentials private. Don’t paste an unredacted playlist, XMLTV address or server log into a public troubleshooting post.

3. Check channel mappings and refresh status

Even with a working playlist and XMLTV source, Jellyfin still needs to associate guide entries with tuner channels. The official mapping instructions describe the Map Channels option under the guide provider.

Check a few channels you recognize and confirm that they’re mapped to the right guide entries. This is particularly relevant after you’ve renamed, removed or reorganized channels.

Jellyfin also offers manual tuner and guide refresh controls. Depending on your installed version, the location or wording may be slightly different. Make a note of what you’re refreshing and let it complete before deciding whether it worked.

Then compare a few known channels against the Live TV guide. Are the expected shows present at the right times? Are the unwanted channels still there?

I wouldn’t keep hammering refresh if the answer is no. That’s usually my cue to get more specific about what the server is failing to do.

4. Read the Jellyfin logs before resetting anything

This was one of the more useful turns in my investigation.

The server logs showed an UnauthorizedAccessException when Jellyfin attempted to write Live TV metadata artwork. That’s a real file-access failure to investigate, even if it isn’t automatically the explanation for every missing program or resurrected channel.

If your sources look right but Jellyfin’s guide still doesn’t, check the logs around the actual restart or refresh. The Jellyfin troubleshooting documentation recommends looking at server logs, and its configuration documentation covers server directories and log locations.

I’d watch for:

  • M3U or XMLTV download/access failures.
  • XML parsing errors, unexpected guide data or failed scheduled tasks.
  • Channel-mapping or tuner refresh errors.
  • Permission-denied errors, particularly for files Jellyfin is trying to write.

The timing matters. An error from another task or another day may be unrelated. And a permissions error deserves a targeted investigation: identify which account runs Jellyfin and which directory is affected before changing permissions.

I deliberately wouldn’t recommend a blanket permissions command or a database reset as a general fix for this kind of problem.

5. What actually worked on my server

So what did I end up doing to get it working again? The last successful change was repairing Windows permissions for Jellyfin’s Live TV metadata, then restarting Jellyfin and refreshing the guide. That makes a lot more sense with the earlier steps included, because it wasn’t the first permissions problem I found.

Here’s the sequence:

  1. I fixed the startup file-access errors first. After the crash, Jellyfin’s logs showed it couldn’t write a configuration file, and its database was reporting read-only access. I backed up the existing folder permissions and gave the Windows account running Jellyfin Modify access to the affected configuration and data folders. That dealt with the startup problem, but the Live TV guide still wasn’t right.
  2. I verified the feeds instead of rebuilding ErsatzTV. The M3U and XMLTV sources were supplying the expected data. My check showed eight channels and 1,049 scheduled programs upstream while Jellyfin still had zero programs in its guide.
  3. I tried setting the old channel cache aside. With Jellyfin stopped, I moved its stored channel-cache folder to a timestamped backup rather than deleting it. The old channels still appeared afterward. That was not the fix, and I wouldn’t recommend doing it just because a guide looks stale.
  4. I followed the Live TV artwork permission error. A later log showed an UnauthorizedAccessException when Jellyfin tried to save a poster image under its Live TV metadata folder. I saved a backup of that folder’s access-control settings, then used Windows’ icacls tool to grant the Jellyfin-running account Modify access to that specific folder and its contents.
  5. I restarted Jellyfin and refreshed the guide again. After that, the deleted channels were gone, the current channels appeared, and the expected shows were back in their timeslots.

That was my working result. The targeted Live TV metadata permission repair, restart, and refresh were the final successful sequence. The earlier configuration and database permissions also needed attention to get the server running properly.

What I still can’t prove: that the Live TV artwork permission error, by itself, caused every stale-channel and missing-guide symptom. Several changes happened during the investigation, so I don’t want to pretend there’s a single confirmed explanation for all of it.

If your logs show a similar access-denied error, check which account Jellyfin runs under and whether it can write to the specific directory named in the error. Back up the existing permissions before making a targeted repair. I’m intentionally not giving a copy-and-paste permissions command: service accounts and server paths differ, and granting access to the wrong place could create a security problem.

Before calling your own issue fixed, compare a few known channels and scheduled shows both before and after the change. If you’re considering database, cache, or configuration changes, make a backup and use instructions appropriate for your Jellyfin version.

Which part should you investigate?

What you’re seeing Where I’d look first
No Live TV channels at all M3U tuner configuration, playlist availability and tuner refresh
Channels are present but show no programs XMLTV feed availability, current entries, mapping and guide-refresh logs
Previously removed channels reappear Whether the current upstream playlist still contains them, then Jellyfin’s tuner state
Program listings are old or stop early XMLTV timestamps, guide coverage and import/refresh results
Feed data looks right, but Jellyfin’s guide doesn’t Logs from the relevant refresh/restart and any permission or import errors

These are starting points, not diagnoses. Similar symptoms can come from different failures.

What I learned

The biggest improvement was treating my Live TV setup as separate pieces instead of one mysterious TV-guide problem.

ErsatzTV had its job: provide channels and schedule data. Jellyfin had another: retrieve, match and display that data. Once I checked those parts independently, I had a much better idea of where to focus.

And when the obvious refresh button didn’t solve it, the logs finally gave me something concrete to investigate.

If this happens again, my first move won’t be to wipe a cache and hope for the best. I’ll check the channel source, check the XMLTV schedule, verify mappings and refreshes, and then look at the errors Jellyfin recorded.

Hopefully that saves someone else a little time the next time their TV guide decides to bring back channels they thought they’d already gotten rid of.