Newspresso is a platform I built that produces short daily news-explainer videos. It has a render farm where each render job is a headless Claude Code session that authors the video.
That sentence needs unpacking. A Newspresso episode is not generated video. It's a designed composition — HTML, CSS, and GSAP on an HTML-to-video framework — with real cartographic geometry for maps, charts drawn from actual economic data series (FRED, World Bank, IMF), archive footage, and drawn props. AI-generated video appears only as short cutaways: one to three percent of screen time. A render job hands an agent a brief, a scripted episode, and a media manifest; hours of tool calls later, the session hands back a finished cut and a memo about it.
Why the workers are agents
The predecessor taught me the economics. My earlier video platform (CreativeStudio) generated its visuals with video models, and the model bill was 70–80% of every episode's cost — finished episodes ran $150–220. Newspresso's answer is architectural: don't generate what you can design. Motion graphics built from real data look more credible for news than generated footage, and they cost compute time instead of per-second model fees.
But designed compositions have to be designed by someone, per episode, daily. That's the render farm: creative work at scale, done by agents, orchestrated like any other fleet of unreliable workers.
The ledger so far: eight episodes in, no episode has cost more than $15 — the render sessions themselves bill a flat Claude subscription. Against the predecessor's $150–220, a 10x cost cut isn't optimization; it's architecture.
The queue
The farm is three Convex tables: jobs, renderers, events. A job carries the prompt, a model choice, and optionally a pin to a specific machine. Claiming a job takes a one-time token; holding it requires a heartbeat every 90 seconds.
Renderer presence is derived from the last heartbeat, never stored: a stored “online” boolean is a lie the moment the laptop lid closes. If heartbeats stop, the lease expires and the job becomes claimable again. Nothing in the system ever asks a worker whether it's alive; it checks when the worker last proved it.
Who may write what
The rule I'd keep above all others: every field has exactly one writer.
- The browser writes intent: enqueue, cancel, requeue.
- The worker daemon writes truth: claim, start, heartbeat, complete.
- The agent inside the session writes exactly one thing: its parting note, delivered with the cut.
With strict ownership, a stuck job has one suspect, a wrong status has one author, and debugging is reading, not archaeology.
The worker
The daemon polls every ten seconds and runs at most two jobs per machine — two headless sessions is what fits one Claude Max plan. Each job gets a detached git worktree; the daemon spawns claude -p with streaming JSON output and tails the stream, so the website shows each renderer's live stage, tool count, and running cost. caffeinate is pinned to the job's lifetime so a MacBook doesn't sleep mid-render. Interrupted sessions resume — same session, same worktree.
The parting note
Every render session must end with a handover memo: what it built, what footage it considered and rejected, and a “less sure about” section.
A production job typically runs 300-odd tool calls across two to three hours; one delivered a 7-minute-35 episode with 75 scenes — plus its memo.
Reviewing creative work you didn't make
I review cuts the way an editor reviews a director's cut, not the way a linter reviews code. I watch the delivered video on the site's render page and type only two things: what I watched and what should change.
The revision job wraps my verbatim note with the SHA-256 of the exact cut I reviewed and an instruction: apply exactly these revisions — do not rebuild, do not “improve” scenes I did not mention. Agents love improving things you didn't ask about. Pinning the review to the hash and scoping the edit is what keeps a revision a revision instead of a remake.
Ceilings and a floor
The cost machinery is mostly conventional, executed stubbornly: an idempotency ledger answers “have I already paid for this exact request?” before every paid call; raw generations are cached so re-trims are free; props resolve through a cheapest-first funnel — exact match, alias, vector search over a captioned reuse library, and only then drawing a new one for about $0.17; and there's a $50/day ceiling.
The interesting part is the floor. A media-density gate fails any episode that arrives with less than about $8 of media on screen, flagging it as under-produced. It exists because an early episode once shipped nine minutes of type-on-black and passed every other check. Budgets catch overspending. Only a floor catches the failure mode where the system spends nothing and produces nothing worth watching.
What I actually learned
The interesting parts were management: writing job specs an agent can execute without me in the room, leases so abandoned work gets reassigned, write ownership so state stays honest, handover notes so review starts in the right place, and revision protocols that respect the draft.