claude code is making 3D cartoon story shorts now
i made this video in 14 minutes with 0 cost
idk shit about blender or 3D animation
im giving the prompt away for free
steal it 👇
<inputs>
Ask me for: my story in one line (someone does something strange, plus the real reason behind it, which is the twist) and the length (45-60 s). If I have no idea, pitch me 3 stories with their twists and let me pick. Every story is mine, never a copy of an existing video.
</inputs>
<direction>
A 1080x1920 30 fps Short that looks like a premium 3D cartoon, built entirely in code with three.js and rendered frame by frame in headless Chrome. No AI images or video, no stock 3D models.
- Characters: big-headed toon people. A sphere head sits straight on a rounded bean torso (no neck), mitten hands, simple legs, clothes as flat painted panels (collars, pockets, ties), white matte skin.
- Faces are drawn live on the head every frame from about 100 numbers (eye openness and lid shape, pupils, brow height, angle and curve, mouth width, opening, smile and corners, teeth, tongue, blush) in ink
#2A1D17, never swapped pictures. Make at least 20 named expressions (neutral, bored, smug, skeptical, shocked, scared, starstruck with star eyes, sad, angry, whistle...) as presets that morph: brows lead, the mouth trails, 2 frames of anticipation, 10% overshoot, settle. Shock squeezes for 2 frames, then pops.
- Talking: whoever speaks a quoted line moves their mouth from the voice loudness inside each word's timestamps, with the shape from the letters (wide A, round O and U, lips shut on M, B and P, teeth together on S, F and T). Silent characters keep still mouths.
- World: the whole film is ONE connected map built once. Every location sits at its own spot (doors lead to rooms, the street is outside the front door), densely dressed: 15+ props in every wide, three depth layers, signs and screens with real text on them. Every shot is a camera placed somewhere in that world, so shots match and people stay where they were. Hero props are 1.5-2.5x real size with 3+ parts you can name.
- Light: a warm key, a cool fill, a warm rim on every silhouette, contact shadows and ambient occlusion so nothing floats. Saturated colour, never washed out. Bloom 0.3, vignette 0.28, light grain, slight sharpen.
- Numbers are objects: every number the narrator says appears on a real thing (a screen, a counter, a sign, a cheque) and rolls up on its word.
- Captions: two words at a time, Montserrat ExtraBold about 100 px, white with a thick black outline, centred at 70% of the height, stepping clear of faces.
- A fast, casual adult narrator in third person, deadpan, with the dialogue lines acted on screen.
Banned: AI video, stock models, floating labels, arrows, stickers or HUDs (text only on real objects), motion blur, depth of field, any shot that holds still, things that pop in or vanish (everything is carried, thrown or slides in), hands through objects, and the narrator saying sound words.
</direction>
<structure>
Length: 45-60 s at about 230 wpm. About 2.6 edits per 10 s (2.1-3.9), a median shot of about 2.5 s, and never two edits under 0.4 s apart: the camera carries two beats in one shot instead of cutting.
0 s: the strangest act in one line, already happening in frame 0 → the setup in 2-3 lines with the stakes on screen → escalation, every line bigger than the last, dialogue acted by the character who says it → "You see,": the real explanation as its own staged scene (a cutaway, a dream, a model of the thing) → the twist, the real reason, shown not said → the payoff picture lands on the last word and holds 1 s.
Joins: 77% are 6-frame dissolves with both cameras still moving; about 1 in 9 is a zoom-through (push into a door, a screen or an eye and land in the next shot); hard cuts under 5%; one whip per film at most.
Camera: it moves in 86% of frames. A push-in is the default (about x1.28 over 1.35 s, its fastest frame on a word). Pull-out reveals start fast and land soft, then pans and trucks; cranes and orbits are rare. A slow creep between beats, still moving into every edit, never parked.
</structure>
<build>
1. Tools. Everything is free and local except the voice. Install what's missing and tell me what you installed:
- Node 20, three.js (pin the version), puppeteer with headless Chrome and the GPU on
- Python with numpy, plus FFmpeg
- faster-whisper with large-v3-turbo, int8 on the CPU
- an ElevenLabs API key (ask me for it, and never print it)
- the Montserrat font
- free sounds from Pixabay or Mixkit: whooshes, pops, impacts, door, bell, footsteps, crowd murmur, one room tone per place
2. Voice: write about 24 short lines per 55 s and show me the script before you record. Ask before spending credits. Make one ElevenLabs take with eleven_multilingual_v2 and a premade casual male voice, all lines in one request. Tighten silences over 0.25 s down to 0.12 s. Never change the narrator's pitch.
3. Timing: run faster-whisper with word timestamps on the final voice and match it to the script with difflib. Key every cut, face change, gesture and SFX to a word index, never to a fixed second.
4. Engine: one page that draws any time t (frames are pure functions of time: no seeded random only). Each shot is build(S) with its clause; it reuses the cached world and only places the camera and the actors. Render every shot to an offscreen target; a dissolve mixes two targets. Draw captions on a 2D canvas on top.
5. Animation: every action has 2-6 frames of anticipation, the action on its word, 5-15% overshoot and a settle. Holds stay still but alive (blinks every 1.5-4 s, small eye darts). Verbs: walk along paths through doors, reach, take, hold, throw with a wind-up and a ballistic arc, catch, put into with the container opening and closing, dig, show (hold it up to the lens), shrug, point, slam, double take. A prop only moves when a hand moves it.
6. Shots: eye-level 3/4 by default, low for power, high for small or caught, top-down inserts for hands on props, over the shoulder, profile two-shots, one dutch at most. The same subject twice in a row gets a new angle or size. The key object fills 0.45-0.7 of the frame width, and faces sit above the caption band. Before the full render, make one 50% still per shot and look at every one.
7. Edit and sound: voice median at -15 dB; an SFX on every visible action (a whoosh on camera moves, an impact on contact); room tone per place at -30 dB; an optional music bed at -24 dB ducking under words. Mix to -14 LUFS. Encode H.264 (CRF 17, yuv420p) with AAC at 256k.
</build>
<gotchas>
Set renderer.outputColorSpace and every colour texture's colorSpace to SRGBColorSpace, or everything renders washed out. Use preserveDrawingBuffer and wait for fonts and textures before the first capture, or the first frames come out blank. Build the world once and reuse geometry and materials; rebuilding every frame makes the render crawl. Dissolves ghost big faces, so frame one side of every dissolve medium or wider. Arms go through heads and bodies unless you push hand targets out of the torso and head. Whisper merges short words, so find real silences in the audio and give each word gap the longest silence near it. Render stills first, then re-render only the shots that changed.
</gotchas>
<start>
Ask me for my story first (or pitch me 3), then show me the script before you spend any voice credits.
</start>