A coding agent writes title.ts, checks a grid of frames, moves the .mp4 tag off the headline, checks again and renders title.mp4.

Video your coding agent can write, check and ship.

00:00:00:00 Drag to scrub
0
00:00:00:00 Before the first frame

255 frames at 1920×1080, rendered from film.ts in 2.6 seconds on an Apple M1 Pro with framefields@2.1.1 from npm. Download the MP4.

What's in the package

One WebGPU engine for video production, image editing and motion graphics. Driven with TypeScript, rendered straight to pixels.

Why not record a headless browser?

How a frame is captured

framefields: Rendered straight to a GPU texture

Headless ChromiumLay out the DOM, then take a screenshot

Timing

framefields: The frame number

Headless ChromiumWall-clock timers that can drift

Text

framefields: Curves evaluated per pixel

Headless ChromiumRasterised on the CPU

Memory per worker

framefields: 200-400 MB

Headless Chromium2-4 GB

Image editing, 3D, VFX

framefields: In the package

Headless ChromiumBring your own

Longer films made with it

Each one is a folder in the repository's examples. They play on YouTube.

Cloud rendering

Push your film and render it on framefields GPUs. Long films are split across several GPUs and come back as one file.

From git push to MP4, with no GPU of your own

Name each cut once in framefields.json. Then render it by name from the terminal, from code, or from the dashboard with a few clicks.

  • Split automatically. framefields measures the film first, then spreads a long one across up to 10 GPUs and joins the parts without re-encoding.
  • Priced before it runs. --plan shows the GPUs, the time and the estimated cost. You pay per GPU second used.
  • Straight from your repo. Connect GitHub once and every repo renders, private ones included.
terminal framefields CLI
$ npx framefields render film --cloud --plan
Plan: 4 workers, 1 h 50 min of render work, ready in
about 35 min, estimated $1.20.

$ npx framefields render film --cloud
Measuring frame costs on one worker to plan the split…
Rendering 4 chunks and the audio in parallel…
Rendering 62% (66960/108000 frames), about 13 min
left, $0.74 so far.
Joining 4 chunks…
Done in 34 min: output/film.mp4, 6620 GPU seconds, $1.18.

AI Gateway

More than 100 image, video and audio models behind one API key, billed from one prepaid balance.

Generated stills, clips and voice, straight onto the timeline

Call image, video and audio models from the same TypeScript that composes your film, without a separate SDK or account for each provider.

  • One key. Seedance, H3, ElevenLabs, Nano Banana and the rest.
  • Prepaid. Each generation is charged at provider cost plus a small margin.
composition.ts TypeScript
import { ai, Layer } from "framefields";

ai.config({ apiKey: "ff_live_..." });

const { data } = await ai.subscribe("flux/schnell", {
  input: { prompt: "Neon monolith rotating in mist, 35mm film" },
});

const hero = Layer.image(data.images[0].url);

Give your coding agent the skills

Video, image editing and motion graphics — driven in TypeScript and rendered natively on the GPU.

Prompt your agent Navigate to https://framefields.dev/docs and learn how to install framefields
Add to your agent npx skills add gatewai-dev/framefields