All · Motion graphics · Mood · loops
633Shadow-puppet story" — on lamp-lit paper, a puppet in a gat puts letters into an empty frame and a tree grows from it, 14 seconds
Enter three captions and a few letters: behind a flickering paper screen a shadow puppet puts letters into an empty frame, a tree grows out of it and two birds settle on it — a vertical MP4.
What you get
- A 4-scene vertical MP4 (14 seconds at 100 BPM, 60fps, quiet coded backing track)
- An HTML file with a settings panel to change the title, letters, captions, light and tempo
- A render script that makes a new MP4 with one command
- Claude Opus 5.5 Made with this AI
Fill in the fields
- 1Fill in the fields
- 2Copy the prompt
- 3Paste it into an AI that can run code (Claude Opus 5.5 · GPT-6 Astra · Gemini Argon)
- 4It builds the HTML, renders it itself and leaves an MP4
- 5To change it, edit the settings panel at the top of the HTML and run one render command No new request
Full prompt 6,362 characters
Make a short vertical shadow-puppet film as one self-contained HTML file and render it to MP4. The idea: a tiny story told with shadow puppets behind a glowing paper screen, in a Korean traditional mood. A puppet wearing a gat (traditional Korean hat) slides in, puts letter cut-outs one by one into an empty frame on a stand, a sprout bursts out of the frame and grows into a full tree, and two birds fly in and settle on its branches. Warm captions tell the story under the screen. It must feel handmade, quiet and moving. Do the whole job now without asking questions. [Inputs (use the default when empty)] Name: "【Name】" — default Promptpan Opening title: "【Opening title】" Letter cut-outs (slash-separated, 1 to 4): "【Letter cut-outs】" Three captions (slash-separated): "【Three captions】" End address: "【End address】" Light: "【Light】" Lamp = lamp light #FFE6B0 → #FFB35C → #C9622A, shadows #140C08, wooden frame #4A2E1E, caption light #FFD38A Moonlight = moonlight #EAF2FF → #A9C6FF → #4E6FB8, shadows #0A0E18, frame #1E2A44, caption light #DCE8FF Dusk = dusk #FFE0D0 → #FF9A8A → #C2455A, shadows #160A0E, frame #4A2230, caption light #FFC4B0 Tempo: "【Tempo】" — default 100 BPM. Aspect ratio: Output size 1080x1920 pixels, 9:16 portrait story. Keep all text inside the central 80% of the height. (default 9:16). [The stage] A dark room with a wooden-framed paper screen filling the upper two thirds. Behind it a lamp: a radial glow that flickers very gently (two slow sine waves), faint vertical lattice shadows and fine paper fibers. A dark rolling hill along the bottom of the screen. Every shadow is solid dark with a very slightly soft edge. The puppets are flat cut-outs on thin rods that run down out of the bottom of the screen — the rods must be visible. [Puppets] - The person: a long robe (trapezoid), a round head, a gat (wide flat brim and a small crown), one jointed arm (upper arm and forearm with a small hand) moved by its own rod. It slides rather than walks, with a small bob. - The frame: an empty square outline on a thin stand, slid in from the right. - Letter cut-outs: the given letters in a serif shape, flying from the hand into the frame along small arcs. - The tree: a recursive branching silhouette that grows level by level from the top of the frame (thick trunk, thinner twigs), then small oval leaves pop out at the tips on springs. - Birds: two silhouettes with flapping wings, big enough to read, that fly across the bright part of the screen from both sides and perch just inside the outer tips of the crown; each has a thin soft rim of lamp light so it never melts into the dark leaves. Then they breathe slowly. [Structure — 24 beats in 4 scenes of 6] 1. Curtain (0–6). Frame 0 is already a finished picture: the glowing screen with the title as a shadow in its upper part. The title drifts up and blurs away as the person slides in from the left; the frame slides in from the right. 2. Letters (6–12). Caption 1 rises under the screen. The person reaches out and puts each letter into the frame, one per beat and a bit, arm moving up and back each time. Caption 2 replaces caption 1. 3. Growth (12–18). The letters fade into the frame, a sprout bursts up from its top and grows into the whole tree, level by level, leaves popping at the end; the person leans back in surprise with its arm raised. Caption 3 appears. 4. Birds (18–24). The two birds fly in and land; the light glows a little warmer; the name rises in warm light letters under the screen and the address under it. The flicker and the birds' breathing keep the last frames alive. [Motion rules] Nothing pops in: puppets slide, grow and land on eased curves and closed-form springs; captions rise from mask lines and leave the same way. One slow camera push per scene plus a very slight handheld float, so nothing freezes for more than half a second. No timecode, no progress bar, no corner labels, no HUD. Light film grain. Typefaces: Nanum Myeongjo 800 for the title, letters, captions and name, a monospace for the address, from Google Fonts. [Sound] If you can generate music, add a quiet, warm piece at the given tempo — a plucked string melody over a soft drone, a small wooden knock when each letter lands, a rising chime while the tree grows and bird chirps at the end — muxed into the MP4 as AAC. If you cannot generate audio files with a music model, write the backing track yourself in code instead: synthesize an original instrumental (kick, snare, hi-hats, bass, a chord pad and a light arpeggio, no vocals) at the given tempo with a simple chord loop, sample by sample into a WAV, then mux it into the MP4 as AAC. Never use a placeholder or someone else's recording. [Build] One HTML file, everything on a single canvas. The script starts with a `const CONFIG` object holding every input plus fps 60 and a seed. All drawing comes from a pure `seek(t)` — no timers, no CSS animation, randomness only from the seed — so any frame renders identically. A settings panel above the preview (hidden with ?render=1) with English labels: text inputs for every text input (letters and captions slash-separated), selects for light, tempo and ratio, play/pause, a scrubber, and a "Copy settings" button that copies CONFIG as code. Edits re-render instantly. Write render.mjs: open the page with ?render=1 in headless Chromium (Playwright), wait for document.fonts.ready, step seek(frame / 60) through every frame, screenshot the canvas at 1080 px on the short side, and pipe into ffmpeg (libx264, yuv420p, crf 18) to make motion.mp4. Close the browser at the end. Accept an optional JSON file argument that overrides CONFIG. [Check before finishing] Render one still per beat into a contact sheet and look at it: frame 0 is a finished picture, the rods are visible, each letter really travels from the hand into the frame, the tree grows from the frame and never covers the captions or the name, the birds land on branches, nothing is clipped. Fix and re-render if anything fails. Finish with the file paths and the single command to re-render after editing settings. [Final output format] Output size 1080x1920 pixels, 9:16 portrait story. Keep all text inside the central 80% of the height. This selected output format takes priority over any fixed canvas size or aspect ratio elsewhere in this template. Adapt the composition, text zones and margins to the selected canvas without stretching or cropping essential content. Device safe areas apply only when a device is selected. Never print these format instructions on the image.
How did it turn out?
How to use it · FAQ
A small story on lamp-lit paper — a 14-second shadow-puppet film
Enter three captions and a few letters: a paper screen opens, gently flickering with lamplight. A shadow puppet in a gat, the traditional Korean hat, slides in and puts the letters one by one into an empty frame — then a sprout bursts out of the frame, branches spread, leaves open, and it becomes a big tree. Two birds fly in and settle on it. Even the rods that move the puppets are visible, like a real shadow play. Use it for shop or brand stories, thank-you messages, and holiday or anniversary videos.
Paste it into an AI that runs code
Paste it into an AI that writes and runs code, not an image AI. Claude Opus 5.5 also adds a backing track it builds in code (simple instrumental, no vocals) — no music model, account or cost needed. The AI builds the HTML, renders it and leaves you an MP4. The example above was made with Claude Opus 5.5. Check fees and terms of any outside service with that service.
How to fill it in
Separate the three captions with "/"; up to about 25 characters each fits big under the screen. Writing them as beginning, what you did, and what grew ("There was a small shop / We put care into it every day / And regulars grew") makes the story come alive. You can use the letters of your shop's name as the cut-outs.
Edit without asking again
Change the title, letters, captions, light and tempo in the settings panel at the top of the HTML, press "Copy settings" and run the one render command for a new video.

