[RELEASE] Playlist Manager for Channels [Streaming Library Manager Extension]

Please forgive me if the answer to this question is in here somewhere but I'll blame it on old eyes. Did you ever figure this out? This happening to me but not with PlutoTV.

Please forgive being a very basic user.

I was having a problem with an EPG from a PLM source in channels and went into PLM to try to diagnose. For most menu items under "Linear", I'm getting an internal server error page. Only Stream Stations, Parent Stations, and More Parents work, all others give the error page. I'm also getting the error if I try to run either of the PLM automations.

I'm using SLM on Windows and have the latest release installed. I've tried stopping and restarting the service, running upgrade from terminal and rebooting the machine, without sucess.

The log for clicking on Final Playlists is....

[error | 2026-04-23 14:41:41,001] - Exception on /playlists [GET]
Traceback (most recent call last):
  File "flask\app.py", line 1511, in wsgi_app
  File "flask\app.py", line 919, in full_dispatch_request
  File "flask\app.py", line 917, in full_dispatch_request
  File "flask\app.py", line 902, in dispatch_request
  File "slm.py", line 6544, in webpage_playlists
  File "slm.py", line 9214, in get_child_to_parents
  File "slm.py", line 9214, in <dictcomp>
KeyError: 'm3u_id'
2026-04-23 14:41:41.006842:  ERROR: Webpage responded... 500 INTERNAL SERVER ERROR
    Client IP: 192.168.4.55
    Method: GET
    URL: http://192.168.4.55:5000/playlists
    Headers: 
        Host: 192.168.4.55:5000
        Connection: keep-alive
        Upgrade-Insecure-Requests: 1
        User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
        Referer: http://192.168.4.55:5000/logs
        Accept-Encoding: gzip, deflate
        Accept-Language: en-GB,en;q=0.9,en-US;q=0.8
    User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36 Edg/147.0.0.0
    Args: ImmutableMultiDict([])
    Data: No data
[info | 2026-04-23 14:41:41,010] - 192.168.4.55 - - [23/Apr/2026 14:41:41] "e[35me[1mGET /playlists HTTP/1.1e[0m" 500 -

Thanks in advance for any help or advice.

I'm wondering if you are having a port conflict at 5000, especially if you have Zoom installed. I ran into this a while back where Zoom has decided to take over port 5000 for some reason and I couldn't manage to get rid of it, so had to change my development port. It might not be Zoom, it could be some other program, but my best recommendation would be to change the port and see if that resolves things.

2 Likes

That would probably do it.

@nigellee22 check to see if port 5000 is being used. If you're using docker then, its a bit easy

docker ps | grep 5000

1 Like

Thanks both. I don't have Zoom and the only process I can see on Port 5000 in Windows Resource Monitor under Listening Ports is slm.exe. But I'll still try changing the port and see if that helps.

So, I changed the port to 4000 (nothing using that port previously) and still had the same error. The log was exactly the same as above, but obviously the port was 4000.

I decided to uninstall and do a fresh install following the instructions here...

[RELEASE] Stream Link/File Manager for Channels [Streaming Library Manager Extension] - #554 by babsonnexus

Interestingly, on a clean install, I can access all areas without error, but obviously I've lost everything I've previously set up. When I replace the "clean" program_files folder with my saved copy, I'm back to the same errors. So it seems somewhere in the program_files folder there is something causing an issue.

Are there any specific files I can replace from my saved copy, without replacing the entire folder, that will keep my set up?

Thanks @babsonnexus and @Jean0987654321 . As above, I failed with the port change and the fresh install with restoring my original program_files folder, but I have now resolved the problem.

After a bit of trial and error, logic suggested there was some issue in the playlists, so I did another fresh install, copied just the StreamLinkManager files back, which restored previous efforts on that, and just the PlaylistManager_StreamingStations file, which restored that. That just left me to start from scratch on the Manage Playlists. Thankfully my set up is pretty basic, so it wasn't too much effort. All good now.

Do you still have your original files? I'd be interested to see what the difference is between them and your fixed ones. For instance, is one of them (especially PlaylistManager_Combinedm3us.csv missing its header row or have some character in one of the more recent bottom rows that is not liked? If you do find something, please let me know; and also if you can remember what you were doing right before the issues above started. If there is some type of bug that can be triggered, even by unlikely actions, I'd like to snuff it out in a future version.

