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 Key, as a two-ink print" (zippr.to). In it, a small blue mascot is locked out of a door. It pays coins, one after another, into a slow thought over the lock until the thinking turns into a key. The next time, one turn of the key opens the door at once, and no coin moves. Every frame looks like a sheet printed on a two-drum risograph: two inks on warm paper, visible dots, and the inks slightly out of line. 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. - One step was paid: zippr's mascot was drawn once with Google's Nano Banana Pro image model, 3 pictures at about $0.14 each (about $0.42). You can skip it: use a picture you already have, or have the hero drawn in code for free. A photo-like hero prints best: its detail becomes the dots.
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: "Pay for thinking once.") 3. Who is going to watch it, and where: reels, a website, a talk? 4. Length and shape. zippr's film is 10 seconds, portrait 1080x1920 (a landscape 1920x1080 cut exists too). Keep 10 s, or stretch every beat evenly to 20 or 30 s? Portrait or landscape? 5. Your brand colours (hex codes if you have them), and your product's name as it should appear at the end. 6. The one line of words at the end (zippr's: "Pay for thinking once."), or none. 7. Your story in zippr's shape. Who is the hero, and what do they want (zippr's: to get through a door)? What does getting it cost the first time (zippr's: coins, paid one by one into a slow thought)? What does your product turn that into (zippr's: a key)? And what does the next time look like (zippr's: one turn, instant, nothing paid)? 8. The hero's picture: (a) you have one: a mascot, product photo or logo, ideally 3 poses (standing, looking up hopefully, jumping for joy) as PNGs with transparent backgrounds; (b) you want one generated like zippr's with Nano Banana Pro (paid, about $0.14 a picture; you run it, or give me access); (c) I draw it in code (free). 9. The two inks. zippr used cornflower blue #5387D8 (its mascot's body) and tangerine #F07F3C (its accent) on warm paper #F5F2EA. Should I swap in your brand colours as the two inks, or keep zippr's two? If you swap, which two of your colours? Pick two that are far apart: one dark enough to carry the dark room and the shadows, and one warm or bright for the hero objects.
STEP 2: THE RECIPE (exactly how zippr made this film)
The tools - Claude (Opus 5.5): wrote the print rules and all the code below, made every fix, and ran the fresh-eyes checks. - A web page with an HTML canvas. It draws the scene as a pure function of time, and every drawing call paints two grey "ink plates" instead of colour. JavaScript, no animation library. - Playwright for Python driving headless Chromium: steps the page frame by frame and screenshots it. Plate 1 goes in the red channel, plate 2 in the green. - "The press", a small Python program on numpy, OpenCV and SciPy: turns the two plates into a printed sheet. - ffmpeg with libx264 and AAC: joins the frames and the sound. - Python with numpy and SciPy: makes every sound from scratch. There are no recordings. - The font: Geist (weights 500 and 600), free under the SIL Open Font License, from Vercel's Geist project. - Two free public projects were read once as examples of writing a medium's physical limits as rules an AI must follow: medium-films and riso-windowseat (both MIT, on GitHub). - Paid, once, before this film: Nano Banana Pro (Google's gemini-3-pro-image, through Vertex AI, at 2K) drew the mascot's 3 poses, about $0.14 each by usage.
The steps, in order 1. Before drawing anything, write the press's physical limits as hard rules (they are below). Every rule is enforced in code by construction. If a picture needs something the press cannot do, change the picture, not the rule. 2. One plan file holds every time in the film. The picture and the sound both read it. 3. The scene page: the same scene and motion as a normal film, but each paint call writes ink amounts (0 = bare paper, 1 = solid) into plate 1 and plate 2. Colour exists in exactly one place: the press. 4. Separate the hero's pictures once into the two plates. For each pixel, find the pair of ink amounts whose PRINT on this paper is nearest to the pixel's colour (nearest in CIELAB, over a 65 x 65 grid of printable colours). Smooth lightly first (a bilateral filter), so generator noise doesn't turn into speckled dots. 5. Render: Playwright screenshots each frame, the press prints it, and it goes straight into ffmpeg. 6. The sound: numpy builds each sound at the times in the plan file. Mix, master, join. 7. Fresh eyes, then fixes. A separate AI (Claude Opus 5.5) is told nothing. It sees one frame every 0.2 s at phone width (390 px), with no sound, in 5 sheets of 2 s each, and says what happens and what it means. Fix what it misses, then ask a NEW reader. zippr ran 3 rounds and stopped when the readers began contradicting each other. Each read was about 80,000 tokens. 8. Check the finished file (below), then export.
The press's rules (zippr's twelve) 1. The picture exists only as two ink plates. There is no colour drawing call anywhere. 2. Ink only darkens the paper. Each ink is translucent and multiplies what is under it, in linear light: paper x (1 - a x (1 - ink)). There is no white ink, no glow, no bloom and no blur. The paper is the brightest thing on the sheet. 3. Two inks and their overprint, nothing else. The overprint of both is the only dark (zippr's printed a warm brown, about #4B402F). There is no black and no third colour. zippr's brass became a tangerine tint shaded with blue. 4. Light is paper. Anything lit or glowing is drawn as ink taken away: the lamp's pool, the open doorway, the click in the lock, the key forming, the words. 5. Tone is a screen, never a flat tint. Each plate is screened into round dots at its own angle, 60 degrees apart so they make rosettes instead of moire: blue at 15 degrees, tangerine at 75, about 10 px apart on a 1080-wide sheet. Below 7% ink no dot holds and the paper shows. Above 93% the dots close into a solid. 6. The screen belongs to the sheet. The dot grid is fixed to the frame. When something moves or the camera pushes in, the picture moves under a still screen. Dots never travel with an object. 7. The drums never line up. The tangerine plate sits a few pixels off the blue one, with a new offset for each shot between cuts: (2.6, 1.8) px and 0.06 degrees, then (-2.2, 2.4) and -0.05, then (2.2, -1.6) and 0.04. Every sheet also trembles up to 0.45 px around that. Nothing may depend on two inks meeting exactly. 8. Solids are not perfect. Ink density 0.955, with a +/-3% mottle that stays the same for every sheet of a shot (it comes from the drum), plus fibre pinholes (0.6% of a solid) and ragged dot edges that change from sheet to sheet. All of it is seeded by frame, shot and drum, so a re-render is identical. 9. The paper is a real stock: fine fibre, the odd fleck and short faint streaks, from a pool of 8 sheets chosen per frame by a seeded hash. Never film grain, never a vignette. 10. A plate owns its area or adds to it, on purpose. A solid object clears both plates under it and prints its own two values ("own"). A shadow or a shade only adds ink to one plate ("add"). A bright thing over a dark ground always clears the ground first. 11. Thin lines are solid. A line thinner than two screen cells is drawn at 100% on ONE plate, because a screened thin line breaks into dashes and a two-ink line splits in two when the drums are off. 12. The hero is a two-colour separation of its pictures (step 4 above), never redrawn. Its eyes become the overprint, and its catchlights become paper.
The colour roles (my inks go onto these roles; zippr's value stands for any role I left to zippr) - PAPER: warm paper #F5F2EA. Keep it warm. A very light cream brand colour may become the paper; anything darker is an ink, never the paper. - INK 1, THE ROOM INK: the dark room (a 70% screen, 90% behind the words), every flat shadow, every thin line, the thought's dots and the lids. zippr's: cornflower #5387D8. Mine: the one of my colours that still reads as a dark room at 70% on the paper. - INK 2, THE OBJECT INK: the door, the coins, the key, the caret, and the warm ring around a light. zippr's: tangerine #F07F3C. Mine: my brightest or warmest colour. - THE OVERPRINT (ink 1 over ink 2): the only dark on the sheet: the eyes, the doorway's dark, the coin rims. zippr's printed about #4B402F. It must print darker than either ink alone. - The two inks must sit far apart in hue (zippr's are nearly opposite). If my two colours are too close to tell the door from the room, don't swap anything on your own: print both swatch strips (my pair, and my stronger colour with zippr's ink in the other role), tell me what each can't print, and ask me which to use. - Before any still, print a swatch strip: the paper; each ink at 20, 50, 70 and 100%; the overprint.
How the press works (per frame, all seeded) - The plates are burned at 2x the film's size. Each plate is screened against its own angled dot threshold, made area-true so a grey of c inks exactly c of each cell. Add a ragged-edge noise of 0.05 and an edge softness of 0.07. - The tangerine plate is moved off register (rule 7). Both are photographed down to 1x by area averaging, in linear light. - Density and mottle are applied, then both inks are multiplied onto that frame's paper sheet, and the result is encoded to sRGB.
The hero's pictures (the one paid step; follow this only if I chose (b)) - The model: Nano Banana Pro (Google's gemini-3-pro-image), through Vertex AI, at 2K, 16:9. It cost about $0.14 a picture by usage; Google's price page said $0.134 for a 1K or 2K picture. - What kept the character identical in 33 of 34 pictures: - one locked description, pasted word for word into every prompt; - the character's clean reference picture passed in with every call; - each new pose made as an EDIT of an existing picture, with one change per edit. - zippr's locked description: "a small chunky soft-vinyl toy creature: one rounded bean-shaped piece for head and body in matte cornflower-blue vinyl (#5387D8), with a pale periwinkle (#9DACD0) oval belly patch, two short rounded stub arms and two short round stub feet in the body's blue. The upper front of the bean is a large, softly rounded-rectangle screen set into the body, glowing a soft warm white (#FBE5CA). On that screen, and only on it, sit two small round glossy black eyes, each in a thin clear glossy rim and each carrying one round white catchlight. Two soft floppy dog ears in warm cream vinyl (#E6C28E) hang from the top of the head, one on each side. No mouth, no nose, no neck, and no marks, letters or numbers on the body." - The three pose prompts. Every one ends with: "The face-screen shows only its two eyes: no mouth, no nose, no symbol, no logo. No words, letters or numbers anywhere in the picture." 1. Standing, an edit of the character's first picture: "Edit this image. Keep the identical character: its shape, proportions, pose, colours, matte soft vinyl, face-screen glow, eyes and catchlights, and the same camera angle and framing. Only change: the setting. [The old background] is replaced by a plain, seamless, evenly lit light-grey studio backdrop that curves smoothly into the floor: one smooth neutral grey (about #C8C8C8), with no texture, no props, no doodles and no horizon line. The character stands on it with only a soft contact shadow under its feet. Soft, even studio light from the upper left, so its colours read true." 2. Looking up, an edit of picture 1 with the reference passed in: "The first image is the picture to edit. The second image shows a character, for reference only; copy its exact design, proportions, colours and material. Edit the first image. Keep the identical character (exactly as in the second image: its shape, proportions, colours and matte soft vinyl), the plain light-grey studio backdrop, the light and the framing; only change: its pose and expression, to hopeful. Its body turns a little toward the left of the picture (a three-quarter view, never more, the face-screen fully visible) and it looks up and to the left, as if at someone taller. The head tips back slightly. The two eyes are open wide and round, glossy, with bright round catchlights, gazing upward. The two stub arms are held together in front of the belly. The face-screen keeps its soft warm-white glow. It stands on the floor with a soft contact shadow." 3. The jump, an edit of picture 1 with the reference passed in. The opening is the same as prompt 2, then: "only change: its pose and expression, to a delighted jump. It is in mid-air, both feet well off the floor, a small happy hop; both stub arms thrown up high; both floppy ears flung up and outward by the jump. It faces the camera. The face-screen glows a brighter lime green, almost white-hot at its centre; the two eyes open wide and round, each with two big round catchlights, bright and glossy. A soft shadow on the floor below it, separate from its feet." - Then, free, in code: - cut each picture out of its grey backdrop (a model of the grey per row, plus a colour gate); - measure each pose once: its feet centre, its screen box and its eye ellipses (the half-lids are drawn over those); - mirror the looking-up pose so it faces the door; - recolour the jump's lime screen to warm white. - Designing the character in the first place took zippr several earlier rounds of pictures. Those are not in the $0.42.
zippr's story, beat by beat (10.0 s, 30 frames a second; frame = seconds x 30) - 0.00 s: a lamp strikes. The dark is a 70% blue screen, densest at the top and edges, and the lamp's light is a pool of pale screen (20% blue) around the door, the coins and the hero. On the left, a small arched door in solid tangerine with a pale frame, a lock plate and a big keyhole. On the floor, a stack of 16 coins. On the right, the hero looks up at the lock. - 0.30 to 0.55 s: three puffs rise from the keyhole (0.30, 0.35, 0.40 s) and a paper thought bubble pops out of the dark above the door. Its three solid blue dots bob like an AI app's "..." at 2.6 waves a second. - 0.55 to 1.90 s: three coins flick off the stack one at a time and arc into the bubble (they land at 0.95, 1.45 and 1.90 s; each flight takes 0.4 s). The bubble swells a little with each one. - 2.10 to 3.15 s: the stream. Ten coins, each flight 0.3 s, landing one every 0.1 s from 2.2 s to 3.1 s. The dots bob faster (5.2 waves a second), the bubble jitters, and the stack drops to 3. The hero's eyelids sink halfway (2.0 to 3.05 s). - 3.15 s: the dots stop dead. The hero's eyes pop open. - 3.20 to 3.42 s: the bubble condenses into a tangerine key inside a small clearing of paper that opens in the dark. Light is paper, so this replaces a glow. - 3.42 to 3.82 s: the key flies into the keyhole and turns a quarter. CLACK at 3.82 s: the lock plate flashes to paper, and a paper ring spreads through the door. - 3.90 to 4.40 s: the key hops out onto a bead chain on the hero's chest. Route the key low, under the face, on its way to and from the chain: a key or card that crosses the face hides the eyes. 4.35 to 4.75 s: the door swings open (105 degrees), and paper spreads out of the doorway, low across the floor and the wall. - 5.05 to 5.20 s: the door SLAMS shut, the paper light collapses back, and the sheet shakes (9 px, 22 Hz, dying away over 0.2 s). - 5.40 to 5.90 s: cut to a close-up at 1.9x zoom. The hero gives the camera "the look": flat half-lids (one clean blue line over the face), key on its chest. - 5.90 s: cut to a medium shot of the lock at 1.5x. 5.95 to 6.25 s: the hero hops, and the key flips off the chain into the keyhole. 6.27 to 6.36 s: one quarter turn, and ONE click at 6.36 s. 6.42 to 6.64 s: the door flies open and the paper floods out. No bubble, and no coin moves. - 6.40 to 6.76 s: the key flies back to the chain. 6.66 to 7.06 s: the hero jumps for joy. Short arms raised beside the head read as ears: throw them out to the sides, clear of the head's outline. - 6.95 s on: the camera eases back to wide. - 7.50 s: "Pay for / thinking once." types in at 24 characters a second as paper letters knocked out of a dense blue (about 90%, where the dots nearly close), with a solid tangerine caret. It is set in Geist 500 at 112 px, centred. - 8.85 s: "zippr" (Geist 600, 72 px) fades up under the line over 0.5 s and holds to 10.0 s. - The camera, portrait, as [time, zoom, centre x, centre y] on a 1080x1920 stage: [0.0, 1.15, 548, 1060], [3.1, 1.2, 548, 1060], [3.9, 1.2, 548, 1060], [4.45, 1.15, 548, 1090], [5.399, 1.15, 548, 1090], [5.4, 1.9, 737, 1080, cut], [5.899, 1.9, 737, 1080], [5.9, 1.5, 500, 960, cut], [6.44, 1.5, 500, 960], [6.95, 1.0, 540, 960], [10.0, 1.0, 540, 960]. Ease in and out (cubic) between keys. The camera redraws the plates at its scale, and then the press screens them.
The scene's layout (1080x1920; keep the bottom 340 px empty) - The door: an arch 304 px wide and 628 px tall (x 118 to 422, y 764 to 1392, top radius 152), in a frame (x 96 to 444). The lock plate is at x 277 to 397, y 975 to 1150, and the keyhole is centred at 337, 1050. - The floor is at y 1392. The coin stack sits at x 505: coins 80x24 px, 12 px thick. The bubble is at 585, 600 with radius 108, made of 8 overlapping round lobes. The key is a ring bow, a blade and 5 teeth. - The hero is 440 px tall, feet at x 740, in three poses: looking up (until 5.4 s), standing (from 5.4 s), and the jump (6.66 to 7.06 s). - Shadows are flat, hard-edged blue halftone shapes offset 16 px right and 12 px down, because no blur can print. - Fixes that fresh readers forced, which you should keep: - two inks have no gold, so coins must read by structure. The stack is ribbed: each coin's edge is a light stripe over a dark one, with a solid blue line under it. Flying coins are mid-tangerine faces with a solid brown rim and a paper glint; - paper letters need a dense ground behind them; - lids must cover the separated eye's glossy rim, or it prints as a brow; - there are no dust specks in the light, because a bright speck can't print. - What two inks can't do (plan around it): they can't print cream or yellow. zippr's cream ears printed peach.
The sound (no music; the scene's own sounds are the rhythm) - Made in numpy at 48 kHz, from tones and filtered noise, with a fixed random seed. There is no music bed and no voice. - Under everything: room tone (band noise 60 to 900 Hz, plus a quarter of 0.9 to 9 kHz) at -50 dB, and the lamp's hum (100 Hz plus 200 Hz) at -58 dB. - The sounds, what they are made of, and their gains in dB: - lamp strike (a 52 Hz thump, a noise click and a faint 1760 Hz ring), -6; - thought puffs (short rising sine blips from 620 Hz, 180 Hz apart), -15; - ticks, one per wave of the bubble's dots (30 ms of band noise, 1.8 to 6 kHz, with a 2200 Hz ring, alternating with a lower "tock"), -22, and 4 dB louder in the fast part; - a coin "tink" for every coin (a sine with partials at 2.41x and 3.9x, 60 ms decay), pitched from MIDI note 84 and rising 2 semitones per coin: -11 for the first three, about -15 in the stream; - a short high bell (1568 Hz) as the key forms, -14; - a metal slide as the key goes in, -10; - the heavy CLACK, -6; - three tiny tinks as the key lands on the chain, -12; - a soft creak as the door swings, -20; - the SLAM (a 62 Hz body, then a clack), -3; - a dry little "tock" for the look, -14; - a vinyl hop, -12; - ONE round click (12 ms of noise, 1.5 to 6 kHz, over modes at 480, 1250 and 2300 Hz), -5; - the hero's two-note chirp (1320 Hz, then 1980 Hz, with a little vibrato), -9; - a soft landing, -12; - one typed-key click per letter, -20; - one dry bell (C5, 523 Hz) under the name, -9. - The hits and their frames (at 30 fps): lamp 0; puffs 9, 11, 12; coins into the thought 29, 44, 57, then the stream; key forms 103; key goes in 111; CLACK 115; key on chain 132; SLAM 156; the look 164; hop 181; key goes in 188; ONE click 191; chirp 200; chain 203; landing 212; typed keys from 225 at 24 a second; bell 266. - Every sound that goes with something you see starts 2 frames BEFORE that frame; the ear hears that as exactly on time. Swells and creaks END on their frame instead. - Mix: one clear sound per key moment, at least 6 dB louder than whatever is under it, and silence when the thinking stops. Master with a look-ahead peak limiter (no saturation) to -16 LUFS, true peak at or below -2.5 dBTP.
The finish - 1080x1920 (or 1920x1080), 30 fps, 10.0 s. H.264 High, level 4.0, yuv420p, crf 18, capped at 12 Mbit/s so the dots survive, tagged BT.709 (convert with ffmpeg's out_color_matrix=bt709, so colours don't shift). AAC 192 kbit/s at 48 kHz stereo, with +faststart. zippr's file came out at about 16 MB.
STEP 3: SWAP IN MY PRODUCT
Keep the press, its twelve rules and settings, the timings and the sound design exactly. Change only these: - zippr's mascot becomes my hero, from question 8, separated into my two inks. - The door becomes the thing my hero wants, and the coins become what it costs the first time. - The thought bubble becomes the slow work, and the key becomes what my product gives. - "One turn, the door flies open" becomes my one-step payoff. - "Pay for thinking once." becomes my line, and "zippr" becomes my name. - The two inks become mine if I chose to swap (question 9), put on the colour roles; keep the paper warm. Re-check what my two inks can't print, and change the picture where they can't.
STEP 4: SHOW ME THE PLAN, THEN WAIT
Write my story in two sentences, my two inks on their roles and what they can't print, then my beat table with times in zippr's format. If you can run code, show me the swatch strip, then 4 printed stills (for example at 0.8 s, 3.4 s, 6.5 s and 9.5 s) and one detail crop at full size, so I can see the dots. 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. If a font isn't there, use any free sans-serif and tell me. If you can't run code, build it as one self-contained web page that plays in the chat. Draw the two plates on hidden canvases, screen each into dots on the page, and multiply them onto a paper colour; make the sounds 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? Fix what doesn't read. - Crop one detail at full size from the FINISHED file: both screens on their own angles, one ink off register, paper through the solids. - On the file: it plays start to end; only paper, my two inks and their overprint appear; 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.