f(t) → frame· byte-identical across runs· zero assets· one HTML file

One file. One function f(t). Frame-exact.

mitate — 見立て, to see one thing as another. It sees any input — a document, a codebase, an idea — as a scene, and hands an agent the primitives to build it: an explainer, a cutscene, a comedy short. Deterministic, so the same t always renders the same frame.

01 · deterministic

A film is a pure function of time.

No simulation state, no wall clock, no random() at runtime. seekTo(8) after seekTo(2) equals seekTo(8) cold. One scene file is both the live HTML and the source of a frame-exact render.

02 · agent-directed

Primitives, not a script.

An agent is handed the building blocks — geometry, materials, a cinematography solver, a character scaffold — and composes them. Nothing about a character or a shot is hardcoded; each is a point in a parameter space.

03 · any register

Only the subject changes.

Explainer, cutscene, meme, comedy short, chart. The geometry and the caption voice change by field — never the pipeline, the contract, or the review method.

02The filmsfive works · one pipeline

Lit on the stage. Each one a single file that plays from disk.

Every title below is one self-contained HTML page — three.js embedded, zero fetched assets. The loop you see is the real render; open any film to run the live scene. Each is tagged with the primitives an agent composed it from.

SCENE 01 — INT. WORKSHOP · EXPLAINER

Gearbox

A five-beat mechanism, judged frame-for-frame against the frozen predecessor. Switch one line — workshop to neon — and the same beats become a dark stage where the light is the subject.

bible
run 16.5sbeats 5loop seamless
buildWorlds()TSL node materialsshot solverstyle biblesRenderPipeline post
SCENE 02 — EXT. MEADOW · COMEDY SHORT

Bear & Bees

Silent-comedy timing: a 2.6s hush — one scout bee at the bear's eyeline, a double blink to camera — against 1.1s of everything at once. The gag reads with zero captions. Every contact is probe-measured.

run 21.3scamera lockedcaptions none
buildCharacter()fur packgait from distanceBox3 contact probespause-then-fast beats
SCENE 03 — INT. STAGE · CHARACTER DEMO

Menagerie

A furred bear, a fabric-shirted human, and a text-invented three-eyed strider — three proportion vectors through one buildCharacter. Three gaits (quadruped, biped, long-stride), all squint-distinct, all planted.

walk-in loopskeletons 1characters 3
proportion vectorstwo-bone IKchainCurl / chainWavefur + fabric packs
SCENE 04 — INT. STUDIO · PACK SHOWCASE

Materials

Three surfaces in three beats — TSL-native cel banding, subsurface scattering through thin ears, and transmissive glass with dispersion over an emissive core: the overlapping-transparency ordering case, solved.

beats 3surfaces 3loop held
MeshToonNodeMaterialMeshSSSNodeMaterialMeshPhysicalNodeMaterialtransparency ordering
SCENE 05 — CHART TIER · PRIMITIVE ISOLATION

Noise Chart

Eight shader primitives, one per cell — the MaterialX baseline row, a hash-lattice row, and a sin-hash drift control. New primitives are proven here, in isolation, before any film is allowed to use them.

cells 8control 1smoke 20/20
mx_fractal_noisemx_worley_noisemx_aastephash latticedrift control

Read the primitive chips on each film. Nothing there is bespoke: gait is one function that plants feet from distance travelled — biped and quadruped differ only by phase offset. A character is a point in proportion space plus a material choice, never a shipped mascot. A look is one object switched by one line. That is the whole bet — build primitives that generalize, and any register becomes cheap to shoot and re-shoot.

03How it's directedprimitives → pipeline

An agent doesn't write a movie. It composes primitives.

The skill ships the building blocks and the discipline. Any harness — Claude or otherwise — reads them and directs a film: it writes a beats table, scaffolds a scene, reviews it on three axes, passes an automated gate, and delivers. Here is what it's handed.

BEATS[]

The beats table

The only place a timestamp exists. Named beats with accumulating durations; retiming is one edit. Every caption and camera keyframe derives from it.

buildWorlds()

Procedural geometry

Every shape authored in code, zero fetched assets. Even physics is closed-form — a drop is y₀ − k·(t−t₀)², evaluated from t, never integrated.

TSL + MaterialX

Node materials

Cel, subsurface, physical glass, driven through node slots. GPU-computed MaterialX noise gives surfaces detail with no image files.

SHOTS[]

The shot solver

