<inputs> Ask me for: my story idea in one line ("in this town, [one strange rule]") and the length (30-60 s). If I have no idea, pitch me 3 rules and let me pick. Every story is mine, never a copy of an existing video. </inputs> <direction> A 1080x1920 30 fps Short that looks like a Roblox story animation, built entirely in Blender from code, with no Roblox assets. The characters are R6 block characters with flat cartoon face decals that you draw. Sets are plain parts built for whatever world the story needs (a suburb, a school, a castle, a sky), in saturated flat colours like a screen recording. Use two-tone noisy grass (#3D8C21 to #4FA32B) and a sky gradient from #B8D9FF at the horizon to #3378F7 overhead. Light it with a warm sun of strength 3.5 at 42°, using the Standard view transform. Captions show one word at a time in Title Case, in Montserrat ExtraBold at 104px: white, with a 13px black outline and a black shadow 4px right and 7px down at 60% opacity. Key nouns are red #EC1C24. Captions are centred, with their middle at 64% of the screen height. A kid narrates in first person, fast, and says sound words out loud ("Pop!", "Swoosh!", "Clang!"). Banned: Roblox logos, catalog faces or assets, motion blur, depth of field, the Filmic or AgX look, full stops in captions, any shot longer than 2.5 s, and any frame where nothing moves. </direction> <structure> Length: 30-60 s at about 210 wpm. Cut every 0.6-2.5 s (median 1.2 s), about 27 shots per 30 s. 0 s the rule in one line ("In this town, if you ___, you ___") over a wide of someone already paying for it, then a close of the cause and a close of the victim → 2-3 quick examples of how the town lives with the rule, 1-2 shots each → "Me? I'm the ___": the narrator is introduced in a close and snaps into a pose on his word → the incident: he breaks or tests the rule in 3 fast shots, and the consequence lands on its word with a white puff and a pop → it escalates in 3 cuts 1-2 s apart, each bigger than the last → at about 60-70% of the way through, a new place or a crowd reveal with one slow slide along it → the music cuts for 1-2 s and one sound lands on its word → the twist: a new character or fact arrives through a puff → the payoff on its word (a pop, a face swap or a transformation) → a callback ending that flips the first line: the whole cast snaps toward it, a sting plays, and the last close holds 1.5 s after the final word. </structure> <build> 1. Tools (all free, all local). Install what's missing and tell me what you installed: - Blender 4.2 or newer as the portable zip, run headless with `blender -b --factory-startup --python build.py -- MODE OUT` - Python with numpy and Pillow - FFmpeg - faster-whisper with large-v3-turbo, int8 on the CPU - Kokoro (kokoro-onnx) for the voice - the Montserrat font - one free bouncy music bed and about 15 free SFX: whoosh, impact, pop, sparkle, gasp, whistle and sting, plus whatever the story needs 2. Voice (Kokoro): - Write the story in short lines (about 15 per 30 s) and show me the script before you record. - Render each line with Kokoro, voice af_heart at speed 1.32, and join the lines. - Raise the whole take 1.5 semitones at the same speed (asetrate up, then atempo back down) so it sounds like a kid. - Pauses: - Between lines: 0.06 s plus 0.04-0.24 s (the longest goes right before the twist). - Inside a line: 0.11 s. - Cut only in real silence: below -44 dB for at least 0.06 s. Keep 35 ms of audio either side of every cut, and never stretch a pause. 3. Timing: - Run faster-whisper with word timestamps on the final voice file and match it to the script with difflib. - Key every cut, pose snap, face swap, puff and SFX to a word index, never to a fixed second. - Put each cut 0.04 s before its word. 4. Characters, built from boxes: - Body pivot at height 2. Torso 2x1x2. - Arms: 1x1x2, from shoulder pivots at x ±1.5. - Legs: 1x1x1.62, plus 1.02x1.04x0.38 shoes, from hip pivots at x ±0.5. - Head: a cylinder of radius 0.62 and height 1.22 with a 0.22 bevel. - Hair and props are cones, spheres and boxes. - Faces: draw every face the story needs in Pillow at 1024x578 with flat black strokes (9-17 px), keeping the features in the middle 45%. At least: smile, angry, scared, shock and determined. Map them onto the front 130° of the head. - Crowds: 40-50 characters with random clothes, skin tones and 6 hair styles. 5. Animation: one key per frame at 30 fps with constant interpolation, so everything snaps like Roblox. - Poses hold, then snap with a back ease (overshoot 2.2) over 0.12-0.16 s, starting 0.05-0.1 s before the word. Swap the face on the same frame. - Run: 2.5-2.7 Hz, legs ±52°, arms ±58°, a 9° lean, 0.16 bounce. - Flail: arms at -150° ±28° at 3.1 Hz, legs ±32° at 3.6 Hz. - Gravity: 78 units/s². - Idle crowd: a 0.45 bob, arms at -62° ±12°. Group turns are staggered 0.012 s per character, from nearest to farthest. - Puff on every transformation: 9 white spheres (emission 1.3, 72% alpha) that grow in 0.14 s and are gone by 0.55 s, plus 7 stars spinning outward over 0.6 s. 6. Shots: - Use a vertical sensor fit, so fov is vertical: 32-44° for closes, 46-56° for mediums, 58-70° for wides. - The camera is mostly locked, with smoothstep push-ins of 0.6-1.7 units and one slow slide per film. - Render Eevee at 32 samples (12 for stills) with shadows and ray tracing on, and save PNG frames. - Before the full render, look at a 50% still from the middle of every shot. - Tilt the camera with anything rising, so heads never leave the frame. - End every camera move before a character fills the lens. - Lift any crowd character cut off by the top edge out of that whole shot. - After the render, check every 3rd frame. 7. Edit and sound: - Captions: each word appears 0.03 s before it's spoken and stays until the next. Hold the last word 0.25 s, and strip punctuation. - Voice peaks at -15 dB. - Music bed: -27 dB RMS, faded out before the big sound cue and again on the final turn. - SFX: one downloaded sound per event, trimmed to start on its hit: - whooshes at -21 to -25 dB - impacts at -19 - pops at -17, plus a sparkle at -24 - gasps at -22 - cue sounds at -16 - the sting at -17 - Mix to -14 LUFS with a tanh soft clip at 0.89. Encode H.264 (slow preset, CRF 16, yuv420p) with AAC at 256k. </build> <gotchas> Convert every colour from sRGB to linear before it goes into Blender, or everything renders washed-out grey-blue. Give Blender an absolute output path. Whisper swallows pauses into the next word, so find silences in the audio itself and give each word gap the longest silence near it. kokoro-onnx needs its two model files (kokoro-v1.0.onnx and voices-v1.0.bin) downloaded next to it. It outputs 24 kHz audio with no word times, so resample to 48 kHz and take the timings from faster-whisper. A full render takes about 2 s a frame at 1080x1920, so do the stills pass first, and re-render only the frame ranges that changed. </gotchas> <start> Ask me for my story first (or pitch me 3), then show me the script before you make the voice. </start>
Comments
Loading…