YardToonz Reactive
Obvious Frontier Build Atlanta · 2026An internal creator system that reduces the time between a culturally relevant moment and a reviewable YardToonz cartoon, while keeping editorial selection, rights clearance and final approval with a human.
- Sole builder and technical decision-maker
- Obvious Frontier Build, Atlanta, 2026
- Deployed demo on Railway
- TypeScript · Next.js · SQLite · FFmpeg

Engineering brief
- Architecture
- A Next.js app and a separate long-running worker over one SQLite database and one artifact directory. The web app records decisions and reads state; the worker claims one pipeline stage per poll tick and does the FFmpeg and provider work. Drizzle owns the schema, Zod owns every boundary.
- The hard part
- Making a media pipeline safe to retry. Stages are claimed with database leases rather than held in memory, each stage fingerprints its inputs, and every output is persisted as a typed artifact, so a worker that dies mid-transcode releases its claim and the next attempt can tell resumption from repetition.
- Testing
- 77 test files: 46 unit, 28 integration and 3 Playwright specs. The browser walkthrough rehearses the whole path against a production build with the real worker process, then downloads the finished MP4 and probes it for 9:16 dimensions and an audio stream.
- Known limitation
- This is a demonstrable vertical slice, not production infrastructure. SQLite, local artifacts and a polling worker share one Railway service, which is a deliberate fit for a single-operator demo and not what a multi-tenant version would use.
The bottleneck was latency, not judgment
Making a YardToonz video already worked. What it took was a chain of separate decisions across separate tools: find a moment worth animating, read how an audience actually responded to it, decide whether it fits the YardToonz voice, confirm there is permission to use it, pick a usable few seconds, style the visual, animate it, restore the audio, then look at the result and decide whether it ships.
None of that is a shortage of creative judgment. It is production latency. Every handoff between tools is a place the work sits, and a cultural moment does not wait. Reactive exists to compress the distance between noticing something and having something reviewable, without taking any of the judgment out of it.
One path, with a human at three points on it
Candidate intake, scoring, human approval, rights confirmation, orchestration, the worker stages, artifact storage, QA validation, preview, and finally approval and download.
Scores stay separate
Viral momentum, humor response and Yard Toonz fit are computed and shown independently, each with the inputs it used. They are deterministic rankings over supplied metrics, not predictions of how anything will perform.
A human chooses
Nothing enters production because it scored well. An editor approves a candidate, and the system records that as a decision with a timestamp.
Rights are a hard gate
Confirmation is stored before any upload or processing. Without it the orchestrator reports a blocker and will not advance.
Nothing publishes
The last step is review and download. There is no posting integration, and the finished file leaves through the operator.
The calls that shaped it
A separate worker, not a web request
FFmpeg work runs for tens of seconds and must survive a deploy. Doing it inside a request handler ties a browser connection to a transcode and loses the job when the process restarts. The worker polls for claimable stages and runs one per tick, so the web app only ever reads state.
Database-backed claiming, leases and heartbeats
A stage is claimed with a lease rather than handed out in memory, so a worker that dies mid-stage releases its claim on expiry instead of stranding the job. The worker writes a heartbeat the health endpoint reads, which is how you tell "queued" apart from "nothing is running".
Input fingerprints and artifact lineage
Each stage records a fingerprint of its inputs and the artifact it produced. A retry can tell whether it is repeating work or resuming after a crash, and the finished video can be traced back through all seven artifacts to the source clip.
SQLite and Drizzle, deliberately
The demo has to run identically on a laptop and on one Railway service with no external dependencies. SQLite with typed Drizzle migrations gives a deterministic local-first setup, and the schema keeps the stage-name and status constraints in the database rather than only in application code.
Zod at every external and cross-process boundary
Uploads, provider responses and the rows the worker and the web app exchange are all parsed rather than trusted. Schemas are strict, so an unexpected field fails loudly at the boundary instead of flowing into a stage that half understands it.
Providers chosen independently, and attributed
Image and animation providers are selected separately, so the whole path runs on mock adapters with no paid credentials. Whichever provider produced an artifact is recorded on it, which is why the QA report can check attribution rather than assume it.
Rights clearance as a hard gate
A public post is not permission. Confirmation is timestamped and stored before any upload or processing, and the orchestrator refuses to proceed with a RIGHTS_NOT_CONFIRMED blocker. It is a state the system cannot route around.
Diagnostics that leak nothing
The diagnostics view reports provider selection, worker health and stage state without exposing prompts, filesystem paths or credentials, so it is safe to leave reachable on a deployed demo.
Seven stages, one claimed at a time
Each stage is a persisted row with a status, an attempt count and a lease. The worker claims the next claimable stage, runs it, writes its artifact, and releases. A stage that fails is retried from its own recorded inputs rather than from the beginning.
- 01
Ingest source
- 02
Extract media
- 03
Select keyframe
- 04
Style image
- 05
Animate image
- 06
Mux and normalize
- 07
Validate output

What the repository actually shows
Deterministic inbox
Ten seeded candidates, ranked highest first, identical on every reset.
Separate scores
Viral momentum, humor response and Yard Toonz fit stay separate and explainable, weighted 40/30/30 into an overall figure.
Segment constraint
The selected segment is validated to 5 to 8 seconds before production starts.
Artifact lineage
Seven artifact kinds preserved, from source video through to final video.
Output validation
The final MP4 is probed for 9:16 dimensions and a present audio stream.
QA registry
Ten deterministic checks, including aspect ratio, audio presence, duration window, provider attribution and lineage completeness.
Test coverage
77 test files: 46 unit, 28 integration and 3 Playwright specs, including a full browser walkthrough.
No credentials required
The complete mock workflow runs end to end without an OpenAI or Runway key.
What a scaled version would change
The current deployment is a vertical slice built to be demonstrated end to end by one operator. SQLite, a local artifact directory and a polling worker on a single service are the right size for that, and the wrong size for concurrent operators.
Scaling it moves three things: persistence to a managed database, job execution to a real queue with multiple workers, and artifacts to object storage. The domain contracts would not move. Stage claiming already assumes competing workers, artifacts are already addressed by kind and fingerprint rather than by path, and every boundary is already parsed rather than trusted, so the interesting logic survives the swap.
The brand the system serves
YardToonz is a Jamaican claymation-style comedy brand. It takes moments people already recognise, the domino slam, the sudden rain on fresh laundry, the change calculation that turns into a committee meeting, and animates them as short-form comedy.
The audience response came first. The account has passed 32K followers and 328K likes, and its most-viewed cartoon sits above 1.2M views. What that proved was demand, and what it exposed was the production latency behind meeting it. Reactive was built for that gap. It shortens the time between a moment and a reviewable cartoon, and it leaves the choice of what is actually funny, and what actually ships, with a person.