Yes, I still had the old PlaylistManager_Combinedm3us.csv file, and you are spot on, it's missing the column headers. The date modified metadata for that file was 16/04/2026 at 02:00, so I suspect this was an scheduled automation, I certainly wasn't tinkering at that time on a Thursday morning! I can't be fully sure what automation used to run at 02:00 but I suspect it was Playlist Manager: Update Station List because that is the default on my clean install.

Thanks again for your help and all the work you put in on this.

1 Like

Hmmmm... that wouldn't be doing anything special that should cause that, and there are even protections that shouldn't let your stations get deleted if there was a connection problem or something to the source playlist(s). If you recall anything that you may have done the day prior, like removing your source playlists or adding a new one, let me know so I can investigate further.

The only thing that happened, but a least a few days before the 16th, was I noticed a problem in channels, then I couldn't access SLM through my bookmark at all. I found this was because I changed my mesh network earlier in the year, but I forgot to reserve the IP for the mini PC I run channels and SLM on. There must have been an update on the router and it issued a new IP on reboot. I had to change the IP for my SLM m3u and xlm files in channels. But, other than the bookmark, I don't recall having to change anything in SLM/PLM because the only playlists in linear stations reference "localhost" or ".local", or are web addresses or deeplinks.
It could have been a change I made in SLM/PLM that I can't recall relating to this, or just as a result of this change causing some confusion, but I remember checking end to end that everything worked, and it was fine. It seems like whatever happened, it was finally triggered by a subsequent automation process.
It all been fine since the new install, so no problem here, but if it helps in anyway, that's great.

Are you still seeing this as true? I'm doing some testing and I am getting the exact opposite result:

2026/07/19 16:27:41.009633 [ERR] Error during stream M3U-PLMGracenoteFallbackMPEGTS01 ch1037 AMC: Detected HLS playlist instead of MPEG-TS

In other words, I could not play a HLS stream in a MPEG-TS playlist in Channels; the backend stopped me from doing so.

Maybe the "feature" was discovered and removed in one of the recent updates.

We fixed the glitch! :wink:

1 Like

I'm actually starting to think its only in very specific circumstance that it doesn't work, and I was unlucky enough to find one. Most of the time, HLS does pass through in a MPEG-TS custom channels souce. I've been chasing a ghost for days, but I actually think it's fairly limited in which situations this is true.


EDIT: Here's some logs showing a MPEG-TS source successfully playing a HLS Stream (with a warning):

2026/07/23 17:10:49.493297 [TNR] Opened connection to M3U-PLMNonGracenoteFallbackMPEGTS01 for ch1915 Star Trek: The Next Generation
2026/07/23 17:10:49.497496 [HLS] Starting live stream for channel 1915 from 172.22.0.1 (bitrate=3321kbps)
2026/07/23 17:10:54.854717 [HLS] ffmpeg: ch1915-dANY-ip172.22.0.1-remux:  [mpegts @ 0xbeb3cc0] Stream 2, codec webvtt, is muxed as a private data stream and may not be recognized upon reading.

Have a problematic link which is causing a 500 on updating:

2026-07-28 06:38:27.370643:  Creating and removing Stream Link/File files and directories...
2026-07-28 06:38:27.420362:  INFO: Creating Stream Link/File file(s) for 1923 (2022) | SHOW ...
    Error with original path: [Errno 2] No such file or directory: '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01/S01E01.strmlnk'
