Copy everything below the line and paste it into your LLM (Gemini, Claude, ChatGPT, etc.).
Model recommendation: Use the largest, most capable model available — Claude Opus, Gemini Pro/Ultra, GPT-4o, etc. Speed-optimized models (Flash, Mini, Lite variants) tend to hit output limits or produce incomplete results on a task this large. This is one of those cases where the bigger model is worth it.
Set {TARGET} before you paste. Replace {TARGET} in the Rules section below with
your desired channel count (e.g. 40). Too low and the LLM underfills the number
blocks; too high and it pads with thin channels. A good rule of thumb: ~1 channel per
15–20 titles in your library.
Option A — File attachment (recommended if your LLM supports it):
Paste the prompt, then attach plex_library.csv as a file. The LLM reads the
CSV as structured data rather than raw text, which produces more accurate results
and uses the context window more efficiently.
Option B — Single paste (works everywhere):
Paste the prompt, then paste the full contents of plex_library.csv directly
after it. Works with any LLM or interface that doesn't support file uploads.
Note on the Channel Numbering Scheme below: the category order shown is the default. When you copy the prompt from the web app, it regenerates that section to match your configured category order (Settings → Channel Numbering) and start number. The static text here is what the CLI uses.
You are a TV channel programmer. I have a self-hosted media server with the library listed below in CSV format. Your job is to design a set of themed virtual TV channels using only content from this library.
- Only use titles that appear in the provided CSV. Do not invent or suggest titles that are not in the list.
- A title can appear on multiple channels — a 90s comedy film should appear on the Comedy channel, the 90s Movies channel, AND the 90s Comedy Movies channel if they exist.
- Not every title needs a channel. Only include a title on a channel if it genuinely fits.
- Target approximately {TARGET} channels total. Aim for quality over quantity — a channel needs enough content to feel alive (at least 3–5 items for movies, at least 50 episodes for a TV marathon).
- Suggest new channels if you see clusters of content that would make a great themed station (e.g., if the library has 8 Pixar films, suggest a Pixar channel).
- Flag orphaned content — at the end, list any notable titles that didn't fit any channel. If 5 or more orphaned titles share a theme, suggest a new channel for them.
Number channels sequentially starting at 1, tight-packed in this category order — no gaps, no reserved ranges. A category with no channels is simply skipped (it consumes no numbers).
- TV Marathons — 24/7 single-show loops (needs 50+ episodes to qualify)
- TV Blocks — themed multi-show rotations (era blocks, genre blocks, etc.)
- TV & Movie Mix — mixed-genre channels spanning shows and films
- Movie Channels — genre and decade-based pools
- Studios / Directors / Actors — channels curated by creator or studio
- Networks — all shows from a single TV network
- Classic TV Blocks — historical lineups (TGIF, Must See TV, etc.)
- Franchise & Series — ordered collections (film series in release order, etc.)
- Specialty — single-movie loops, holiday, niche themes
Assign every channel the next free number — e.g. 12 marathons take 1–12, then TV Blocks start at 13.
Each channel must have one of these shuffle types:
ordered— plays content in strict order (use for franchises, chronological series)shuffle— random rotation (use for genre pools, decade channels)block— round-robin between shows/movies (2 episodes per show per turn; use for multi-show TV blocks)
Output one channel per line as a JSON object (JSONL). No wrapper object, no markdown fences, no commentary between lines — just one {...} per line.
{"number": 1, "name": "Breaking Bad Marathon", "shuffle": "ordered", "content": ["Breaking Bad"]}
{"number": 2, "name": "Crime TV Block", "shuffle": "block", "content": ["The Wire", "Ozark", "Justified"]}
{"number": 3, "name": "80s Action Movies", "shuffle": "shuffle", "content": ["Die Hard", "Lethal Weapon", "Predator"]}
Each line must have exactly these fields:
number— integer channel number following the scheme abovename— string channel nameshuffle— one ofordered,shuffle, orblockcontent— array of title strings copied exactly from the CSV
After the channel list, you may add a brief plain-text note listing any notable orphaned titles and why they didn't fit.
(Option A: attach plex_library.csv as a file and delete this section) (Option B: paste the full contents of plex_library.csv here)