Claude Video Prompts
for Opus 5.5 Motion Graphics
Claude AI makes videos by writing code, not by painting pixels. Every frame is a function of time, and a headless browser renders those frames into an MP4. That is why Opus 5.5 works well for motion videos and motion graphics: the result is exact, on-brand and repeatable.
These five Claude video prompts are built on those rules. Paste one into Claude Code, fill the brief, render.
Real Claude AI videos, made with /brag-slim.
Made by Claude Opus 5.5 following /brag-slim, straight from this site: the homepage, a real prompt copied on /claudedesign, the skills library and this page. The soundtrack was generated in Python, like every frame. Recorded on 29 September 2026; the site's wording has changed since.
Made by Claude from the code of creativeatishay.in, the portfolio of Atishay Tuli, who runs this site. /brag-slim read the project, planned the story, animated the live UI, generated the soundtrack in Python and checked stills of every scene before rendering.
How Claude AI turns a prompt into a video.
Every way of making a video with Claude, with or without a skill, runs through the same four steps.
- 01
You prompt
A brief with the story, timing, palette and motion rules.
- 02
Claude writes code
HTML, CSS and JavaScript, or React in Remotion, with each frame worked out from the time.
- 03
A browser renders
A headless browser steps through time and captures each frame.
- 04
ffmpeg encodes
The frames become an MP4, identical on every render.
5 Claude video prompts.
One per common kind of motion video. Fill the lines in curly braces and delete any you want Claude to decide. Numbers in braces, like {12}, are editable defaults.

