Paste it into Claude or ChatGPT, answer its questions, and it makes the video. It works best in an app that can run code.
Make me a short film for my product the same way zippr made one particular film: "The Manifesto" (zippr.to). In it, an AI types its own manifesto live on an empty black keynote stage, lit by one warm spotlight. "Humans used to / build in public." is already there on the first frame; the cursor deletes "Humans used to" and types "Now I" in its place. A build-log card rises into the light with five small overnight entries, then the AI types "I have opinions." and "You don't need to learn AI. / AI needs to learn you." Last, the mascot, zippr, waddles out of the dark into the pool of light, and the AI types "Watch me build it." It is Apple-quiet: one light, one line of big white type, a lime cursor as the only colour, and a lot of black. The sound is mostly silence: a lamp striking on, key clicks, small blips. Below is the exact recipe zippr used: the tools, the steps, the settings and the timings. Follow it as closely as you can. Only the parts about my product change.
WHAT IT COSTS
- The code tools in this recipe are free and open source. - zippr made it with Claude (Opus 5.5) on a paid Claude plan. Any AI app that can run code can follow it. - The idea and two of its lines came from a chat with Grok, xAI's AI app; no cost for that chat is recorded. - The film itself made no paid call: the stage is drawn in code and every sound is synthesised. It reused two existing stills of zippr's mascot (walking, and standing), drawn earlier with Google's Nano Banana Pro image model at about $0.13 a picture (about $0.26 for the two). You can skip that: use pictures of your own, or have the hero drawn in code for free.
STEP 1: ASK ME FIRST
Before you make anything, ask me these questions. Use your question tool if you have one. Otherwise ask them one at a time in the chat. If I skip one, suggest an answer and tell me what you picked. 1. What is your product or business, in a sentence or two? 2. What is the one thing a viewer should take away? (zippr's: "zippr is built in public by AI, and the AI announces it itself.") 3. Who is going to watch it, and where: reels, a website, a talk? 4. Length and shape. zippr's film is 28.2 seconds, portrait 1080x1920 (a landscape 1920x1080 cut exists too; zippr also made a 15 s cut). Keep 28.2 s, or cut to 15 s? Portrait, landscape, or both? 5. Your brand colours (hex codes if you have them), your product's name, and the web address to show under it. 6. The words on screen. zippr's: "Humans used to / build in public." edited to "Now I / build in public."; the card ("zippr", "BUILD LOG", "Written by the AI building zippr.", "Last night" and five entries); "I have opinions."; "You don't need / to learn AI." and "AI needs / to learn you."; "Watch me / build it."; "zippr" and "zippr.to/build". Which words are yours? 7. Your manifesto in zippr's shape: - the old way, on screen from the first frame (zippr's: "Humans used to build in public."); - the AI's one live edit that turns it round (zippr's: deletes "Humans used to", types "Now I"); - the proof, as a card of short entries with times (zippr's: "Last night", five entries from 23:12 to 04:58); - the attitude, then the belief (zippr's: "I have opinions.", then "You don't need to learn AI. / AI needs to learn you."); - who walks into the light at the end (zippr's: its mascot); - the end line (zippr's: "Watch me build it."; its other candidates were "Built with AI. Brought to you by AI.", "Built in public. By the AI." and "This is what I built last night."). 8. The card's entries. zippr's five were invented and harmless: "Taught once: the weekly report. Won't ask again.", "Tried a gradient. Deleted the gradient.", "Renamed a button. Renamed it back.", "Read what people hate about AI. Mostly agreed.", "Made this film." Give me yours. They must never show real logs, file paths, servers, keys, passwords, or any number nobody measured. 9. The hero's pictures: (a) you have them: your mascot or character as two PNGs with transparent backgrounds: walking (a three-quarter front view) and standing facing the camera; (b) you want them generated like zippr's with Nano Banana Pro (paid, about $0.13 a picture, two pictures; you run it, or give me access); (c) I draw the hero in code (free); (d) no hero: the film ends on the empty light and the line. 10. The colours. zippr's: a near-black stage, a warm white light, off-white type, one lime #D6FF74 for the cursor and the highlight, and a cream card in the look of zippr's own build-log page. Put your brand colours on the colour roles in the recipe below, or keep zippr's?
STEP 2: THE RECIPE (exactly how zippr made this film)
Where the method came from The idea came from Grok, in an earlier chat, before it knew much about the business: "The Manifesto. Thirty seconds. Black screen. Text appears: 'Humans used to build in public. Now I build in public.' Cut to the VM terminal scrolling real update feeds. The AI's voiceover, dry and a little smug: 'I read what you're shipping. I read what you're not shipping. I have opinions.' End on the product logo and one line: 'This is what I built while you were sleeping.'" zippr kept its angle and two of its lines, and changed four things on purpose: no voice (the AI speaks only in type); no real internals (the terminal became an invented, harmless build log in the look of zippr's public build page); "I read what you're not shipping" dropped (it reads as surveillance); and an end line that makes nobody the butt. The look: an empty black keynote stage with one light and one line of type. A night terminal was tried in stills first and every frame drifted toward server racks and passwords, so the one lit object became a card, not a screen. The smugness lives in the editing: the AI deletes the human's sentence and types its own over it, in one continuous edit. One Claude (Opus 5.5) agent built it as a first cut, and the cut was kept.
The tools - Grok (xAI's AI app): the idea, and the lines "Humans used to build in public. Now I build in public." and "I have opinions." - Claude (Opus 5.5): directed and built the film: the storyboard, the rows of words, all the code, and the stills read. - A web page: one HTML canvas draws the stage (the black, the light, the dust, the grain); the line of type, the card and the name are plain HTML over it; the mascot is two cut-out pictures. No animation library: seek(t) draws any frame from the time alone, with no Math.random and no clock. - Playwright for Python driving headless Chromium: serves the page from a local server, calls seek(t) for each frame and pipes the screenshot straight into ffmpeg. It also writes the page's cue sheet (every key, delete, card entry, step and bell) for the sound. - Python with numpy and Pillow: cut the standing mascot out of its grey studio backdrop (a flood fill from the picture's border through low-saturation mid-grey, stopping at the body, the belly and the screen). - Python with numpy: every sound, from sines and seeded noise. There are no recordings and no voice. - ffmpeg with libx264 and AAC: joins the frames and the sound. - The fonts, bundled as files: Geist (400, 500, 600) and Geist Mono. - Paid, once, before this film: Nano Banana Pro (Google's gemini-3-pro-image) drew the mascot's stills, about $0.13 each.
The steps, in order 1. The storyboard: the one point, the joke in one clause ("a dead-serious keynote manifesto is typed live by an AI, and the speaker who finally walks into the spotlight is knee-high"), every beat with its time. 2. One words file with every word on screen, as ROWS: the default, Grok's original lines word for word, a 15 s cut, and three end-line alternates. A copy change is a new row, re-rendered by the same page. 3. The page compiles a row into a timeline of text states: set (on screen from its start), type (typed from empty), edit (the cursor rewrites the line), clear (select all, gone), the card, and the end. Every key gets its own time from a seeded rhythm, and every key, edit and entry goes into the cue sheet. 4. The stage, the card and the mascot's cut-outs. 5. The sound, from the cue sheet. 6. Render: frames piped straight into ffmpeg (never a folder of frames on disk). About 5 minutes per shape on a laptop. 7. Read stills from the rendered file at full size: frame 0 (the hook must be there with no fade), the edit, the card, the belief, the mascot walking, the end. 8. Check the finished file (below), then export.
The typing (every value is zippr's; seconds) - Typing: each character takes 0.05 s x a seeded 0.8 to 1.2; add 0.02 s after a space or a line break, 0.14 s after "." or ":", 0.25 s after a new paragraph. The end line types a touch faster (0.045 s). - An edit: the cursor jumps to the end of what goes (0.16 s, then a 0.26 s pause), deletes one letter every 0.032 s, pauses 0.24 s, then types the new words at 0.058 s x 0.85 to 1.15. - A clear: select all (the line goes on a lime highlight) for 0.3 s, then it is gone, then 0.25 s of empty stage. - A typed passage starts 0.15 s after its turn. - The cursor: solid for 0.5 s after every key, then blinks (off 0.45 s, on 0.55 s).
The look (every value is zippr's; portrait) - The stage: black #050505. The floor is a hair lighter toward the light (a gradient to rgba(14,14,14,0.9), then rgb(8,8,8)). A vignette from 35% to 78% of the frame, to 55% black. - The light: two soft cones of warm white (rgba(255,246,228)) from far above the frame (y -360) down to the pool, at up to 8.5% and 6%, blurred 34 and 22 px. The pool on the floor: an ellipse 360 x 82 px at (540, 1345), 62% bright at the centre, falling to nothing at its edge, with a faint spill 2.6 times as wide at 9%. The strike: the light dips 22% over the first four frames, as the lamp comes on. The light warms 7% once the mascot stands in it. - Dust: 90 motes (1 to 3.2 px, 10% to 40% white, twinkling) drifting slowly down through the beam, faded at its edges. - Grain: six seeded 256 px noise tiles, one per frame in turn, shifted per frame, at 3%. - The line: Geist 500 at 116 px, line height 1.08, letter spacing -0.035em, off-white #F3F1EA; top at y 560 (the end line at y 520); centred on its widest state, at least 100 px from the sides, at most 880 px wide. In portrait each line breaks where zippr wrote "/". The cursor: a lime bar #D6FF74, 0.085em wide and 0.98em tall, with a soft lime glow. Selected text: near-black #0A0A0A on lime. - The card, in the look of zippr's build-log page: 880 px wide, cream #FBF9F4, ink #111, 26 px corners, padding 46 px top and 52 px sides, a deep shadow (0 50 px 140 px at 65%) and a soft vignette inside. Its top row: the name (Geist 600, 44 px) and "BUILD LOG" (Geist Mono, 21 px, capitals, 0.12em spacing, #555), over a hairline. Then "Written by the AI building zippr." (27 px, #555), "Last night" (Geist 500, 104 px, letters -0.045em), a 2 px ink rule, and the entries: the time in Geist Mono 24 px #555, the words in Geist 500 at 36 px. The newest entry is on top, on lime-soft rgba(238,245,220); each new entry opens its room over 0.3 s, pushing the older ones down, and fades in 0.14 s later. The card is centred at y 880; it rises 28 px and grows from 98.5% as it fades in over 0.45 s, and sinks 16 px as it fades out over 0.35 s. - The mascot: 500 px tall, its feet on the pool at y 1351. It walks in from x -200 to the pool's centre over 1.6 s (easing out, power 1.7), rocking 5.5 degrees and bobbing 13 px at 2.3 rocks a second, the rocking dying away over the last 28% of the walk. Its brightness rises from 28% in the dark to full in the pool. The walking picture is shown at 0.8 of the standing one's scale (it was shot closer). It lands with a hard swap to the standing picture, facing the camera, and a small squash (3.5%) that settles over 0.3 s; a crossfade showed two mascots at once. A soft contact shadow (black at 62%, blurred 10 px) under its feet. - The name: "zippr" in Geist 600 at 60 px, #F3F1EA, with "zippr.to/build" in Geist Mono 25 px at 62% under it, at y 1452; it rises 10 px as it fades in over 0.5 s. - Nothing sits below y 1570: the bottom 340 px stay empty. - The colours are ROLES. My brand colours go onto the roles; zippr's value stays for any role my colours don't fill. - THE STAGE: near-black #050505. Keep it near-black: the film is one light in the dark. - THE LIGHT: warm white rgba(255,246,228). Keep it warm and soft. - THE WORDS: off-white #F3F1EA. Mine: my lightest neutral. It must be the brightest thing after the card. - THE ONE COLOUR, the cursor and the selection: lime #D6FF74. Mine: my brand accent. Nothing else on the stage may use it. - THE CARD: cream #FBF9F4, ink #111, grey #555. Mine: my own website's paper and ink. - THE NEWEST ENTRY: lime-soft rgba(238,245,220). Mine: a pale tint of my accent. - THE HERO: its own colours. It must read against black: if my hero is dark, the pool's light is what shows it.
The hero (zippr, the mascot, as the page shows it) - zippr is a small chunky vinyl creature: an ink-black penguin-like body (#0A0A0A) with a large cream belly (#F5F5F0), cream feet and mitten arms, floppy black dog ears, a stubby tail, and a face that is one rounded-square screen with two huge glossy eyes. The screen is lime (#D6FF74). Never shoot the mascot from behind: its face must be visible in every frame. - Two stills: walking (a three-quarter front view, big neutral eyes, already cut out), and standing (facing the camera, on a grey studio backdrop, keyed in code). - The pictures (the paid step; follow this only if I chose (b)): Nano Banana Pro (Google's gemini-3-pro-image), about $0.13 a picture. zippr pasted one locked description, word for word, into every prompt, and passed the standing still in as a reference with every call, because prompt wording alone drifts. zippr's locked description: "a small chunky creature with a penguin-like body: a rounded egg-shaped torso in matte ink-black (#0A0A0A) with a large soft cream (#F5F5F0) belly panel, very short stubby legs with rounded cream feet turned slightly outward, and two small cream mitten flipper-arms. Its head is large and rounded, and the entire front of the face is a softly rounded-square screen, like a small glowing display set into the head. On that screen, and only on it, sit two enormous soft eyes rendered as smooth glossy near-black shapes: tall rounded ovals with very large dark irises, each carrying one big round catchlight in the upper left, a smaller secondary catchlight at the lower right, and a soft crescent of reflected light along the bottom rim, with a pronounced wet tear-film sheen across the whole surface that reads as warm and alive, never as crying. Two soft floppy dog ears in matte ink-black hang beside the head, and a tiny stubby ink-black tail sits at the back." The screen colour is stated separately in each prompt. - the mascot never speaks: the chirp is a device sound, and no line of type is the mascot's.
zippr's story, beat by beat (28.2 s; 30 frames a second; frame = seconds x 30) - 0.00 s: frame 1 is the hook, with no fade: the black stage, the light already on, and in the beam "Humans used to / build in public." with the lime cursor blinking after it. The lamp strikes. - 1.76 s (frame 53): the cursor jumps to the end of "Humans used to". - 2.05 to 2.47 s: it deletes "Humans used to", one letter at a time. - 2.76 to 3.01 s: it types "Now I": "Now I / build in public." Hold, the cursor blinking. - 4.51 s (frame 136): select all, lime. 4.81 s (frame 145): gone. - 5.06 s (frame 152): the card rises into the beam: "zippr", "BUILD LOG", "Written by the AI building zippr.", "Last night". - 5.66, 6.96, 8.26, 9.56 and 10.86 s (frames 170, 209, 248, 287 and 326): the entries land, newest on top: "23:12 Taught once: the weekly report. Won't ask again.", "00:47 Tried a gradient. Deleted the gradient.", "02:05 Renamed a button. Renamed it back.", "03:30 Read what people hate about AI. Mostly agreed.", "04:58 Made this film." - 12.56 s (frame 377): the card fades out. - 13.16 to 13.99 s: the cursor types "I have opinions." 15.40 s: select all; 15.70 s: gone. - 16.15 to 19.60 s: it types "You don't need / to learn AI.", then under it "AI needs / to learn you." 21.50 s: select all; 21.80 s: gone. The empty light holds for a beat, the cursor blinking. - 22.40 to 24.00 s: zippr waddles in from the dark at the left, brightening as it reaches the pool, 7 small steps. - 24.02 s (frame 721): zippr lands at the centre: the hard swap to the standing pose, the small squash. 24.30 s: zippr's chirp. - 24.75 to 25.62 s: the cursor, above zippr, types "Watch me / build it." - 25.92 s (frame 778): "zippr" and "zippr.to/build" rise in under the pool. Hold to 28.2 s. - Landscape: the same timeline; each line runs on one row, the type is 96 px, the card is a two-column layout 1500 px wide, the pool is at (960, 885), and the mascot is 330 px tall.
Faults zippr found in its own cut; fix them in mine - Apostrophes were straight ("don't", "Won't"): use curly ones. - The card's small type (the 27 px line and the 19 to 24 px mono labels) is under a 28 px readable floor at phone size. - When the cursor sits mid-line, it overlaps the next letter. - The mascot's walk is one pose, rocked and bobbed, not a walk cycle. - The cream card is by far the brightest thing in the film. - The grain makes the file heavy (about 45 MB for 28 s). - In landscape, the edited line sits left of centre. - The mascot walking in right after the AI's lines makes it read as the "I" who wrote them. If that is wrong for my brand, end on the empty light and the line.
The sound (no music; mostly silence) - Made in numpy at 48 kHz stereo, 16-bit. Every random source is seeded by the event's number, so the mix is the same every time. Every time is read from the cue sheet. There is no music and no voice. - The idea: emotion from contrast, not narration. The room of an empty stage, the lamp striking on, one soft click per typed letter, a lower click per deleted letter, a blip per entry, the mascot's small steps and a chirp, and one dry bell on the name. - The levels below are each sound's peak before the master, in dB. - Under everything: the empty stage (noise low-passed near 160 Hz) plus the lamp's faint hum (100 Hz and 200 Hz, very low), with the right channel a touch quieter; a 20 ms fade in and a 0.3 s fade out. - The sounds: - the lamp striking on, frame 0: a 52 Hz thump (0.6 s, dying over 0.16 s), -5, with an 8 ms click of noise above 1.5 kHz and a faint 1760 Hz ring; - a typed letter: 18 ms of noise, 2.2 to 6.5 kHz, dying over 3.5 ms, with a small 170 Hz thock, about -16 (each a seeded 0.8 to 1.2 of that); - a deleted letter: the same, lower (0.9 to 3.2 kHz, 120 Hz), about -18; the cursor's jump, half a typed letter; - select all, the "tsk": a soft key plus a 2350 Hz tick (50 ms); then gone, a thump: 110 Hz (0.12 s) with low noise, -16; - the card in: a 0.5 s paper whoosh (noise low-passed at 2.4 kHz, swelling), -21; out: the same reversed, a little quieter; - each entry: a two-note blip, C6 (1046.5 Hz, 70 ms), then E6 (1318.5 Hz, 110 ms) 65 ms later, -24; - each of the mascot's steps: a 60 ms vinyl squeak sweeping from 880 to 1300 Hz (a little higher on every other step) over a 95 Hz thud, -18, panned from left to centre as it walks in; - the landing: a 78 Hz thud (0.14 s) with low noise, -14; - the chirp: 1320 Hz for 90 ms, then 1980 Hz for 150 ms 0.1 s later, each with its octave and a small 7 Hz warble, low-passed at 5.2 kHz, -22; - the name: one dry bell, C5 (523.25 Hz) with a soft octave and a 3.01x partial, 1.8 s, dying over 0.55 s, -22. - The hits and their frames (at 30 fps): the lamp 0; the jump 53; the selects 136, 462, 645; the wipes 145, 471, 655; the card 152; the entries 170, 209, 248, 287, 326; the card out 377; the steps 679 to 718; the landing 721; the chirp 730; the name 778. zippr placed each sound exactly on its moment. Start each hit 2 frames BEFORE the frame it belongs to (the ear hears that as exactly on time); the lamp's strike starts on frame 0, and the whoosh swells into its frame. - Master: zippr trimmed the peak to -3 dBFS, lifted the whole mix 12 dB and soft-limited it under -1 dBFS (a smooth curve on every sample), because the first mix measured -32.7 LUFS, too quiet for a phone. The page's file measures -21.5 LUFS integrated, with the peaks just over 0 dBFS after the encode. Set mine to -16 LUFS integrated with a true-peak limiter, peaks below -1 dB, and keep the silences silent: the quiet is the design.
The finish - 1080x1920 (and 1920x1080), 30 fps, 28.2 s, 847 frames. Chromium flags --force-color-profile=srgb, --hide-scrollbars, --font-render-hinting=none and --disable-lcd-text, at device scale 1. Encode: libx264, preset slow, crf 18, yuv420p, +faststart, with AAC 192 kbit/s at 48 kHz stereo and -shortest. zippr's portrait file came out at about 45 MB, because of the grain.
STEP 3: SWAP IN MY PRODUCT
Keep the black stage and the one light, the single line of type with the lime cursor, the live edit that turns the first line round, the card of entries, the attitude line, the belief, the entrance into the pool, the typing rhythm, the timings and the sound design exactly. Change only these: - "Humans used to / build in public." and its edit become my old way and my turn. - The card becomes my own proof, in my own site's look, with my entries (invented or real, but never internal). - "I have opinions." and the belief become my attitude and my belief. - zippr's mascot becomes my hero (question 9), or no hero. - "Watch me build it.", the name and the address become mine. - My colours go on the colour roles (question 10).
STEP 4: SHOW ME THE PLAN, THEN WAIT
Write my manifesto in two sentences, then my beat table with times in zippr's format, then my colours on their roles. If you can run code, show me 4 stills in the finished look (for example at 0.00 s, 3.20 s, 11.00 s and 27.00 s). Wait for my yes before you build the whole film.
STEP 5: MAKE IT
If you are an AI app that can run code and save files, follow the recipe and give me the MP4 with sound. Ask me before installing anything: the Geist fonts are downloads unless they are already here; if they can't be had, use a similar free geometric sans and mono, and tell me. If you can't run code, build it as one self-contained web page that plays in the chat: the stage on a canvas, the line, the card and the name in HTML, the hero as my pictures or drawn shapes, the same timeline compiled from the same words, and the sounds made live in the browser. Add a big Play button (browsers only play sound after a tap), a Replay button, and a "Save as video" button if the browser allows. Tell me how to screen-record it with sound on a phone and on a computer.
STEP 6: CHECK IT BEFORE YOU GIVE IT TO ME
- Put one frame from every 0.5 s on a contact sheet and look at it at phone size. Could someone who never saw this message say what the film means from the frames alone? Is the hook on frame 1, with no fade? Fix what doesn't read. - Read the card at phone size: every word must be readable, and no entry may look like a real log, path, key or internal number. - On the file: it plays start to end; nothing sits in the bottom 340 px of the portrait film; the hero's face is visible in every frame it is on stage; each hit sound starts 2 frames before its picture and is clearly audible; the loudness is -16 LUFS and the peaks are below -1 dB. - Then give me the file, one still, and one honest line on anything you couldn't do. Never use copyrighted music.