作者公开了利用 Claude 自动生成代码、构建 Three.js 3D 场景并渲染短视频的完整 Prompt,展示了零成本制作高播放量内容的可迁移工作流。
time to drop a fucking BOMB for free
i just recreated ricks clips with claude opus for $0
ive spent almost a week trying to get here and im giving the prompt away for free
his last 20 shorts average 8M views each
so how does it work? a mix of threejs 3d worlds + 2d characters, all coded and automatable by claude
my prompt includes all of it including script training, paste it into your claude and it builds the whole thing
(theres an improved version im posting tomorrow as well btw)
thank me later ↓
<inputs>
Ask me for my story, or pitch 3.
- A good one is true and little known. Someone does something that looks ridiculous, someone laughs at them, and the reveal flips who was smart: a trick, a scheme, a bluff, a loophole, revenge.
- Give each pitch with its first line, the mocker, the twist, and a title that hides the ending.
Ask which voice I want:
- Free, the default: Kokoro, run locally on the CPU.
- Optional upgrade: ElevenLabs eleven_v4 with a stock library voice. It costs about 1,150-1,500 credits (roughly $0.22-0.28) per Short.
Ask what GPU I have. Any GPU works, and a gaming GPU renders a minute of video in about 4 minutes.
Tell me everything else is free: Three.js, Playwright with a headless browser, FFmpeg, faster-whisper, Pixabay music and Mixkit sound effects. No image, video or 3D model generator is used anywhere.
Then write the script and the beat list with seconds, and show me both before you build anything.
</inputs>
<direction>
A 1080x1920, 30 fps, 55-75 s vertical Short in the style of the biggest narrated "true story with a twist" Shorts: flat 2D cartoon people acting inside lit, dressed 3D toon sets, one storyteller voice, captions of 1-2 words, and one camera that keeps travelling.
Sets (Three.js 0.170):
- Build one connected world per story from boxes, cylinders, lathes, extrusions and instanced clumps, never a downloaded model. Every place in the story lives in it, joined so the camera can travel between them.
- Materials: MeshToonMaterial on a soft 4-step ramp (168, 206, 236, 255 out of 255), so shadows never go black.
- Ink outlines in #2a2230: a back-faced shell 3.5 cm bigger than each box, or back faces pushed out along the normals for round shapes.
- Draw surfaces on canvas and use them as textures: planks, stone courses, brick, rivets, signs, gravel, rock strata.
- Dress every corner with props. Scatter about 2,000 small clumps of dry grass or small stones near the lens. Open, empty fields read as cheap.
Palette and light:
- Pick each set's two-colour scheme before anything else: a warm key against cool shadows. Examples: a red canyon with purple shadows under a deep blue sky, hot pink against cyan, a navy storm against an amber cabin.
- Balance cream, ochre and amber against blue, teal, purple and mint. Green never leads. Costumes contrast with the set.
- Day:
- a low golden sun (#ffc27a, strength 2.7) that casts long shadows
- sky top #2f5fc4, horizon #ffc07e, bottom #8a7ac0
- fog #f2c49c at density 0.0021
- a purple hemisphere fill: sky #7a74e0, ground #d89a68, strength 1.15
- the ground tinted warm (#ffd890)
- Night:
- deep navy: sky top #081038, horizon #24307a, fog #18225a at density 0.0036
- fill #5a5ae0 over #283060
- glowing lamps and lit windows
- Interiors:
- no sun, warm lamps, a purple fill (#8a7ae0), exposure about 1.25
- one bold theme colour per room (a green office, teal tiles, a red map room)
- windows that show a dusk sky
- Sky: a shader dome with a sun glow, a moon and stars. Mix between looks over time, so dawn or night arrives on the words.
- Post, in this order:
- depth of field from the depth buffer (48 taps, focused on the subject, shallow on close-ups)
- bloom: strength 0.42, threshold 0.82, radius 0.6
- Neutral tone mapping at exposure 1.32
- a split-tone pass:
- shadows plus RGB (0.03, -0.012, 0.085)
- highlights plus (0.045, 0.018, -0.035)
- greens pulled 55% toward gold (hue 0.125)
- blacks lifted to 0.055 with a purple tint (0.85, 0.75, 1.2)
- gain 1.08
- a light grade: saturation 1.08, vignette 0.22, 2% grain
- Targets, measured on 1 frame a second with the caption band left out:
- mean lightness (Lab L) 43-57
- darkest 5% at 5-18 (lifted, never crushed)
- brightest 5% at 88-99
- shadows purple-blue (Lab a +7 to +19, b 0 to -19)
- highlights warm (a +3 to +10)
- blue and purple make up 22-51% of the saturated pixels
People:
- 2D characters are drawn in code on a canvas every frame and shown on camera-facing cards inside the 3D world.
- Each card's canvas is 512, 1024, 2048 or 3072 px tall, picked by how big the card is on screen, so close-ups stay sharp.
- A soft blue-violet blob shadow sits under each card.
- About 1.4 m tall, in rig units:
- a big round head (radius 55)
- a short bean torso (92-108)
- long stick legs (132-170)
- noodle arms (92) with ball hands
- a 4 px dark outline (#272236)
- A bendy spine (lean, bend, squash), and heads that tilt and turn to three-quarter view (the face slides across the head).
- The face set:
- dot eyes with angled brows (calm, smug)
- white circles with dot pupils (shock)
- closed arcs (laughing)
- grin, wavy worried mouth, blush, sweat drops
- Pose-to-pose acting: each key snaps in with a small overshoot, then holds, while blinks and breathing keep the holds alive. Bodies act too: they lean in, recoil, slump and point.
- The scene light tints them: an ambient tint, a lit side, a shade colour and a rim (warm gold at dawn, cool blue at night, orange in smoke).
- Each character gets one look built from shared parts: hats, uniforms, moustaches, hair.
Camera:
- No cuts inside a place.
- One camera holds each beat with a slow push (ease-out), then travels to the next beat.
- Travels dive down, rise over an edge, fly across, slide through a window, or pan from the clue down to the object.
- One travel can be a crane up through the sky into a new place or time.
- Travels use a smooth speed ramp (smootherstep) with a slight arc. Only travels get motion blur: 10 subframes over half a frame.
- Never parked: every hold pushes, arcs or slides.
- Low and wide:
- fov 54-64, with the lens at knee to chest height
- leading lines (rails, decks, roads) aimed at the subject
- characters 1-3 m from the lens and leaning in; the mocker gets a big close-up
- Inserts carry the proof: a macro held 3-5 s while the change happens in frame.
- The payoff is a wide, centred spectacle, with the event coming at the lens.
- Hard cuts only for a big jump in place or time: 0-6 per Short.
Captions:
- 1-2 words at a time; short words (a, the, so, to) ride with the next word.
- Montserrat 800 at 76 px, white with a 15 px #120e1a outline and a soft shadow, centred at y 1345.
- Each pops from 108% to 100% in 0.09 s and shows 0.1 s before its word. No full stops on screen.
Banned:
- AI images or video, downloaded 3D models, real logos
- green-on-green sets, crushed blacks
- a camera that sits still, motion blur on holds
- a time-stretched or whispered voice
- more than one name the viewer has to remember
</direction>
<structure>
Length: 55-75 s, 200-280 words. The voice runs about 3.7 words a second, pauses included.
Beat map for a 62 s Short (scale it to your voice):
0-3 s, HOOK, 9-14 words: one plain sentence about an act that makes no sense, with the reason hidden.
- Two things can't both be true, or someone does the opposite of what anyone would do.
- Write it before the rest of the story.
- Picture: the act and the danger in one low, wide frame.
3-12 s, SETUP: present tense, with exact numbers (a price, a time limit, a distance): who, where, and what's at stake. The camera travels across the world to show it.
12-20 s, THE MOCKER: a quoted joke line of 4-12 words, sarcastic and funny, said to the hero's face. Big close-up, leaning into the lens.
20-27 s, THE HERO stays calm and cryptic: one short line, or just a gesture. He never explains.
27-40 s, ESCALATION in threes: it gets weirder, and the mocker gets cocky. A macro insert is held 3-5 s while the change happens. Add one comic aside per beat.
40-52 s, "YOU SEE,": used once, at 60-85% of the runtime. The trick is explained through an everyday thing the viewer has done (blowing on soup, a phone sliding off a table), in 3-5 short lines.
52-62 s, THE PAYOFF: shown, not explained, and it lands on the mocker. The last line is the biggest reveal, with no moral and no trivia after it. The last frame leads back into the first, so it loops.
</structure>
<build>
1. Tools (all free): Python 3, Playwright with Edge or Chromium, FFmpeg, faster-whisper, numpy, soundfile, kokoro-onnx, and Three.js 0.170 from npm, loaded with an import map, no bundler. Montserrat comes free from Google Fonts. Install what's missing and tell me what you installed.
2. Script:
- Topic: true, one bizarre image you can picture instantly, someone outsmarts someone, and the title hides the ending.
- Explainers, nature facts and fiction without a trick do far worse.
- So do topics where a science lesson is the twist.
- Tell it the way a 10-year-old tells a friend:
- plain spoken words in flowing sentences joined with "and" and "so"
- "a captain", "the boss", never titles and dates
- 0-1 names, no context lines, no jargon
- one funny comparison
- Join related sentences with commas, because a voice resets after every full stop and leaves a gap.
- No cute gags, no "on purpose" spoilers, no low stakes.
- Study first, free: pull the transcripts of 3 of the newest top Shorts in this format with yt-dlp (--skip-download --write-auto-subs --sub-lang en --sub-format vtt), strip the timestamps, and note how many words each line has, where the mocker speaks and where "You see," lands.
- Then fill this skeleton line by line, 16-20 lines in all:
- line 1: the hook, the strange act with the reason hidden, 9-14 words
- lines 2-4: the setup, who and where, one exact number, what's at stake
- line 5: the mocker's joke, quoted, 4-12 words
- line 6: the hero's calm, cryptic reply, or just a gesture
- lines 7-11: the escalation in threes, each step weirder, the mocker getting cocky, one comic aside
- lines 12-15: "You see," and the trick told through an everyday thing the viewer has done
- lines 16-18: the payoff shown and landing on the mocker, the biggest reveal as the very last line
- Check the finished script line by line against those 3 transcripts before any voice.
- Show me the word count and the seconds per line.
3. Voice, free first:
Free route, Kokoro:
- Run kokoro-onnx on the CPU with the free kokoro-v1.0.onnx model and voices-v1.0.bin, lang en-us.
- Try 4-5 American male voices (am_puck, am_michael, am_fenrir, am_echo, am_adam) on the first 12 s of the script at speed 1.0-1.1.
- Keep the voice with the widest pitch range (the gate below).
- Generate one line per call, so each line gets its own speed: 1.0 for calm lines, 1.1 for excited ones.
- Join the lines with 0.18 s gaps, and 0.3 s before a big turn.
- It will sound flatter than a person. Because the film is anchored to the words, you can drop in a better voice later without touching the animation.
Optional upgrade, ElevenLabs:
- Use eleven_v4 with a stock library narrator; we used Mark, an energetic young male voice. Never clone a real creator.
- Put audio tags at the start of lines: [excited], [mischievously], [laughs], [curious], [sarcastically], [chuckles], [dramatically].
- Put CAPS on one punch word per line ("he did NOTHING", "the ENTIRE town"). An ellipsis gives a beat before a punchline.
- Never use whisper, soft or sigh tags.
- Read the whole script in one take at natural speed, and make 4 takes to pick from.
- A 192-word script came out at 64.6 s for 1,147 credits (about $0.22).
- We cut pauses over 0.35 s down to 0.28 s (FFmpeg silenceremove at -45 dB) and applied atempo 1.15, which gave 56.0 s.
- Never go faster than that.
Gate every take, either route, before building on it:
- Words a second while talking: 3.5-4.5.
- Gaps between sentences: median 0.12-0.25 s, longest 0.35 s, none over 0.5 s. Pauses under 13% of the runtime.
- Pitch range 12.5+ semitones, and pitch movement 11+ semitones a second (pyin over the voiced frames). Under that sounds flat.
- Stress spread over the line: under 55% of the loud words in each line's first third.
- Dead air: count the frames 50 dB under the speech peak inside gaps over 0.3 s.
- Takes with 9-13 s a minute sounded like a robot.
- 1-4 s a minute of breaths sounded natural.
- Whispered words: a word with pitch found in under 20% of its frames is whispered.
- Regenerate just that line and drop it into the pause before the next sentence, never mid-line.
- Expect 1-2 lines per Short, about 100 credits each.
- Level to -16 LUFS. Then run faster-whisper on the finished track, without the script as a prompt, to get word times.
4. Film: one HTML page with one canvas, where every frame is a pure function of time: window .seek(t), window.READY, window.END.
- Align the clean script to the whisper words. A helper T('word', n) returns the start of the nth time that word is said.
- Anchor every beat, camera hold, pose change, effect and sound event to a T() plus an offset, never a typed time. A new voice then means re-run whisper, re-render and re-mix, nothing else.
- A world module builds the set and exposes props through simple controls. Give every transformation in the story a 0-to-1 control (setChange(k)) that builds it in visible steps, and use a clipping plane for sweeps like paint or water.
- A cast module holds the looks and the lights.
- One rig function draws a character from a pose: lean, bend, squash, facing, turn, head tilt, hands, feet, eyes, brows, mouth, blush, sweat. A keyed(keys, t) helper does the pose-to-pose timing.
- The camera is a list of holds, each with start, end, position, look-at, [fov from, to], aperture and focus point. The gaps between holds are the travels.
- window.EV lists the sound events {t, name}, pushed from the same anchors. The renderer saves it for the mix.
5. Style check before the render:
- Grab 3-4 frames and lay them side by side with frames from 2-3 of the newest Shorts in this format.
- Render only if palette, shadow colour, lens height and texture match. Measure the colour targets.
- Make a contact sheet with the first and last frame of every hold. Fix:
- faces cut off
- characters inside geometry
- empty corners
- captions over faces
- a camera that starts a cut inside a hill or a wall
6. Render:
- Headless Edge or Chromium through Playwright seeks every frame. Launch flags: --enable-gpu --ignore-gpu-blocklist --allow-file-access-from-files, plus --use-angle=d3d11 on Windows.
- The page encodes itself with WebCodecs H.264 on the GPU: 60 Mbps, a keyframe every 2 s. Never read pixels back.
- Reference speed: 56.2 s = 1,685 frames at 1080x1920, 30 fps, in 3 min 53 s (about 7 fps) on an RTX 3060 Ti with an i5-12400F.
- The master is about 415 MB. Re-encode with libx264 for upload: 8 Mbps comes to about 57 MB a minute.
7. Glitch scan, on the silent render before the mix:
- Flag whole-frame jumps that are not planned cuts, one-frame A-B-A flickers, and single blocks that change while their neighbours stay calm (pop-ins, blinks).
- Look at the frames around each flag and fix the cause. A first cut usually has 10-20.
8. Sound:
- Music: one playful bed under a free licence (Pixabay). Cut it or drop it on the biggest moment.
- Ambience: one bed per place, swapped on each cut or crane (distant explosions, waves and birds, night creaks, a cockpit drone).
- Effects: about 45 Mixkit cues placed from window.EV, so each effect's loudest moment lands on its frame.
- Whooshes on travels, a pop on reveals, a freeze hit, impacts, a ding on the idea.
- Big hits go in pauses. Hits that land on words sit under the voice.
- Duck music and effects about 13 dB under the voice with a sidechain. The music bed sits 20 dB under the narrator.
- Measure it: mix a voice-only and a background-only version, compare them K-weighted in 0.4 s windows, and fix anything that misses either target:
- median gap of 15 dB or more
- background louder than the voice in under 1% of the talking
- Two-pass loudnorm to -14 LUFS, true peak -1.5.
9. Upload text:
- Title: "The [thing] That [strange act]" or "Why [something odd]", hiding the ending. No emoji, no hashtags; the description is the title.
- Cover: a clean frame of the payoff with no text.
- Made for kids: No.
</build>
<gotchas>
Script:
- The first scripts read like writing: names, dates, history context, the twist given away in the hook, no doubters, an ending that fizzled. They were rejected.
- Rewritten the way a 10-year-old tells it, with a mocker and the reveal saved for the end, they worked.
- Count names and context lines; a reading-level score doesn't catch this.
- A 121-word script had no room to escalate. The biggest Shorts in this format run 145-295 words, and the newest ones 218-295.
- An opener that is setup ("During a war...") or gives the answer away kills curiosity. Line 1 is the strange act with the reason hidden.
Voice:
- Short full-stop sentences make every voice reset with a 0.5-0.85 s gap and punch the next first word, so it sounds stop-start. Join lines with commas.
- A time-stretch (1.15) on top of pauses cut to 0.18 s got "did you speed it up?", and cutting breaths out sounds robotic. Speed comes from the script, not the edit.
- Whisper or relieved tags made the narrator whisper a whole line. Leave them out.
- Kokoro was rejected as a final voice for sounding flat, but it is a fine free start: build on it, then swap the voice when you can.
- Whisper given the script as its prompt garbled the transcript. Run it without one.
- Anchor repeated words by occurrence ("so" number 3), or beats land on the wrong line.
Look:
- Olive people on olive vehicles on bright grass under a pale sky read as cheap. Pick a warm-against-cool scheme first; green never leads.
- Using the grade isn't enough. One Short with ochre walls, an orange road and warm shadows drifted all orange. Pale interiors went flat.
- Set palette and interior light decide the look, so check frames side by side every time.
- The colour metric's "warm" bin counts pink-purple (hue over 300). Trust the side-by-side over that number.
Camera:
- 17 cuts in 35 s, a fixed 1 s cut grid, whips, shakes and blur everywhere read as glitchy visuals unrelated to the voice. Hold, push, travel; cut only for a jump in place or time.
- A camera at eye level, mid-distance, at fov 36-46 felt lazy and flat. Low, wide and close felt right.
- Hermite camera keys overshoot when a neighbouring key is far away, and the camera flies through walls.
- Use eased travels (smootherstep) or centripetal Catmull-Rom splines with arc-length speed.
- A camera key inside geometry renders black. A fast travel through a pole, a wall or an actor reads as a glitch. Make those hard cuts.
- A long travel at street level smears through shopfronts. Cut for big jumps inside a town.
- The portrait frame is only about 23 degrees wide at fov 40. Keep characters within a few degrees of the look line.
- Turn actors three-quarter to camera, or a raised far arm hides behind the big head.
Render:
- Characters vanish inside other geometry: a hill mesh swallows anyone standing inside its radius, and foliage clumps swallow heads.
- Keep people on clear ground.
- Open a sight line through foliage between the camera and what it looks at: 9 m long at most, faded in over 4 m so the clumps don't jump.
- An InstancedMesh whose count or matrices change after the first frame keeps its first bounding sphere and gets culled, so leaves blinked. Set frustumCulled = false.
- Transparent planes with the same renderOrder at the same height swap draw order as the camera moves, so they flicker. Give each its own order.
- Culling character cards with fixed screen margins makes close-ups pop in at the frame edges. Scale the margin with the card's size.
- Pose fields set outside the key system snap. Ease every change. Give props to a hand instead of switching them on with a pose.
- Effects that outlive a cut show up in the next shot: a splash from one shot hangs as a ghost over a face in the next. End them at the cut.
- A camera near plane of 0.05 loses flat effects near the ground to the depth test in a band at the bottom of some frames. Use 0.3.
- Check stills at exact frame times (frame / 30), not rounded ones.
- Motion blur on holds ghosts the captions at every word change. Blur travels only.
- Reading pixels back every frame (toDataURL, screenshots) knocks the canvas off the GPU and renders about 50x slower. Encode inside the page.
Sound:
- With the music only 7-9 dB under the voice, the narrator was hard to hear. Duck it and measure before you export.
- A voice already hitting the peak cap can't go louder. Pull everything else down instead.
</gotchas>
<start>
Ask me for my story, or pitch 3. Then show me the script (word count and seconds per line) and the beat list before any voice is generated or any scene is built.
</start>
来源:Finn · x.com