Amarna Video

Animation compiler

Prompt in, cartoon out.

Type a premise. Pick a style of cartoon. Amarna writes the episode, compiles it into scenes, and draws them at 60 frames a second in your browser — a watchable animated show you can then take apart beat by beat.

Open the app How it works No account. No key needed — the built-in writer runs on its own.
Two crew members arguing on a cargo hauler bridge, a planet through the window behind them, drawn in the Rubber Hose style: rubbery limbs, big cartoon eyes, warm muted colour.
Rubber Hose — noodle limbs, heavy line boil, film stock somebody left in a shed.
The same two crew members and the same planet, drawn in the Neon Drift style: a cool dark bridge with the planet and the console panels glowing.
Neon Drift — cool dark sets, glowing rim light, a camera that never quite stops moving.
The same two crew members and the same planet again, drawn in the Cutout Paper style: flat layered shapes with hard edges and hard drop shadows.
Cutout Paper — flat two-tone shapes, hard edges, every layer shadowing the one behind it.

The same second of the same show, in three of the nineteen packs. Nothing was rewritten or regenerated between them — a style is data the compiler reads, so changing it costs a recompile.

One sentence in, six things out

Every stage below runs from the same document. Change the document and only what depended on it is redrawn — which is why a style change costs a recompile rather than a regeneration.

01 Writes

A show bible, a three-act episode and a per-scene shot list, from one sentence — with the built-in writer or with Claude — in one of six registers, from deadpan to the 2 a.m. one.

02 Compiles

Procedural sets for 68 places, seeded characters, blocking, a camera track, baked lip sync, effects, captions and an audio-description track.

03 Renders

60fps on a canvas, in nineteen style packs across three shelves — variable-width ink, line boil, paper grain, rim light, haze, depth of field and gate weave.

04 Speaks

A deterministic formant synth driven by the same phoneme track that moves the mouths, so audio and lip sync cannot drift apart. A thirteen-control mix desk sits on top. With a key, a real speech provider replaces it.

05 Edits

A timeline where every beat is a block: click to select, drag to re-order, drag the edge to hold it longer. Ten fields per beat in the inspector. Everything is undoable, and the document survives the tab closing.

06 Exports

mp4 via WebCodecs at 360p–2160p, WebM where WebCodecs is missing, plus a still, a .wav, captions, the screenplay and the show.json itself — which you can drop back on the page to reopen.

Nineteen styles, on three shelves

Each style is data — ink, fill, paper, figure proportion, motion cadence and camera behaviour — so switching one is a recompile, not a rewrite. Underneath them sit the same seventy controls, and moving any of them saves a tune beside the style. Every pack is named in our own terms; none is named after anybody's property.

Cartoon drawn, flat, and unashamed of it

  • Cutout Paper
  • Flat Ink
  • Rubber Hose
  • Neon Drift
  • Chalk Pastel
  • Bold Marker
  • Prime Time
  • Sharp Cel
  • Chibi Pop
  • Atomic Retro
  • Deco Noir
  • Wobble Gag

Late night where the writing carries it and the drawing is free to be blunt

  • Late Cable
  • Pen Wobble
  • Grim Ink
  • Crisp Vector

Naturalistic real proportion, real light, real distance

  • Painted Real
  • Soft Key
  • Traced Live

How it works

The language model writes a document and then stops. Everything after that point is ordinary code with a seed, which is what makes the same premise draw the same frames twice — and what makes a single beat editable without regenerating the show around it.

The model writes

It produces a structured show document — characters, scenes, beats, ten fields each — and never touches a pixel. Its output is validated against a schema before anything downstream sees it.

The compiler stages

Sets are generated for the named place, characters are seeded from their description, and the blocking, camera and lip sync are derived. Same document, same staging, every time.

The renderer draws

A canvas, a style pack and a frame number. No frame depends on the one before it, which is why scrubbing the timeline is instant and why export is just the same function called faster than real time.

It runs as a repository too — the writer, the compiler and the renderer are all drivable from a terminal with no browser involved.

# the app, at http://127.0.0.1:5173/app
npm run dev

# document, screenplay, captions, description and audio — no browser
npm run generate -- "a haunted laundromat in a small town" --style chalk-pastel

# the same premise, written in a different register
npm run generate -- "a haunted laundromat" --register feral

# batch render to mp4
npm run render -- --in out/show.json --fps 24 --width 1280

Type a premise and see what it draws

The built-in writer needs no key and costs nothing. Everything happens in your browser.

Open the app