Skip to content
Browse the docs

Docs / Architecture

The episode pipeline

Every step from a topic to a published post, which part runs it, what it reads and writes, and where a failure goes.

An episode is made by one job that runs on one GPU slot, from a topic to a finished, checked video in the library. Publishing it is a separate, smaller job per platform. This page follows both, says which part of ChannelForge runs each step, and what happens when a step fails.

 topic ──▶ job queued (price held) ──▶ GPU slot assigned ──▶ files laid out
                                                                  │
   ┌──────────────────────────────────────────────────────────────┘
   ▼
 writer plans scenes, narration, captions, music ──▶ stills checked ──▶ full render
                                                                          │
   ┌──────────────────────────────────────────────────────────────────────┘
   ▼
 measured gates ──▶ independent critic ──▶ (fix round) ──▶ brought home
                                                               │
           ready ◀──────────────┬─────────────────────────────┤
           │                    └──▶ held (not charged)        │
           ▼                                                   ▼
 settled: charged what it used          lessons for the channel's next episodes
           │
           ▼
 slots post it, one job per platform ──▶ measured ──▶ the next topics and briefs

1. A topic#

Every channel keeps a backlog of episode ideas, each with its hook, its angle, its key facts and their sources. Its first topics are planned right after its kit is built, from the channel's niche, its voice and the project's brief; the backlog is topped up as it runs low, and every write to it skips a near-duplicate of a topic already there. Ideas also come from:

  • a breakout follow-up, when a post takes off;
  • comment themes, the questions a channel's viewers asked most;
  • the outlier radar, when an account the channel watches has an upload far above its usual;
  • you, choosing a topic for a particular episode.

Where the originality guard is on, topics that would repeat one of the channel's last 50 episodes are set aside before any GPU time is spent. Where the channel approves storyboards first, the episode is planned as a storyboard — its hook, scenes, facts with their sources, payoff and call to action — and waits for a yes before it is made.

2. The job is queued#

Who starts itHow
the schedulerkeeps each ready or live channel stocked: up to its Keep ready episodes waiting for its connected platforms, at most its New episodes a day, one generation at a time per channel
a memberGenerate on the channel page, a one-click setup, an approved storyboard
your code or an assistantthe REST API or the MCP server, with a price ceiling

Whoever starts it, the same thing happens in one database transaction: the job is written with its price held, under the workspace's and the channel's monthly spending caps. Not enough credits, or a cap in the way, and nothing is written at all. The scheduler records why a channel could not generate and carries on by itself once it can.

3. A GPU slot#

The GPU fleet's dispatcher gives free slots to queued jobs by fair share: jobs of a higher plan tier first, then the workspace that has used the least GPU time in the last day for the weight of its plan, then the oldest job. A big workspace cannot starve a small one, and a workspace never runs more GPU jobs at once than its plan allows. When the queue needs more slots than are free or arriving, the fleet starts the stopped machine with the lowest expected cost. Two jobs that would both rewrite a channel's files (its kit, its brand suite, its episodes) never run for that channel at the same time. See The GPU fleet and isolation.

4. The files are laid out#

The job's runner, on the control plane, prepares the channel's working tree: its kit, brand, episode history, lessons and topics from the channel's private archive in storage, and its settings from the database (narrator, language, quality, caption style, the endings, a mascot or a cast where it has them). It then lays the job out on its slot:

  • the pipeline's code, read-only and versioned — a job always runs the code version it started with;
  • the tenant's own files, writable only by the job's own user;
  • the job's tokens — one for the model gateway, one for the voice service — in a file only that user can read.

5. The writer#

The episode is written by an agent: a Claude model running on the slot, with the channel's kit, a brief and the lessons of the channel's earlier episodes. It plans the story against what the kit can draw — scenes, narration, captions, music — and writes the episode as code.

  • Stills first. It renders stills and looks at them before anything is rendered in full; what looks wrong is fixed while it is cheap.
  • The narration sets the clock. Each line is spoken by the voice service in the channel's narrator's voice and language, and the picture and captions follow its timing.
  • The full render runs in the kit's renderer on the GPU, at 1080 × 1920 and 30 frames a second, with the sound mixed under the narration and the channel's finish on the picture. A 90-second edit for Facebook is cut from it.

Its model calls reach the gateway only through the job's own encrypted session, with a token that names the job and caps what it may spend; the critic has a separate budget the writer cannot touch.

