these satisfying ball reels are going viral on ig rn
i made this video completely with code using opus 5.5 and i turned ten other different formats into one prompt
am giving the prompt entirely for free to u guys
save it and use it later
here's the prompt ->
<inputs>
Ask me for: the machine (default: Crusher; others: Sweeper Arm, Laser Blades, Rotating Frame, Multiplier Zones, Split Rings), how many new balls one hit ball becomes (default 8), the length (default 20 seconds), and whether I have my own sound effects (if not, synthesize them in numpy).
</inputs>
<direction>
An oddly satisfying physics short at 1080x1920, 30fps, drawn entirely in code with Python, pymunk and OpenCV, every shape anti-aliased with cv2.LINE_AA at sub-pixel shift 4.
Space: pure black #000000, no gradient, no stars. The arena is a white ring, radius 438px, 5px stroke, centred at 540,960.
The machine: brushed steel #8E9198 with a darker edge #5C5F66 and a 2px highlight line #B9BCC2 along its top, 6-7px rounded corners, three small dark bolts per plate and a thin orange pad #E9A23B on every face that touches balls. For the Crusher: a 16px steel rail from each jaw's outer side to the screen edge with a rounded end cap, and two C-shaped jaws "[ ]" facing each other, each a 42x312 back plate with top and bottom arms 118px long and 33px thick pointing inward. No rail between the jaws.
Balls: flat solid circles with no outline or shading, radius 9px, the first ball 17px. Each wave is a new color in this order: orange #FF8A1F, indigo #4B2BFF, green #3BFF3B, pink #FF2D7A, cyan #22C3F5, yellow #FFF000, purple #A01EFF, mint #1FF58A, red #FF3B1F. Old colors stay, so the ring marbles into a mix.
Draw order: ring, rail, balls, squashed balls, machine on top.
Finish: one white flash at 55% fading over 5 frames on the finale, nothing else.
Banned: text, captions, counters or watermarks on screen (except zone labels on Multiplier Zones), camera moves, gradients, glow on balls, gravity pulling down, balls spawning inside the machine, AI images or AI video, NexusBox Lab's logo or name.
</direction>
<structure>
20 seconds, the machine never stops moving and every crush is bigger than the last.
One orange ball sitting still left of centre at 400,955, jaws open (0s) → the jaws start closing at 0.2s with an ease-in cubic slam over 0.5s, the ball gets swept in and squashed, pinch at 0.7s, 8 indigo balls shoot out both sides → jaws ease back open over 1.2s and rest → every 2.4s the same clamp: pinches at 3.1, 5.5, 7.9, 10.3, 12.7 and 15.1s, each crushing whatever drifted into the jaws and turning every crushed ball into exactly 8 of the next color, so the waves grow 8 → 8 → 16 → 32 → 88 → 264 → 880 and the ring fills up (0.7-15.1s) → on the last close the ring itself gets pulled in and shrinks into a white capsule squeezed between the jaws (17.0s) → pinch: capsule vanishes, white flash, deep boom, the red wave of 2,000+ balls bursts out and every ball blasts off screen at 600-1100px/s (17.5s) → the empty jaws clamp once more on black at 19.9s so the last frame flows into the first.
For any other machine, keep the same shape: one lonely ball, the first hit before 1s, a hit every 2-2.5s with each wave a new color and 8x bigger, the ring fills, the machine destroys the ring at about 87% of the length, everything explodes off screen, the empty machine keeps moving into a seamless loop. Sweeper Arm: a 12-tooth gear with a 150-degree curved arm sweeping round, pinning balls against the ring. Laser Blades: 5 neon cyan blades spinning from a hub, slicing balls in two. Rotating Frame: a spinning square frame that squeezes shut every 2.4s, on two X rails. Multiplier Zones: an octagon with gates labelled x20, x5, BIG, SMALL and a skull, with normal gravity. Split Rings: four corner ramps tipping colored piles into four stacked rings with rotating gaps.
</structure>
<build>
1. One Python script. Every number in a CONFIG block at the top, a fixed random seed (default 4) I can change with an environment variable, raw frames piped straight into ffmpeg.
2. Physics: pymunk with zero gravity, 10 substeps per frame, 12 iterations, space.damping 1.0 so balls never slow down, ball elasticity 0.95, machine 0.6, wall 1.0, friction 0, speed clamped at 1100px/s. A gentle spring pull toward the centre (2.0 x distance per second squared) keeps balls drifting back into the machine. Switch it off when the ring breaks.
3. The ring wall is 160 static segments just outside radius 438. Every moving machine part is a KINEMATIC body: every substep set its position AND its velocity from the next substep's target, or balls tunnel through and don't get shoved.
4. The crush: once the jaws' arms overlap, the box is sealed. Balls inside leave the physics and are drawn squashed, keeping their x as a fraction of the gap and narrowing into ellipses. At the pinch they all count as crushed.
5. The multiply rule: spawn EXACTLY crushed x 8 new balls, no rounding, no fixed totals, safety cap 4000. Stream them out over 9 frames just outside the jaws, worked out from where the jaws are when each ball appears, flying away at 250-520px/s fanned over 110 degrees. Print one line per pinch: "pinch N: crushed X -> spawned Y (x8), total Z".
6. Sound: one effect per event kind (jaw whir rising 120 to 380Hz through each close, metal clunk on each pinch, a burst of 14 tiny pops 22ms apart on each spawn, a deep 1.6s boom on the finale), each peak-aligned to its frame. If I gave you my own sound effects, use them instead. Normalize the mix to -1.5dB peak and mux it with ffmpeg.
7. Encode with libx264 at CRF 17, yuv420p, preset veryfast, AAC 192k.
</build>
<gotchas>
With damping below 1.0, balls lose their energy and settle in the gaps above, below and behind the jaws, so nothing gets crushed and the waves die out. Without the centre pull the same thing happens: test it and you'll see crushes of 1, 0, 0, 0. Spawn positions must follow the jaws as they open, or the finale wave gets stuck inside the jaws. If fewer than 1 ball is crushed in each of the first 3 pinches, try another seed or raise the pull. If the cap gets hit before the finale, lower the pull. Run the physics once with rendering switched off, show me the crush log and a contact sheet of every pinch before the full render.
</gotchas>
<start>
Ask me the inputs, run the physics and show me the crush log with the wave sizes it gives, then build and render the video.
</start>
i recreated this Ricksclip style animation completely in claude + blender
it took me a week of researching polishing figuring out and becoming BETTER then the original
and as promised im LEAKING the prompt for FREE
he got 100M views in the past 30 days averaging 8M views per vid
this style is a mix of a 2d character with a 3d background
ive seen a few people try to recreate this but they dont end up like the og
so how did i make this?
-> Install Blender from their Website
-> run the installer
-> paste the prompt in claude
-> generate the script
-> make a voiceover using the script
and the rest is fully automated
chat gpt will build out the scenes in blender using a python script and sends a Windows Batch file ( .bat ) to a folder you specify
u just simply double click the Render .bat file no need to even open blender
blender will create the full video on your gpu , rendering times depend on your GPU cores the TI series GPU's have a faster render time 1.5-3sec per frame
this video in particular was 1900 frames and took me 1.5 hours to render on my GPU
anyways here is the free prompt 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 with a stock library voice. Tell me the credit cost before you generate anything, and make one take.
Ask what GPU I have. Any GPU works: Blender EEVEE renders on all of them, just slower on older cards.
Tell me everything else is free: Blender, Python, 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-70 s vertical Short in the style of narrated "true story with a twist" cartoon 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 (Blender, built by a Python script):
- Build every place in the story from simple shapes in code (boxes, cylinders, cones, tori, bevelled boxes), never a downloaded model.
- Materials: flat toon colours with low roughness, so it reads like a cartoon, not a photo.
- Ink outlines: an inverted-hull shell on every object (a Solidify modifier with flipped normals and a dark backface-only material), so the world has the same line as the characters.
- Draw surfaces on a canvas and use them as textures: signs, chalkboards, brick, planks, plaques.
- Put the story's words inside the world (signs, boards, counters) instead of floating titles.
Palette and light:
- Pick a warm key against cool shadows for each place. Balance cream, ochre and amber against blue, teal and purple.
- Costumes contrast with the set.
- Interiors: warm practical lamps plus a soft cool fill. Exteriors: a strong sun, a blue sky and a lighter horizon.
- Render with EEVEE, the Standard view transform, a slight lowered exposure, and a soft glow added in the finish.
People:
- 2D characters are drawn in code (HTML canvas) and exported as transparent images, one per pose and expression. In Blender they sit on camera-facing cards that turn around the vertical axis only.
- Use an emission material on the cards so faces stay clean white whatever the lighting.
- The look, kept simple:
- a big round white head with a thick dark brush outline
- big expressive eyes and brows, a small nose, a mouth that changes shape
- thin stick legs and chunky flat-colour clothes
- one signature prop or accessory each (glasses, a hat, a cigar, a tool)
- The face set: smug, grin, shock, laughing, worried, sweat drops.
- Pose-to-pose acting: point, hold up a prop, hands on hips, arms up. Blinks and small breathing keep holds alive.
- A new, original cast for every video. Show me a character sheet before building.
Camera:
- One camera that travels between beats. Each beat holds with a slow push, then the camera moves to the next.
- Fit every camera key to what it should show: compute the distance so the named faces or props sit fully in frame.
- Inserts carry the proof: a close-up on the key object while the change happens.
- The payoff is the biggest frame in the video: a reveal coming at the lens.
- Soft dissolves or camera moves between places, few hard cuts.
Captions:
- 1-2 words at a time; short words (a, the, so, to) ride with the next word.
- A bold rounded font, white with a thick dark outline, centred in the lower third.
- No full stops on screen.
Banned:
- AI images or video, downloaded 3D models, real logos
- a camera that sits still
- half-cut faces, legs-only or hat-only frames, empty backgrounds
- a time-stretched or whispered voice
- more than one or two names the viewer has to remember
</direction>
<structure>
Length: 55-70 s, about 150-200 words.
Beat map for a 62 s Short (scale it to your voice):
0-4 s, HOOK: one plain sentence about an act that makes no sense, with the reason hidden. Picture it in one frame.
4-12 s, SETUP: who, where, and what's at stake, with one exact number.
12-20 s, THE MOCKER: a quoted joke line said to the hero. Big close-up.
20-40 s, THE METHOD: it gets weirder in steps. One close-up insert per step.
40-50 s, "YOU SEE,": the trick explained through an everyday thing the viewer has done.
50-62 s, THE PAYOFF and THE TWIST: shown, not explained. The last line is the biggest reveal and calls back to the hook.
</structure>
<build>
1. Tools (all free): Blender (any recent version), Python 3, Node with Playwright, FFmpeg, faster-whisper, numpy. Install what's missing and tell me what you installed.
2. Script:
- Tell it the way a kid tells a friend: plain words, sentences joined with "and" and "so", one funny comparison, no dates or jargon.
- Join related sentences with commas, because a voice resets after every full stop and leaves a gap.
- Show me the word count and the seconds per line.
3. Voice:
- Free route: Kokoro on the CPU, one line per call, joined with short gaps.
- Paid route: ElevenLabs, one take, cost stated first.
- Only trim silence, never inside a word. Then run faster-whisper on the finished track to get word times.
4. Characters: draw the cast in code, show me a sheet, then export every pose/expression the story needs as transparent WebP.
5. Story timeline: one file that, for any frame, returns the camera (position, look-at, fov, roll), the focus distance, and each character's card, position and scale. Anchor every beat and sound to a word time, never a typed time.
6. Exporter: a headless browser page runs the timeline for every frame and writes frames.json plus the card images and sign textures.
7. Blender scene script (blender -b -P https://t.co/TnwLWonFx3 -- --data data --out frames):
- builds every set, light and prop
- reads frames.json, places the camera and cards each frame, animates the props
- renders JPG frames, skips frames that already exist so it can resume
8. Contact sheet before the full render: stills from the middle of every shot, labelled with time and the line being spoken. I approve or ask for changes.
9. Sound:
- Music: one playful bed under a free licence, about 20 dB under the voice.
- Effects: real Mixkit sounds placed on the actions (whooshes on camera travels, pops on reveals, impacts, dings).
- Duck music and effects under speech. Normalise to -14 LUFS.
10. Finish with FFmpeg: a soft glow (screen-blend a blurred highlight pass at about 0.4 opacity), burned-in captions, the mix, H.264.
11. Give me a one-click .bat (or .sh) that runs the export, the Blender render and the finish. It must refuse to encode if any frame is missing, and never overwrite an older video.
12. Upload text:
- Title: "The [thing] That [strange act]", hiding the ending.
- Cover: a clean frame of the payoff with no text.
</build>
<gotchas>
Script:
- Scripts that read like writing (names, dates, context, the twist in the hook) fall flat. Line 1 is the strange act with the reason hidden.
Voice:
- Short full-stop sentences make the voice stop-start. Join lines with commas.
- Trimming at whisper timestamps clips words. Trim on silence only, with a small guard.
Look:
- Empty sets read as cheap. Dress every place with props and background detail.
- Characters scaled too small look like kids next to tables. Scale them so they stand about 1.9 m against the real-size sets.
Camera:
- Hand-placed cameras crop faces at 9:16; the frame is narrow. Fit keys to the subjects and scan every frame for cut faces before rendering.
- A camera that flies through a wall, a canopy or a post reads as a glitch. Pick another angle or cut.
Render:
- 3D props attached to a 2D card must follow the card's turn, or they drift off the drawn body.
- A render that stops early (sleep, crash) must not be encoded into a short video. Check the frame count first.
- Turn off PC sleep before a long render.
Sound:
- Music only a few dB under the voice makes the narrator hard to hear. Keep it low and measure.
</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>
HOLY SH*T
i tried recreating kurzgesagt style animation and it's mindblowing
the creator behind the channel spends 1200 hours with a full animation team
this takes 20min with just claude opus 5.5 and am giving the prompt completely for free
here's the prompt ->
<inputs>
Ask me for: one topic as a "what if" question (default: "What if the Sun vanished?"), the length (default 30 seconds), and whether I have an ElevenLabs key (if not, use a free local voice).
</inputs>
<direction>
A Kurzgesagt-style animated explainer at 1920x1080, 30fps, drawn entirely in code: one 2D canvas plus one WebGL canvas for planets.
Space: a vertical gradient #081d2c to #102348, five huge parallax nebula blobs (teal rgb 24,150,160 at 20%, blue 40,95,195 at 16%, coral 220,95,110 at 10%, indigo 60,70,175 at 15%), three star layers at parallax depths .12/.35/.6 that twinkle, 40% of the near stars drawn as 4-point sparkles.
The Sun: radius 300px, half off the left edge. A radial gradient #fff7dc to #ffc857 to #ff8f4a with an offset highlight, additive halo rings at 1.23/1.48/1.76/2.1x the radius, 18 faint rotating ray wedges, 28 drifting glowing granules on its surface.
Earth: an orthographic sphere in a fragment shader, 4x supersampled, from a 2048x1024 map painted from longitude/latitude polygons: land #5fc47a, forest #48ad6b, desert #f5c75f, rainforest #3a9d62, ice #f1f8ff, ocean gradient #4dc7eb to #1a66b8, white capsule clouds. Tilt .26 rad, spin .55 degrees per second. Day/night uses smoothstep(-.12, .24, N·L) with the light direction recomputed from Sun to Earth every frame. Navy night side with ~380 warm city lights, a coral band on the terminator, a cyan rim, ocean specular, an atmosphere halo that is stronger on the lit side.
A small astronaut mascot (~180px) built from rounded rectangles: suit #f3f7fb, orange #ff8f4a boots, a visor gradient #1f5a73 to #0a1c2c with glowing cyan eyes that look at whatever matters, a blinking antenna light, an idle bob, squash and stretch on every pose.
Type: Fredoka 600/700 only. Captions in caps with 3-6px letter spacing in teal #8fd8e6, gold #ffd98a or white, sitting in rounded pills of rgb(6,20,40) at 62%. Every line of text rises 1.3x its own height through a clip on an ease-out-quint.
Finish: a vignette to rgba(4,4,20,.45) and a 6% film grain re-randomized 24 times per second.
Banned: outlines, flares or loops on the Sun's edge, static infographic strips, full stops in on-screen text, text that fades in whole, AI images or AI video, Kurzgesagt's own characters, bird or music.
</direction>
<structure>
30 seconds, every line of narration gets a camera move or a transformation, nothing ever holds still.
Tight on the Sun at 2.25x (0s) → on the word "vanished" it swells 6% for 0.22s, collapses in 0.33s, then a white flash and a shockwave ring (1s) → pull back to 1x revealing Earth still lit and the astronaut staring at the empty spot (1.6-3s) → on "eight" an 8:20 countdown slams in from 1.7x to 1x and starts ticking, a "LAST LIGHT" label rides the edge of the growing dark disc (3.2s) → dive to 2.3x on Earth with light streaks flowing in (5.6s) → on "you" a YOU pin drops (7s) → on "left" a photon lands on the pin with "THIS LIGHT LEFT THE SUN / 8 MIN 20 SEC AGO" (7.5s) → on "play" the pin morphs into a play button, "YOU PRESSED PLAY / 15 SEC AGO" (8.8s) → one pull-back from 2.4x to a 0.3x orbit view, "LAST LIGHT" and "GRAVITY" riding the ring (9.6-12.5s) → on "nothing" a dotted circle at the empty centre (13.4s) → on "hits" the darkness sweeps Earth in 0.7s, city lights pop on, the countdown turns gold at 0:00 (15.8s) → on "black" the background fades almost to black (17.4s) → Jupiter appears, "STILL SHINING FOR 1 HOUR+" (17.9s) → zoom out, a dashed tangent line, "30 KM/S" as Earth flies straight off (20.8s) → a thermometer counts 15 to -70°C while frost grows from the poles (22.8s) → a 0.8s rewind on a separate story clock (24.3s) → sunglasses drop onto the astronaut (25.2s) → a photon tagged "8:20 OLD", then the title (27.7s).
For any other topic, keep the same shape: the event happens on its word, pull back to show scale, dive in to make it personal ("you"), pull back out, the consequence with a live counter, an escalation, a funny beat with the mascot, a callback and the title.
</structure>
<build>
1. One HTML file. Every frame is a pure function of time: https://t.co/cTZzFgqbdH(t) draws frame t. No timers, no CSS animation.
2. Camera moves on easeInOutCubic, zoom is interpolated in log space, every pop is a damped spring (damping .42-.5, frequency 12-16).
3. Voice: ElevenLabs eleven_v4 with a designed voice (calm, warm, curious male, late 30s, crisp, light neutral European English), stability .5, similarity .75, generated with timestamps. Without a key, use kokoro-onnx locally and get word times with faster-whisper. Every animation event fires on its word. About 165 words per minute, 0.24s between sentences, a 0.36s beat before the big reveal.
4. The darkness front: any pixel within the front's radius from the Sun turns to night with a 30px soft edge. The front moves at ~47px/s and ramps to 700px/s near Earth.
5. Keep two clocks: ambient time for twinkle, spin and bob, and a separate story clock for events, so a rewind stays consistent.
6. Render with Playwright in headless Edge with the GPU: seek every frame at 30fps and blend 2 subframes (shutter 0.6) for motion blur, then encode with libx264 at CRF 16 for the master and CRF 20 for delivery.
7. Sound: a calm royalty-free space music bed 7dB under the voice, timed so its natural ending lands on the title, swelling 5dB under the title. One downloaded royalty-free sound effect per event kind (collapse, impact, pull-back whoosh, countdown tick, dive, pin tap, photon land, play click, light hit, reveal, frost, rewind), each peak-aligned to its frame and 4-10dB under the voice. Master with gain plus a limiter to -14 LUFS, -2.2dB true peak.
</build>
<gotchas>
Make the WebGL globe canvas at least 2 x radius x zoom x 1.18 pixels or the sphere clips flat in close-ups. Never draw prominences on the Sun's edge, they read as white hooks. Never pad the voice to fit the visuals, tighten the read instead. Speed the darkness front up near Earth or it takes 13 seconds to cross the planet. Show me a contact sheet of every beat before rendering.
</gotchas>
<start>
Ask me the inputs, write the narration with the beat each word triggers, show it to me, then build and render the video.
</start>
HOLY SH*T
i tried recreating kurzgesagt style animation and it's mindblowing
the creator behind the channel spends 1200 hours with a full animation team
this takes 20min with just claude opus 5.5 and am giving the prompt completely for free
here's the prompt ->
<inputs>
Ask me for: one topic as a "what if" question (default: "What if the Sun vanished?"), the length (default 30 seconds), and whether I have an ElevenLabs key (if not, use a free local voice).
</inputs>
<direction>
A Kurzgesagt-style animated explainer at 1920x1080, 30fps, drawn entirely in code: one 2D canvas plus one WebGL canvas for planets.
Space: a vertical gradient #081d2c to #102348, five huge parallax nebula blobs (teal rgb 24,150,160 at 20%, blue 40,95,195 at 16%, coral 220,95,110 at 10%, indigo 60,70,175 at 15%), three star layers at parallax depths .12/.35/.6 that twinkle, 40% of the near stars drawn as 4-point sparkles.
The Sun: radius 300px, half off the left edge. A radial gradient #fff7dc to #ffc857 to #ff8f4a with an offset highlight, additive halo rings at 1.23/1.48/1.76/2.1x the radius, 18 faint rotating ray wedges, 28 drifting glowing granules on its surface.
Earth: an orthographic sphere in a fragment shader, 4x supersampled, from a 2048x1024 map painted from longitude/latitude polygons: land #5fc47a, forest #48ad6b, desert #f5c75f, rainforest #3a9d62, ice #f1f8ff, ocean gradient #4dc7eb to #1a66b8, white capsule clouds. Tilt .26 rad, spin .55 degrees per second. Day/night uses smoothstep(-.12, .24, N·L) with the light direction recomputed from Sun to Earth every frame. Navy night side with ~380 warm city lights, a coral band on the terminator, a cyan rim, ocean specular, an atmosphere halo that is stronger on the lit side.
A small astronaut mascot (~180px) built from rounded rectangles: suit #f3f7fb, orange #ff8f4a boots, a visor gradient #1f5a73 to #0a1c2c with glowing cyan eyes that look at whatever matters, a blinking antenna light, an idle bob, squash and stretch on every pose.
Type: Fredoka 600/700 only. Captions in caps with 3-6px letter spacing in teal #8fd8e6, gold #ffd98a or white, sitting in rounded pills of rgb(6,20,40) at 62%. Every line of text rises 1.3x its own height through a clip on an ease-out-quint.
Finish: a vignette to rgba(4,4,20,.45) and a 6% film grain re-randomized 24 times per second.
Banned: outlines, flares or loops on the Sun's edge, static infographic strips, full stops in on-screen text, text that fades in whole, AI images or AI video, Kurzgesagt's own characters, bird or music.
</direction>
<structure>
30 seconds, every line of narration gets a camera move or a transformation, nothing ever holds still.
Tight on the Sun at 2.25x (0s) → on the word "vanished" it swells 6% for 0.22s, collapses in 0.33s, then a white flash and a shockwave ring (1s) → pull back to 1x revealing Earth still lit and the astronaut staring at the empty spot (1.6-3s) → on "eight" an 8:20 countdown slams in from 1.7x to 1x and starts ticking, a "LAST LIGHT" label rides the edge of the growing dark disc (3.2s) → dive to 2.3x on Earth with light streaks flowing in (5.6s) → on "you" a YOU pin drops (7s) → on "left" a photon lands on the pin with "THIS LIGHT LEFT THE SUN / 8 MIN 20 SEC AGO" (7.5s) → on "play" the pin morphs into a play button, "YOU PRESSED PLAY / 15 SEC AGO" (8.8s) → one pull-back from 2.4x to a 0.3x orbit view, "LAST LIGHT" and "GRAVITY" riding the ring (9.6-12.5s) → on "nothing" a dotted circle at the empty centre (13.4s) → on "hits" the darkness sweeps Earth in 0.7s, city lights pop on, the countdown turns gold at 0:00 (15.8s) → on "black" the background fades almost to black (17.4s) → Jupiter appears, "STILL SHINING FOR 1 HOUR+" (17.9s) → zoom out, a dashed tangent line, "30 KM/S" as Earth flies straight off (20.8s) → a thermometer counts 15 to -70°C while frost grows from the poles (22.8s) → a 0.8s rewind on a separate story clock (24.3s) → sunglasses drop onto the astronaut (25.2s) → a photon tagged "8:20 OLD", then the title (27.7s).
For any other topic, keep the same shape: the event happens on its word, pull back to show scale, dive in to make it personal ("you"), pull back out, the consequence with a live counter, an escalation, a funny beat with the mascot, a callback and the title.
</structure>
<build>
1. One HTML file. Every frame is a pure function of time: https://t.co/cTZzFgqbdH(t) draws frame t. No timers, no CSS animation.
2. Camera moves on easeInOutCubic, zoom is interpolated in log space, every pop is a damped spring (damping .42-.5, frequency 12-16).
3. Voice: ElevenLabs eleven_v4 with a designed voice (calm, warm, curious male, late 30s, crisp, light neutral European English), stability .5, similarity .75, generated with timestamps. Without a key, use kokoro-onnx locally and get word times with faster-whisper. Every animation event fires on its word. About 165 words per minute, 0.24s between sentences, a 0.36s beat before the big reveal.
4. The darkness front: any pixel within the front's radius from the Sun turns to night with a 30px soft edge. The front moves at ~47px/s and ramps to 700px/s near Earth.
5. Keep two clocks: ambient time for twinkle, spin and bob, and a separate story clock for events, so a rewind stays consistent.
6. Render with Playwright in headless Edge with the GPU: seek every frame at 30fps and blend 2 subframes (shutter 0.6) for motion blur, then encode with libx264 at CRF 16 for the master and CRF 20 for delivery.
7. Sound: a calm royalty-free space music bed 7dB under the voice, timed so its natural ending lands on the title, swelling 5dB under the title. One downloaded royalty-free sound effect per event kind (collapse, impact, pull-back whoosh, countdown tick, dive, pin tap, photon land, play click, light hit, reveal, frost, rewind), each peak-aligned to its frame and 4-10dB under the voice. Master with gain plus a limiter to -14 LUFS, -2.2dB true peak.
</build>
<gotchas>
Make the WebGL globe canvas at least 2 x radius x zoom x 1.18 pixels or the sphere clips flat in close-ups. Never draw prominences on the Sun's edge, they read as white hooks. Never pad the voice to fit the visuals, tighten the read instead. Speed the darkness front up near Earth or it takes 13 seconds to cross the planet. Show me a contact sheet of every beat before rendering.
</gotchas>
<start>
Ask me the inputs, write the narration with the beat each word triggers, show it to me, then build and render the video.
</start>