Anyone want a CLI that turns your Plex library (or Kometa collections) into Tunarr channels automatically?
Built a tool that auto-creates Tunarr channels from your Plex library — curious if anyone else would want this
Been using Tunarr for a while and got tired of manually building channels, so I wrote a Python CLI that does it automatically. Thinking about cleaning it up for public release — wanted to see if there's any interest first.
What it does:
You run one command, it reads your entire Plex library (titles, genres, years, episode counts), and either:
\- AI path — exports a CSV of your library and a prompt you paste into Claude/Gemini/GPT-4o. The LLM curates themed channels using only titles you actually own. Stuff like "90s Action", "Slow Burn Thrillers", "One More Episode" — whatever fits your library.
You save the JSON it outputs and the tool deploys it to Tunarr.
\- No-AI path — auto-generates decade and genre channels from metadata alone. No LLM needed.
\- Collections path — if you're running Kometa with Letterboxd lists, Trakt, or manual collections, it turns every Plex collection into a Tunarr channel automatically. Re-run it whenever Kometa updates and it keeps the channels in sync.
Channels use Tunarr's random schedule so they loop forever with no dead air. Also has a Plex DVR sync step so new channels show up in the guide automatically.
Would anyone actually use this if I posted it? Happy to share it if there's interest.
\*\*\*\*\* UPDATE \*\*\*\*\*
This is all written with AI, so please help me out. I'd love to develop this into something more useful. Tell me what you think. [https://github.com/AlpineArchitecture/programmarr](https://github.com/AlpineArchitecture/programmarr)
***** UPDATE — Aug 2026: it's a web app now *****
Three months ago I asked if anyone wanted this. Enough of you said yes that I kept going, and it outgrew the CLI.
Programmarr is now a self-hosted web app — one Docker container on port 7979:
- Planner UI — tick the genres and decades you care about and it shows you exactly what it can build from YOUR library, with real counts. Per-show marathons, genre x decade cuts, studio/director/actor channels, TV network channels, classic programming blocks (TGIF, Must See TV), and franchise channels in release order (detected from TMDB + Wikidata, not name matching). - Deterministic. No LLM in the critical path — it's filters over your own metadata, so the same picks always give the same lineup. The AI path still exists, but it's optional and strictly additive now. - Live channels — mark one auto-updating and it re-checks against your library on a schedule and patches it in place. New episodes and new franchise films just appear. It never deletes and recreates the channel, so the Plex DVR mapping survives. - Optional commercials between shows via Tunarr filler lists. - Still does Kometa / Plex collections, same as before.
v0.8.0 shipped today. That release was specifically about surviving setups that aren't mine — Tunarr basic auth support, backups before any destructive deploy, connection testing during setup, and honest errors instead of confusing ones.
image: ghcr.io/alpinearchitecture/programmarr:latest ports: 7979:7979 volumes: ./data:/data
Requires Tunarr 1.x + Plex. MIT, no account, no cloud, no paid tier. https://github.com/AlpineArchitecture/programmarr
The CLI still works if that's what you prefer.