ChannelFlow

Sign in

ChannelFlow

Channels

Manage Live TV channels

Edit channel

Channel

Channel

Presentation

Library

Deep catalog options used by AI lineups and tagged library matching.

Commercial playlists

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.

ChannelFlow-Server

Simulated live TV channels for Jellyfin

Guide General Quick Pin Clients Channels Lineups Presets List Special Presentation Library Commercials CommercialBrainz YouTube Off Air Weather News Emergency Broadcast System AI Transcode Tasks About Credits

Quick Edit

Weather channels stream live local weather 24/7 from this US ZIP, city, or lat,lon. Display screens and units are on the Weather tab.

What's on across ChannelFlow-Server channels. Times use the schedule time zone from General. Click a programme for details.

Binarygeek119 Ready-made Channels

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.

Weeks lineups

Weekly day templates (Friday movie night, holidays, and each weekday). Click a day to show its 24-hour schedule in the grid above.

ChannelFlow Lists

Register Jellyfin playlists as ChannelFlow lists. Use them in Lineups, Overrides, Special Presentations, and AI slot edits.

Music video artists

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.

Import music video playlist

Paste a YouTube video or playlist URL per channel. Lookup and playback use the cookies.txt and SponsorBlock settings from the YouTube tab.

Connections Jellyfin Emby Plex Sidecar Other Removed items

Media servers

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.

Removed items

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.

Commercials

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.

Saved playlists

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.

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.

Assigned playlists

Current mapping

Every channel and the playlists it uses for breaks. Click a row to edit it above.

Sync YouTube commercials from CommercialBrainz.

CommercialBrainz YouTube Pool

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.

YouTube

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.

Loading YouTube settings…

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

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.

What viewers see
16:9 channels
Off-air image for 16:9 channels

No 16:9 off-air slate was found.

4:3 channels
Off-air image for 4:3 channels

No 4:3 off-air slate was found.

Off-air image shown during dead air and errors

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.

Local music packs

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).

Custom slate images

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.

USA slate

Stock: offline_usa_16_9.jpg and offline_usa_4_3.jpg

USA off-air slate

World slate

Stock: offline_world_16_9.jpg and offline_world_4_3.jpg

World off-air slate

Emergency Broadcast System

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 Generator

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.

Provider settings

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).

Weather guide metadata

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…

Channel lineups

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.

AI Preview

Primetime

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.

WeatherStar live channels

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.

Background music

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.

Location

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.

Display settings

Choose which WeatherStar screens play in the loop.

Screens

Live stream

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.

Loading stream pipeline…

Format

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.

Transcode

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).

General

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.

Client logs

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.

Quick Pin

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.

Clients

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.

Force commercial

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.

Maintenance

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.

News video

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…

Catalog cleanup

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…

Library scan

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…

ffprobe chapters

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…

True aspect ratio

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…

Commercial breaks

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…

ChannelFlow

ChannelFlow-Server

Simulated live TV for Jellyfin. Version, how this instance is running, and the live encoder.

Status
Loading…

System

Live stream

Live stream format plus encoder. Change this on the Transcode tab.

Credits

ChannelFlow stands on work from these people and projects. Thank you.

Authors

  • binarygeek119 — author of ChannelFlow
  • netbymatt — WeatherStar 4000+ and WeatherStar 3000+
  • jasongdove — ErsatzTV/next and ErsatzTV/legacy
  • liam8888999 — ErsatzTV-Filler

ChannelFlow

  • ChannelFlow — simulated live TV for Jellyfin, by binarygeek119
  • Bundled channel bugs and guide icons, including FlowWire

Music and generated media

  • Kevin MacLeod / incompetech — background music
  • Venice AI — slappy's_toon_takeover video and Catherine_Wolfe.jpg
  • ElevenLabs — slappy's_toon_takeover audio and weather alert sounds

Jellyfin

  • Jellyfin — media server, library, and Live TV tuner host
  • jellyfin-ffmpeg — FFmpeg build used for live encode (VAAPI, QSV, NVENC)

WeatherStar

  • WeatherStar 4000+ by netbymatt — look, fonts, backgrounds, and maps used by the native compositor (MIT)
  • WeatherStar 3000+ by netbymatt — 3000-style assets (MIT)
  • Original WeatherStar 4000+ by Mike Battaglia
  • TWCClassics — WeatherStar fonts and icon references
  • NOAA / National Weather Service — forecasts, observations, and alerts

ErsatzTV

  • jasongdove — ErsatzTV
  • ErsatzTV/next — ffpipeline capability-driven decoder selection
  • ErsatzTV/legacy — original ErsatzTV server
  • ErsatzTV-Filler by liam8888999 — weather, news, and offline filler

Playback and graphics

  • FFmpeg — live MPEG-TS encode, overlays, and TTS mux
  • ersatztv-ffmpeg by jasongdove — FFmpeg 8.1 build shipped in the ChannelFlow Docker image (same stack as ErsatzTV/legacy)
  • jellyfin-ffmpeg by Jellyfin — alternative FFmpeg build
  • SkiaSharp — in-process WeatherStar rendering

News, commercials, and AI

  • FlowWire news TTS may use Google Translate speech or the configured AI provider
  • OpenAI and Venice — optional lineup generation and speech
  • CommercialBrainz — optional YouTube commercial pool
  • yt-dlp — YouTube commercial playback
  • SponsorBlock — skip in-video sponsors during YouTube commercials

FlowWire News

Apply 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.

News videos

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.

RSS feeds

Add or remove feeds. Disabled feeds stay saved but are skipped until you enable them again.

Headline preview

Catalog sync

Starting…