> Product Launch Video From Your Codebase
Make a 20-second launch video for the product in this project. BRIEF (fill in, or delete a line to let Claude decide) - Focus: {whole product | one feature | what's new in this version} - Tone: {polished | playful | deadpan | cinematic} - Format: {1920x1080 landscape | 1080x1920 vertical}, 30fps - Music: {path/to/track.mp3, N BPM, first beat at S seconds | none} 1. STUDY Read the main page, styles, README and key components. Note the exact brand colors, fonts and real copy. Find 2–3 moments of the product in use (entry → key action → result). These become the highlights. 2. PLAN (write plan.md before any code) - Hook, 0–2s: the most surprising TRUE thing about this product. Decide it first. - Reveal, 2–5s: the name and a one-line promise in the product's own words. - Highlights, 5–17s: real UI doing its job (typing, clicking, a result appearing). Never a slide that only describes. - Outro, 17–20s: name plus URL or install command, held still. - A scene table with start and end times. With music, snap every internal boundary to the nearest beat (beat k = S + k x 60/BPM). The total stays exactly 20s; the outro absorbs the difference. - For every on-screen line: its word count and settled hold. Any hold under 0.3s per word (minimum 1s) fails the plan. - One dominant travel direction for every scene change, and at most 3 transition types in the whole film. 3. MOTION - Each scene exits in the direction the next one enters. Cut while the outgoing scene is still moving; the next enters on that same frame, already moving (no gap, no overlap). No crossfades, no fades to black. - Entrances under 0.8s, exits about 75% of that, group staggers under 0.5s in total. Ease-out in, ease-in out. A slight overshoot is fine; bounce and elastic are not. - No idle floating or pulsing to fill time. Spare seconds get a beat: a count ticks, a cursor clicks, a card files away. - Hold 0.3–0.75s of stillness right before the biggest reveal. 4. TEXT AND COLOR - Overlay text: nothing smaller than 40px at 1080p. Real UI: scale it up or crop tight so its key text reads at 32px or more. - Settled text stays 5% in from every edge; on vertical it also stays out of the bottom 20% and right 12%, where platforms put their buttons. Motion may pass through those zones. - Only the project's colors. No new gradients or glows. - Only claims found in the project. No invented numbers, logos or testimonials. Banned words: streamline, seamless, revolutionize, supercharge, unlock. 5. BUILD - First confirm ffmpeg and Playwright exist. Install Playwright if missing (it can drive an installed Chrome with channel "chrome" instead of downloading Chromium). If ffmpeg is missing, stop and tell me how to install it. - Reuse the project's real components, CSS, fonts and images. Rebuild only what you can't import. - If the project already uses Remotion or HyperFrames (remotion in package.json, or a hyperframes.json), use it and its own render command. Otherwise add a hidden /video route that sets window.DURATION and exposes async window.seek(t). GSAP is fine as one paused timeline that seek(t) drives. - Every frame is a pure function of t. Banned: Date.now(), requestAnimationFrame loops, timers, CSS transitions and @keyframes, playing videos or GIFs, unseeded Math.random(). On the video route add *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important} and drive hover and pressed states from t. 6. CHECK, THEN RENDER - Export a still from the middle of every scene and from the frames either side of every cut. Fix overflow, collisions, low contrast and anything outside the margins. - HTML path: serve the folder over a local http server (Chrome blocks fonts on file:// URLs). Playwright viewport at the exact format, deviceScaleFactor 1. Before capturing, run await Promise.all([...document.fonts].map(f => f.load())), then await document.fonts.ready. Set img.loading = "eager" on every image, then await img.decode() on each, catching failures (a lazy image offscreen never loads, so decode() would wait forever). Capture frame i at t = i/30 for i = 0 to 599. - Pick the strongest settled frame. HTML path: copy its PNG over frames/00000.png before encoding (replace it, don't add a frame), and save it as poster.jpg. - HTML path encode: ffmpeg -framerate 30 -i frames/%05d.png -c:v libx264 -pix_fmt yuv420p -crf 18 -movflags +faststart video.mp4 - Music (if none, rename video.mp4 to launch.mp4): add it in a second pass without re-encoding the video: ffmpeg -i video.mp4 -i TRACK -map 0:v -map 1:a -c:v copy -c:a aac -b:a 192k -af "apad,atrim=0:20,afade=t=out:st=19:d=1" -movflags +faststart launch.mp4 - Confirm with ffprobe that the video has exactly 600 frames at 30fps. DELIVER: launch.mp4, poster.jpg, plan.md, and a 1–2 sentence post caption in the product's own voice.
> Kinetic Typography Video
Make a {12}-second kinetic typography video where the words are the whole show. BRIEF (fill in, or delete a line to let Claude decide) - Text: "{your line, quote or lyric}" (allow 0.6–0.7s of video per word, so 12s fits about 18 words) - Mood: {confident | tense | joyful | calm} - Palette: background {#hex}, text {#hex}, one accent {#hex} - Font: {e.g. Instrument Serif} as a .woff2 file in ./fonts, or download the open-licence file there - Format: {1080x1920 vertical | 1920x1080 landscape}, 30fps. On vertical, a long hero word (8+ letters) forces all the type smaller; choose landscape or a shorter hero word if you want it big. - Music: {path/to/track.mp3, N BPM, first beat at S seconds | none} PLAN (write plan.md before any code; sizes are targets until you measure them in code, then update the plan) - Split the text into phrases of 1–4 words. The hero is the most important word in the final phrase: it lands last and holds to the final frame. - Mood sets the pace. Confident: quick snaps, firm landings. Tense: short, sharp moves. Joyful: lighter, with a slight overshoot. Calm: slower eases, longer holds. - Give each phrase a treatment chosen for its meaning, inside the one travel direction: a fast word snaps in, a heavy word lands on a slower ease, a quiet word sits smaller in empty space. - A table in whole frames (1/30s): phrase, word count, enter (first visible frame), settled, exit start, cut. Hold (settled to exit start) is at least 0.3s per word and never under 0.8s. If the text is short for the duration, lengthen the holds and the hero's final hold; never add words. - With music, every phrase settles on a beat (beat k = S + k x 60/BPM). Without, each phrase enters on the frame the previous one is cut. - One dominant travel direction for the whole piece. Break it once, for the hero: the phrase before it exits fully off frame in the hero's direction, the frame sits empty and still (one beat with music, 0.5s without), then the hero enters that way. This is the film's only pause. TYPE - Words only: no labels, counters, logos or captions beyond the text itself. - The safe area is 5% in from every edge; on vertical, it ends 12% in from the right and 20% up from the bottom instead. Measure text by its ink bounds with the loaded font. Settled text stays inside it; motion may pass outside. - Size the hero first: it fills 80–95% of the safe width. Then set every other phrase as large as it can be, capped at two-thirds of the hero's size (compare the font's cap height, even for lowercase words), so the hero leads by at least 1.5x. A quiet word may go smaller on purpose. - Stack to stay big: break a multi-word phrase across lines, one or two words per line, rather than shrink it. - Don't park every phrase in the same spot. Move the resting position between phrases so the frame keeps changing. - Letters in a word share one easing curve. If they stagger, use at most one frame per letter and move each letter no further than the font's x-height, so a word never looks letter-spaced mid-motion. - The accent color appears only on the hero word. No gradients, glows or drop shadows on text. MOTION - A cut is the single frame where the outgoing phrase vanishes, about halfway through its exit and still moving; on that same frame the next phrase appears a few frames into its entrance. No gap and no overlap, except the one pause before the hero. No crossfades. - Phrases exit in the direction the next enters. At most 3 transition types; a type is a distinct way of entering or exiting (a snap, a drop, a letter rise), not a change of speed or ease. - Entrances under 0.8s, exits about 75% of that. Ease-out in, ease-in out. No bounce or elastic. - No idle floating, breathing or wobble between phrases. BUILD - First confirm ffmpeg and Playwright exist. Install Playwright if missing (it can drive an installed Chrome with channel "chrome" instead of downloading Chromium). If ffmpeg is missing, stop and tell me how to install it. - If the project already uses Remotion or HyperFrames (remotion in package.json, or a hyperframes.json), use it and its own render command. Otherwise write one HTML file that sets window.DURATION and exposes async window.seek(t). GSAP is fine as one paused timeline that seek(t) drives. - Every frame is a pure function of t. Banned: Date.now(), requestAnimationFrame loops, timers, CSS transitions and @keyframes, playing videos or GIFs, unseeded Math.random(). Add *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}. CHECK, THEN RENDER - Export a still at each phrase's settled frame, and at the frame before and the frame of every cut. Fix overlaps and awkward line breaks. - HTML path: serve the folder over a local http server (Chrome blocks fonts on file:// URLs). Playwright viewport at the exact format, deviceScaleFactor 1. Before capturing, run await Promise.all([...document.fonts].map(f => f.load())), then await document.fonts.ready. Set img.loading = "eager" on every image, then await img.decode() on each, catching failures (a lazy image offscreen never loads, so decode() would wait forever). Capture frame i at t = i/30 for i = 0 to DURATION x 30 - 1. - Save the frame where the hero has fully landed as poster.jpg, to use as the cover image. Don't bake it into frame 0: it would flash the payoff before the first word. - In the commands below, DURATION means the real length in seconds: write the number, not the word. - HTML path encode: ffmpeg -framerate 30 -i frames/%05d.png -c:v libx264 -pix_fmt yuv420p -crf 18 -movflags +faststart video.mp4 - Music (if none, rename video.mp4 to type.mp4): ffmpeg -i video.mp4 -i TRACK -map 0:v -map 1:a -c:v copy -c:a aac -b:a 192k -af "apad,atrim=0:DURATION,afade=t=out:st=DURATION-1:d=1" -movflags +faststart type.mp4 - Confirm with ffprobe that the video has exactly DURATION x 30 frames. DELIVER: type.mp4, poster.jpg and plan.md.
> Animated Data Story
Turn this data into a {25}-second animated data story that makes one point impossible to miss. BRIEF (fill in, or delete a line to let Claude decide) - The point: "{e.g. Support tickets fell 62% in the three months after launch}" - Data: {paste CSV/JSON or give a file path}. Use only these numbers. - Source line: "{Source: internal dashboard, Sep 2026}" - Audience: {investors | customers | social feed}. It sets the wording of the question and the takeaway. - Palette: background {#hex}, text {#hex}, one highlight {#hex}. Everything that isn't the point is grey. - Format: {1920x1080 | 1080x1350}, 30fps PLAN (write plan.md before any code) - Choose the one chart that proves the point fastest: bars to compare, a line for change over time, a single count-up for one number. Justify it in one line. - Structure: Question (0–3s) → Baseline (what normal looks like) → Build (data draws in, in reading order) → 0.5s pause → Payoff (the hero number lands in the highlight color) → Takeaway line + source (final 4s). - Baseline, Build and Payoff happen on one persistent chart, with no cuts between them. - List every number that will appear on screen with the data row(s) it comes from, and the formula for any derived number (e.g. (1840 - 700) / 1840 = 62%). Anything that can't be traced is cut. If the math doesn't support the point, stop and tell me. DATA MOTION - Axes, labels and units appear before the data that uses them. - Bars grow from a zero baseline. Never truncate a bar chart's axis. - Lines reveal left to right, linearly in x (a clip reveal), then the key point gets a marker. - Count-ups ease out into the final value, keep the same decimals and units throughout, and land on the exact figure. Numbers use tabular-nums in a fixed-width, right-aligned box so the digits don't jitter. - One highlight color, used only on the data that proves the point. - No idle pulsing or floating anywhere. The payoff holds still. MOTION AND TEXT - Scenes exit in the direction the next enters. Cut while the outgoing scene is still moving; the next enters on that same frame, already moving (no gap, no overlap). No crossfades, and at most 3 transition types. - Entrances under 0.8s, exits about 75% of that, staggers under 0.5s in total. Ease-out in, ease-in out. No bounce or elastic. - Every line meant to be read stays still for 0.3s per word, minimum 1s. Nothing under 40px at 1080p; keep text 5% in from every edge. BUILD - First confirm ffmpeg and Playwright exist. Install Playwright if missing (it can drive an installed Chrome with channel "chrome" instead of downloading Chromium). If ffmpeg is missing, stop and tell me how to install it. - If the project already uses Remotion or HyperFrames (remotion in package.json, or a hyperframes.json), use it and its own render command. Otherwise write one HTML file that sets window.DURATION and exposes async window.seek(t). GSAP is fine as one paused timeline that seek(t) drives. - Draw charts in SVG you control (d3 scales and shapes are fine). Never use a library's built-in animation: it runs on wall-clock time, not on t. - Every frame is a pure function of t. Banned: Date.now(), requestAnimationFrame loops, timers, CSS transitions and @keyframes, playing videos or GIFs, unseeded Math.random(). Add *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}. CHECK, THEN RENDER - Export stills at the baseline, the pause, the payoff and the frames either side of every cut. Check every number on screen against plan.md. - HTML path: serve the folder over a local http server (Chrome blocks fonts on file:// URLs). Playwright viewport at the exact format, deviceScaleFactor 1. Before capturing, run await Promise.all([...document.fonts].map(f => f.load())), then await document.fonts.ready. Set img.loading = "eager" on every image, then await img.decode() on each, catching failures (a lazy image offscreen never loads, so decode() would wait forever). Capture frame i at t = i/30 for i = 0 to DURATION x 30 - 1. - Save the payoff frame as poster.jpg, to use as the cover image. Don't bake it into frame 0: it would flash the answer before the question. - In the commands below, DURATION means the real length in seconds: write the number, not the word. - HTML path encode: ffmpeg -framerate 30 -i frames/%05d.png -c:v libx264 -pix_fmt yuv420p -crf 18 -movflags +faststart data-story.mp4 - Confirm with ffprobe that the video has exactly DURATION x 30 frames. DELIVER: data-story.mp4, poster.jpg and plan.md with the number trace table.
> Seamless UI Feature Loop
Build a {8}-second seamless loop of the feature below being used, for a landing-page hero or a social post. BRIEF (fill in, or delete a line to let Claude decide) - The action: "{e.g. drag a card into Done and watch the progress ring fill}" - Source UI: {this project's components | screenshots in ./assets | a URL (screenshot it once and rebuild from that; never record the live page)} - Format: {1920x1080 | 1080x1080}, 30fps, no audio PLAN (write plan.md before any code) - One user action in three steps: setup → action → result, then a reset back to the opening state. - The state at t = DURATION is identical to t = 0, and the seam falls inside a still hold of at least 0.3s. - The reset moves forward, never rewinds or crossfades: the finished item files away and a fresh one arrives from the direction the story travels. - The result holds still long enough to read any text it shows (0.3s per word, minimum 1s). - The causal chain with times: cursor arrives → press → release → result → settle. Every reaction starts on the exact frame of its cause. UI MOTION - Use the real components and CSS. Recreate only what you can't import, matching colors and fonts exactly. - The cursor and any text caret are drawn elements. Drive hover, pressed and focus states with classes set from t. - A large cursor leads the eye along a gently curved path with ease-in-out, and settles before it clicks. - Click feedback: the target presses to 96% scale over about 80ms and returns over about 150ms with ease-out. No oscillation. - Typing, if any, at an even pace of about 15 characters per second. - The camera may push in toward the action (10% at most) and eases back to its opening framing during the reset. No idle floating, pulsing or wobble. - Entrances under 0.8s, easing out. No bounce or elastic. BUILD - First confirm ffmpeg and Playwright exist. Install Playwright if missing (it can drive an installed Chrome with channel "chrome" instead of downloading Chromium). If ffmpeg is missing, stop and tell me how to install it. - If the project already uses Remotion or HyperFrames (remotion in package.json, or a hyperframes.json), use it and its own render command. Otherwise add a hidden route (or one HTML file if nothing needs importing) that sets window.DURATION and exposes async window.seek(t). GSAP is fine as one paused timeline that seek(t) drives. - Every frame is a pure function of t. Banned: Date.now(), requestAnimationFrame loops, timers, CSS transitions and @keyframes, playing videos or GIFs, unseeded Math.random(). Add *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}. CHECK, THEN RENDER - Capture the state at t = 0 and at t = DURATION and pixel-diff them: they must be identical. Export stills at the click and the result, and fix anything clipped or soft. - HTML path: serve the folder over a local http server (Chrome blocks fonts on file:// URLs). Playwright viewport at the exact format, deviceScaleFactor 1. Before capturing, run await Promise.all([...document.fonts].map(f => f.load())), then await document.fonts.ready. Set img.loading = "eager" on every image, then await img.decode() on each, catching failures (a lazy image offscreen never loads, so decode() would wait forever). Capture frame i at t = i/30 for i = 0 to DURATION x 30 - 1. Never capture t = DURATION itself: it duplicates frame 0 and the loop stutters. - In the commands below, DURATION means the real length in seconds: write the number, not the word. - HTML path, MP4: ffmpeg -framerate 30 -i frames/%05d.png -c:v libx264 -pix_fmt yuv420p -crf 18 -movflags +faststart -an loop.mp4 - HTML path, WebM: ffmpeg -framerate 30 -i frames/%05d.png -c:v libvpx-vp9 -crf 32 -b:v 0 -pix_fmt yuv420p -row-mt 1 -an loop.webm - Confirm with ffprobe that each file has exactly DURATION x 30 frames. DELIVER: loop.mp4, loop.webm, poster.jpg (the result state; leave frame 0 untouched so the loop stays seamless), and an embed snippet: <video autoplay muted loop playsinline poster="poster.jpg"> with the WebM source first and the MP4 last.
> 60-Second Concept Explainer
Make a {60}-second motion-graphics explainer that teaches the concept below to the audience below, well enough that they could explain it to a friend. BRIEF (fill in, or delete a line to let Claude decide) - Concept: {e.g. how HTTPS keeps your password private} - Audience: {curious non-engineers | developers | students} - Facts: {paste verified notes or source links}. Use only these. - Narration: {none, on-screen text carries it | path/to/voiceover.wav, plus word-timestamp JSON if you have it}. With a voiceover, the video length is the voiceover plus 1s and the target above is ignored. No timestamps? Generate them with a local speech-to-text tool such as Whisper. - Style: palette {3 hexes}, fonts {display + text}, look {flat vector | diagram | editorial} - Format: {1920x1080 | 1080x1920}, 30fps PLAN (write plan.md before any code) - Script 6–8 beats: Hook question (under 5s) → Everyday analogy → Mechanism in 1–3 steps → One concrete example → One-line recap → End card. - For every beat: the one idea, the visual that proves it, and the exact words. One idea per beat. - Pick one hero object (e.g. the password as a small yellow card) that persists and transforms across every beat, carrying the eye through each cut, instead of new illustrations per scene. - Check every fact against the brief. Mark anything not in it NEEDS SOURCE and leave it out. EXPLAINER RULES - Build diagrams step by step as each idea is introduced. Never show a finished diagram and then explain it. - With narration: each visual lands on the word it illustrates, using the timestamps. If a line doesn't fit its slot, change the slot; never rush the line. - Without narration: captions of 2 lines max, each held still for 0.3s per word, minimum 1s. - Labels share one style and sit next to the thing they name, never in a legend. - Nothing smaller than 40px at 1080p. Settled text stays 5% in from every edge; on vertical it also stays out of the bottom 20% and right 12%. Motion may pass through those zones. MOTION - One dominant travel direction; rise upward only for the recap. At most 3 transition types in the whole film. - Scenes exit in the direction the next enters. Cut while the outgoing scene is still moving; the next enters on that same frame, already moving (no gap, no overlap). No crossfades. - Entrances under 0.8s, exits about 75% of that, staggers under 0.5s in total. Ease-out in, ease-in out. No bounce or elastic. Pause 0.3–0.75s before each "aha" moment. - No idle floating or pulsing. If a beat has spare time, reveal the next piece of the diagram. BUILD - First confirm ffmpeg and Playwright exist. Install Playwright if missing (it can drive an installed Chrome with channel "chrome" instead of downloading Chromium). If ffmpeg is missing, stop and tell me how to install it. - If the project already uses Remotion or HyperFrames (remotion in package.json, or a hyperframes.json), use it and its own render command. Otherwise write one HTML file that sets window.DURATION and exposes async window.seek(t). GSAP is fine as one paused timeline that seek(t) drives. Keep every beat on one master timeline so the hero object and mid-motion cuts stay continuous. - Every frame is a pure function of t. Banned: Date.now(), requestAnimationFrame loops, timers, CSS transitions and @keyframes, playing videos or GIFs, unseeded Math.random(). Add *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}. CHECK, THEN RENDER - Render a 10-second test from the middle first and fix what you see. Then export a still from every beat and from the frames either side of every cut; fix overflow, collisions and low contrast. - HTML path: serve the folder over a local http server (Chrome blocks fonts on file:// URLs). Playwright viewport at the exact format, deviceScaleFactor 1. Before capturing, run await Promise.all([...document.fonts].map(f => f.load())), then await document.fonts.ready. Set img.loading = "eager" on every image, then await img.decode() on each, catching failures (a lazy image offscreen never loads, so decode() would wait forever). Capture frame i at t = i/30 for i = 0 to DURATION x 30 - 1. - Pick the frame with the hero object mid-mechanism, fully settled. HTML path: copy its PNG over frames/00000.png before encoding (replace it, don't add a frame), and save it as poster.jpg. - In the commands below, DURATION means the real length in seconds: write the number, not the word. - HTML path encode: ffmpeg -framerate 30 -i frames/%05d.png -c:v libx264 -pix_fmt yuv420p -crf 18 -movflags +faststart video.mp4 - Voiceover (if none, rename video.mp4 to explainer.mp4): ffmpeg -i video.mp4 -i VOICEOVER -map 0:v -map 1:a -c:v copy -c:a aac -b:a 192k -af "apad,atrim=0:DURATION" -movflags +faststart explainer.mp4 - Confirm with ffprobe that the video has exactly DURATION x 30 frames. DELIVER: explainer.mp4, poster.jpg, plan.md with the script, and, with a voiceover, captions.srt built from the word timestamps.
Opus 5.5 or Sonnet 5.5 for video?
| Attribute | Opus 5.5 | Sonnet 5.5 |
|---|---|---|
| Released | 22 Sep 2026 | 28 Sep 2026 |
| Price per 1M tokens (in / out) | $4 / $20 | $2 / $10 |
| In short | The larger model of the two | The faster, lower-cost model of the two |
| Reach for it when | Multi-scene launches and explainers, where planning decides quality | Loops, kinetic type, and iterating on a plan that already works |
Sonnet 5.5 was released on 28 September 2026 and we have not benchmarked it for video, so treat the Sonnet column as a starting point. A practical split: plan on Opus, iterate on Sonnet.
Six rules that separate motion graphics from animated slides.
Motion should carry the eye, not decorate the frame.
Most AI video fails the same way: each scene fades in, floats, and fades out on its own, so every cut starts from rest. The rules below come from the tools that get this right, and every prompt on this page carries them.
- 01
Time drives every frame
No clocks, timers or CSS transitions, so every render comes out identical.
- 02
The hook comes first
The first two seconds decide whether anyone keeps watching, so they are planned before anything else.
- 03
0.3 seconds per word
A line stays still long enough to read, counted from the moment it is fully on screen.
- 04
One direction, no crossfades
Scenes hand off in a single travel direction and cut while still moving.
- 05
No idle wobble
Spare seconds get a real beat, like a click or a counter, never floating or pulsing.
- 06
Stillness before the payoff
0.3 to 0.75 seconds of calm right before the reveal is what makes it land.
How to make a video with Claude AI.
Set up once
Install Claude Code, Node.js and ffmpeg. Optionally add a video skill such as /brag, HyperFrames or Remotion's agent skills.
Pick a prompt, fill the brief
Copy the prompt that matches your video, fill in the lines in curly braces, and paste it into Claude Code inside your project folder.
Check the plan
Every prompt makes Claude write plan.md first. Fix the hook or timing there, where a change costs seconds instead of a re-render.
Review stills, then render
Claude checks stills from every scene and transition before the full render. Ask for one fix at a time, naming the scene and timestamp.
Claude video skills worth installing.
The prompts above work on their own. These skills add a renderer or a whole workflow. Stars and forks are repository totals, checked on 14 October 2026.
brag
Latent Spaces latent-spaces/brag
Turns the project you just built into a 15 to 25 second launch video with music, motion and share copy, in one command.
You shipped something and want to show it off
- Reads your code directly, no screenshots needed
- Seven tone presets, from polished to chaotic
- Renders brag.mp4 plus ready-to-post share copy
- 15.9k
- 1.2k
- 13 Oct 2026
Its creative laws are the best-written rules for short launch videos we found anywhere.
brag-slim
Latent Spaces latent-spaces/brag
A single-file rebuild of /brag for Opus 5.5 that makes the whole video itself, with no renderer and no bundled assets.
You are on Opus 5.5 and want the leanest setup
- Works from a project folder or a live URL
- Builds its own soundtrack and visuals
- Checks stills mid-transition before rendering
- 15.9k
- 1.2k
- 13 Oct 2026
/brag hands off to it automatically on Opus 5.5.
hyperframes
HeyGen heygen-com/hyperframes
An agent-first framework that turns HTML and GSAP timelines into rendered MP4 video.
You want your HTML skills to become video skills
- Skills for launch videos, explainers and motion graphics
- A motion doctrine for seamless scene transitions
- Lint, check and snapshot steps before any render
- 63.4k
- 5.7k
- 14 Oct 2026
The HyperFrames renderer is behind /brag, and its motion doctrine is the most rigorous motion guidance we found.
remotion skills
Remotion remotion-dev/skills
Remotion's official agent skills for making videos in React, from the first composition to the final render.
Your team already works in React
- Best practices for compositions, timing and audio
- Dedicated skills for captions, maps and SaaS videos
- Docs lookup so the agent uses the current API
- 5.1k
- 566
- 12 Oct 2026
Official, and built on the most established code-to-video framework. Free for teams of up to three; larger companies need a licence.
Claude video FAQ.
Can Claude make videos?
Yes, though not the way image models do. Claude writes code, usually HTML with CSS and JavaScript or a React composition in Remotion, where every frame is a function of time. A headless browser renders each frame and ffmpeg encodes them into an MP4. Because the video is code, the output is exact: real fonts, exact brand colours, readable text, and the same result on every render. That is why Claude Opus 5.5 suits motion graphics.
Is Claude an AI video generator?
Not in the text-to-video sense. Text-to-video models generate footage from a prompt; Claude writes code that draws every frame. That makes it excellent at motion graphics, such as kinetic typography, product and UI animations, animated charts, explainers and launch videos, but it does not produce filmed footage, realistic people or lip-synced talking heads. The upside is precision: exact fonts, brand colours and readable text, identical on every render.
What is the best Claude video skill?
It depends which way the video is going. To make videos, use /brag for a launch video from a project you built, and HyperFrames or Remotion's official skills for everything else. To have Claude watch videos, you need a different kind of skill: claude-video by bradautomates, for example, downloads a video, extracts frames and a transcript, and hands them to Claude. The prompts on this page are for making videos, and work with or without a skill.
How long does Claude take to make a video?
It depends on the length and the number of scenes. Claude has to plan, write the code, check stills and render, so expect minutes rather than seconds even for a short single-scene piece. Multi-scene launch videos and 60-second explainers take longer, and every revision adds a re-render. Most of the time goes into planning and checking, which is where a good prompt saves you rounds.
Is Opus 5.5 or Sonnet 5.5 better for making videos?
Use Opus 5.5 for multi-scene work where planning matters, such as launch videos and explainers. Sonnet 5.5, released on 28 September 2026, is faster and cheaper, at $2 and $10 per million input and output tokens against Opus's $4 and $20. It suits short single-scene pieces like loops and kinetic type, and iterating on a plan Opus has already written.
Do I need Claude Code, or does the Claude app work?
Use Claude Code for the prompts on this page. Rendering needs Node.js, a headless browser and ffmpeg, and Claude Code can install and run all of them on your machine. A Claude chat can also run code and create files, so it may manage short clips too, but that depends on your plan and on what its sandbox has installed, and we have not verified it. Either way, a chat can always write the animation code for you to preview in a browser.
What do I need installed to render a Claude video?
Node.js and ffmpeg on your PATH, plus one way to render frames: Playwright for the plain HTML route, or a framework such as Remotion or HyperFrames. The /brag skill specifically needs Node.js 22 or newer, ffmpeg and the HyperFrames CLI. If anything is missing, ask Claude Code to install it. One licensing note: Remotion is free for individuals, nonprofits and companies of up to three employees, while larger companies need a paid company licence.
Can Claude add music and a voiceover?
Music, yes. Give Claude a track and its tempo and it will land every cut on a beat, then mix the audio in with ffmpeg without re-encoding the video. The brag-slim skill goes further and builds its own soundtrack. A voiceover needs a text-to-speech engine; /brag supports Kokoro through HyperFrames when run with --voice, and the visuals are then timed to the voiceover's word timestamps.
How much does it cost to make a video with Claude?
Very little per render. As a worked example, a render that uses 90,000 input tokens and 15,000 output tokens costs about $0.66 at Opus 5.5 list prices, or $0.33 on Sonnet 5.5 for the same token count. Your own token use will differ. Revisions and re-renders add to that. On a Claude subscription, usage counts against your plan's limits rather than being billed per token.
Why do my Claude videos look like animated slides?
Usually because each scene was animated in isolation: elements fade in, float, then fade out, and every cut restarts from rest. The fix is motion that carries across cuts. Keep one dominant travel direction, let each scene exit in the direction the next one enters, cut while both are still moving, and replace idle floating with a real beat such as a cursor click or a counter ticking. Every prompt on this page builds those rules in.
Why is the text in my video unreadable?
It leaves before anyone can read it. Give every line you want read at least 0.3 seconds per word, counted from the moment the whole line is on screen, with a floor of about one second. Keep the pace high through motion and cuts rather than by pulling text away early, and keep text clear of the edges where platforms overlay their own buttons.
Why does my video stutter or change between renders?
Something depends on the clock instead of the frame. Timers, requestAnimationFrame loops, CSS transitions, chart-library animations and unseeded random numbers all run at real-world speed, so the renderer catches them at random points. Make every frame a pure function of time, and wait for fonts and images to finish loading before any frame is captured.
What these prompts are built on.
We read the skills and write-ups behind the best Claude videos and kept the rules they agree on. Credit where it is due.
More from the library
- Claude Design promptsPrompts for websites, landing pages, dashboards, app UI and pitch decks in Claude Design.
- Claude design skillsHand-checked agent skills for UI, motion and typography, to install once and reuse.
- Claude Code skills for developersHand-checked skills for testing, debugging, code review, security and performance.
- Lovable promptsPrompts for landing pages, hero sections and SaaS products built in Lovable.
Made something with these?
Send us the video or a prompt that beat ours. If a prompt failed for you, tell us where, because that is how they get better.