[error | 2026-07-28 06:38:27,421] - Exception on /tools_automation [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app

This happened after I:

  1. deleted the episode in channels
  2. reordered provider order
  3. ran automation to pick up the provider change

I've even deleted the series in slm, and then also tried re-adding after the crash too - no luck. An way to clear this out?

I'm having great difficulty getting an exact replication of what you're seeing. For future reference, more of the of the log is necessary to know where the issue is happening, especially something like this:

  File "c:\Users\...\OneDrive\04 Media\Channels Backups\~Programs\Developement\Stream Link Manager\slm_web\slm.py", line 17251, in create_file
    with open(file_path, 'w', encoding="utf-8") as file:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: '\\\\nexus-world-x\\Files\\Media\\Channels DVR 8090\\recordings\\Imports\\TV\\slm\\1923 (2022)\\Season 01\\S01E01.strmlnk'
2026-07-28 10:12:46.803634:  ERROR: Webpage responded... 500 INTERNAL SERVER ERROR

Or this:

  File "c:\Users\...\OneDrive\04 Media\Channels Backups\~Programs\Developement\Stream Link Manager\slm_web\slm.py", line 17149, in normalize_path
    return unicodedata.normalize('NFKC', path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: normalize() argument 2 must be str, not None
2026-07-28 10:39:57.397810:  ERROR: Webpage responded... 500 INTERNAL SERVER ERROR

Based on what I have been able to do by forcing a lot of things manually, for you, it appears that either the Stream Link file or some parent directory it is in has become read-only or has had permissions removed. I'm assuming this is occurring on the Channels server side. If you make the files/directories writable/permission granted again, it should clear up.

If you can get more of the logs and let me know if modifying access in the some way fixed things, I can see if there is anything I can do in SLM to mitigate.

As of v2026.07.28.1543, this is no longer true! You now have the ability to create "Fallback" feed(s) that do know if a stream/tuner is unavailable/broken and then move on to the next source. Read all about it on the Wiki:

This resolves one of my biggest qualms with Channels in that now you only need one version of a station in your listings and PLM will handle figuring one which one is working and play that. In other words, if, say, the Channels TVE source for HGTV fails during the middle of the day, then it can fallback to ADBTuner. And if ADBTuner's tuners are all filled, it can fallback to PrismCast. There is no limit to the number of source playlists you can use, how many times you want to retry, and how long that link remains "valid" for.

I'm so excited for you to get to use this feature and, as always, simply enjoy!

This better? Let me know

2026-07-29 05:43:15.401656:  INFO: Creating Stream Link/File file(s) for 1883 (2021) | SHOW ...
    Error with original path: [Errno 2] No such file or directory: '/app/channels_folder/Imports/TV/slm/1883 (2021)/Season 01/S01E01.strmlnk'
[error | 2026-07-29 05:43:15,407] - Exception on /tools_automation [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 919, in full_dispatch_request
    rv = self.handle_user_exception(e)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
         ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/slm.py", line 13523, in webpage_tools_automation
    generate_stream_links(None)
  File "/app/slm.py", line 14841, in generate_stream_links
    create_stream_link_files(bookmarks, True, original_release_date_list)
  File "/app/slm.py", line 15542, in create_stream_link_files
    file_path_return = normalize_path(file_path_return)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/slm.py", line 17149, in normalize_path
    return unicodedata.normalize('NFKC', path)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: normalize() argument 2 must be str, not None
2026-07-29 05:43:15.410077:  ERROR: Webpage responded... 500 INTERNAL SERVER ERROR

Well, @hancox , you are doing better than I am. My SLM won't even allow the UI after the update! I've had to go back to an earlier version to be functional. Arrrgggghhhh....

Yes, narrowed down some possibilities. Please go ahead and upgrade to prerelease v2026.07.29.1123, try again, and report back. With that version, you should no longer get 500 crashes in the UX and all processes will complete, not locking out the Manage Programs page. However, errors may still be happening, and additional debugging information will be in the logs. You may see something like one of these:

2026-07-29 11:34:41.122998:  INFO: Creating Stream Link/File file(s) for 1923 (2022) | SHOW ...
    OS/Permission Error while creating '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01/1923 (2022) - S01E01.strmlnk': [Errno 13] Permission denied: '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01/1923 (2022) - S01E01.strmlnk'
2026-07-29 11:35:33.917706:  WARNING: Unable to find path '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01' and therefore unable to create Stream Link/File file '1923 (2022) - S01E01'. Retrying...
2026-07-29 11:35:34.922217:  WARNING: Unable to find path '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01' and therefore unable to create Stream Link/File file '1923 (2022) - S01E01'. Retrying...
2026-07-29 11:35:35.927108:  WARNING: Unable to find path '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01' and therefore unable to create Stream Link/File file '1923 (2022) - S01E01'. Retrying...
2026-07-29 11:35:36.929715:  ERROR: After 3 attempts, still unable to find path '/app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01' and therefore unable to create Stream Link/File file '1923 (2022) - S01E01'.
2026-07-29 11:35:36.930363:  ERROR: Skipping creation of 1923 (2022) - S01E01 in /app/channels_folder/Imports/TV/slm/1923 (2022)/Season 01. Please make sure SLM has all the necessary security permissions and write access in the host directory.

My intuition is telling me we are dealing with either a timing or permission issue. What is your Channels DVR host machine on, and what is its relationship to the SLM Container?


Nothing in the update should impact SLM launching the UX. Please provide log information, even if it's just from Docker Desktop's log view. Need to know if its getting stuck during one of the startup routines/checks.