trey (@treyscalez) header
trey (@treyscalez) profile picture

replacing ur job with ai

London, England
Joined December 2011
Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)Photo by trey (@treyscalez)
these ai animations are F*CKING printing money made a free guide for 10+ animation styles check them on the article below
6
68
4,371
i gave Fable 5.2 this prompt, make a 15-second showreel proving what a great designer u are
4
3
10
607
dont sleep on these kurzgesagt stlye animations they cost $0 and are fully automated prompt in the article below
2
11
48
3,198
lots of u guys are asking how do i use opus 5.5 to make those prompts well, am leaking the whole thing - referencing - frame analysis - animating - rendering - prompting - 10+ different animation style all for completely free just save this article & check it later
2
20
270
15,530
another channel about to blow up with ricks animation style don't sleep on these shorts they are a f*cking money printer
9
19
1
221
14,351
HOLY FUCK these balls animations are going insanely viral on ig rn I made a prompt that lets u create them with opus 5.5 only am giving it away for free check the post below to get it
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>
4
8
1
34
3,087
DISCLAIMER ⛔️ every prompt on this acc is built + tested on claude pro on the free plan the shorter ones still work, but long builds (files, videos, multi-step) can hit limits or stop halfway if your output looks different from mine, check which model you picked not affiliated w/ anthropic
1
5
473
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>
6
6
1
38
5,409
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 scene.py -- --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>
34
31
4
297
47,296
dont sleep on these kurzgesagt stlye animations they cost $0 and are fully automated prompt in the post below
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: window.seek(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>
8
23
3
541
86,646
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: window.seek(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>
19
54
6
719
125,744
i thought redesigning it will look better in your eyes well here's the real one guys lock in lmao
HOLY SH*T don't sleep on these opus 5.5 animations they are a F*CKING money printer
3
6
33
4,855
HOLY SH*T don't sleep on these opus 5.5 animations they are a F*CKING money printer
33
109
10
2,120
199,896
I did the f*cking work for you. Tested this guy's viral cartoon prompt on my own Claude Opus 5.5 and screen-recorded the whole thing. The first video is the result after a couple of small tweaks. The second is my screen recording, 37 minutes sped up to one. Full prompt is in the reply. Keep scrolling to see what other people made with it, or paste it into Claude with your own story. Story: Casanova, Venice 1754, and a betting system that "couldn't lose". Every frame is drawn in code (three.js + headless Chrome), the voice is a free local model, the music is written in numpy. $0 on image or video tools.
i made this ricksclips style animation completely from scratch using opus 5.5 the style is going extremely viral rn on the internet and people are paying money just to be able to make them well today is ur lucky day cause am giving away the full prompt to guys for free all u need is voiceover and claude to be able to make this, $0 spent on images or videos -> here's the prompt { "task": "Make a vertical animated cartoon short of MY story, built in code: three.js r160 world + canvas-drawn 2D character cards, rendered frame by frame in headless Chromium (Playwright, swiftshader), encoded with ffmpeg. 1080x1920, 30fps, exactly as long as my voiceover. Work start to finish; only ask if script and audio don't match.", "my_inputs": { "story": "[your idea, true event, legend or full script]", "script": "[optional exact script]", "voiceover": "[optional: attach mp3/wav]", "length_seconds": 30, "voice_speed": 1.0, "captions": false, "notes": "[optional: era, setting, characters, jokes]" }, "stages": [ "A. No script: write one at ~3.7 words/s (30s~110 words): 1) hook = absurd fact, no setup 2) setting in 1-2 lines with a concrete detail 3) 2-4 escalating beats, others doubt/mock, one exaggeration joke 4) pivot 'But...'/'You see,' revealing the real mechanism with an everyday analogy 5) short ironic twist = last words. Spoken English, contractions, numbers as words, never describe what's on screen. If presented as true, web-check facts and say history/disputed/legend.", "B. No voiceover: give script in a copyable block + word count + est. length, a short shot plan, recording tips (one warm narrator; ElevenLabs speed 1.05-1.1, stability 45-55%; pauses at sentence ends; no music). Stop and ask for the upload.", "C. With voiceover: build everything below without stopping. Task list for progress; send a stills contact sheet before the long render." ], "setup": [ "mkdir -p web/lib work stills frames out", "npm pack [email protected] -> copy package/build/three.module.js to web/lib (fallback: sparse git clone of mrdoob/three.js branch r160, folder build)", "Playwright + Chromium (npm i -g playwright && npx playwright install chromium); launch args --use-angle=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist", "python3 numpy Pillow, ffmpeg (with rubberband)", "Serve web/ with a tiny Node http server; render.mjs loads index.html, waits for window.ready, calls window.renderFrame(f), saves canvas.toDataURL('image/jpeg',.95) to frames/f0000.jpg. Support RESUME=1 (skip existing) and a frame list 'a-b' or '1,5,9'." ], "timing": "If voice_speed!=1: ffmpeg -af rubberband=tempo=<speed> (pitch kept). Claude can't hear audio: align my script to speech using ffmpeg silencedetect (-35dB, 0.12s): split script into phrases at punctuation, DP-match phrases to speech segments by syllable count vs duration, penalise sentence ends inside a segment. Spread words by syllables. Write work/phrases.json; check pauses fall at sentence ends. Frames = round(duration*30). Every reaction lands 0-3 frames before its word; the final payoff lands on the final word.", "architecture": { "files": "web/index.html (canvas#c 1080x1920 + module main.js), main.js (renderer, materials, world, cards, sprites, passes), story.js (SHOTS, LIGHTS, lightFor, camAt, dofAt, worldAt, actorsAt, fxAt: all pure functions of frame f), motion.js, paint.js (canvas textures), toon.js (character + creature drawing), audio.py, mix.py, finish.sh, sheet.py (contact sheets).", "renderer": "WebGLRenderer antialias:false, preserveDrawingBuffer, PCFSoft shadows 2048, sun = DirectionalLight from az/el per light preset, shadow camera centred on each shot's action (ext 8-60m), HemisphereLight, Fog(colour = sky horizon). Camera Perspective, near .08 far 1500.", "materials": "MeshToonMaterial with a 2-texel gradientMap [90,255] Nearest = hard 2-step toon shading. Textures are CanvasTextures painted in code: flat base + soft blotches + dark seams/strokes, repeat-wrapped, colorSpace sRGB. Boxes use world-scaled UVs (constant texel density).", "passes": [ "1 colour: render scene to HalfFloat RT (samples 4).", "2 normal+depth: swap every mesh material to a ShaderMaterial writing vec4(normal*.5+.5, viewDepth) (handle USE_INSTANCING: pos=instanceMatrix*pos). Cards/sprites write rgb 0 + depth with alpha-test (so they block but are never outlined). Hide sky, clouds, blob shadows. Fog and shadows off for this pass.", "3 ink+grade fullscreen: 16 taps on a ring of radius 2.5px*clamp(7/depth,.62,1.25); edge = smoothstep(.006,.02,(dS-d)/d) on the NEAR side of depth jumps only; crease = smoothstep(.88,.72,dot(n,nS))*.9 when depths are within 6%; skip card samples; sky counts as depth 1e4; fade ink 140-520m. colour = mix(c, #030203, e); saturation 1.08-1.15; gain/lift tint; vignette .2-.34; white flash uniform.", "4 lens: per-pixel CoC = cinf*(1-focus/d) (near side capped 1.4x); 48-tap golden-angle disc, each tap weighted by its own CoC so sharp foreground never bleeds; skip when cinf<.5. Output linearToOutputTexel." ], "sky": "inverted sphere following camera: mix(horizon, top, pow(y,.55)) + optional sun disc. Painted cloud billboards far away (650-900m), fog off, facing camera." }, "characters": { "card": "Each character is a 1200x2000 CanvasTexture on a 1.35x2.25m plane with origin at the soles (design space 600x1000, soles at y=975, 1 design unit = 2.25mm). MeshBasicMaterial alphaTest .02, DoubleSide; shadow via customDepthMaterial with the same map (alphaTest .5); soft dark radial blob under the feet. Billboard on yaw only: rotY = atan2(cam.x-x, cam.z-z). Redraw a card only when its key (JSON of q()-rounded pose values) changes.", "proportions": "Bean body: head blob ~236 wide, legs 1.38xHH, torso 1.08xHH (stout 1.12), eyes ~1.47m high. Head = superellipse blob with slight egg + per-seed asymmetry. Torso = egg blob with a tunic skirt below. Legs/arms = thin curved strokes (5.8u/5.2u, u=headWidth/100) in a darker shade of the outfit; round dot hands; small boots.", "ink": "Outline colour #241726 (plum), width 5u, thicker on the side away from the light (light from upper-left, -120deg). Fills: base colour with a soft shadow gradient toward lower-right. Skin default #ffe2c2, also #f5c9a0 #ecd0b6 #c99067.", "faces": "Eyes 13u apart either side of centre. Kinds: dot, lid (half-closed), happy (arc), squeeze, shock (big white + small pupil + raised arc brows), slit, dash. Mouths: dash, frown, smirk, smile, grin (open with teeth line), laugh, o, O, wave (nervous), teeth. Brows are short tapered strokes; angle sets mood. Expressions: neutral, stern, grin, laugh, nervous (+sweat drop), shock, smile, pained, squint, smug/side-eye (half lids, pupils to one side). Blinks every 1.3-2.3s for 4 frames.", "outfits": "Built from parts: tunic colour, belt, buttons, pockets, sash, hat (slouch hat, cap, top hat, bonnet, helmet, crown, hair), beard/moustache, apron, dress, props in hands. Design new outfits for each story in the same flat style.", "arm_poses": "hang, point (+finger), up, wave, hip, belly, cheek (both = shock), salute (flat hand at brim, drawn over the head), thumb (thumbs-up), shrug, reach, lift, cross, prop-holding (pen, stamp, wrench, spear, sign). Whole upper body tilts about the hip; head tilts separately.", "creatures": "Animals are side-view canvas sprites (600x800 design, feet at y=780) on shared textures cached by pose key, so flocks of 50+ cost little: shaggy shaded body blob with fringe strokes, thick inked limbs, small head, big googly white eye with pupil that can look/side-eye, simple beak/snout. Legs via 2-bone IK with joint bent backward; run cycle 16 phases (foot x = hip + stride*cos, lift = max(0,sin)); poses: stand, run, peck/graze, smug. Flip the sprite when travel direction dot camera-right < 0." }, "world": { "build": "Primitives only: boxes, cylinders, cones, squashed spheres, extrusions; group set-pieces with pivots driven by 0..1 progress from worldAt(f) with eased, staggered parts. Instanced meshes for crops/grass/rocks; clear a patch where the action happens.", "background": "low half-buried hill spheres, distant mesas or mountains (cone + snow cap), trees (trunk cylinder + 4-6 squashed sphere canopies), far houses, fog to the horizon colour.", "secondary_motion": "windmills turn, flags/cloth wave (vertex sine), smoke/dust/leaves/Zzz/stars as cached 2D fx sprites, water shader scroll, wheels roll with distance/radius, vehicles bounce.", "text": "Diegetic text (signs, crates, letters, stamps) painted on canvas with real fonts; place on +z faces or planes so it never reads mirrored. Swap textures to animate (e.g. stamp appears on impact)." }, "lights": { "day": "sun az64 el50 #fff3df 2.45, hemi sky #d2e2f6 ground #a8905e 1.1, sky top #2d74d4 horizon #cfe3f5, fog 120-1300, sat 1.12, vig .2", "golden": "sun az30 el11 #ffb46a 2.9, hemi #a99bcc/#7a5040 .98, sky #6474c0 -> #ffc485 + sun disc, gain #fff0e0, sat 1.15, vig .26, tint cards #ffe2c4", "dusk": "sun el5 #ff9a72 .9, hemi #5d6cab/#3a3048 .8, sky #18234f -> #d18a7c, gain #e2e8ff, lift #04050b, vig .34, a warm point-light lamp, tint cards #c9cff2", "use": "day = normal story, golden = decline or time passing, dusk-blue = explanation or ending. Time jump = 6-frame white flash." }, "motion": { "helpers": "smooth(t)=t^3(t(6t-15)+10); easeOut=1-(1-t)^3; back(t)=overshoot s=1.7; spring settle; Catmull-Rom spline through via-points; idle(f,seed)={bob .006 sin(.11f), tilt 1.2deg sin(.05f), headTilt 1.5deg sin(.037f)}; blinkAt(f,seed); q(x)=round for card keys.", "camera": "Keys {f,pos,look,fov,roll,ease,path} inside cut-free segments; glides 18-45 frames; easeOut for whips/reveals; every hold creeps (fov *= 1-.00012*(f-f0)); 3-5deg roll on drama; impact kick = 7-frame alternating look offset + roll that decays. Vehicles: track alongside, match speed, slight judder.", "continuity": "prefer one continuous move: MCU pull-back into a wide, crane up and over a fence into the establishing shot, lateral truck along a lineup, crane down into an insert, rack focus to the background gag. Hard cut only on place/time jumps.", "acting": "anticipation -> back overshoot -> spring settle; pop-ins scale 0->1 with back easing + dust puff; stamp = 2-frame dip + puff + kick; laughs = alternating tilt + bob; head bobs on stressed words; nothing static for 4+ frames.", "walks_runs": "feet planted, bob 3-7%; run phase = speed/stride; fast movers must stay in frame until their beat is done." }, "shot_grammar": { "plan_first": "work/PLAN.md: one row per shot (frames, words, setting, light, camera, cast/poses/expressions, fx, sfx). Usually one shot per phrase; merge tiny ones. Illustrate every sentence literally; props carry the jokes.", "order": "frame 0 = hook MCU of the hero mid-action -> pull-back reveal on the punch of sentence 1 -> wide establishing crane -> lineup/two-shot with pop-ins on each listed item -> reaction close-up (a creature or extra slides in with a side-eye on the question line) -> action wide (chase, scatter, collapse) -> time-jump flash -> insert on the key object -> twist: music stops, low sting, push-in with roll, payoff on the last word.", "framing": "Bean cards 2.25m tall: MCU = camera ~3.5m away at fov 32-34 looking at 1.35m; wides fov 40-52. Vertical frame half-width = d*tan(hfov/2), hfov = 2*atan(tan(vfov/2)*.5625): at 4m and fov 40 only +/-0.8m, so stage people in depth.", "lens": "DOF on close-ups/mediums (cInf 7-14, focus on the eyes), wides sharp, racks ~14 frames." }, "audio": { "stems": "audio.py writes only music.wav + sfx.wav (48k mono, numpy synth). Music: short loop in the story's mood (march: kick/snare, plucked bass, brass pad, little fanfare; or plucky comedy; or eerie pad); stops on the twist line, then a low drone. SFX in frames/30: whoosh (low-passed noise with sine^2 envelope) on big moves, thunk (pitched sine drop + noise) on pops/stamps, rustle/leaves, feet patter, engine (pulse train low-passed), scrape, ting (2-4 kHz bells), sting (41 Hz + noise hit + brass stab) on the twist.", "mix": "mix.py: gated RMS of the voice (0.4s blocks above -40dB of max); scale music so its gated RMS = 0.5x voice (-6 dB); SFX = min(0.5x voice RMS, peaks 0.7x voice peak); sum; one linear gain only. No ducking, no compression. Print the measured levels and confirm.", "finish": "measure integrated loudness (ffmpeg ebur128), apply one volume gain to -14 LUFS + alimiter -1 dBFS; encode: ffmpeg -framerate 30 -i frames/f%04d.jpg -i mix.wav -c:v libx264 -preset slow -crf 17 -pix_fmt yuv420p -c:a aac -b:a 192k -shortest -movflags +faststart. QA: freezedetect (n=.0005, d=.4) and blackdetect must find nothing; make a 2fps tiled QA sheet and look at it." }, "look_check": "Before the full render, render stills at every shot's middle plus key actions, tile them into a contact sheet, look at it and fix: cropped heads/hats, characters hidden by props or crops, camera inside objects, fast movers already out of frame, mirrored text, missing ink, empty frames. Send me the sheet, then render all frames in the background (about 3-6 s/frame on CPU), lock picture before sound.", "code_core": { "ink_shader_glsl": "uniform sampler2D col, nd; uniform vec2 res; uniform float px, sat, vig, flash; uniform vec3 fogCol, lift, gain; varying vec2 vUv;\nfloat edgeAt(vec2 uv, float r){\nvec4 c = texture2D(nd, uv); if (dot(c.rgb,c.rgb) < .01) return 0.; float d = c.a; vec3 n = c.rgb*2.-1.;\nfloat e = 0.; float rr = r * clamp(7./d, .62, 1.25);\nfor (int i=0;i<16;i++){ float a = float(i)*.785398 + (i>7 ? .39 : 0.); float k = i>7 ? .5 : 1.;\nvec2 o = vec2(cos(a), sin(a))*rr*k/res; vec4 s = texture2D(nd, uv+o);\nfloat ds = s.a; bool card = dot(s.rgb,s.rgb) < .01;\nif (card && ds > 0.) continue; // character cards: never outlined by the world ink\nif (card) ds = 1e4; // sky\nvec3 ns = s.rgb*2.-1.;\ne = max(e, smoothstep(.006, .02, (ds - d)/d)); // depth jump, near side only\nif (!card && abs(ds-d)/d < .06) e = max(e, smoothstep(.88, .72, dot(n, ns)) * .9); // crease\n}\nreturn e * (1. - smoothstep(140., 520., d)*.8);\n}\nvoid main(){\nvec3 c = texture2D(col, vUv).rgb;\nfloat e = edgeAt(vUv, px);\nc = mix(c, vec3(.012,.01,.014), e);\nif (flash < -0.5) c = vec3(e);\nfloat l = dot(c, vec3(.299,.587,.114)); c = mix(vec3(l), c, sat);\nc = c*gain + lift;\nvec2 q = vUv-.5; c *= 1. - vig*dot(q*vec2(1.,.75), q*vec2(1.,.75))*2.2;\nc = mix(c, vec3(1.), flash);\ngl_FragColor = vec4(c,1.); }", "dof_shader_glsl": "uniform sampler2D src, nd; uniform vec2 res; uniform float focus, cinf, near; varying vec2 vUv;\nfloat coc(vec2 uv){ float d = texture2D(nd, uv).a; if (d <= 0.) d = 2000.; float k = 1. - focus/d; return k > 0. ? cinf*k : min(-k*cinf*near, cinf*1.4); }\nvoid main(){\nfloat c0 = coc(vUv);\nif (cinf < .5 || c0 < .6) { gl_FragColor = linearToOutputTexel(vec4(texture2D(src, vUv).rgb, 1.)); return; }\nvec3 acc = vec3(0.); float wsum = 0.;\nfor (int i=0;i<48;i++){ float fi = float(i); float r = sqrt((fi+.5)/48.); float a = fi*2.39996;\nvec2 o = vec2(cos(a), sin(a))*r*c0/res; float cs = coc(vUv+o);\nfloat w = smoothstep(r*c0-1.5, r*c0+.5, cs + .5);\nacc += texture2D(src, vUv+o).rgb*w; wsum += w; }\ngl_FragColor = linearToOutputTexel(vec4(acc/max(wsum,1e-3), 1.)); }", "motion_js": "export const clamp = (x, a = 0, b = 1) => Math.max(a, Math.min(b, x));\nexport const lerp = (a, b, t) => a + (b - a) * t;\nexport const lerp3 = (a, b, t) => a.map((v, i) => lerp(v, b[i], t));\nexport const ramp = (f, a, b) => clamp((f - a) / (b - a));\nexport const M = {\nsmooth: (t) => { t = clamp(t); return t * t * t * (t * (t * 6 - 15) + 10); }, \neaseOut: (t) => 1 - Math.pow(1 - clamp(t), 3), \neaseIn: (t) => Math.pow(clamp(t), 3),\nback: (t, s = 1.7) => { t = clamp(t) - 1; return t * t * ((s + 1) * t + s) + 1; }, \nanticip: (t, s = 0.12) => { t = clamp(t); return t < 0.25 ? -s * Math.sin(t / 0.25 * Math.PI) : M.back((t - 0.25) / 0.75); }, \nspring: (t, freq = 3, damp = 5) => { t = Math.max(0, t); return 1 - Math.exp(-damp * t) * Math.cos(freq * 2 * Math.PI * t); }, \n};\nexport const spline = (pts, u) => {\nconst n = pts.length - 1, x = clamp(u) * n, i = Math.min(n - 1, Math.floor(x)), t = x - i;\nconst p0 = pts[Math.max(0, i - 1)], p1 = pts[i], p2 = pts[i + 1], p3 = pts[Math.min(n, i + 2)];\nreturn p1.map((_, k) => 0.5 * ((2 * p1[k]) + (-p0[k] + p2[k]) * t + (2 * p0[k] - 5 * p1[k] + 4 * p2[k] - p3[k]) * t * t + (-p0[k] + 3 * p1[k] - 3 * p2[k] + p3[k]) * t * t * t));\n};\nexport const camFromKeys = (K, f, { creep = 0.0012, kicks = [] } = {}) => {\nlet c;\nif (f <= K[0].f) c = { ...K[0] };\nelse if (f >= K[K.length - 1].f) c = { ...K[K.length - 1] };\nelse {\nconst i = K.findIndex((k, j) => f >= k.f && f <= K[j + 1].f), a = K[i], b = K[i + 1];\nconst ease = M[b.ease || 'smooth'], t = ease((f - a.f) / (b.f - a.f));\nif (b.path) { \nconst pts = [a.pos, ...b.path, b.pos]; c = { pos: spline(pts, t), look: lerp3(a.look, b.look, t), fov: lerp(a.fov, b.fov, t), roll: lerp(a.roll || 0, b.roll || 0, t) };\n} else c = { pos: lerp3(a.pos, b.pos, t), look: lerp3(a.look, b.look, t), fov: lerp(a.fov, b.fov, t), roll: lerp(a.roll || 0, b.roll || 0, t) };\n}\nc.fov *= 1 - creep * Math.max(0, f - K[0].f) * 0.15; \nfor (const k of kicks) { const d = f - k.f; if (d >= 0 && d < 7) { const s = (d % 2 ? -1 : 1) * k.a * (1 - d / 7); c.look = [c.look[0], c.look[1] + s * 3, c.look[2] + s * 2]; c.roll = (c.roll || 0) + s * 20; } }\nreturn c;\n};\nexport const idle = (f, seed = 1) => ({\nbob: 0.006 * Math.sin((f + seed * 11) * 0.11),\ntilt: 1.2 * Math.sin((f + seed * 7) * 0.05),\nheadTilt: 1.5 * Math.sin((f + seed * 5) * 0.037 + 1),\n});\nexport const blinkAt = (f, seed) => { const per = 38 + (seed * 17) % 31, ph = (f + seed * 13) % per; return ph < 2 ? 0.5 : ph < 4 ? 1 : 0; };\nexport const walk = (f, f0, speed = 1.1, stride = 0.8) => { const t = Math.max(0, f - f0) / 30; return { dist: t * speed, phase: (t * speed / (2 * stride)) % 1 }; };\nexport const q = (x, n = 2) => Math.round(x * 10 ** n) / 10 ** n;", "note": "Use the shaders and motion helpers verbatim. creature_template_js is the reference creature (uses Pen helpers: line, poly, ell, dot, stroke, shadedFill, inkRing, clip, curve, ellPts, mul, rad, thickAngle, INK): write a small Pen class with these, then design THIS story's creatures in the same way. Write everything else from the spec.", "creature_template_js": "const EMU = { body: \"#4d3b2c\", bodyDk: \"#2f241b\", streak: \"#7a6048\", neck: \"#7f90ad\", neckDk: \"#56627c\", head: \"#3a2f28\", beak: \"#cdb68e\", leg: \"#8c8780\", legDk: \"#5e5a55\" };\nconst ik2 = (h, f, L1, L2, back = -1) => { \nconst dx = f[0] - h[0], dy = f[1] - h[1], d = Math.min(L1 + L2 - 1, Math.hypot(dx, dy));\nconst a = Math.atan2(dy, dx), c = Math.acos(Math.max(-1, Math.min(1, (L1 * L1 + d * d - L2 * L2) / (2 * L1 * d))));\nconst s = back < 0 ? 1 : -1; \nreturn [h[0] + Math.cos(a + s * c) * L1, h[1] + Math.sin(a + s * c) * L1];\n};\nexport const emuSide = (p, opts = {}) => {\nconst { phase = 0, run = 0, peck = 0, blink = 0, expr = \"calm\", look = 0.3, seed = 1, tilt = 0, ruffle = 0 } = opts;\nconst g = p.g, two = Math.PI * 2, ow = 6;\nconst bob = run * 16 * Math.abs(Math.sin(two * phase)) + (1 - run) * 3 * Math.sin(seed * 3.1);\nconst lean = run * 0.16 + peck * 0.1 + tilt;\nconst hip = [292, 528 + bob * 0.6];\nconst bc = [290, 432 + bob], brx = 168, bry = 112;\nconst rot = (pt, c, a) => { const x = pt[0] - c[0], y = pt[1] - c[1]; return [c[0] + x * Math.cos(a) - y * Math.sin(a), c[1] + x * Math.sin(a) + y * Math.cos(a)]; };\nconst legs = [1, 0].map((k) => {\nconst ph = phase + k * 0.5, sx = Math.cos(two * ph), sy = Math.max(0, Math.sin(two * ph));\nconst h = [hip[0] + (k ? -14 : 14), hip[1]];\nconst foot = [h[0] + run * 135 * sx + (1 - run) * (k ? -22 : 26), 776 - run * 92 * sy];\nconst knee = ik2(h, foot, 138, 150, -1);\nreturn { h, foot, knee, k, lift: sy * run };\n});\nconst drawLeg = (L, far) => {\nconst col = far ? EMU.legDk : EMU.leg;\np.line([L.h, L.knee, L.foot], col, 15);\nconst fx = L.foot[0], fy = L.foot[1], ta = L.lift * 0.6;\nfor (const [dx, dy] of [[34, 2], [26, -6], [-14, 0]]) p.line([[fx, fy], [fx + dx * Math.cos(ta) - dy * Math.sin(ta), fy + dy * Math.cos(ta) + dx * Math.sin(ta) * 0.6]], col, 7);\np.dot(L.knee[0], L.knee[1], 9, col);\n};\ndrawLeg(legs[0], true);\nconst nb = rot([392, 372 + bob], bc, -lean * 0.4);\nlet hd = [448 + run * 70, 128 + run * 72 + bob * 0.5];\nhd = [hd[0] * (1 - peck) + 548 * peck, hd[1] * (1 - peck) + 712 * peck];\nconst nm = [ (nb[0] + hd[0]) / 2 + 30 - run * 10 + peck * 40, (nb[1] + hd[1]) / 2 + (peck ? -60 * peck : 10)];\nconst neckPts = curve(nb, nm, hd, 14);\np.line(neckPts, EMU.neck, 40);\nfor (let i = 2; i < 12; i++) { const [x, y] = neckPts[i]; p.stroke([[x - 6, y + 4], [x + 2, y - 4]], 3, EMU.neckDk); }\nconst bp = [];\nfor (let i = 0; i <= 64; i++) {\nconst a = Math.PI * 2 * i / 64, c = Math.cos(a), s = Math.sin(a);\nlet rx = brx, ry = bry;\nif (c < -0.3) rx *= 1 + 0.12 * (-c - 0.3); \nlet x = bc[0] + rx * c, y = bc[1] + ry * s + (c < 0 ? 26 * (-c) * (s > -0.2 ? 1 : 0.2) : 0);\nif (s > 0.15) { const j = (i % 2 ? 1 : -0.4) * (16 + 6 * Math.sin(i * 1.7 + seed + ruffle)); y += j; } \nbp.push(rot([x, y], bc, -lean));\n}\np.shadedFill(bp, EMU.body, EMU.bodyDk, rad(-110), brx, 0.4);\np.clip(bp, () => {\nfor (let i = 0; i < 26; i++) {\nconst x = bc[0] - 150 + ((i * 53 + seed * 31) % 300), y = bc[1] - 80 + ((i * 37) % 150);\np.stroke([[x, y], [x - 26, y + 22 + (i % 3) * 6]], 4, i % 2 ? EMU.streak : EMU.bodyDk);\n}\n});\np.inkRing(bp, ow, thickAngle(rad(-110)));\nconst th = rot([hip[0] + 12, hip[1] - 26], bc, -lean);\np.ell(th[0], th[1], 46, 40, EMU.body, ow);\nfor (let i = 0; i < 5; i++) p.stroke([[th[0] - 30 + i * 14, th[1] + 18], [th[0] - 34 + i * 14, th[1] + 44]], 4, EMU.bodyDk);\ndrawLeg(legs[1], false);\nconst hx = hd[0], hy = hd[1], ha = peck * 1.1 + run * 0.25;\nconst H = (dx, dy) => [hx + dx * Math.cos(ha) - dy * Math.sin(ha), hy + dx * Math.sin(ha) + dy * Math.cos(ha)];\nconst beak = [H(22, -10), H(76, 2), H(74, 8), H(20, 14)];\np.poly(beak, EMU.beak, ow * 0.9);\np.stroke([H(28, 4), H(70, 5)], 2.5, INK);\nconst head = ellPts(hx, hy, 46, 38, 0, 360, ha * 57.3, 32);\np.shadedFill(head, EMU.head, mul(EMU.head, [0.7, 0.7, 0.75]), rad(-110), 40, 0.3);\np.stroke([H(-18, -28), H(-26, -44)], 5, EMU.head); p.stroke([H(-4, -31), H(-6, -48)], 5, EMU.head);\np.inkRing(head, ow, thickAngle(rad(-110)));\nconst ec = H(8, -6), er = expr === \"shock\" ? 22 : 18;\np.ell(ec[0] + 4, ec[1] + 6, 22, 18, \"#9fb6d6\", 0);\np.ell(ec[0], ec[1], er, er, \"#ffffff\", 4);\nconst lid = expr === \"side\" ? 0.5 : expr === \"smug\" ? 0.42 : 0;\nconst lk = Math.max(-1, Math.min(1, look));\nif (blink < 0.75) {\np.dot(ec[0] + lk * (er - 9), ec[1] + (expr === \"side\" ? 3 : 1), expr === \"shock\" ? 6 : 8, INK);\np.dot(ec[0] + lk * (er - 9) - 2, ec[1] - 2, 2.4, \"#ffffff\");\n}\nconst L = Math.max(lid, blink);\nif (L > 0.02) { const top = ec[1] - er, yb = top + 2 * er * L; p.poly([[ec[0] - er - 1, top - 2], [ec[0] + er + 1, top - 2], [ec[0] + er + 1, yb], [ec[0] - er - 1, yb]], EMU.head, 0); p.stroke([[ec[0] - er, yb], [ec[0] + er, yb]], 4); }\nif (expr === \"smug\" || expr === \"side\") p.stroke([H(-8, -30), H(26, -24)], 5, INK);\nif (expr === \"shock\") p.arc(ec[0], ec[1] - 30, 14, 5, 200, 340, 4);\n};" }, "rules": [ "Original story, characters, world and jokes; never copy another creator's video shot for shot.", "No real named living people as characters, no brand logos or mascots.", "No captions unless captions=true.", "Never edit my voice beyond voice_speed." ], "deliver": "The MP4 plus a few lines on what each shot shows; offer tweaks." }
12
23
3
162
9,355
have u ever noticed this whenever a first video blew up a channel the videos posted after always flop
24
8
2
125
15,653
i just recreated this viral roblox animation style in claude code for $0 (except the claude subscription) claude wrote the whole script character shots camera angle in code then it ran blender on my pc to render the frames on my gpu and stitched the captions and sound together in the cloud ALL WHILE I WAS SLEEPING this is my first post on here and i just want to introduce myself a bit , i will NEVER ask you to pay for anything and will leak and opensource everything i post the only thing i ask in return is a follow to the account anyways here is the free prompt steal it for yourself
5
8
1
61
26,488
HOLY SH*T this random guy made an open web with varieties of different ai formats going viral and he is giving it to public completely for free, am definitely checking it myself save it and check it later, (post below) don't want to interrupt ur doomscroll
i started posting 2 weeks ago and this account already did 1 MILLION impressions 12K bookmarks too, almost double the likes (still crazy to me) the hardest part was the ideas finding a good one AND the right clip for it at the same time so i built a library for it ↓ -> 1,000 videos that blew past their page's usual views -> each one with the real numbers and why it popped -> 1,000 post ideas with the numbers behind them claim one and it's yours, nobody else can take it also added a lucky wheel for up to 3 extra claims (it's provably fair, ur browser checks every spin) it's free, link in the first reply what's harder for u, finding the idea or the clip?
3
8
31
2,474
People are paying hundreds for guides on how to make these viral cartoons. I just ran the free prompt from @treyscalez. Zero images. Zero stock video. Everything in this clip is code Claude wrote. A three.js room, characters drawn on canvas, ink outlines, rendered frame by frame in headless Chromium, stitched with ffmpeg. Even the music and sound effects are generated in Python. The story is real: Harvard, 1947. A moth stuck in a computer relay and taped into the logbook. What worked out of the box: • toon shading looks hand-drawn • every frame is a function of time • timing stayed tight What still needed fixes: • wide shots cropped signs • stamps came out huge • logbook text ran off the page A few rounds of stills, then ~20 minutes of CPU render. Bookmark it if you want animated shorts without paying for video tools.
i made this ricksclips style animation completely from scratch using opus 5.5 the style is going extremely viral rn on the internet and people are paying money just to be able to make them well today is ur lucky day cause am giving away the full prompt to guys for free all u need is voiceover and claude to be able to make this, $0 spent on images or videos -> here's the prompt { "task": "Make a vertical animated cartoon short of MY story, built in code: three.js r160 world + canvas-drawn 2D character cards, rendered frame by frame in headless Chromium (Playwright, swiftshader), encoded with ffmpeg. 1080x1920, 30fps, exactly as long as my voiceover. Work start to finish; only ask if script and audio don't match.", "my_inputs": { "story": "[your idea, true event, legend or full script]", "script": "[optional exact script]", "voiceover": "[optional: attach mp3/wav]", "length_seconds": 30, "voice_speed": 1.0, "captions": false, "notes": "[optional: era, setting, characters, jokes]" }, "stages": [ "A. No script: write one at ~3.7 words/s (30s~110 words): 1) hook = absurd fact, no setup 2) setting in 1-2 lines with a concrete detail 3) 2-4 escalating beats, others doubt/mock, one exaggeration joke 4) pivot 'But...'/'You see,' revealing the real mechanism with an everyday analogy 5) short ironic twist = last words. Spoken English, contractions, numbers as words, never describe what's on screen. If presented as true, web-check facts and say history/disputed/legend.", "B. No voiceover: give script in a copyable block + word count + est. length, a short shot plan, recording tips (one warm narrator; ElevenLabs speed 1.05-1.1, stability 45-55%; pauses at sentence ends; no music). Stop and ask for the upload.", "C. With voiceover: build everything below without stopping. Task list for progress; send a stills contact sheet before the long render." ], "setup": [ "mkdir -p web/lib work stills frames out", "npm pack [email protected] -> copy package/build/three.module.js to web/lib (fallback: sparse git clone of mrdoob/three.js branch r160, folder build)", "Playwright + Chromium (npm i -g playwright && npx playwright install chromium); launch args --use-angle=swiftshader --enable-unsafe-swiftshader --ignore-gpu-blocklist", "python3 numpy Pillow, ffmpeg (with rubberband)", "Serve web/ with a tiny Node http server; render.mjs loads index.html, waits for window.ready, calls window.renderFrame(f), saves canvas.toDataURL('image/jpeg',.95) to frames/f0000.jpg. Support RESUME=1 (skip existing) and a frame list 'a-b' or '1,5,9'." ], "timing": "If voice_speed!=1: ffmpeg -af rubberband=tempo=<speed> (pitch kept). Claude can't hear audio: align my script to speech using ffmpeg silencedetect (-35dB, 0.12s): split script into phrases at punctuation, DP-match phrases to speech segments by syllable count vs duration, penalise sentence ends inside a segment. Spread words by syllables. Write work/phrases.json; check pauses fall at sentence ends. Frames = round(duration*30). Every reaction lands 0-3 frames before its word; the final payoff lands on the final word.", "architecture": { "files": "web/index.html (canvas#c 1080x1920 + module main.js), main.js (renderer, materials, world, cards, sprites, passes), story.js (SHOTS, LIGHTS, lightFor, camAt, dofAt, worldAt, actorsAt, fxAt: all pure functions of frame f), motion.js, paint.js (canvas textures), toon.js (character + creature drawing), audio.py, mix.py, finish.sh, sheet.py (contact sheets).", "renderer": "WebGLRenderer antialias:false, preserveDrawingBuffer, PCFSoft shadows 2048, sun = DirectionalLight from az/el per light preset, shadow camera centred on each shot's action (ext 8-60m), HemisphereLight, Fog(colour = sky horizon). Camera Perspective, near .08 far 1500.", "materials": "MeshToonMaterial with a 2-texel gradientMap [90,255] Nearest = hard 2-step toon shading. Textures are CanvasTextures painted in code: flat base + soft blotches + dark seams/strokes, repeat-wrapped, colorSpace sRGB. Boxes use world-scaled UVs (constant texel density).", "passes": [ "1 colour: render scene to HalfFloat RT (samples 4).", "2 normal+depth: swap every mesh material to a ShaderMaterial writing vec4(normal*.5+.5, viewDepth) (handle USE_INSTANCING: pos=instanceMatrix*pos). Cards/sprites write rgb 0 + depth with alpha-test (so they block but are never outlined). Hide sky, clouds, blob shadows. Fog and shadows off for this pass.", "3 ink+grade fullscreen: 16 taps on a ring of radius 2.5px*clamp(7/depth,.62,1.25); edge = smoothstep(.006,.02,(dS-d)/d) on the NEAR side of depth jumps only; crease = smoothstep(.88,.72,dot(n,nS))*.9 when depths are within 6%; skip card samples; sky counts as depth 1e4; fade ink 140-520m. colour = mix(c, #030203, e); saturation 1.08-1.15; gain/lift tint; vignette .2-.34; white flash uniform.", "4 lens: per-pixel CoC = cinf*(1-focus/d) (near side capped 1.4x); 48-tap golden-angle disc, each tap weighted by its own CoC so sharp foreground never bleeds; skip when cinf<.5. Output linearToOutputTexel." ], "sky": "inverted sphere following camera: mix(horizon, top, pow(y,.55)) + optional sun disc. Painted cloud billboards far away (650-900m), fog off, facing camera." }, "characters": { "card": "Each character is a 1200x2000 CanvasTexture on a 1.35x2.25m plane with origin at the soles (design space 600x1000, soles at y=975, 1 design unit = 2.25mm). MeshBasicMaterial alphaTest .02, DoubleSide; shadow via customDepthMaterial with the same map (alphaTest .5); soft dark radial blob under the feet. Billboard on yaw only: rotY = atan2(cam.x-x, cam.z-z). Redraw a card only when its key (JSON of q()-rounded pose values) changes.", "proportions": "Bean body: head blob ~236 wide, legs 1.38xHH, torso 1.08xHH (stout 1.12), eyes ~1.47m high. Head = superellipse blob with slight egg + per-seed asymmetry. Torso = egg blob with a tunic skirt below. Legs/arms = thin curved strokes (5.8u/5.2u, u=headWidth/100) in a darker shade of the outfit; round dot hands; small boots.", "ink": "Outline colour #241726 (plum), width 5u, thicker on the side away from the light (light from upper-left, -120deg). Fills: base colour with a soft shadow gradient toward lower-right. Skin default #ffe2c2, also #f5c9a0 #ecd0b6 #c99067.", "faces": "Eyes 13u apart either side of centre. Kinds: dot, lid (half-closed), happy (arc), squeeze, shock (big white + small pupil + raised arc brows), slit, dash. Mouths: dash, frown, smirk, smile, grin (open with teeth line), laugh, o, O, wave (nervous), teeth. Brows are short tapered strokes; angle sets mood. Expressions: neutral, stern, grin, laugh, nervous (+sweat drop), shock, smile, pained, squint, smug/side-eye (half lids, pupils to one side). Blinks every 1.3-2.3s for 4 frames.", "outfits": "Built from parts: tunic colour, belt, buttons, pockets, sash, hat (slouch hat, cap, top hat, bonnet, helmet, crown, hair), beard/moustache, apron, dress, props in hands. Design new outfits for each story in the same flat style.", "arm_poses": "hang, point (+finger), up, wave, hip, belly, cheek (both = shock), salute (flat hand at brim, drawn over the head), thumb (thumbs-up), shrug, reach, lift, cross, prop-holding (pen, stamp, wrench, spear, sign). Whole upper body tilts about the hip; head tilts separately.", "creatures": "Animals are side-view canvas sprites (600x800 design, feet at y=780) on shared textures cached by pose key, so flocks of 50+ cost little: shaggy shaded body blob with fringe strokes, thick inked limbs, small head, big googly white eye with pupil that can look/side-eye, simple beak/snout. Legs via 2-bone IK with joint bent backward; run cycle 16 phases (foot x = hip + stride*cos, lift = max(0,sin)); poses: stand, run, peck/graze, smug. Flip the sprite when travel direction dot camera-right < 0." }, "world": { "build": "Primitives only: boxes, cylinders, cones, squashed spheres, extrusions; group set-pieces with pivots driven by 0..1 progress from worldAt(f) with eased, staggered parts. Instanced meshes for crops/grass/rocks; clear a patch where the action happens.", "background": "low half-buried hill spheres, distant mesas or mountains (cone + snow cap), trees (trunk cylinder + 4-6 squashed sphere canopies), far houses, fog to the horizon colour.", "secondary_motion": "windmills turn, flags/cloth wave (vertex sine), smoke/dust/leaves/Zzz/stars as cached 2D fx sprites, water shader scroll, wheels roll with distance/radius, vehicles bounce.", "text": "Diegetic text (signs, crates, letters, stamps) painted on canvas with real fonts; place on +z faces or planes so it never reads mirrored. Swap textures to animate (e.g. stamp appears on impact)." }, "lights": { "day": "sun az64 el50 #fff3df 2.45, hemi sky #d2e2f6 ground #a8905e 1.1, sky top #2d74d4 horizon #cfe3f5, fog 120-1300, sat 1.12, vig .2", "golden": "sun az30 el11 #ffb46a 2.9, hemi #a99bcc/#7a5040 .98, sky #6474c0 -> #ffc485 + sun disc, gain #fff0e0, sat 1.15, vig .26, tint cards #ffe2c4", "dusk": "sun el5 #ff9a72 .9, hemi #5d6cab/#3a3048 .8, sky #18234f -> #d18a7c, gain #e2e8ff, lift #04050b, vig .34, a warm point-light lamp, tint cards #c9cff2", "use": "day = normal story, golden = decline or time passing, dusk-blue = explanation or ending. Time jump = 6-frame white flash." }, "motion": { "helpers": "smooth(t)=t^3(t(6t-15)+10); easeOut=1-(1-t)^3; back(t)=overshoot s=1.7; spring settle; Catmull-Rom spline through via-points; idle(f,seed)={bob .006 sin(.11f), tilt 1.2deg sin(.05f), headTilt 1.5deg sin(.037f)}; blinkAt(f,seed); q(x)=round for card keys.", "camera": "Keys {f,pos,look,fov,roll,ease,path} inside cut-free segments; glides 18-45 frames; easeOut for whips/reveals; every hold creeps (fov *= 1-.00012*(f-f0)); 3-5deg roll on drama; impact kick = 7-frame alternating look offset + roll that decays. Vehicles: track alongside, match speed, slight judder.", "continuity": "prefer one continuous move: MCU pull-back into a wide, crane up and over a fence into the establishing shot, lateral truck along a lineup, crane down into an insert, rack focus to the background gag. Hard cut only on place/time jumps.", "acting": "anticipation -> back overshoot -> spring settle; pop-ins scale 0->1 with back easing + dust puff; stamp = 2-frame dip + puff + kick; laughs = alternating tilt + bob; head bobs on stressed words; nothing static for 4+ frames.", "walks_runs": "feet planted, bob 3-7%; run phase = speed/stride; fast movers must stay in frame until their beat is done." }, "shot_grammar": { "plan_first": "work/PLAN.md: one row per shot (frames, words, setting, light, camera, cast/poses/expressions, fx, sfx). Usually one shot per phrase; merge tiny ones. Illustrate every sentence literally; props carry the jokes.", "order": "frame 0 = hook MCU of the hero mid-action -> pull-back reveal on the punch of sentence 1 -> wide establishing crane -> lineup/two-shot with pop-ins on each listed item -> reaction close-up (a creature or extra slides in with a side-eye on the question line) -> action wide (chase, scatter, collapse) -> time-jump flash -> insert on the key object -> twist: music stops, low sting, push-in with roll, payoff on the last word.", "framing": "Bean cards 2.25m tall: MCU = camera ~3.5m away at fov 32-34 looking at 1.35m; wides fov 40-52. Vertical frame half-width = d*tan(hfov/2), hfov = 2*atan(tan(vfov/2)*.5625): at 4m and fov 40 only +/-0.8m, so stage people in depth.", "lens": "DOF on close-ups/mediums (cInf 7-14, focus on the eyes), wides sharp, racks ~14 frames." }, "audio": { "stems": "audio.py writes only music.wav + sfx.wav (48k mono, numpy synth). Music: short loop in the story's mood (march: kick/snare, plucked bass, brass pad, little fanfare; or plucky comedy; or eerie pad); stops on the twist line, then a low drone. SFX in frames/30: whoosh (low-passed noise with sine^2 envelope) on big moves, thunk (pitched sine drop + noise) on pops/stamps, rustle/leaves, feet patter, engine (pulse train low-passed), scrape, ting (2-4 kHz bells), sting (41 Hz + noise hit + brass stab) on the twist.", "mix": "mix.py: gated RMS of the voice (0.4s blocks above -40dB of max); scale music so its gated RMS = 0.5x voice (-6 dB); SFX = min(0.5x voice RMS, peaks 0.7x voice peak); sum; one linear gain only. No ducking, no compression. Print the measured levels and confirm.", "finish": "measure integrated loudness (ffmpeg ebur128), apply one volume gain to -14 LUFS + alimiter -1 dBFS; encode: ffmpeg -framerate 30 -i frames/f%04d.jpg -i mix.wav -c:v libx264 -preset slow -crf 17 -pix_fmt yuv420p -c:a aac -b:a 192k -shortest -movflags +faststart. QA: freezedetect (n=.0005, d=.4) and blackdetect must find nothing; make a 2fps tiled QA sheet and look at it." }, "look_check": "Before the full render, render stills at every shot's middle plus key actions, tile them into a contact sheet, look at it and fix: cropped heads/hats, characters hidden by props or crops, camera inside objects, fast movers already out of frame, mirrored text, missing ink, empty frames. Send me the sheet, then render all frames in the background (about 3-6 s/frame on CPU), lock picture before sound.", "code_core": { "ink_shader_glsl": "uniform sampler2D col, nd; uniform vec2 res; uniform float px, sat, vig, flash; uniform vec3 fogCol, lift, gain; varying vec2 vUv;\nfloat edgeAt(vec2 uv, float r){\nvec4 c = texture2D(nd, uv); if (dot(c.rgb,c.rgb) < .01) return 0.; float d = c.a; vec3 n = c.rgb*2.-1.;\nfloat e = 0.; float rr = r * clamp(7./d, .62, 1.25);\nfor (int i=0;i<16;i++){ float a = float(i)*.785398 + (i>7 ? .39 : 0.); float k = i>7 ? .5 : 1.;\nvec2 o = vec2(cos(a), sin(a))*rr*k/res; vec4 s = texture2D(nd, uv+o);\nfloat ds = s.a; bool card = dot(s.rgb,s.rgb) < .01;\nif (card && ds > 0.) continue; // character cards: never outlined by the world ink\nif (card) ds = 1e4; // sky\nvec3 ns = s.rgb*2.-1.;\ne = max(e, smoothstep(.006, .02, (ds - d)/d)); // depth jump, near side only\nif (!card && abs(ds-d)/d < .06) e = max(e, smoothstep(.88, .72, dot(n, ns)) * .9); // crease\n}\nreturn e * (1. - smoothstep(140., 520., d)*.8);\n}\nvoid main(){\nvec3 c = texture2D(col, vUv).rgb;\nfloat e = edgeAt(vUv, px);\nc = mix(c, vec3(.012,.01,.014), e);\nif (flash < -0.5) c = vec3(e);\nfloat l = dot(c, vec3(.299,.587,.114)); c = mix(vec3(l), c, sat);\nc = c*gain + lift;\nvec2 q = vUv-.5; c *= 1. - vig*dot(q*vec2(1.,.75), q*vec2(1.,.75))*2.2;\nc = mix(c, vec3(1.), flash);\ngl_FragColor = vec4(c,1.); }", "dof_shader_glsl": "uniform sampler2D src, nd; uniform vec2 res; uniform float focus, cinf, near; varying vec2 vUv;\nfloat coc(vec2 uv){ float d = texture2D(nd, uv).a; if (d <= 0.) d = 2000.; float k = 1. - focus/d; return k > 0. ? cinf*k : min(-k*cinf*near, cinf*1.4); }\nvoid main(){\nfloat c0 = coc(vUv);\nif (cinf < .5 || c0 < .6) { gl_FragColor = linearToOutputTexel(vec4(texture2D(src, vUv).rgb, 1.)); return; }\nvec3 acc = vec3(0.); float wsum = 0.;\nfor (int i=0;i<48;i++){ float fi = float(i); float r = sqrt((fi+.5)/48.); float a = fi*2.39996;\nvec2 o = vec2(cos(a), sin(a))*r*c0/res; float cs = coc(vUv+o);\nfloat w = smoothstep(r*c0-1.5, r*c0+.5, cs + .5);\nacc += texture2D(src, vUv+o).rgb*w; wsum += w; }\ngl_FragColor = linearToOutputTexel(vec4(acc/max(wsum,1e-3), 1.)); }", "motion_js": "export const clamp = (x, a = 0, b = 1) => Math.max(a, Math.min(b, x));\nexport const lerp = (a, b, t) => a + (b - a) * t;\nexport const lerp3 = (a, b, t) => a.map((v, i) => lerp(v, b[i], t));\nexport const ramp = (f, a, b) => clamp((f - a) / (b - a));\nexport const M = {\nsmooth: (t) => { t = clamp(t); return t * t * t * (t * (t * 6 - 15) + 10); }, \neaseOut: (t) => 1 - Math.pow(1 - clamp(t), 3), \neaseIn: (t) => Math.pow(clamp(t), 3),\nback: (t, s = 1.7) => { t = clamp(t) - 1; return t * t * ((s + 1) * t + s) + 1; }, \nanticip: (t, s = 0.12) => { t = clamp(t); return t < 0.25 ? -s * Math.sin(t / 0.25 * Math.PI) : M.back((t - 0.25) / 0.75); }, \nspring: (t, freq = 3, damp = 5) => { t = Math.max(0, t); return 1 - Math.exp(-damp * t) * Math.cos(freq * 2 * Math.PI * t); }, \n};\nexport const spline = (pts, u) => {\nconst n = pts.length - 1, x = clamp(u) * n, i = Math.min(n - 1, Math.floor(x)), t = x - i;\nconst p0 = pts[Math.max(0, i - 1)], p1 = pts[i], p2 = pts[i + 1], p3 = pts[Math.min(n, i + 2)];\nreturn p1.map((_, k) => 0.5 * ((2 * p1[k]) + (-p0[k] + p2[k]) * t + (2 * p0[k] - 5 * p1[k] + 4 * p2[k] - p3[k]) * t * t + (-p0[k] + 3 * p1[k] - 3 * p2[k] + p3[k]) * t * t * t));\n};\nexport const camFromKeys = (K, f, { creep = 0.0012, kicks = [] } = {}) => {\nlet c;\nif (f <= K[0].f) c = { ...K[0] };\nelse if (f >= K[K.length - 1].f) c = { ...K[K.length - 1] };\nelse {\nconst i = K.findIndex((k, j) => f >= k.f && f <= K[j + 1].f), a = K[i], b = K[i + 1];\nconst ease = M[b.ease || 'smooth'], t = ease((f - a.f) / (b.f - a.f));\nif (b.path) { \nconst pts = [a.pos, ...b.path, b.pos]; c = { pos: spline(pts, t), look: lerp3(a.look, b.look, t), fov: lerp(a.fov, b.fov, t), roll: lerp(a.roll || 0, b.roll || 0, t) };\n} else c = { pos: lerp3(a.pos, b.pos, t), look: lerp3(a.look, b.look, t), fov: lerp(a.fov, b.fov, t), roll: lerp(a.roll || 0, b.roll || 0, t) };\n}\nc.fov *= 1 - creep * Math.max(0, f - K[0].f) * 0.15; \nfor (const k of kicks) { const d = f - k.f; if (d >= 0 && d < 7) { const s = (d % 2 ? -1 : 1) * k.a * (1 - d / 7); c.look = [c.look[0], c.look[1] + s * 3, c.look[2] + s * 2]; c.roll = (c.roll || 0) + s * 20; } }\nreturn c;\n};\nexport const idle = (f, seed = 1) => ({\nbob: 0.006 * Math.sin((f + seed * 11) * 0.11),\ntilt: 1.2 * Math.sin((f + seed * 7) * 0.05),\nheadTilt: 1.5 * Math.sin((f + seed * 5) * 0.037 + 1),\n});\nexport const blinkAt = (f, seed) => { const per = 38 + (seed * 17) % 31, ph = (f + seed * 13) % per; return ph < 2 ? 0.5 : ph < 4 ? 1 : 0; };\nexport const walk = (f, f0, speed = 1.1, stride = 0.8) => { const t = Math.max(0, f - f0) / 30; return { dist: t * speed, phase: (t * speed / (2 * stride)) % 1 }; };\nexport const q = (x, n = 2) => Math.round(x * 10 ** n) / 10 ** n;", "note": "Use the shaders and motion helpers verbatim. creature_template_js is the reference creature (uses Pen helpers: line, poly, ell, dot, stroke, shadedFill, inkRing, clip, curve, ellPts, mul, rad, thickAngle, INK): write a small Pen class with these, then design THIS story's creatures in the same way. Write everything else from the spec.", "creature_template_js": "const EMU = { body: \"#4d3b2c\", bodyDk: \"#2f241b\", streak: \"#7a6048\", neck: \"#7f90ad\", neckDk: \"#56627c\", head: \"#3a2f28\", beak: \"#cdb68e\", leg: \"#8c8780\", legDk: \"#5e5a55\" };\nconst ik2 = (h, f, L1, L2, back = -1) => { \nconst dx = f[0] - h[0], dy = f[1] - h[1], d = Math.min(L1 + L2 - 1, Math.hypot(dx, dy));\nconst a = Math.atan2(dy, dx), c = Math.acos(Math.max(-1, Math.min(1, (L1 * L1 + d * d - L2 * L2) / (2 * L1 * d))));\nconst s = back < 0 ? 1 : -1; \nreturn [h[0] + Math.cos(a + s * c) * L1, h[1] + Math.sin(a + s * c) * L1];\n};\nexport const emuSide = (p, opts = {}) => {\nconst { phase = 0, run = 0, peck = 0, blink = 0, expr = \"calm\", look = 0.3, seed = 1, tilt = 0, ruffle = 0 } = opts;\nconst g = p.g, two = Math.PI * 2, ow = 6;\nconst bob = run * 16 * Math.abs(Math.sin(two * phase)) + (1 - run) * 3 * Math.sin(seed * 3.1);\nconst lean = run * 0.16 + peck * 0.1 + tilt;\nconst hip = [292, 528 + bob * 0.6];\nconst bc = [290, 432 + bob], brx = 168, bry = 112;\nconst rot = (pt, c, a) => { const x = pt[0] - c[0], y = pt[1] - c[1]; return [c[0] + x * Math.cos(a) - y * Math.sin(a), c[1] + x * Math.sin(a) + y * Math.cos(a)]; };\nconst legs = [1, 0].map((k) => {\nconst ph = phase + k * 0.5, sx = Math.cos(two * ph), sy = Math.max(0, Math.sin(two * ph));\nconst h = [hip[0] + (k ? -14 : 14), hip[1]];\nconst foot = [h[0] + run * 135 * sx + (1 - run) * (k ? -22 : 26), 776 - run * 92 * sy];\nconst knee = ik2(h, foot, 138, 150, -1);\nreturn { h, foot, knee, k, lift: sy * run };\n});\nconst drawLeg = (L, far) => {\nconst col = far ? EMU.legDk : EMU.leg;\np.line([L.h, L.knee, L.foot], col, 15);\nconst fx = L.foot[0], fy = L.foot[1], ta = L.lift * 0.6;\nfor (const [dx, dy] of [[34, 2], [26, -6], [-14, 0]]) p.line([[fx, fy], [fx + dx * Math.cos(ta) - dy * Math.sin(ta), fy + dy * Math.cos(ta) + dx * Math.sin(ta) * 0.6]], col, 7);\np.dot(L.knee[0], L.knee[1], 9, col);\n};\ndrawLeg(legs[0], true);\nconst nb = rot([392, 372 + bob], bc, -lean * 0.4);\nlet hd = [448 + run * 70, 128 + run * 72 + bob * 0.5];\nhd = [hd[0] * (1 - peck) + 548 * peck, hd[1] * (1 - peck) + 712 * peck];\nconst nm = [ (nb[0] + hd[0]) / 2 + 30 - run * 10 + peck * 40, (nb[1] + hd[1]) / 2 + (peck ? -60 * peck : 10)];\nconst neckPts = curve(nb, nm, hd, 14);\np.line(neckPts, EMU.neck, 40);\nfor (let i = 2; i < 12; i++) { const [x, y] = neckPts[i]; p.stroke([[x - 6, y + 4], [x + 2, y - 4]], 3, EMU.neckDk); }\nconst bp = [];\nfor (let i = 0; i <= 64; i++) {\nconst a = Math.PI * 2 * i / 64, c = Math.cos(a), s = Math.sin(a);\nlet rx = brx, ry = bry;\nif (c < -0.3) rx *= 1 + 0.12 * (-c - 0.3); \nlet x = bc[0] + rx * c, y = bc[1] + ry * s + (c < 0 ? 26 * (-c) * (s > -0.2 ? 1 : 0.2) : 0);\nif (s > 0.15) { const j = (i % 2 ? 1 : -0.4) * (16 + 6 * Math.sin(i * 1.7 + seed + ruffle)); y += j; } \nbp.push(rot([x, y], bc, -lean));\n}\np.shadedFill(bp, EMU.body, EMU.bodyDk, rad(-110), brx, 0.4);\np.clip(bp, () => {\nfor (let i = 0; i < 26; i++) {\nconst x = bc[0] - 150 + ((i * 53 + seed * 31) % 300), y = bc[1] - 80 + ((i * 37) % 150);\np.stroke([[x, y], [x - 26, y + 22 + (i % 3) * 6]], 4, i % 2 ? EMU.streak : EMU.bodyDk);\n}\n});\np.inkRing(bp, ow, thickAngle(rad(-110)));\nconst th = rot([hip[0] + 12, hip[1] - 26], bc, -lean);\np.ell(th[0], th[1], 46, 40, EMU.body, ow);\nfor (let i = 0; i < 5; i++) p.stroke([[th[0] - 30 + i * 14, th[1] + 18], [th[0] - 34 + i * 14, th[1] + 44]], 4, EMU.bodyDk);\ndrawLeg(legs[1], false);\nconst hx = hd[0], hy = hd[1], ha = peck * 1.1 + run * 0.25;\nconst H = (dx, dy) => [hx + dx * Math.cos(ha) - dy * Math.sin(ha), hy + dx * Math.sin(ha) + dy * Math.cos(ha)];\nconst beak = [H(22, -10), H(76, 2), H(74, 8), H(20, 14)];\np.poly(beak, EMU.beak, ow * 0.9);\np.stroke([H(28, 4), H(70, 5)], 2.5, INK);\nconst head = ellPts(hx, hy, 46, 38, 0, 360, ha * 57.3, 32);\np.shadedFill(head, EMU.head, mul(EMU.head, [0.7, 0.7, 0.75]), rad(-110), 40, 0.3);\np.stroke([H(-18, -28), H(-26, -44)], 5, EMU.head); p.stroke([H(-4, -31), H(-6, -48)], 5, EMU.head);\np.inkRing(head, ow, thickAngle(rad(-110)));\nconst ec = H(8, -6), er = expr === \"shock\" ? 22 : 18;\np.ell(ec[0] + 4, ec[1] + 6, 22, 18, \"#9fb6d6\", 0);\np.ell(ec[0], ec[1], er, er, \"#ffffff\", 4);\nconst lid = expr === \"side\" ? 0.5 : expr === \"smug\" ? 0.42 : 0;\nconst lk = Math.max(-1, Math.min(1, look));\nif (blink < 0.75) {\np.dot(ec[0] + lk * (er - 9), ec[1] + (expr === \"side\" ? 3 : 1), expr === \"shock\" ? 6 : 8, INK);\np.dot(ec[0] + lk * (er - 9) - 2, ec[1] - 2, 2.4, \"#ffffff\");\n}\nconst L = Math.max(lid, blink);\nif (L > 0.02) { const top = ec[1] - er, yb = top + 2 * er * L; p.poly([[ec[0] - er - 1, top - 2], [ec[0] + er + 1, top - 2], [ec[0] + er + 1, yb], [ec[0] - er - 1, yb]], EMU.head, 0); p.stroke([[ec[0] - er, yb], [ec[0] + er, yb]], 4); }\nif (expr === \"smug\" || expr === \"side\") p.stroke([H(-8, -30), H(26, -24)], 5, INK);\nif (expr === \"shock\") p.arc(ec[0], ec[1] - 30, 14, 5, 200, 340, 4);\n};" }, "rules": [ "Original story, characters, world and jokes; never copy another creator's video shot for shot.", "No real named living people as characters, no brand logos or mascots.", "No captions unless captions=true.", "Never edit my voice beyond voice_speed." ], "deliver": "The MP4 plus a few lines on what each shot shows; offer tweaks." }
21
5
1
27
1,383
HOLY SH*T this has to be one of the most goated schemes I've seen in a while some guy created a channel, & the first video went viral this mf went ahead & created 9 different channels all under the first channel name & kept collaborating with the channels for a whole month the result, all of the channel's now have more than 1K subs remember lads, it's a volume game
30
39
4
1,564
214,935