In Channels DVR, users have the ability to add "Stream Links" and "Stream Files" as local content. They can also integrate additional custom stations by integrating streaming m3u playlists. While these tools are powerful, they have limitations that often require a fair bit of maintenance. But what if we could make the whole process a little... easier?
NOTE: Some of the visuals seen in the videos and in the screen shots below may be out of date as updates to format and functionality have been applied to the program.
Stream Links/Files appear as normal Movies, TV Shows, and Videos next to recorded and other content. While Stream Files act like regular local media and directly play in the Channels app or admin web page, Stream Links do not. Instead, clicking on one of these launches the appropriate app or web page and plays the content there. In order to do either, the process consists of creating .strmlnk
or .strm
files, putting them in the appropriate location, and running updates in the Channels DVR admin interface to get the content to appear. As can be imagined, the activity around creation and maintenance is incredibly manual and cumbersome.
Enter Stream Link/Files Manager!
SLM is a background service that sets up a web-based graphical user interface (GUI) for interaction. In the GUI, users can search for any Movie or TV Show and bookmark it. If it cannot be found, manual additions are allowed. Assuming a program is found, for "Stream Links", the software will parse through a user-derived list of Streaming Services (i.e., Disney+, Hulu, Netflix, Hoopla, Kanopy, etc...) in priority order—including setting a preferred service for a particular Movie or Episode as an overarching setting—in order to determine the appropriate link. There is also the ability to input user-derived links, especially when dealing with "Stream Files". After this, the necessary folders and files will be created, along with completing all other administrative tasks. Should a bookmark move from one Streaming Service to another or the user does a manual adjustment, SLM will automatically update everywhere that is required. But this is just the beginning of its capabilities! To learn more, watch the video here:
There are a lot of fantastic methods for integrating custom stations into Channels DVR, especially from FAST and similar providers like Pluto, Plex, Tubi, Samsung TV+, ESPN+, NFL+, and plenty more! The problem is, they require a fair bit of maintenance. For instance, there are whole threads and tools dedicated just to keeping track of which stations have been added and removed. And that doesn't even get into the redundancy of when each of these services have the same stations, but you have to decide which one you want to put in your Channel Collection before it inevitably disappears without you knowing it and not realizing you need to put a replacement in its spot.
Enter Playlist Manager, a custom add-on for Stream Link (+Files +Playlists) Manager for Channels!
From a high-level perspective, PLM works on the same premise as SLM. The idea is that there is some piece of content that can come from multiple sources that you have legal access to and it will "assign" which one to use based upon a priority that you set. With SLM, it takes a movie or an episode of a TV show and parses through all the streaming services you have set, sees if it is there, and assigns the appropriate Stream Link. Similarly, with PLM, it takes a "parent" station that you define and parses through all the playlists that you have set, sees if there is a matching "child" station, and assigns the appropriate info to m3u and EPG files that can be integrated into Channels DVR or any other similar tool. Still, this is just the beginning of its capabilities!
To see a short demonstration, watch the video here:
Image (edited) courtesy of SpaceX, CC0, via Wikimedia Commons.
There are several methods to install Stream Link (+Files + Playlists) Manager for Channels and only one should be followed. While Docker is the preferred route for those who have it as it is the most controlled path, if you are not comfortable with Docker or are having issues, you can do a straight self-deployment in Windows or Linux, or use Python in any OS type. For those unfamiliar with Docker, you can easily install Docker Desktop as a stand-alone application. If you are installing Docker in Windows, please set up Windows Subsystem for Linux (WSL) first by following these directions. Channels DVR users who have deployed OliveTin for Channels and/or Project One-Click can use those, as well, to simplify the process. Just follow one of these paths throughout the entire installation, doing the step-by-step actions exactly as described.
You can also follow along in the video here:
- 00:00:00 Introduction
- 00:02:14 Docker Info
- 00:03:19 Portainer Info
- 00:04:53 Installation
- 00:10:16 Installation Verification
- 00:12:36 First Time Launch
- 00:15:02 Settings - Channels URL
- 00:16:43 Settings - Channels Folder
- 00:18:35 Settings - Search Defaults and Streaming Services
- 00:20:50 Manage Streaming Services
- 00:27:07 Settings - Prune
- 00:28:34 Settings - More for Later
- 00:28:51 Streaming Services, Files, Notifications, and Logs
- 00:35:40 Add Program - Search
- 00:43:27 Add Program - Manual
- 00:48:22 Modify Programs
- 00:53:07 Run Process - Overview and Generate Stream Links
- 00:55:35 Stream Link Files
- 00:59:14 Run Process - Import Updates from Channels and Modify Episodes
- 01:02:11 Delete Episodes and Run Process - Get New Episodes
- 01:04:47 Update Media in Channels
- 01:06:08 Settings - Scheduler
- 01:08:56 Final Thoughts
As a general note, it does not matter "where" Stream Link (+Files +Playlists) Manager for Channels is installed; it could even be placed in the Channels DVR directory. The only requirements are that it must be on a machine and in a location that has directory access to the Channels DVR directory and be able to see the Channels DVR Administrative webpage.
If you are not using OliveTin/Project One-Click, it is recommended to install via Stack using Portainer (Docker Desktop | Docker Standalone). Otherwise, you can use the single command line method as shown below.
services:
slm:
image: ghcr.io/babsonnexus/stream-link-manager-for-channels:${TAG:-latest}
container_name: slm
ports:
- "${SLM_PORT:-5000}:5000"
volumes:
- ${SLM_HOST_FOLDER:-slm_files}:/app/program_files
- ${CHANNELS_FOLDER}:/app/channels_folder
environment:
- TZ=${TIMEZONE:-UTC}
restart: unless-stopped
volumes:
slm_files:
Environment variables are included, some required, some optional.
-
TAG | OPTIONAL | Which version of the program you want. The default is "latest" if you do not add.
-
SLM_PORT | OPTIONAL | The port you want to access the program from in the web browser. The default is "5000" if you do not add.
-
CHANNELS_FOLDER | REQUIRED | The path to your Channels DVR parent directory (see details in Startup below), i.e.,
/usr/lib/channels-dvr
. You could optionally put in any parent path, so long as the Channels DVR path is accessible somewhere inside. Note that spaces are fine and you do not have to enclose the path in quotes. In Windows, your slashes should go the opposite of the normal way, i.e.,C:/Files/Media/Channels DVR
. In MacOS, be sure to include your/Volumes
first, i.e.,/Volumes/external-hdd/Channels DVR
. Be careful not to put extra characters as your system may then create that directory anyway. In other words, there will be no error as the directory exists, but it is not set to where you want it to be. -
SLM_HOST_FOLDER | OPTIONAL | The path on your local host machine where you would like the program files for Stream Link (+Files +Playlists) Manager for Channels to reside. As will be discussed in more detail later, these are the files that the application uses to manage the entire solution. The software itself can be replaced at any time, but these files have all of your settings, bookmarks, etc.... As such, you may desire to have them available on your local machine that is hosting Docker in order to back them up. If you do not add this, it will be set to
slm_files
inside theVolumes
area of Docker Desktop itself. -
TIMEZONE | OPTIONAL | The timezone you want to use. To know what to input, go here, find your timezone, make sure it is a "Canonical" Type, and use the "TZ identifier". The default is "UTC" if you do not add. Please keep this in mind when using the scheduler function.
Follow the directions above for SLM_PORT in place of [YOUR_PORT_HERE]
(except now it is REQUIRED), CHANNELS_FOLDER in place of [PATH_TO_CHANNELS_FOLDER]
, SLM_HOST_FOLDER in place of [PATH_TO_HOST_SLM_FOLDER]
(except now it is required, too, but you can put in the default value of slm_files
), and TIMEZONE in place of [TIMEZONE]
. Do not leave the [
and ]
when putting in your values.
docker run -d --restart=unless-stopped --name slm -p [YOUR_PORT_HERE]:5000 -v [PATH_TO_HOST_SLM_FOLDER]:/app/program_files -v "[PATH_TO_CHANNELS_FOLDER]":/app/channels_folder -e TZ="[TIMEZONE]" ghcr.io/babsonnexus/stream-link-manager-for-channels:latest
docker run -d --restart=unless-stopped --name slm --network=host -e SLM_PORT=[YOUR_PORT_HERE] -v [PATH_TO_HOST_SLM_FOLDER]:/app/program_files -v "[PATH_TO_CHANNELS_FOLDER]":/app/channels_folder -e TZ="[TIMEZONE]" ghcr.io/babsonnexus/stream-link-manager-for-channels:latest
docker run -d --restart=unless-stopped --name slm -p 7900:5000 -v "C:/Temp/SLM Host Test":/app/program_files -v "C:/Files/Media/Channels DVR":/app/channels_folder -e TZ="America/New_York" ghcr.io/babsonnexus/stream-link-manager-for-channels:latest
docker run -d --restart=unless-stopped --name slm --network=host -e SLM_PORT=7900 -v slm_files:/app/program_files -v "/somewhere/channels_dvr":/app/channels_folder -e TZ="America/New_York" ghcr.io/babsonnexus/stream-link-manager-for-channels:latest
- Download the slm.bat file and place it in the final destination folder.
- Open a
Command Prompt
, navigate to that directory, and enter the following command:
slm.bat install
If using PowerShell, type in:
.\slm.bat install
- You will be given one last chance to decide if you want to do the installation. Note that an installation will remove any previous instance of Stream Link (+Files +Playlists) Manager for Channels at that location. This is unlike the "upgrade" below which will maintain all your files and settings.
- The process will then run normally until complete. You should see something similar to this when done:
- In your folder, you should now have this:
- OPTIONAL: By default, Stream Link (+Files +Playlists) Manager for Channels runs on port 5000. You can change this to another port by typing in this command:
slm.bat port
If using PowerShell, type in:
.\slm.bat port
Note that this will also open the port in the Windows firewall as a safety measure. Even if you want the default port of 5000, this is recommended to be run if you want to access the program on another machine.
- You will be prompted to enter a port number of your choice:
During the process, you may receive a popup asking for permission to run. Accept and continue.
- Once complete, you can see this port as an environment variable (where it can be removed, if necessary).
Additionally, in the Windows Firewall rules:
- Follow the directions on the screen of closing the current
Command Prompt
and opening a new one. In the newCommand Prompt
, you can confirm that that the port variable is being read correctly by typing:
echo %SLM_PORT%
If using PowerShell, type in:
$env:SLM_PORT
- You should see something similar to this:
- With all this in place, you are now safe to start the program!
- Download the slm.sh file and place it in the final destination folder.
You can also do so by opening a terminal, navigating to that directory, and entering the following command:
wget -q -O "slm.sh" 'https://raw.githubusercontent.com/babsonnexus/stream-link-manager-for-channels/main/executables/slm.sh'
- Either way, once there, change the security level on the
slm.sh
file:
chmod +x "slm.sh"
- Execute the installation with this command:
./slm.sh install
- You will be given one last chance to decide if you want to do the installation. Note that an installation will remove any previous instance of Stream Link (+Files +Playlists) Manager for Channels at that location. This is unlike the "upgrade" below which will maintain all your files and settings.
- The process will then run normally until complete. You should see something similar to this when done:
... a whole lot of lines related to installing requirements and building the executable...
- In your folder, you should now have this:
- OPTIONAL: By default, Stream Link (+Files +Playlists) Manager for Channels runs on port 5000. You can change this to another port by typing in this command:
./slm.sh port
Note that this will also open the port in the firewall as a safety measure. Even if you want the default port of 5000, this is recommended to be run if you want to access the program on another machine.
- You will be prompted to enter a port number of your choice:
- Once complete, do the requested command to make the port available in the current session:
source ~/.bashrc
- You can then see this port as an environment variable (where it can be removed, if necessary):
printenv SLM_PORT
- With all this in place, you are now safe to start the program!
Using Python directly is not recommended, however it is available as an option. As this is highly technical, only limited support is provided. It is expected that you are fairly familiar with Python and have pip installed.
-
Download the slm_python.zip file and place it in the final destination folder.
-
Navigate to that directory and extract the contents. Make sure you have not created another subdirectory. When complete, remove the
slm_python.zip
. It should now look something like this:
- Open a command prompt and navigate to the folder that you created. Type in the following command:
pip install -r requirements.txt
- OPTIONAL: It is possible to generate an executable from the Python file directly. The only caveat is that in order to make one that works for that system type (say MacOS) your actions have to be run on that type of system. That means if you want to create an executable for an unsupported system type, you can do so with the following command:
pyinstaller --noconfirm --onedir --console --add-data "requirements.txt;." --add-data "static;static/" --add-data "templates;templates/" "slm.py"
Or...
pyinstaller --noconfirm --onedir --console --add-data "requirements.txt:." --add-data "static:static/" --add-data "templates:templates/" "slm.py"
Or...
pyinstaller --noconfirm --onedir --console --add-data="requirements.txt:." --add-data="static:static/" --add-data="templates:templates/" "slm.py"
- You will end up with some additional folders and files:
- You are free to remove
build
andslm.spec
. dist
contains the entire executable program. You can leave it in its current location, rename it, and/or move it somewhere else.- With that, you no longer need the original content that was unzipped and you can delete it if you want.
- OPTIONAL: You can change the port for Stream Link (+Files +Playlists) Manager for Channels by creating a permanent Environment Variable called
SLM_PORT
(case sensitive) and giving it a value of the port you want to use. If you don't, the program will run on port 5000. You may also need to open the port up to bypass firewalls or other such settings.
As with any program, there may be a need to update the code for stability, bug fixes, or general upgades. When a new version becomes available, you can easily upgrade using the directions below. To know when a new version is released, set up a watch on this Github repo.
This way, you'll get an email whenever a new version is released, plus you can see exactly what has changed.
During an upgrade, the program_files
directory is protected.
This is the most important directory as it contains all the settings, bookmarks, logs, backups, and other crucial information. As a best-practice, you may want to make a manual backup of this folder in case anything goes wrong during an upgrade. With this directory, even a fresh install can be restored with your details.
- Repull the Image and rebuild the Container. The
program_files
will be protected, so there should be no concerns about losing your settings and critical files.
If you are using Portainer
, you can use the Recreate
button:
When the option comes up, make sure "Re-pull image" is selected.
It then rebuilds the Image and the Container with all the original command lines. Remember to delete the old, unused Image afterwards.
- In
Command Prompt
, navigate to your Stream Link (+Files +Playlists) Manager for Channels directory and type in the following command:
slm.bat upgrade
If using PowerShell, type in:
.\slm.bat upgrade
- You may get a pop-up asking for permissions. Agree and continue until the process completes and you see something like this:
- The most important thing is that
slm.exe
was terminated or not running, allowing the upgrade to take place. After the upgrade, you will need to restart the program manually or with a reboot. See Startup below.
- In a terminal, navigate to your Stream Link (+Files +Playlists) Manager for Channels directory and type in the following command:
./slm.sh upgrade
- As the process runs, you should see something like this:
... a whole lot of lines related to installing requirements and building the executable...
- The most important thing is that the
/slm
application was terminated or not running, allowing the upgrade to take place. After the upgrade, you will need to restart the program manually or with a reboot. See Startup below.
-
Make sure Stream Link (+Files +Playlists) Manager for Channels is closed and is not running in the background.
-
Copy the
program_files
directory under_internal
to a safe location. -
Completely delete all the files and subfolders.
-
Follow the directions for installation and replace the entire file content that were deleted in the prior step. If you have built an executable, you will have to redo those steps, as well.
-
Move the
program_files
directory you saved earlier back under the_internal
directory. -
Restart the program and everything should work the same as before.
Since Stream Link (+Files +Playlists) Manager for Channels is designed to run as a service that you access through a webpage, it should be set up to launch at system startup. There may also be reasons to start manually, like after initial installation or an upgrade.
- There is nothing additional to do as Docker will automatically start up.
- In
Command Prompt
, navigate to your Stream Link (+Files +Playlists) Manager for Channels directory and type in the following command:
slm.bat startup
If using PowerShell, type in:
.\slm.bat startup
- You may get a pop-up asking for permissions. Agree and continue until the process completes and you see something like this:
- If you open
Task Scheduler
, you should now see a task called "Stream Link (+Files +Playlists) Manager for Channels":
- The next time you reboot, Stream Link (+Files +Playlists) Manager for Channels will automatically start. Similarly, you can manually start it by either...
- Running the process directly in
Task Scheduler
- Double clicking on the
slm.bat
file - In
Command Prompt
, typing inslm.bat
- No matter the method, it may look like nothing has happened, but if you start
Task Manager
you will see aslm.exe
running in the background:
- In a terminal, navigate to your Stream Link (+Files +Playlists) Manager for Channels directory and type in the following command:
./slm.sh startup
- As the process completes, you will see something like this:
- To check if the task is scheduled to run at startup, enter:
ls /etc/init.d # For Debian/Ubuntu/Mint
ls /etc/systemd/system # For RedHat/CentOS/Fedora/Arch/Manjaro/OpenSUSE
ls /usr/local/etc/rc.d # For Synology
You should see a file named slm_startup.sh
:
- The next time you reboot, Stream Link (+Files +Playlists) Manager for Channels will automatically start. Similarly, you can manually start it by entering:
./slm.sh
- It may look like nothing has happened, but if you type in this command:
ps aux
You should see ./slm
running in the background. If you want to only look for that process, type:
ps aux | grep [s]lm
In either case, you should see something similar to this:
You have the option for how you want to handle this. Since Stream Link (+Files +Playlists) Manager for Channels is designed to be a background service, just running the program like this...
python slm.py
... or with the executable you generated will result in a window sitting there like this:
If that does not bother you, you should be fine. However, it is recommended to build an automation script that will start the process in the background and make it start upon login/bootup. For instance, if you wanted to do this in MacOS, you would:
- Make a new file called
slm.app
in the directory you created earlier, open it in Script Editor, and enter the following AppleScript code:
do shell script "nohup /usr/local/bin/python3 /[YOUR_SLM_DIRECTORY]/slm.py &> /dev/null &"
Replace [YOUR_SLM_DIRECTORY]
with the path you created earlier and save the file.
- Set the
slm.app
to run at startup:
- Open
System Preferences
>Users & Groups
. - Select your user account and go to the
Login Items
tab. - Click the
+
button and add theslm.app
you created.
- The first time you start Stream Link (+Files +Playlists) Manager for Channels, it may take a couple of minutes before it is available. This is due to it running many activities during initial setup that are not repeated. In later startups, it should be just a few seconds depending upon system performance and internet speeds. If you watch the logs or are in an interactive window, you may see something like this:
While the Initialization process attempts to find all the necessary values—even noting when it has to use a substitute value—do not worry if any of the searches faulter. There are various levels of safety checks and automatic timeouts that will move the process along. More so, you can always make adjustments in the Settings
later. To be clear, any "error" or the like shown are not failures and are expected behavior. Everything directly related to Stream Link (+Files +Playlists) Manager for Channels is managed from the Settings
area as discussed below.
Also worth highlighting: if you are using Docker, you may still see it says it starts on port 5000. There are no concerns about this as it is being mapped correctly so long as you gave a port value.
- With the startup complete, you can navigate to the webpage:
https://localhost:[YOUR_PORT_HERE]
i.e.,
Default...
https://localhost:5000
Example Mapped...
https://localhost:7900
If you are on a different machine than where Stream Link (+Files +Playlists) Manager for Channels is installed, you will need to use the name or IP Address of that machine in place of localhost
and make sure the port is open (as discussed in the installation directions) to be accessed.
- Once at the location, you should see the homepage:
- After this, the program is ready to use!
With the program running, there are a number of activities you should do before getting underway. Also, as a personal preference, if you click on the palette button...
... you can change to "Dark Mode":
Aside from the visuals, everything will function exactly the same.
- Navigate to the
Settings
area. You should see something like this:
- Before doing anything, you must set your country correctly (if it was not found or set incorrectly during initialization). This determines which streaming services are available to you:
Note for instance the difference between a US and GB list:
Click Save
after you have selected your country, preferred language, default number of programs to come up when you search, and if you want to hide previously bookmarked programs from search. Please be advised that only certain country/language combinations are valid. A non-exhaustive list is available here.
- With that done, you can select your streaming services and prioritize them. You can select multiple at a time for any of the actions.
Remember to click Save
when complete.
Be sure to keep this up-to-date as you subscribe, unsubscribe, and change preferences. This list is what determines which Stream Links you will get.
- SLM uses JustWatch as the source for the final generated Stream Links. While a process is undertaken to "clean" the links of any tracking information, some may still be imperfect or have ways to work better with a "mapping". You have the ability to activate and/or create/delete those mappings:
Out-of-the-box, several are included that are all functional as well as informative:
-
Changing
hulu.com/watch
todisneyplus.com/play
allows Hulu content to play within in the Disney+ app. This is off by default, but can be activated by clicking the checkbox and saving. It should be noted that not all Hulu content is available within Disney+. To work around this,Stream Link Overrides
may be used as discussed below. -
All Netflix Movies and Shows come from JustWatch with a link that contains
netflix.com/title
, which goes to the landing page of that content. However, if you changetitle
towatch
, it will play automatically. However, that only works for Movies, hence why that is in the dropdown selectionFor Object Type
. This is on be default. -
While JustWatch does provide Amazon links directly for Movies and Shows, the links that are given do not work in all situations, notably on Apple TV and the web. To get around this, the links can be converted with the string
watch.amazon.com/detail?gti=
being replaced withwww.amazon.com/gp/video/detail/
. This is on by default. -
At the time of this program's launch,
Vudu
had changed its name toFandango at Home
and created a newly named app, but did not fix the app to acceptVudu
links that it was still using. Since deep linking directly is not possible, this mapping says to replace any link that containsvudu.com
in its entirety with a link that will just launch their app generically. This is off by default.
It is not required to set these immediately; they can be added, deleted, or modified at any time.
- Next, make sure the Channels URL is correct.
During Initialization, an attempt was made at determining the correct link. However, that may not have succeeded or the selection may not be the case for you. Modify if necessary and click the Test
button to confirm that Stream Link (+Files +Playlists) Manager for Channels can attach to Channels DVR.
You also have the option to let Stream Link (+Files +Playlists) Manager for Channels attempt to determine the link again by clicking the Scan
button:
In Docker, you may not be able to see local DNS. If that is the case, you can use this:
http://host.docker.internal:8089
- Similarly, in order for the program to work correctly, it needs to be pointed to your Channels DVR folder. During initialization, an attempt was made to find the folder. If it could not be discovered, the directory you installed the program in was used.
You can navigate up the directory structure or manually type in a path to get where you want.
When you get to where you want, use the Select
button to set that directory.
If you are using Docker, you should literally have a directory named "channels_folder" right underneath /app
.
This is the folder you set during installation and should be what you are using. It will look something like this:
Do note that you must use the parent Channels DVR directory, not the Imports
or anything similar. If you do not set this correctly or do not have access from the machine you installed Stream Link (+Files +Playlists) Manager for Channels on, then you will not be able to generate Stream Links that Channels DVR can see, nor be able to get updates from Channels DVR when programs are watched and deleted.
- Under
Advanced / Experimental
, you will find some tools to manage the program and your results.
Run 'Prune' function in Channels
is on by default, which means that the program will initiate a delete in Channels DVR for any missing personal media, not just Stream Links. You may decide that you do not want this to run automatically.
- Finally, there is the
Scheduler
.
In the End-to-End Process
, several steps are taken. These can all be seen and initiated manually in the Run Processes
area.
These tasks are:
- Do a backup
- Update the Streaming Services for any new or removed providers
- Check for new episodes of bookmarked shows
- Import from Channels DVR any Movies and Episodes that have been watched and deleted, marking them as "watched" in SLM
- Find and assign valid Stream Links to bookmarked Movies and Episodes
- In Channels DVR, initiate several steps to make new programs appear, have deleted ones be removed, and update specific files to use revised links
While these can all be done manually, it is recommended to set a schedule to run automatically at some point during the day.
Note that this can take a significant amount of time, depending upon the number of Movies and Episodes that you have bookmarked. Also, the clock shown should match your system and locale settings. After a process is complete, you can see pertinent notifications in the Home
area (newest on top), such as if there are changes to Streaming Services or new episodes were added.
If you are looking for additional detail as to what transpired, the Logs
area contains more information.
Unlike the notifications and live process trackers, the log is in order of action.
- With this all in place, you can now navigate to
Add Programs
.
Here, you can search for a program you want to bookmark.
The default order is by best-match / popularity, but you can also choose to have the results re-display in alphabetical order and/or filter only for Movies or Shows.
Another option for searching is to see what has been New & Updated
on the Streaming Services you selected in the Settings
above. This will give you a list of Movies and Shows that have been added or updated on those services.
The list is limited to a single day and 100 entries, displayed alphabetically. Clicking Today
will give you that list for this day. On the other hand, you can select any date and click New & Updated
to get the Movies and Shows from that day.
No matter the search method, clicking on a Movie will get you something like this:
Notice that the Search
and other line buttons are no longer available. You must finish this process by selecting Done
or Generate Stream Links
. If you do not generate Stream Links at the time of creation, they will be created (if valid) during the next run of the process as detailed above. Although it is not necessary, if you review the logs, you can generally see a successfully generated Stream Link appear as so:
10 Buildings That Changed America (2013) assigned Stream Link: https://www.kanopy.com/product/10-buildings-changed-america
On the other hand, if a Stream Link could not be generated, a reason will be given:
12 Angry Men (1957) assigned Stream Link: None due to 'Watched' status
Amélie (2001) assigned Stream Link: None due to not found on your selected streaming services
In order for a Stream Link to be generated, the Movie or Episode must first have an Unwatched
status, and then be available on one of the Streaming Services that were selected during Settings
. The Watched / Unwatched
status applies even if you put in a link of your own to override whatever may or may not be generated. This completely optional feature is not required, so leave it blank if you do not want to put anything there.
Once an add has been complete, you can search again. If we select a Show this time, it will have slightly different options:
Per episode, season, or for the entire show (or a Movie if bookmarking that), you can uncheck to mark it as Watched
. It is important to note that in SLM, the term Watched
does not mean that you have ever seen the Episode or Movie. Marking something as Watched
means that you are finished with it and do not want to generate a Stream Link/File for it. It is the equivalent of deleting an Episode or Movie from within Channels DVR. As discussed above, during the Import Updates from Channels
process, this program checks to see if a generated Stream Link/File file has been deleted. If it has been, it will be marked as Watched
and will no longer generate a Stream Link/File in the future. This is why it is equally important for users to not modify or delete the files that are generated by this program. Doing so could make Movies and Shows become erroneously marked as Watched
. Only this program should modify anything in the created slm
directories.
Aside from these considerations, per episode, you have the same Stream Link Override
option as a Movie, as well as the ability to put a prefix on the generated file. For instance, by default, a file name will be S01E01.strmlnk
. However, as an example, you may want to designate that this is a subtitled episode and that dubbed episodes might become available in the future. For this, a prefix of (SUB)
will result in a file name of (SUB) S01E01.strmlnk
. More so, there is a selection called Special Action
that can also be propagated down to the individual episodes from the entire show or per season perspective:
In most cases, users will leave this as None
, but there are situations when it will necessary to take advantage of these functions. For instance, if your Movie or Show is available on multiple Streaming Services but you prefer it to be on one with a lower priority, you can make that assignment. Another situation might be that you have a link to the media directly and, thus, would want to create a "Stream File" instead of "Stream Link". In this case, you would select Make STRM
.
While searching, you may come across programs you are not interested in. In these cases, you can always hit the Hide
button to the right of the program so that it never appears again.
For Shows in particular, it may be an older title that is no longer putting out episodes. In these cases, it is not worth the time and resources to have SLM continue to search for new episodes. As such, there is the ability under Bookmark Action
to Disable Get New Episodes
. Note that this is also where the "Hide" option is, the same as just shown from the button above. In most cases, though, this too will be left as None
.
There is also the option to select multiple results and do an action on all of them at once.
Checking off one or multiple programs will make buttons for Bookmark All Selected
and Hide All Selected
appear. Hiding will then do exactly that while bookmarking will give you a final screen for each of the programs you have selected. Otherwise, the activities are exactly the same as going one-by-one.
Sometimes when searching, you still might not be able to find the Movie or Show you are looking for. While uncommon (see Troubleshooting / FAQ
), it may happen, especially for rare or foreign content. In these cases, you can always create a manual bookmark.
While Movies are relatively the same as with a search, Shows provide a different setup when clicking Add Manual
:
Note that you will only be allowed to continue once you've correctly put in the number of seasons and episodes per season.
Here you will see the episodes created as designed by the user. It should be highlighted that manual entries require a Stream Link Override
to be entered, otherwise they will not generate a Stream Link file.
- Even if a Movie or Show is added through search or manual selection, that does not mean they are set in stone. You can use the
Modify Programs
area to make any update as desired.
For instance, here is a Show that was created using search, but the search will only link to the subtitled episodes. In order to get dubbed episodes, a number of inputs are needed:
While you can delete an episode, if it is a searched bookmark and not a manual one, the episode will just get re-added as "unwatched". Aside from deleting episodes, there is also the ability to add additional episodes:
This is also a good area just to check on the status of Movies and Shows.
Note that the Current Stream Link
field will always be greyed out and unable to be modified. If it is blank, this is an indication that no Stream Link was generated. If you want to change the Stream Link, give it one when none was generated, or input something for a Stream File, that is what the Stream Link Override
field is for. After regenerating Stream Links/Files through any method discussed thus far or below, you should see something like this:
The Current Stream Link
field having the skipped_for_override
or strm_must_use_override
value lets you know a Stream Link/File file was creating using the Stream Link Override
value that was input.
Movies are fairly similar to Shows in the options, including updating the Title
and Release Year
itself if the data is incorrect or not how you want it.
Programs that were previously hidden are not show in the list by default. However, you can select the Show Hidden
button and they will then be in the list.
At this point, you can edit them and make them not hidden by changing their Bookmark Status
to "None".
- Go to
Settings
and scroll down toAdvanced / Experimental
.
- Check the box for
Use Playlist Manager
and click save. When you do so, a lot of things will become available both in the front-end and the back-end. Most notably, you will now seePlaylists
in the navigation pane.
- Navigating to the
Playlists
area, you will see something like this:
- In the navigation pane, select
Manage Playlists
. Scrolling towards the bottom, you should see theEnter Playlists
section, appearing somewhat like this:
- Here you can add links to your m3u(s) and corresponding Electronic Program Guide(s) [EPG(s)], giving each one a unique name. Be sure the correct "Stream Format" is selected for dealing with different types of interpretation engines.
- You can always modify these after the fact, too, including renaming or removing them with little to no repercussions. However, if you remove all Playlists, it is considered a complete reset of the tool. Additionally, instead of removing, you can just make the playlist "inactive" by unchecking the appropriate box. Otherwise, as shown in the example image, you can add ones with only a m3u and no EPG, especially those that already have Gracenote IDs for guide data. You can even pull the m3u(s) from built-in Channels DVR lists like the ones for HDHR and TVE. Since some stations are both in either of those and on FAST providers, this gives a way to match them together, if desired.
- As another option, you can upload your own playlists and guide files.
- When you upload a file, it is given a link that you can use in the
Enter Playlists
area above.
- As you add each source, they are given a priority. You adjust that value in the
Prioritize Playlists
section. In the end, PLM will parse through each of these sources in priority order (excluding inactive playlists) to find the matches for individual stations, and this sequence will determine which one to use. For instance, CBS News is available on many providers, but based upon the order shown below, in this example it will take the one from Channels (TVE) over the ones on Plex, Pluto, etc...
- Back on the
Main Page
, there is a button calledUpdate Station List
. Pressing this will then read through each of the m3u playlists and gather all the stations for your assignment.
- In a later step, we will discuss automating this to get updates on a daily basis. In the meantime, you should now have a complete list of available stations to work with.
As shown at the top, PLM will give you the status for each of the stations it finds in the provided m3u(s). "Unassigned" stations are ones that need to be given a "Parent". The Parents themselves are a grouping of the stations that came from the m3u sources.
- Navigating to
Unassigned Stations
and clicking theExpand / Collapse
button will show you all the stations (in alphabetical order) that are looking to have a Parent assignment. The only way a station becomes available is if it has been assigned to a Parent. There is no penalty for not assigning a station aside from not being able to see what's new.
- To the far right, there is a button called
Make Parent
. Clicking this will create a new Parent that has the same name as that station and assigns that station as a "Child" to that "Parent". For instance, if we clickMake Parent
for 00s Replay, we will end up with a new Parent like this in theParent Stations
area:
- You also have the option to create and edit parents directly. This can be especially useful when the names provided by the m3u are not clear or specific enough and you want to easily see what they are.
- There are also several optional fields to override what may be provided by the child stations. For instance, you may have a Gracenote ID for guide data that was not provided and can plug that in here.
- You can even override the default priority order of the Playlists if you have a use case to make a specific source for one particular station be the first choice.
- As you add Parents through either method or en masse as described below, they become available for direct assignment. For instance, if we take the first 21 Jump Street and click
Make Parent
, the second one will now have that new Parent as an option for selection.
- After doing so, click the
Set Parent
button to save this selection. The same activity can also be done with the "Ignore" option. This is like the "Hidden" choice in Channels to make a station not available in the final product.
- You can also make multiple selections at a time and then click the floating
Save All
button to set each of them. This includes the "Make Parent" option so you can push multiple stations into new Parents all at once.
- Conversely, you can set the Parent for everything visible on the screen at once using the
Set Visible
button.
This works with both scrolling downward to get more or all available stations, or using the filter functionality.
- Everything that is set for a station can always be changed and even undone in the
Modify Assigned Stations
section:
- As you make your assignments, the chart on top of the
Main Page
updates to let you know the status of your stations. "Assigned to Parent" means that a Parent has at least one child and will create a unique station. "Redundant" means that a Parent has additional children (i.e., repeating/same stations) and that they are available if the higher priority option goes away for any reason.
- At any time, you can also click the
Update m3u(s) and XML EPG(s)
. This is the process that will parse through all of these parent-child assignments and create the playlists and guide links that you will load into Channels DVR or other tools. It should be noted that when PLM processes a station, if a certain field does not have a value in the higher priority playlist, it will take that field from a lower priority one. For instance, if your preferred playlist does not have a "description", but a lower priority one does, it will get that "description" and make it available in the final output.
- As before, this process can be automated and is discussed later. At this point, though, you will now have fully active m3u and EPG files that you can integrate. The links will be visible at the top of the page:
- "Gracenote" m3u files do not have XML EPG data because the guide information comes from the loaded Gracenote ID. On the other hand, all the "Non-Gracenote" m3u(s) do require their own corresponding XML EPG. Either way, each is split between "HLS" and "MPEG-TS" options since those are interpreted by Channels DVR differently. Also, depending on circumstances described below, you may end up with multiple of these lists.
- At this point, you have everything you need and can continue using PLM as a regular function. However, there are several settings and automated routines to consider before proceeding.
- Back in the
Settings
area underAdvanced / Experimental
, at the spot where you turned on PLM, there are two additional inputs. One is the station number you would like to start at, with a default of10000
. Each new Parent that is added will increase this value by one.
-
The other choice is the
Max Stations per m3u
, with a default of750
. This is the number of stations that will be in an m3u file before it splits into a new file, 750 being the maximum Channels DVR allows at the time of this writing. This can be set to any positive integer. It should be noted the XML EPG data is split by the same stations in the end-result m3u(s). -
Further up under the
Scheduler
section are two more things for you to set. The first is the equivalent of theUpdate Station List
button. Turning this on will run a process once per day at the time you set to update the station list, thus giving you an automated way to handle changes and get new selections in theUnassigned Stations
section.
- When stations are updated, there are notices that are also made available in the
Notifications
pane in theHome
area. You will get info on "Added", "Removed", and "Modified" stations, the latter meaning there has been a change in at least one field of provided data.
- In the same vein, you can also turn on the process to update the m3u and EPG files at regular intervals.
- Unlike the updating the station list, this one allows you to make a selection to how frequently you want the action to happen based upon a starting time. For instance, if we leave the time at
02:01 PM
and selectEvery 6 hours
, it will run at02:01 PM
,08:01 PM
,02:01 AM
, and08:01 AM
.
- As with the previous automation, this one will also give you notifications. In all cases, there is additional detail available in the
Logs
area.
- With these in place and set, the process will take care of itself and you should be good to go!
In order to streamline answers to some questions you may have, certain reports and queries have been made available in the same named area:
To navigate the data, there are several functions such as number of results per page...
... number of entries being show out of how many...
... page navigation between those entries...
... and the ability to filter both by a general search...
... and on individual columns:
Aside from the function covered above, there is not much else a user needs to do. There is the Files
area for viewing the backend data that fuels all of the above, as well as exporting those files for backup and migration purposes.
You can also completely replace those files, though it is not recommended to do so unless you are specifically directed.
Lastly, there is the About
area to see the latest version information, credits, and other information.
First, make sure you have selected the correct country code and saved. If that is already done, please make a request for the missing service by filling out this form. Note that JustWatch is responsible for the availability of Streaming Services and SLM is just a downstream consumer.
[SLM] What is the difference between Streaming Services with similar names (i.e., Apple TV vs. Apple TV Plus or Amazon Video vs. Amazon Prime Video)? Should I select both, or is it redundant?
JustWatch is responsible for the list of Streaming Services and their definitions, as such there is no specific guidance from the perspective of this program. However, it is most likely a question of content. For instance, "Apple TV" is Apple's generic name for all streaming content available for purchase and/or rent, just as "Amazon Video" is for Amazon. Each have exclusive content available for paying subscribers, hence "Apple TV Plus" and "Amazon Prime Video". Notably, in these highlighted examples, if you make your settings to have either the basic tier or the subscription tier as the top priority, the Stream Links that are generated will be exactly the same, therefore they will launch the same apps on your device. Due to this, if you have access to the subscription tier, then it may be redundant to have both. Nevertheless, that might not be the case for these or other services with multiple tiers and/or separate apps.
For example, say your Streaming Services were this:
Then, if you add About Schmidt
, it will end up with an Amazon link:
But if you do this:
You will end up with Apple links:
Yet, if you do this:
You end up with no Stream Link:
It is all a function of what services you have selected and the data on JustWatch. As such, it is up to you to manage your services and find the best combination that works for your particular use case.
While new Streaming Services are brought online and shut down on a regular basis, they also sometimes just change names. Any name change will result in the "old name" being removed and the "new name" being added. If this happens to you, all you need to do is return to the Setttings
area, add the "new name", and prioritize it. The next time you generate your Stream Links, any missing Movies and Shows that were removed will be recreated. Remember, there is a difference between "bookmarking" a Movie or Show and having Stream Links for it.
JustWatch is the provider for all of the information. If there are any issues, please let them know by filling out this form or emailing them at [email protected]. It is unlikely that they will make an update in a timely manner as they are also dependent upon upstream data, so please take advantage of the manual and override capabilities built into the program, or using mapping if possible.
SLM is completely dependent upon Movie and Show data from the JustWatch website, which in turn is a consumer of other upstream data. There may be a gap in any of those steps along the way, especially for non-domestic content and independent studios. Sometimes, though, you may even be able to see the content on JustWatch but are unable to find it in this program. There appears to be a small gap of time (usually one or two days) for some content to be completely discoverable by the tools that this program uses.
[SLM] I'm able to bookmark a Movie or Show and I know it's on a streaming service I've selected, but a Stream Link still won't generate
Go to the JustWatch website and search for it on there. A Movie or Show might be available, but still be missing links to the appropriate streaming service. If it is brand new, it might also take a day or two until they update their data, which is what SLM uses. Should the links be missing on JustWatch, submit a request by filling out this form or sending an e-mail to [email protected]. If you can confirm JustWatch has a working link on there and it still won't show up in this program, please submit an issue request with as much detail as possible. There may be an edge case for how that particular Movie or Show is stored on JustWatch that this software has not accounted for.
[SLM] I generated my Stream Links when I bookmarked my Movie/Show, but it didn't show up in Channels
Generating the Stream Link(s) is not enough; you need to update personal media from within Channels so that it appears inside that interface. There are several ways to deal with this. First and foremost, within this software, under Run Processes
, is a button that will do all the necessary steps:
However, it is worth noting that there is a setting in Channels for how often it scans for personal media:
As such, you could just wait for that to run if you have it set for a particular interval.
[SLM] A Stream Link generated and the Movie or Show is available in Channels, but when I click to launch it, I get an error. It works in the web, though. | The Stream Link works on one platform like iPad OS but does not work in another like tvOS.
There are two main potential situations. The most likely one is that the Streaming Service's app itself is written incorrectly and cannot accept "deep links". Without this, nothing can be done. You can request the app developers to update their program. In a similar vein, they may have programmed it to accept "deep links", but only in a certain way. If there is a systematic method to do a replacement in the generated link, then it could be added to SLM in the Stream Link Mappings
setting. For instance, JustWatch provides a link for Amazon content like watch.amazon.com/detail?gti=
and, by default, this program replaces it with www.amazon.com/gp/video/detail/
. If this is the case, please add a new mapping. Further, do let the community know about your mapping and, if it is useful for many people, it will be added to the default list that comes with a new installation.
There is also the possibility that the link cleaning and replacement process that this program is doing is overzealous. Please also put in a request for those situations and examples of working Stream Links.
[SLM] Why do some things play the correct movie/episode automatically and why do others go to a generic landing page for that movie/show?
There are two components that relate to this. First is the quality of the links provided by JustWatch. For instance, with Disney+, JustWatch only has links to generic landing pages and does not have individual episode information like it has for Hulu. There is nothing that can be done aside from requesting that JustWatch updates their data.
The second situation is that even though JustWatch provides links to more generic areas, there may be systematic ways to correct them. As an example, JustWatch provides a link to a movie on Netflix that looks like this: http://www.netflix.com/title/81078554
. However, if you replace title
with watch
, it will play automatically. This being a “systematic way” to do a replace, it was included in the Stream Link Mappings
settings as highlighted above. If you have more examples that could be accomplished this way, please let the community know. If they are deemed benefitial for other users, they will be added to the default list that comes with a new installation.
There is no "right way" to approach this; PLM is a tool to use as you please, with thousands of possibilities on what you might want to do. While one user might desire to have PLM playlists be the only sources in Channels, others will not choose to go down that path. For instance, there is no great replacement for how Channels handles TVE (unless you have Frndly or use ADBTuner or CC4C for every station), so a user who wants those stations would have to keep that as a source no matter what, just at a lower priority so it is not used by default.
In the end, it's totally up to the end user how far they want to take this. Give it a try, play around, and see what happens. There's no danger in just starting PLM up!
There are too many potential sources to answer that question. Most available m3u playlists can be imported directly, so that is one-for-one. For something like the HDHR, you could do this:
http://hdhomerun.local/lineup.m3u
or...
http://[IP_ADDRESS_OF_HDHR]/lineup.m3u
However, if you do that, you must set your Gracenote ID
at the Parent level correctly. Similarly, you could use tools like ADBTuner or Chrome Capture for Channels for getting more "traditional" cable/TVE stations into Channels. PLM will accept playlists for both of those and plenty of other tools discussed elsewhere.
[PLM] None of my m3u/XML links work and I see errors like WARNING: m3u URL not found for '[MY_M3U_OR_XML]'. Skipping...
First, make sure your link is http
instead of https
as that latter may not be able to be read. Next, there may be an issue with how the program is trying to talk to certain location, especially if that location is in-network and/or you are using Docker; most especially if you are going container-to-container. In either case, the potential solutions are, instead of http://localhost:[PORT]
, try:
http://[COMPUTER_NAME].local:[PORT]
http://[IP_ADDRESS]:[PORT]
http://host.docker.internal:[PORT]
Also, you can test these in the Channels URL
section of Settings
, making sure you get a positive response. Just be sure not to save!
If you see a situation like this...
... the most likely culprit is the file type for the images. The Channels DVR apps require images to be either .png
or .jpg
, unlike the web which can accept about anything.
[GEN] I set the scheduler for a certain time and it is running hours earlier/later. | The time showing in the logs is wrong.
Follow the directions related to "TIMEZONE" in the installation steps above.
This block is just an indicator to let you know nothing is stuck and that things are still running in the background. For actions that last less than a couple of seconds, not enough time will pass to begin to fill it in. For anything longer, you will see information fill up to the top, but it will all clear out when the process finishes running. However, there are some issues with certain browsers like Safari where it seems incapable of displaying what is happening. Rest assured that although the background process is running as expected, you can always verify in the logs if desired.
- For SLM, please ask at the Channels DVR Community Message Board.
- For PLM, please ask in this thread.
Image (edited) courtesy of SpaceX, CC0, via Wikimedia Commons.
This project and its upkeep is the work of one person. While it is provided free of charge with no expectations of payment, tips are greatly appreciated!