Manage Live TV channels
Edit channel
Deep catalog options used by AI lineups and tagged library matching.
When this channel goes to commercial break, it pulls spots from these playlists. This is the same mapping as Commercials → Map channels. Add as many as you want.
Simulated live TV channels for Jellyfin
What's on across ChannelFlow-Server channels. Times use the schedule time zone from General. Click a programme for details.
Creates the standard Binarygeek119 TV lineup with channel numbers, names, library tags, and bundled logos (guide icons and on-screen channel bugs).
Subchannel mode uses legacy-major numbering such as 119.1, 124.2, and 203.4. Legacy mode uses the original Binarygeek119 whole-number dial positions.
Click a 30-minute slot to edit candidates. The Jellyfin Live TV guide comes from playout (built from this lineup). Saving a lineup rebuilds playout for this channel. Weather channels update the guide automatically.
Weekly day templates (Friday movie night, holidays, and each weekday). Click a day to show its 24-hour schedule in the grid above.
Register Jellyfin playlists as ChannelFlow lists. Use them in Lineups, Overrides, Special Presentations, and AI slot edits.
Add artist names for The Parody Channel and Rap On Tap. HeadPhone Jack with an empty list plays every music-video artist not on those two lists. If you add names to HeadPhone Jack, it uses those instead.
Paste a YouTube video or playlist URL per channel. Lookup and playback use the cookies.txt and SponsorBlock settings from the YouTube tab.
Add as many Jellyfin, Emby, Plex, sidecar folders, or other sources as you need. API keys and tokens live here. ChannelFlow reads libraries itself — the Jellyfin plugin is not required. Type tabs only show for servers you have added.
Items that disappear from a media server (or whose remapped file is gone) are marked missing first. After the grace period, catalog cleanup deletes them. A later sync restores them if they come back.
Loading…
Recurring day/time blocks that override AI or default lineup content on matching days. Use fixed items, metadata rules, or a registered ChannelFlow list.
Local commercial files from Jellyfin. Tag items with channelflow-commercial, then sync. Blackframe scan writes chapter markers used for ad breaks. YouTube spots are managed on the CommercialBrainz tab.
Playlists saved from the CommercialBrainz tab write matching spots (title, YouTube link, duration) into the Commercials table so breaks do not call CommercialBrainz. At midnight ChannelFlow refreshes those stored links. Click Pull to refresh a playlist now. Assign them to channels on Map channels.
Pick a channel and assign the saved search playlists it uses for commercial breaks. The same list is stored on the channel (CommercialSearchPlaylistIds) and can also be edited in the channel editor. Channels with no playlists use the default commercial pool.
Every channel and the playlists it uses for breaks. Click a row to edit it above.
Sync YouTube commercials from CommercialBrainz.
Fill in the filters, then Save to playlist. ChannelFlow copies matching CommercialBrainz metadata and YouTube links into the Commercials table (one pull per save, not during live breaks). At midnight those stored links are refreshed. Assign playlists to a channel on Commercials → Map channels. Paste a YouTube cookies.txt on the YouTube tab to use your account (including Premium when the cookie is from a Premium login). SponsorBlock skips in-video sponsors during playback.
ChannelFlow streams CommercialBrainz spots from YouTube at break time (no local download). yt-dlp already omits YouTube pre-roll ads. Paste a Netscape cookies.txt from a signed-in browser to use your YouTube account. If that account has YouTube Premium, yt-dlp can request Premium formats. ChannelFlow cannot turn Premium on by itself.
Export with a cookies.txt browser extension while signed into YouTube, or yt-dlp --cookies-from-browser chrome --cookies cookies.txt. HttpOnly rows (#HttpOnly_) are kept. Cookies are written to youtube-cookies.txt in the ChannelFlow config folder (the host path mapped to /config in Docker). You can also drop a Netscape cookies.txt there from the host. Leave the box empty to keep the current file.
Uses TV and Android player clients with your cookies so a Premium login can unlock higher-quality streams.
Cuts in-video sponsors, intros, outros, and similar chapters from SponsorBlock. Segments that would remove almost the entire spot are ignored so the commercial still plays.
Off Air plays when a channel has no scheduled media, when playback fails, or when a weather capture error occurs. Pick off-air video and audio independently — for example, color bars with a beep tone, or TV static with white noise.
No 16:9 off-air slate was found.
No 4:3 off-air slate was found.
No off-air slate image was found.
Shown during dead air and playback errors.
Used when off-air video is set to slate image. 16:9 channels get the 16:9 still; 4:3 channels get the 4:3 still. Custom uploads below override both sizes for that variant.
Local packs live on this server (Anytime, Fall, Winter). Fall and Winter only play after you download them. Jellyfin libraries still work when you pick them here.
Anytime downloads on first launch. Remove it if you do not want it; ChannelFlow will not fetch it again until you click Download. Fall and Winter only play after you download them. Weather and News that use Off Air music follow the same pack. Zips are named anytime_v0.0.1.zip (and the same pattern for other packs).
Upload PNG or JPG images to replace the bundled stock slates. Each variant can have one custom image used for both 16:9 and 4:3 channels.
Stock: offline_usa_16_9.jpg and offline_usa_4_3.jpg
Stock: offline_world_16_9.jpg and offline_world_4_3.jpg
When NOAA has watches or warnings for the default Weather tab location, TV, movies, and music splice an EBS graphic onto the current program (same show, same playhead — no black screen or Off Air slate). Scrolling text overlays a pre-rendered copy of images/media/EBS/ebs_strip.png with WeatherStar 4000 text. Alerts screen fills the frame with a pre-rendered copy of images/media/EBS/ebs_fullscreen.png and keeps the show audio at a lower volume under the attention/end tones. Each alert dumps every live run-ahead buffer down to 60 seconds so it reaches the tuner faster, then the buffer fills back to the Transcode setting. WeatherStar and FlowWire keep their own displays.
AI lineup generation is disabled. Configure API keys below, then enable the switch to generate lineups.
When on, primetime that night plays catalog episodes and movies whose original air month and day match (any year). Leftover primetime stays the usual lineup. Sequential episode order is unchanged. Takes effect on the next playout rebuild.
Test Connection works before enabling AI. Enter an API key, pick the matching provider, then test. Save settings after a successful test.
Voice id for AI text-to-speech (FlowWire, Catherine Wolfe, and any other AI speech). OpenAI and Venice use different names — pick one that matches the default provider. See OpenAI voices and Venice voices.
Leave a key field blank to keep what is already saved. Password managers often dump the ChannelFlow login into these boxes; ChannelFlow ignores that unless you paste a new key yourself.
AI lineups build up to 14 days of playout. ChannelFlow-Server auto-extends the schedule as each day ends. Auto-apply sets content mix and playout template from channel rules, generates the lineup, and rebuilds playout. The scheduled task adds one day when the horizon drops to 13 days instead of rebuilding all 14. Queued new channels can also be processed from Dashboard → Scheduled Tasks → ChannelFlow-Server AI Lineup Auto-Apply (Channel Add).
At local midnight, ChannelFlow-Server pulls the real forecast from the Weather tab source (NOAA or Open-Meteo) for each weather channel location and writes that day's TV guide titles and descriptions. If AI is enabled, it turns those facts into cable-guide copy; if not, the live temperatures and conditions go in the guide as-is. Click Generate Weather Guide Cache to refresh today now. EPG reads the cache only.
Loading weather guide cache status…
Pick a playout template to structure dayparts. Channel rules define content scope; fine-tune adds extra instructions. Generate pages the live catalog into an AI pool (unless one is saved), writes the weekly lineup, and fills a 14-day guide. Multiple Generates stack; two or more channels build day 1 for every channel, then day 2. Short cartoons pack into one half-hour listing. Clear AI pool empties saved picks so the next Generate re-pages the catalog. Clear playout empties that channel’s Live TV guide (including what’s on now); the lineup and primetime assignments stay, and the channel goes Off Air until Generate or Rebuild.
Prime-TV channels only. Assign one or more series to each half-hour from 6:00 PM to 9:00 PM. Generate fills those slots first, keeps those shows off the rest of the day, and encores last night’s prime overnight 2:00–5:00 AM.
No prime-TV channels. FlashBack, Open Swim, Retro, Reality, Crime, Comedy, Game Shows, and Education use this grid.
Click a show to add it to the selected timeslot. A slot can hold more than one show for AI to pick from.
Weather channels are a native MPEG-TS loop (Star fonts and screens). The look below switches live WeatherStar 4000 channels to 3000. A WeatherStar3000 preset channel always uses 3000. Location can be a US ZIP, a city, or latitude,longitude.
Auto uses NOAA for US locations and Open-Meteo everywhere else. Save here so the WeatherStar look and source apply to live channels on the next frames.
Apply a weather preset, then set each channel's location below. Background music defaults to local packs, then Off Air, then the built-in WeatherStar tracks.
Local music packs by default. Pick a Jellyfin library only if you want that instead. If packs are missing, the stream uses built-in WeatherStar beds.
Saved location for WeatherStar and for new weather channels. NOAA watches and warnings on TV, movies, and music are on the Emergency Broadcast System tab.
Choose which WeatherStar screens play in the loop.
Picture, sound, and encoder for the live MPEG-TS tuners receive. ChannelFlow probes the GPU and only offers combinations that work together. Save once; the next program on each channel picks it up.
Target video and audio. Codec, profile, size, and frame rate follow the encoder on the Transcode card below.
2.0 is stereo. 5.1, 7.1, and 7.2 upmix when the file has fewer speakers. Dolby Digital (AC-3) is 5.1 max; 7.1 and 7.2 encode as E-AC-3. Use 384 kbps or higher for surround.
How FFmpeg encodes that format. The encoder name is chosen from the codec above plus this acceleration — there is no separate encoder list. Saved settings override FFMPEG_HWACCEL and FFMPEG_VAAPI_DEVICE without restarting the container. Intel Quick Sync (QSV) can hardware-decode AV1; VAAPI cannot on this Intel iHD path.
Pick a render node under /dev/dri (renderD128, renderD129, and any others the container can see). Intel Quick Sync is often D128; a second GPU may be D129 and still listed even if a probe says it cannot encode. Pass the whole /dev/dri folder into the container. QSV uses the same device as VAAPI, through oneVPL instead of libva decode.
Encoder: matching the Normalization codec to this acceleration.
Lets ffmpeg encode ahead of the tuner and hold that video so a hitch or commercial switch does not freeze the picture. New tuners also start from this buffer. 0 stays live (real time). 180–300 seconds (3–5 minutes) is the right size if the picture pauses. Maximum is 600 (10 minutes).
Server-wide settings. Debug logging writes extra detail to the ChannelFlow-Server log for troubleshooting AI channel building and playout.
When enabled, ChannelFlow-Server logs detailed AI lineup, catalog, LLM, and playout build steps with an [ChannelFlow AI] prefix. Leave off for normal operation.
Used for EPG, weather guide cache hours, and playout scheduling. Offsets reflect the current DST rules on this Jellyfin server.
After nobody is watching, ffmpeg keeps running for this many seconds so a returning viewer does not wait for a new encode. 0 stops immediately. Maximum is 3600 (one hour).
Used in M3U and XMLTV links when Jellyfin talks to ChannelFlow on the Docker network. Leave blank to use the request host, including HTTPS from your reverse proxy. Also settable as CHANNELFLOW_PUBLIC_URL.
Paired ChannelFlow TV apps send Timber logs here with the same API key used for Live TV. Files live under the server log folder and are deleted with the same 8-day retention.
No ChannelFlow TV clients have sent logs yet.
Open the ChannelFlow app and type the pin it shows. ChannelFlow encrypts the M3U and XMLTV links with that pin and sends only ciphertext to the pin server. The app decrypts with the same pin.
Each ChannelFlow TV app gets its own API key when it pairs. Remove a client to destroy that key. The next time that TV tries to connect, it cannot, and it drops this server from its list.
Cuts every channel that is currently being watched to a commercial break in 15 seconds. The rest of the show resumes after the spots. Weather and news channels are skipped.
Rebuild fills the Live TV guide from current lineups. Clear Guide Data deletes every playout item and episode cursor so the next rebuild starts from scratch. Lineups stay. Channels go Off Air until you rebuild.
Builds the MP4 the news channel plays (intro, speech, story pictures, and outro) at 00:00, 06:00, 12:00, and 18:00 local time. The current video is not replaced until the new file succeeds. Skips when there are no new stories, or fewer than the minimum on the News tab.
Loading news video status…
Items removed from a media server are marked missing first. After the grace period, the cleanup task deletes them. Manage this from Library → Removed items.
Loading catalog cleanup status…
Scan checks each catalog path after remap (server prefix → local prefix). If that file or folder exists on this server, the item is present. Missing files are marked missing and deleted after the grace period.
Loading local file scan status…
Every 6 hours (00:00, 06:00, 12:00, 18:00 local) ChannelFlow syncs each enabled library connection so new files show up in the catalog. Jellyfin and local-folder connections are included. Emby and Plex placeholders are skipped until they can sync.
Loading library scan status…
After each library import, ChannelFlow reads chapter markers from local video files with ffprobe. At midnight it only scans videos that still have no chapter data. Run now to fill missing chapters without re-probing files that already have them.
Loading ffprobe chapter scan status…
At midnight ChannelFlow grabs 6 frames at five points in each video, compares the active picture inside the raster, and stores TrueAspectRatio. Playback uses that instead of the media-server aspect. Run now to measure videos that still have no TrueAspectRatio.
Loading true-aspect scan status…
Same detector as Commercial Spot Tester: black+silence spots, about one break every 10 minutes, a user min gap, and a black-frames-only retry when that count is short. Adds numbered break / break 2 chapters after intro/preview/recap and before outro. Files with other chapter names are skipped. Off by default so Unraid does not start a long ffmpeg job until you enable it.
Loading commercial-break scan status…
Simulated live TV for Jellyfin. Version, how this instance is running, and the live encoder.
Live stream format plus encoder. Change this on the Transcode tab.
ChannelFlow stands on work from these people and projects. Thank you.
slappy's_toon_takeover video and Catherine_Wolfe.jpgslappy's_toon_takeover audio and weather alert soundsApply the FlowWire News preset (or set a channel to content type News). ChannelFlow-Server fetches RSS, scrolls headlines with an ASS overlay, shows story photos when the feed includes them, and optionally reads them with TTS. The bulletin opens with intro music and FlowWire.png, then Catherine_Wolfe.jpg while she reads the anchor intro. Story photos play during the newscast, her photo returns for the sign-off, then outro audio plays with the logo again.
Catherine reads the anchor intro before the stories, then the anchor outro as her sign-off immediately before outro audio. Leave both blank to use her defaults. Her photo is images/media/FlowWire_News/Catherine_Wolfe.jpg. Bumper music comes from audio/FlowWire_News/FlowWire-intro.mp3 and audio/FlowWire_News/FlowWire-outro.mp3. Override those with intro.mp3 and outro.mp3 in the server news folder, or a short clip from News music is used if nothing is found.
AI TTS uses the provider, API key, and AI voice on the AI tab. If AI speech fails, ChannelFlow falls back to Google TTS.
Uses the AI tab provider to merge RSS into a single newscast presented by FlowWire News anchor Catherine Wolfe, dropping duplicate coverage of the same event. Custom anchor intro/outro still override her open and sign-off if you fill them in. She will call the show FlowWire News, not FinTV News.
Turn on Play no music at all for TTS or silence with no bed. Otherwise pick a Jellyfin music library, or leave on Off Air to use the Off Air background music setting.
The news channel plays a premade MP4 (intro + speech + story images/text + outro). ChannelFlow builds that file every 6 hours (00:00, 06:00, 12:00, 18:00 local) from unused RSS headlines. The previous video stays on air until the new file is finished and verified. If there are no new stories, or fewer than the minimum, the run is skipped.
No bulletin has run yet.
Add or remove feeds. Disabled feeds stay saved but are skipped until you enable them again.
Catalog sync
Starting…