6. Checked#

The finished video goes through the quality system: measured gates (picture, sound, captions, pacing, flashes, units, originality and more), then an independent critic that did not write it. A failure goes back to the same writer as a fix round, with the reports. An episode that passes is ready; one that still has blocking points after its rounds is held.

7. Brought home and settled#

  • The video is checked to be readable, then stored with its thumbnail, its Facebook edit, its posting texts and its quality report, under the workspace; the episode's record goes to the database, ready or held. Where the originality guard is on, the episode is compared with earlier ones before it is recorded, and a near-duplicate is held.
  • The channel's archive is saved again, with the topics used and the lessons this run left.
  • The job is settled: charged what it really used — model calls, narration and GPU time, at the plan's rate — and the rest of the hold is released. A held episode costs nothing.
  • The member who started it is told, the workspace's webhooks get episode.ready or episode.held, and the slot's folder is removed.

8. Published#

The scheduler visits every channel whose schedule is on. At each of its posting times it queues one small posting job per chosen, connected platform, for the oldest ready episode that platform has not had — only approved ones where the channel asks for approval. Posting jobs run on the control plane's workers, not on GPUs, with the workspace's sealed tokens for that account. The rules that keep posts safe — once only, within the platforms' quotas, at a human pace — are in The publishing engine.

9. Measured, and fed back#

Insights reads each post's numbers from the workspace's own accounts, hourly while a post is young, and analyses them within the workspace. What it learns flows back: breakouts start follow-ups, the hook lab learns which openings hold a channel's viewers, the retention loop turns where viewers leave into rules for the next scripts, comment themes become topics, and the weekly coach turns it all into recommendations. Learning from one workspace's platform data never leaves that workspace. See Insights.

Who runs what#

StepRuns onReadsWrites
Topicscontrol plane (one model call through the gateway)the channel, its niche, its historythe channel's backlog
Queueingweb app or control planeprices, caps, creditsthe job and its hold
DispatchGPU fleetthe queue, the machines, the last day's GPU usethe slot assignment
Layoutthe job's runnerthe channel's archive and settingsthe job's folder on its slot
Writing, render, checksthe GPU slot, as the job's own userthe kit, the brief, the lessonsthe episode's files
Model callsmodel gatewaythe job's token and budgetusage per workspace and job
Narrationvoice servicethe job's narration tokenthe spoken lines, their usage
Bringing homethe job's runnerthe slot's outputstorage, the episode's record, the archive
Settlingdatabase functionsthe job's metered usagethe ledger
Postingcontrol-plane workersthe episode, the sealed account tokensthe post's record
Measuringcontrol-plane workersthe workspace's own accountsthe workspace's measurements

Where a failure goes#

What went wrongWhat happensCharged?
a failure on our side, or the model provider is overloadedretried by itself after 30 seconds, 2 minutes, 8 minutes … up to the job's attemptsnot if it finally fails
the GPU machine was lost (a pre-emption, a crash)the job goes back to the queue and is retried more patiently, up to three more timesno
the critic did not pass the episode after its fix roundsthe episode is held in the library for you to look at, release or let go; no second episode is made in its placeno
the job's model budget ran out mid-roundthat round ends; the checks judge what it made — ready, or held; a render cut off gives back the version the round started fromwhat it used
something to fix on your side (no kit yet, an account to reconnect)the job stops at once with the reason, and is not retriedwhat it used — usually nothing, as these checks come first
a platform refused a postthe post says why; the slot's other platforms go on; the episode waits for the next slot or a retryno
you cancelled ita queued job stops at once; a running one at its next checkpointa queued one nothing, a running one what it used

A job also has a time limit for its kind; a GPU job that passes it is stopped, and a runner that stops reporting is noticed by its lease and its job taken back. See Reliability and recovery.

Films, translations and clips#

Other kinds of work use the same parts with their own steps. A long-form film is planned, fact-checked and scripted on the control plane, then made on a whole GPU machine of its own in acts, each checked against the film's quality floor, and charged once at its fixed price; see Long-form films. A translation renders an episode again in another language with the channel's kit, keeping its timings. A compilation joins ready episodes into one long video. Clips of your own footage are transcribed, chosen and rendered on a slot.

Something missing or unclear? Tell us and we will improve this page.