A cinematographer's vocabulary — subject, size ladder, angle, lens, cut — compiled onto the camera per frame. Raw keyframes are gone on purpose.

buildCharacter()

The character scaffold

One parametric skeleton family. A proportion vector plus a material choice returns a posable rig — two-bone IK, planted gait, neck and tail chains.

BIBLES / STYLE

Style bibles

The whole look — palette, exposure, post, lens, cut pace, camera energy — is one object, switched by one line. A hex literal left in a material is a look hiding from the switch.

RenderPipeline

The post chain

Always on, pass-through by default. Bloom and depth-of-field are STYLE flags; rack focus is two shots differing only in focus, joined by a blend.

sheet · motion · smoke

The instruments

Contact sheets, squint strips, motion profiles, and an automated gate. The lint can reject a scene; it can never approve one. Looking is the method.

The pipelinespec → delivery
01 · SPEC

Beats first

Write the beats as text. Check meaning while it's still words — a beat you can't follow is a slideshow.

02 · SCAFFOLD

One file

Geometry, materials, characters, shots assembled into a self-contained HTML scene on the window contract.

03 · REVIEW

Three axes

Composition (inside a frame), continuity (between frames), semantics (captions covered). Looking, not filenames.

04 · GATE

Smoke

Determinism, a shipped-frame check, aspect containment. The automated floor before any full shoot.

05 · DELIVER

Four formats

HTML, MP4, WebP, AVIF — chosen at spec time. Whatever ships, the one scene file stays the source.

the whole bet

Generalize the primitive. Never hardcode the character.

The lesson from every film is the same: don't copy a walk cycle per creature — parameterize the gait. One function plants feet from distance travelled; two legs and four legs are the same function with different phase offsets. The character scaffold ships anatomy; the scene ships character. That is what makes a new register cheap to generate, and cheap to re-shoot.

04The contractwhy it stays deterministic

Two rules everything else derives from.

The scene is a pure function of t. Tooling talks only to a fixed window contract, never to scene internals. Hold those two, and one file is at once the live artifact, the render source — and, later, an interactive experience for free.

kernel
Pure functions — pose(state), materials(state), camera(state). No clock, no input, no side effects. State is a plain value.
driver
Produces the state stream. The timeline driver is state = g(t) from the beats — that is the film. An input driver (state = g(events)) reuses the same kernel later — that is the interactive spike.
contract
seekTo · DURATION · BEATS · FRAME · sceneReady — unchanged, implemented by the timeline driver. The one seam tooling is allowed to touch.
tooling
Build, shoot, smoke, instruments — talk only to the contract. Which is why the recorder and the live page can never disagree about when.
1
self-contained HTML file per film — three.js embedded, opens from disk
0
fetched assets — geometry and texture compute on the GPU
2
backends: WebGPU with a transparent WebGL2 fallback, plus Canvas2D
~2.3×
faster on hardware WebGPU-Metal vs the WebGL2 fallback path
05Roadmapbuilt · next · later

The scaffold grows by adding primitives, not characters.

Every phase raises the ceiling for all registers at once, because it lands as a reusable primitive — a material pack, a rig generalization, a bake step — not a one-off asset. Here is what exists and what comes next.

0 · 1

Foundation, regression & shading.

The node-stack templates, recorder, and instruments — gated green on both backends. Cel, subsurface, and glass material packs, verified under byte-determinism.

done
2

Character scaffold.

One parametric skeleton family with two-bone IK, distance-driven gait, neck and tail chains, and fur/fabric packs. A bear, a human, and an invented creature from one buildCharacter.

done
3

The human — faces & expressions.

A face morph basis, an expression library, hands, and hair. The bar: expressions carry the beat in the caption-covered pass — the words are not doing the work. Scaffolded as generalizable primitives, not per-character rigs.

4

Physics bake.

A build-time simulation step: simulate once, bake to keyframes, play back pure. Cloth, secondary motion, and soft contact — with runtime determinism fully intact.

planned
5 · 6

Registers & the interactive spike.

Cutscene and meme film-language extensions; then an input driver over the unchanged kernel — the same characters, materials, and camera solver, now responding to events instead of a clock.

planned

Hand an agent the primitives. Get back f(t).

mitate installs as a Claude Code plugin. Point it at any input, in any register, and it directs — spec, scaffold, review, gate, deliver.

terminalclaude code
$ /plugin marketplace add fblissjr/mitate
$ /plugin install mitate@mitate