大多数尝试用 Opus 5.5 做动态设计(Motion Design)的人,最终都会得到同质化的视频:渐变背景上的居中文字、所有元素淡入淡出、最后放一个 Logo。
原因在于:他们没有提供参考(Reference),没有配置渲染引擎(Render Engine),也没有让模型去审视自己生成的画面帧。
这是一套包含 12 个步骤的完整课程,旨在将这种混乱的尝试转化为可复用的工作室级流水线。提示词(Prompt)只占视频效果的 10%,另外 90% 全靠工程底座(Harness)。
背景:Opus 5.5 引发的动态设计变革
Claude (@claudeai) · 9月23日
介绍 Claude Opus 5.5,这是我们全新 Claude 5.5 系列中的首个模型。它在大多数任务上的表现达到了 Claude Fable 5.1 的水平,并且运行成本比 Opus 5 低 40%。
2026 年 9 月 22 日,Anthropic 发布了 Claude Opus 5.5 。几小时内,社交媒体的时间线上便刷满了作品集混剪(Showreels)、产品发布视频、MV 以及五分钟的历史短片——所有这些全部由代码渲染生成。
配文都在说“只需一句提示词(One prompt)”,评论区都在感叹“动态设计师要失业了”。
这两句话都只说对了一半。有些短片确实来自 30 个词的简短提示词;但另一些则源自 9,500 字符的导演简报(Director's brief)、一整个文件夹的技能包(Skills)、两个 API 密钥以及长达 12 小时的自主运行。Claude Code 团队的 Thariq 用一句话总结了这种差距:
Thariq (@trq212) · 9月24日
帖子说:“Claude 一发搞定这个(One-shot)”
实际的提示词:10k 字符,包含明确的审美主张,外加技能包、示例和 API 密钥。引用 Donald (@donaldjewkes) · 9月24日
我附上了一个 MP4 文件和一段名为“Claude Pop”的原视频链接。这是一首关于进步加速与奇点临近体验的流行歌曲。我希望你独立完成一次端到端的完整重构,制作一个更新版本……
本课程将为你展示从极简提示到重度工程的两端,以及介于两者之间的所有核心环节。你将读到定义这一趋势的 9 篇代表性帖子,复制它们所使用的提示词模式,并亲手构建整套渲染引擎:一个 seek(t) 渲染器、闭式弹簧(Closed-form springs)、节拍网格(Beat grid)、程序化合成音效,以及一个能让 Opus 自我修复画面的审片循环(Critique loop)。

第一部分 · 底层原理与环境搭建
01. 像素本质:模型编写的是程序,而非视频
Opus 5.5 接收文本和图像输入,并输出文本。它无法直接输出 MP4 文件。这一波趋势中的每一个视频,本质上都是 Opus 编写的一段程序,再由外部工具将程序转化为视频帧。
核心技巧在于确定性(Determinism)。Opus 编写一个单一函数 draw(t) 或 seek(t),用于精确绘制任意时间点 $t$ 的画面帧。无头浏览器(Headless browser)以 60 fps 的帧率在 15 秒内调用它 900 次,对每一帧进行截图,最后由 ffmpeg 将截图拼接成视频。整个过程不依赖任何计时器(Timer),因此每次运行的渲染结果都完全一致;修改视频只需改一行代码并重新渲染即可。

Tommy Rossi 深入剖析了这些单次生成(One-shot)的产出,发现 Opus 默认偏爱零依赖的路线 A:单个 index.html 文件、通过 eval 调用的 seek 函数、Playwright 逐帧捕获画面、ffmpeg 编码输出。

即便环境中安装了 Remotion 和 HyperFrames,它也会默认跳过。如果你需要使用特定框架,必须在提示词中明确指定。
Tommy D. Rossi (@__morse) · 9月25日
尝试使用相同的提示词,要求让视频更丰富多彩。Opus 5.5 真的很了不起。一次生成,它将所有代码放在单个index.html文件中,并使用 Playwright 在无头窗口中逐帧渲染,然后用ffmpeg生成 mp4。它使用了seek函数和eval来渲染每一帧。引用 zero (@twoclipping) · 9月25日
Opus 5.5 在动态设计方面简直太强了。整个视频全是代码,0 After Effects。我将开源这些动态设计的提示词模板,拿去复现吧 ↓
02. 环境配置:10 分钟搭建动态工作室
普通的网页聊天界面可以写出动画代码,但只有 Claude Code(或任何具备 Shell 权限的 Agent)才能真正去渲染它、倾听它的音频并审视它生成的画面帧。这个反馈循环(Feedback loop),正是人们抱怨的“平庸初稿”与“病毒式爆款”之间的核心分水岭。
终端安装与初始化脚本
# 1. 运行时环境:Node 22+、ffmpeg、用于音频分析的 Pythonbrew install node ffmpeg python # macOS 使用 brew;Linux 请使用 apt installpip install numpy librosa soundfile# 2. 创建干净的项目目录并安装无头浏览器mkdir motion-studio && cd motion-studio && npm init -ynpm i -D playwright && npx playwright install chromium# 3. 框架技能包(可选,对应路线 B)npx skills add remotion-dev/skills # 提供 /remotion-create, /remotion-render 等指令npx skills add heygen-com/hyperframes # 提供 /hyperframes 路由 + GSAP 技能# 4. 手绘风格插件(可选):Node Canvas 骨骼绑定、画笔、程序化合成音效claude plugin marketplace add buildwithhanif/claude-animation-skillclaude plugin install claude-animation@claude-animation-skill# 5. 启动 Claude Code,挂载 Opus 5.5 并开启高推理强度(High effort)claude --model claude-opus-5-5> /model # 选择 Opus 5.5,单次生成设为 xhigh,旗舰级作品设为 max接着,在项目根目录下放置一份内部规范文件 CLAUDE.md。Claude Code 每次运行时都会自动读取该文件,从而让以下规则自动应用于你在此制作的每一个视频,无需在提示词中反复赘述:
CLAUDE.md 工作室规范配置
# Motion studio rules (动态设计工作室规范)## Render contract (渲染契约)- 每部短片都必须是时间的纯函数:`window.seek(t)` 负责绘制第 `t` 秒的画面帧。- 在渲染模式下,严禁使用 CSS transitions、`setTimeout`、`requestAnimationFrame`,严禁在帧与帧之间传递可变状态。- 仅允许使用带种子的伪随机噪声(如 `mulberry32`),严禁使用 `Math.random()`。- 使用 `node render.mjs` 进行渲染,编码格式为 H.264 `yuv420p`,画质参数 `CRF 16`。## Look (视觉规范)- 严禁使用的默认套路:渐变背景上的居中标题、所有元素单纯淡入淡出、角落标签与画面边框、UI 组件上的发光特效(Glow)、廉价的通用粒子爆炸。- 字体限制:一款展示字体(Display face),一款界面字体(UI face)。- 配色限制:除非简报另有说明,否则全局只使用一种强调色(Accent color)。- 节奏要求:每 2 到 4 秒,画面上必须发生新的视觉变化。## Sound (音频规范)- 除非提供了现成音轨,否则配乐与音效(SFX)均需在代码中程序化合成。- 音效打击点必须严格对齐测算出的节拍网格(`beats.json`)。响度标准化为 `-14 LUFS`。## Loop before you show me anything (交付前的自检循环)1. 按每个节拍渲染一帧画面,拼接成缩略图样片(Contact sheet)并亲自审视它。2. 在以下维度按 1-10 分进行打分:前 2 秒的吸睛度(Hook)、手机端尺寸下的可读性、运动质感、画面多样性、品牌还原度、音画同步率。3. 修复最严重的 3 个问题。重复此过程,直到所有维度的得分均达到 8 分以上。4. 只有通过上述检验后,才允许执行完整渲染。关于推理强度(Effort)的建议: Opus 5.5 默认处于 medium 强度,且在回答前总是会进行思考。本教程列举的所有爆款单次生成作品,均运行在 xhigh 或 max 强度下。日常小修小补和重新渲染可用 medium,制作新短片请用 xhigh,而在视频前 3 秒决定成败的产品发布大片中,请务必开启 max。
第二部分 · 像导演一样写提示词
03. 一句话作品集提示词,以及它为何有效
九篇代表性帖子中有四篇使用了完全相同的一句话。我们非常有必要拆解,为什么短短一行字就能催生出包含镜头运动、动态排版(Kinetic type)和音频的 15 秒短片:
make a dynamic 15-second motion graphics video that shows what an incredible motion designer you are, like it's your showreel for a résumé. go all out.(制作一段动态的 15 秒动态图形视频,展示你是一位多么出色的动态设计师,就像这是你简历的作品集展示卷宗一样。全力以赴。)"showreel for a résumé"(简历作品集):确立了一个规则明确的体裁——快节奏剪辑、每个镜头展示一种新技法、把最惊艳的画面放在最前面。Opus 非常清楚优秀作品集该长什么样。"what an incredible motion designer you are"(展示你有多出色):将模型自身设为表现主体,因此它会专注于炫技,而不是去生硬地解释某个产品,从而避免了内容理解上的偏差。"15-second"(15 秒):时长短到足以在单次生成中完成,同时又长到足够容纳 6 到 8 个分镜。"go all out"(全力以赴):在xhigh或max推理强度的基础上,起到了进一步的潜力激发作用。

Stephan Livera (@stephanlivera) · 9月25日
(注:开启 Max 强度生成的 15 秒原版简历作品集,也是这句提示词的源头。)
Opus 5.5 全力以赴 - “制作一段动态的 15 秒动态图形视频,展示你是一位多么出色的动态设计师,就好像这是你简历中的作品集。全力以赴。”
Rob Hallam (@robj3d3) · 9月27日
(注:在 xhigh 强度下使用相同提示词单次生成,包含原生生成的音频,证明音效并非后期添加。)
我原本不相信,但这居然是一次性成功的。Opus 5.5 在 xhigh 努力模式下:“制作一个动态的 15 秒动态图形视频,展示你是一位多么出色的动态设计师,就像这是你简历的展示卷宗一样。全力以赴。”
Himanshu (@himanshutwtxs) · 9月25日
这太疯狂了!!Opus 5.5 开启最大功率,一条提示词搞定动态设计(请打开声音)。
局限性与变体升级:
athemeroy 数据集将这种现象称为“简报传染(Brief contagion)”——数百个一模一样的提示词产生出了高度雷同的作品集视频。你可以用这句提示词来测试环境配置是否正常,测完就该换用更高级的写法了。以下是经过实战验证的高阶变体:
# 1. 更长篇幅 + 高阶音效要求(源自 @kloss_xyz 的 90 秒钢琴作品集模式)make a dynamic 16:9, 60-second motion graphics showreel that shows your real creative limits.S-tier sound design, no generic synth pads. Compose an original piano score and sync everycut to it. Export 1080p MP4.# 2. 防 AI 劣质感を护栏(源自 @1littlecoder 的模式)make a dynamic 10-second motion graphics video that introduces who you are as Opus 5.5.Avoid frames and text in the corners, the usual giveaways of AI-made video.# 3. 叙事导向而非单纯炫技(源自 @sonnylazuardi 的模式)use your showreel energy, but tell a story: the history of [TOPIC] from [START] to today,surprise me with the storyboard. 45 seconds, vertical 9:16.# 4. 精品设计工作室人设make a 30-second showreel as if you were a niche branding studio for startup founders.Create every graphic from scratch. One accent color. Every shot is a different technique.核心洞察: 一句话提示词只能测试渲染引擎,永远无法测试创意,因为它本身就不包含任何创意。
04. 品牌化:将镜头对准你的真实产品
Tony Dinh 的帖子对任何有带货或产品宣发需求的人来说最具实用价值。一年前他花了一千多美元找外包制作类似的发布视频,而现在用 Opus 5.5 不到 30 分钟就搞定了。
起决定性作用的只有额外加出的三行要求:提供产品网址、“使用真实的产品截图、Logo 和素材”,以及**“必须有配乐”**。Opus 会自己访问网站并抓取所需素材。
Rob Hallam 则证明了下半场的效率:在生成完第一个作品集后,他在同一个对话窗口中要求制作一段产品广告,结果生成速度大幅提升——因为渲染器、音频合成器以及导出流水线都已经现成可用了。请记住:为每个品牌保留一个独立的持久化会话(Session)。
产品宣发视频提示词模板
Make a dynamic 20-second motion graphics video for [PRODUCT] ([URL]), with the energyof a motion designer's showreel. Go all out.Assets- Visit the site. Use real screenshots (Playwright), the real logo, real colors and fonts. Save everything to ./assets and list what you found before you animate.- Never redraw the product UI from imagination. Crop and animate the real thing.Story (one beat each, 2 to 4 seconds)1. Hook: the problem in 5 words of huge kinetic type.2. The product appears, the UI assembles itself piece by piece.3. Three features, each as a UI moment with a cursor doing a real action.4. One number that proves it works: [METRIC].5. Logo lockup + [CTA].Sound- Original music, 120 BPM, synthesized in code. UI clicks and whooshes on the beat.Format: 1080x1920 (9:16) first, then 1:1 and 16:9 from the same timeline.Before the full render, show me a contact sheet of one frame per beat.Tony Dinh (@tdinh_me) · 9月26日
(展示:30 分钟内生成的 TypingMind 宣传片,替代了 1,000 多美元的机构外包视频。)
天哪。就在一年前,我花了大约 1000 多美元才做出这样的视频。现在我用 Opus 5.5 在不到 30 分钟内就完成了这个 😂
Chain (@achxvi) · 9月27日
(展示:带有 ElevenLabs 配音解说角色的 Pocketsflow 宣传片。)
Opus 5.5 在 15 分钟内完成了这个,这太疯狂了 🫣
achxvi 通过引入“会说话的角色”将这一思路推向了更高维度:在制作 Pocketsflow 视频时,他传入了 ElevenLabs 的 API 密钥,并要求生成一个吉祥物角色来解说产品。“配音 + 吉祥物”正是他目前对外售卖商业化服务的核心卖点。
安全提示: 请将 API 密钥存放在 .env 文件中,并在提示词里写明 "the ElevenLabs key is ELEVENLABS_API_KEY in .env"。切勿将真实密钥直接粘贴到准备截图分享的提示词中(achxvi 在公开提示词里就特地用了一个搞笑占位符来规避泄露)。
05. 视觉参考:指定风格名称,投喂真实画面帧
如果没有提供参考(Reference),Opus 就会退回到它的默认舒适区:居中文字、渐变背景、所有元素淡入淡出。
Rexan Wong 分析了数十个爆款短片后得出了相同的结论:直接点出风格名称胜过用语言去描述它;而提供一段参考视频或单帧截图,则能让模型直接复刻其中的节奏、排版和转场方式。
Pleometric 的两篇帖子完美展示了这种进阶阶梯:他的纯代码 TikTok 概念动画,仅仅起步于另一个爆款动画的单帧截图;而他致敬 Donald 风格的作品,则是将 Opus 指向了他自己的 PC-98 图像画廊。你自己的素材库,就是别人永远无法复制的独家参考源。
- 单帧参考(A frame):截取一张你热爱的视频画面并作为附件上传,明确告诉模型要汲取什么(色板、字体排版、颗粒质感)以及不要什么(具体的画面主体)。
- 视频参考(A video):将视频文件或链接交给 Opus,要求它在写代码前先用
ffmpeg抽帧,并逐镜描述原片的节奏与调度。 - 素材库参考(A library):提供一个装满你过往作品或收集图片的文件夹,要求 Opus 先根据这些素材提炼出一份
style_guide.md。 - 优质参考源推荐:
whatships.com(产品发布视频库)、Dribbble 动态设计板块、竞争对手的产品发布短片。
风格提取与分镜生成提示词
Reference: ./refs/launch.mp4 (and ./refs/frames/*.png)1. Extract one frame every 0.5s with ffmpeg. Study them.2. Write ./docs/style_guide.md: palette (hex), type (family, weight, tracking), shot lengths, transition types, camera moves, texture/grain, how text enters and exits.3. Write ./docs/shotlist.md for a [DURATION]s video about [SUBJECT] in THAT style. Take the grammar of the reference, never its content, logos or characters.4. Show me both files. Wait for my OK before any code.在实践中,Pleometric 曾建议模型使用 p5.js,但 Opus 最终选择自己手写一套纸质纹理渲染器。当你提供了视觉参考时,请放手让模型自己选择技术实现方案。 你只需规定视觉效果和硬性约束,无需限定死代码库(除非你为了后续复用必须使用特定框架)。
Rexan Wong (@rexan_wong) · 9月26日
每个人都在分享 Opus 5.5 制作的动态图形视频,真的太疯狂了。每个人都说他们是用“一个提示词”创建的,但我的单提示词视频看起来却很平庸。所以我看了一堆这些视频,想看看它们是怎么真正制作的,然后找到了有效的流程:
- 获取参考视频来指导……
Pleometric (@pleometric) · 9月23日
(展示:“它的 TikTok 信息流”纯代码动画,仅由另一个爆款作品的单帧画面衍生而来。)
我让 Opus 5.5 制作了一个动画,展示它的 TikTok 动态流看起来是什么样子的 👇
06. 结构化规范:编写状态列表,而非空谈感觉
本周收藏量最高的提示词并不是一句话简写。@twoclipping 的 UI 变形动画(90.7 万播放,1.9 万收藏)和 @verbove 的 MakerMap 宣传片都采用了一套 XML 规范(XML Spec):包含需要向用户询问的输入项(<inputs>)、视觉方向(<direction>)、逐拍对应的状态列表(<structure>)、构建守则(<build>)以及避坑指南(<gotchas>)。@NFT_Chen 的剪辑软件动画则是将同一思路转化为叙事:把虚拟 UI 当作电影片场,其中的每个元素都拥有明确定义的状态。
这些作品背后的核心概念是:单一图形,一镜到底(One shape, never cut)。同一个容器元素在不同状态(按钮、加载器、播放器、滑块、图表、命令面板)之间平滑改变尺寸、圆角和颜色,由一个光标通过真实的点击动作驱动每一次变化,且最后一帧与第一帧完全重合,从而实现无缝循环。
以下是我基于该结构整理的通用模板:
<inputs>Ask me for: my product + URL, 8 to 12 UI states that tell its story, the real data shown ineach state, brand colors + fonts + one accent, a royalty-free track near 120 BPM, formats.</inputs><direction>Product-film UI motion. One container never cuts: every state is the same element changingsize, radius and fill while its content swaps behind a short blur. A cursor drives every change.Warm neutral canvas, one accent. Springs with at most a tiny overshoot.Banned: bouncy easing, glows, gradients on UI chrome, particle bursts, dead time.</direction><structure>120 BPM, 8 bars, something happens on every beat.logo → CTA button → email field (typed) → loader → success check → dashboard card→ chart draws itself → tooltip on hover → ⌘K palette → toast → logo.</structure><build>1. One HTML file, one canvas, window.seek(t). No CSS transitions, no timers, no carried state.2. Closed-form springs. A value with many targets = sum of one spring per change.3. Text inside a morphing container enters after the morph starts, leaves before the next one.4. Tab indicators: leading and trailing edges on different springs so they stretch.5. Beat grid from the track (numpy/librosa). Start on a downbeat. UI sounds on measured peaks.6. Render in headless Chrome at 60 fps, 4 subframes per frame, blended for motion blur.</build><gotchas>Never use will-change on anything the camera scales (blurry text).The last frame must equal the first, cursor position and velocity included.</gotchas><start>Ask for the inputs, then show me the state list on the beat grid before writing code.</start>zero (@twoclipping) · 9月25日
(展示:90.7 万播放的 UI 变形无缝循环动画,并在评论区开源了上述 XML 模板。)
Opus 5.5 在动态设计方面简直太牛逼了,整个视频全是代码,0 After Effects。我将开源这些动态设计的提示词模板,拿去复现吧 ↓
Martijn Verbove (@verbove) · 9月25日
(展示:MakerMap 宣传片,单一图形在整套产品流程中变形流转,使用真实数据,单 HTML 文件实现。)
Opus 5.5 在动态设计方面简直是逆天的。整个视频都是代码,0 After Effects,0 手动动画。我给它展示了一个病毒式传播的动态帖子,然后说:“解释 MakerMap,但要让它疯狂起来”。它返回了 20 秒的视频,一个形状在整个产品中变形:注册 → 你的 PIN → 3,393 名真实创客点亮全球 → 匹配 → 聚会……
SuSu_酥酥👅 (@NFT_Chen) · 9月23日
(展示:将 UI 作为片场——Opus 用代码写了一套卡通视频剪辑软件,并在软件内部完成了剪辑动画。)
😱无敌了!Opus 5.5 自己写了一套卡通剪辑软件,然后钻进去剪完了!不走视频模型,纯程序,code2video!Claude 小人站在时间轴上:日出 → 热咖啡 → 三只猫 → 自己跳舞。伸手把 Sparkle 拉到 70%,咔一声 SNIP!,音轨lyric_track.wav还在下面抖……
第三部分 · 亲手构建渲染引擎
07. 核心引擎:构建 seek(t) 确定性渲染器
这就是前文提到的路线 A——也是 Opus 默认最擅长的方式。整个引擎只需两个文件:网页端负责按需绘制任意时间点的画面,渲染脚本负责推进时间并将画面帧通过管道(Pipe)直接送入 ffmpeg。
1. 画面端:index.html
<style>html,body{margin:0;background:#141413}canvas{display:block}</style><canvas id="c" width="1080" height="1920"></canvas><script>const W = 1080, H = 1920, DUR = 15;const g = document.getElementById('c').getContext('2d');const clamp = (x, a = 0, b = 1) => Math.min(b, Math.max(a, x));// 闭式阻尼弹簧函数 (0 → 1),时间的纯函数(第 08 节将详细拆解)function spring(t, k = 170, d = 26) { if (t <= 0) return 0; const w0 = Math.sqrt(k), z = d / (2 * w0); if (z < 1) { const wd = w0 * Math.sqrt(1 - z * z); return 1 - Math.exp(-z * w0 * t) * (Math.cos(wd * t) + (z * w0 / wd) * Math.sin(wd * t)); } return 1 - Math.exp(-w0 * t) * (1 + w0 * t); // z >= 1 视为临界阻尼处理}// 带种子的伪随机数生成器(严禁使用 Math.random,确保每次运行渲染结果绝对一致)function rng(seed) { return () => { seed |= 0; seed = seed + 0x6D2B79F5 | 0; let t = Math.imul(seed ^ seed >>> 15, 1 | seed); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; };}const SCENES = [ { from: 0, to: 3, draw(t) { // 场景 1:动态大标题 const s = spring(t - 0.1, 220, 22); g.save(); g.translate(W / 2, H / 2); g.scale(0.6 + 0.4 * s, 0.6 + 0.4 * s); g.globalAlpha = clamp(t * 4); g.fillStyle = '#F0EEE6'; g.font = '700 190px "Source Serif 4", serif'; g.textAlign = 'center'; g.fillText('MOTION', 0, 0); g.fillStyle = '#D97757'; g.fillRect(-320 * s, 50, 640 * s, 18); g.restore(); }}, { from: 3, to: 6, draw(t) { // 场景 2:错落弹出的方格矩阵 const r = rng(7); for (let i = 0; i < 48; i++) { const x = (i % 6) * 170 + 115, y = Math.floor(i / 6) * 170 + 360; const s = spring(t - i * 0.03 - r() * 0.1, 260, 20); g.fillStyle = i % 7 ? '#F0EEE6' : '#D97757'; g.fillRect(x - 60 * s, y - 60 * s, 120 * s, 120 * s); } }}, // ... 更多场景:Opus 会在此处继续追加,每个分镜对应一个对象];function draw(t) { g.fillStyle = '#141413'; g.fillRect(0, 0, W, H); for (const s of SCENES) if (t >= s.from && t < s.to) s.draw(t - s.from);}window.seek = (t) => { draw(t); return true; };// 在普通浏览器中打开时提供实时预览;无头渲染模式下自动关闭if (!navigator.webdriver) { const t0 = performance.now(); (function loop() { draw(((performance.now() - t0) / 1000) % DUR); requestAnimationFrame(loop); })();}</script>2. 渲染端:render.mjs
// 运行方式: node render.mjs --fps 60 --dur 15 --sub 4import { chromium } from 'playwright';import { spawn } from 'node:child_process';import { mkdirSync } from 'node:fs';const arg = (k, d) => { const i = process.argv.indexOf('--' + k); return i > 0 ? Number(process.argv[i + 1]) : d; };const FPS = arg('fps', 60), DUR = arg('dur', 15), SUB = arg('sub', 4);mkdirSync('out', { recursive: true });const browser = await chromium.launch();const page = await browser.newPage({ viewport: { width: 1080, height: 1920 }, deviceScaleFactor: 1 });await page.goto('file://' + process.cwd() + '/index.html');await page.evaluate(() => document.fonts.ready); // 确保 Canvas 绘制文本前字体已完全加载// tmix 滤镜将连续的 SUB 个子帧进行平均混合以生成运动模糊;select 保留每组的最后一帧const vf = `tmix=frames=${SUB},select='eq(mod(n\\,${SUB})\\,${SUB - 1})',setpts=N/${FPS}/TB`;const ff = spawn('ffmpeg', [ '-y', '-f', 'image2pipe', '-framerate', String(FPS * SUB), '-i', '-', '-vf', vf, '-r', String(FPS), '-c:v', 'libx264', '-crf', '16', '-pix_fmt', 'yuv420p', 'out/silent.mp4'], { stdio: ['pipe', 'inherit', 'inherit'] });const total = Math.round(DUR * FPS * SUB);for (let i = 0; i < total; i++) { await page.evaluate((t) => window.seek(t), i / (FPS * SUB)); const png = await page.locator('#c').screenshot({ type: 'png' }); if (!ff.stdin.write(png)) await new Promise((r) => ff.stdin.once('drain', r)); if (i % (FPS * SUB) === 0) console.log(`rendered ${i / (FPS * SUB)}s / ${DUR}s`);}ff.stdin.end();await new Promise((r) => ff.on('close', r));await browser.close();更倾向于使用成熟框架?相同提示词下的路线 B
# 方案 1:Remotion (React) —— 最适合系列视频、可复用模板、数据驱动型视频npx create-video@latest launch-film && cd launch-filmnpx skills add remotion-dev/skillsclaude> /remotion-create a 20s 9:16 launch film for [PRODUCT], springs only, one accent colornpx remotion studio # 打开实时时间轴预览npx remotion render Main out/launch.mp4# 方案 2:HyperFrames (HTML + GSAP) —— 最适合习惯以网页思维做设计的人npx hyperframes init my-video && cd my-videonpx hyperframes skills updateclaude> Using /hyperframes, turn ./notes.md into a 45-second pitch video with kinetic captionsnpx hyperframes preview && npx hyperframes render08. 物理弹簧:让运动质感显得“贵”
廉价的动画只会沿着固定的贝塞尔曲线从 A 点死板地滑到 B 点;而显贵的动画具有物理质量(Mass):它会加速、产生极其克制的微弱过冲(Overshoot),然后自然回落稳定。
前文所有的 UI 变形短片都强制要求使用闭式弹簧(Closed-form springs),因为它是时间的纯函数,能够确保 seek(t) 的绝对确定性。
绝大多数人忽略的核心技巧: 当一个属性(例如光标坐标、容器宽度)需要连续改变好几次目标值时,不要重置弹簧。正确的做法是:每次变化都叠加一个新的独立弹簧,每个弹簧从各自触发的时间点开始计算。 这样不仅运动轨迹完全连续平滑,而且你依然可以直接跳到第 812 帧进行渲染,而无需先从第 0 帧模拟推演到第 811 帧。
lib/motion.js 弹簧运动库
// keys: [[time, value], ...] 按时间排序的关键帧数组。返回任意时间点 t 的当前值。export function track(t, keys, k = 170, d = 26) { let v = keys[0][1]; for (let i = 1; i < keys.length; i++) v += (keys[i][1] - keys[i - 1][1]) * spring(t - keys[i][0], k, d); return v;}// 具有拉伸弹性的 Tab 指示器:前缘(Leading edge)比后缘(Trailing edge)刚度更高export function indicator(t, stops) { // stops: [[time, x], ...] const lead = track(t, stops, 320, 30); const trail = track(t, stops, 140, 22); return { left: Math.min(lead, trail), right: Math.max(lead, trail) + 120 };}// 变形容器内部的文本透明度控制:在容器变形开始后才淡入,在下一次变形开始前提前淡出export function swapAlpha(t, tIn, tOut) { return Math.min(clamp((t - tIn - 0.08) / 0.12), clamp((tOut - 0.1 - t) / 0.1));}// 无缝循环辅助函数:将最后一帧锚定回第一帧export const loopT = (t, dur) => ((t % dur) + dur) % dur;不同元素的弹簧刚度(k)与阻尼(d)调校指南:
- 干脆利落的 UI(Snappy UI):按钮、开关、指示器前缘(高刚度)
- 默认通用(Default):卡片、容器、镜头运动(中等刚度与阻尼)
- 厚重质感(Heavy):巨型字体、3D 物体、片尾 Logo 定版(低刚度,稳重无过冲)
- 活泼灵动(Playful):吉祥物、贴纸(较低阻尼,带有肉眼可见的明显回弹过冲)
一键重构指令: 只需对 Opus 说:
"Replace every easing curve with closed-form springs from lib/motion.js. Tiny overshoot on UI, none on type. Any value with more than one target uses track()."(将所有缓动曲线替换为lib/motion.js中的闭式弹簧。UI 允许微弱过冲,文字严禁过冲。任何具有多个目标值的属性一律使用track()。),Opus 就会在单次传递中重构整个文件的动画质感。
09. 声音设计:让画面精准卡点
Rob Hallam 起初以为那些爆款视频的音效是后期剪辑加上去的。其实根本不是。
@oozn的史蒂夫·乔布斯生平动画,是在 Node.js 中直接用代码合成了整条配乐,并将每一个画面切换精准锁定在 120 BPM 的节拍上。- Vox 的《小字(Small print)》短片则是用 Python 合成了音乐,随后对照音乐逐秒打磨画面渲染。声音,正是让“AI 视频”真正蜕变为“电影感短片”的关键所在。
这里有两条路径:如果你提供现成音轨,就先用脚本测算它的节拍;如果你不提供音轨,就在与画面完全相同的时间轴上用代码合成音频。
路径 1:音频节拍测算脚本 beats.py
# 运行方式: python beats.py song.wav > beats.json (动画代码将直接读取此 JSON 文件)import sys, json, numpy as np, librosay, sr = librosa.load(sys.argv[1], sr=None, mono=True)tempo, frames = librosa.beat.beat_track(y=y, sr=sr, units="frames")beats = librosa.frames_to_time(frames, sr=sr).round(3).tolist()onset = librosa.onset.onset_strength(y=y, sr=sr)peaks = librosa.util.peak_pick(onset, pre_max=3, post_max=3, pre_avg=3, post_avg=5, delta=0.5, wait=10)json.dump({ "bpm": float(np.atleast_1d(tempo)[0]), "beats": beats, # 普通状态切换对齐此处 "downbeats": beats[::4], # 重大视觉转折对齐此处(强拍) "hits": librosa.frames_to_time(peaks, sr=sr).round(3).tolist(), # 音效(SFX)对齐此处}, sys.stdout, indent=1)路径 2:程序化音效合成脚本 sfx.mjs
// 运行方式: node sfx.mjs cues.json out/sfx.wav 其中 cues 格式为: [{"t":0.5,"type":"click"}, ...]import { readFileSync, writeFileSync } from 'node:fs';const SR = 48000, cues = JSON.parse(readFileSync(process.argv[2], 'utf8'));const buf = new Float32Array(Math.ceil((Math.max(...cues.map(c => c.t)) + 2) * SR));let s = 42; const noise = () => (s = (s * 1664525 + 1013904223) >>> 0) / 2147483648 - 1;const VOICES = { click: [0.05, t => Math.sin(2 * Math.PI * 1800 * t) * Math.exp(-t * 90) * 0.5], pop: [0.15, t => Math.sin(2 * Math.PI * (600 + 900 * t) * t) * Math.exp(-t * 30) * 0.4], thump: [0.50, t => Math.sin(2 * Math.PI * (90 - 60 * t) * t) * Math.exp(-t * 9) * 0.9], whoosh: [0.35, t => noise() * Math.sin(Math.PI * Math.min(1, t / 0.35)) * 0.25],};for (const c of cues) { const [len, fn] = VOICES[c.type], start = Math.floor(c.t * SR); for (let i = 0; i < len * SR && start + i < buf.length; i++) buf[start + i] += fn(i / SR);}const n = buf.length, b = Buffer.alloc(44 + n * 2); // 编码输出 16-bit 单声道 WAV 文件b.write('RIFF', 0); b.writeUInt32LE(36 + n * 2, 4); b.write('WAVEfmt ', 8);b.writeUInt32LE(16, 16); b.writeUInt16LE(1, 20); b.writeUInt16LE(1, 22);b.writeUInt32LE(SR, 24); b.writeUInt32LE(SR * 2, 28); b.writeUInt16LE(2, 32); b.writeUInt16LE(16, 34);b.write('data', 36); b.writeUInt32LE(n * 2, 40);for (let i = 0; i < n; i++) b.writeInt16LE(Math.round(Math.max(-1, Math.min(1, buf[i])) * 32767), 44 + i * 2);writeFileSync(process.argv[3], b);onur ozcan (@oozn) · 9月25日
(展示:史蒂夫·乔布斯传记短片,证明纯代码合成的音乐完全能撑起一部 2 分钟的短片。)
Opus 5.5 一击就完成了这部史蒂夫·乔布斯生平的动画。2 分钟,一个提示词,完全用代码构建:
→ Remotion + React + SVG,约 8.7k 行代码
→ 关节角色骨骼带有程序化步态循环
→ 23 个自定义过渡效果
→ 配乐在 Node 中直接合成,剪辑点严格对齐 120 BPM
Vox (@Voxyz_ai) · 9月23日
(展示:《小字》,故事、画面帧和音乐全部由 Opus 完成,通过 HyperFrames 渲染。)
天哪,Opus 5.5 在动画方面有点疯狂。我一行代码都没写。它写了故事,画了每一帧,还做了音乐。完全没有图像素材,全是 JS。故事叫《小字》:Claude 每天收到一堆请求。它圈出隐藏在其中的人类情感碎片,比如“一只手。宝宝睡着了”,然后丢进一个罐子。到了晚上,那些词语变成星星,连接成一个星座……
第四部分 · 从单条短片升级为自动化工作室
10. 彻夜自主运行:编写导演级简报(Director's Brief)
Donald 对着电脑语音口述了五分钟,然后去睡觉,一觉醒来就收获了一部播放量高达 210 万的 142 秒 MV。他公开的提示词长达约 9,500 字符;而 @pradeepXkapoor 的机器人短片《Pip》更是使用了长达 19,000 字符的简报。仔细阅读这两份长文,你会发现完全相同的骨架——他们不是在描述一个视频,而是在招募并调度一个完整的摄制组:
- 一句话故事主线(Film in one line):明确核心梗概(Logline)与情绪落点,使后续所有决策都有据可查。
- 参考与输入(References):原视频、歌曲、图像库、过往作品的 GitHub 仓库,明确保留什么、突破什么。
- 工具与密钥(Tools & keys):需要加载的技能包、可用的外部 API(生图、生视频、配音)、预算上限及文档路径,并叮嘱“精打细算使用预算(Spend it economically)”。
- 角色设定集(Character bible):身体比例、从设定图取样的色板、表情库,以及确保角色在画风变换时依然 recognizable 的身份锁(Identity lock)。
- 节拍分镜表(Beat sheet):带时间戳的幕次划分,每 3 到 5 秒提供一个视觉高潮点(Visual payoff),前 2 秒必须抛出强力钩子(Hook)。
- 屏幕文字(Text on screen):规定何时歌词或字幕需要巨大化占满全屏,何时像普通字幕一样安放,构图时需提前为文字留白。
- 工作流关卡(Workflow gates):规划(Plan)→ 骨骼绑定(Rig)→ 静态帧(Stills)→ 动态分镜(Animatic)→ 完整初稿(Full pass)→ 精修(Polish)→ 音频(Audio)→ 最终渲染(Render)。严禁跳过任何关卡。
- 审片循环(Critique loop):渲染静态帧、打分、列出最严重的 3 个问题、修复、重复,直到所有得分达到 8+。
- 最终交付物(Deliverables):最终 MP4、循环接缝检查视频、封面海报帧、缩略图样片、带
README的整洁源码。
Donald 简报中的杀手锏技巧——先生成后描摹(Generate-then-trace):
先调用视频生成模型(如 Seedance 2.5)渲染出带有复杂角色动作和物理规律的基础镜头,然后让 Opus 在其之上用 JavaScript 重新绘制整部视频,使得观众最终看到的完全是代码绘制的图层。视频生成模型提供了手写代码难以实现的自然动作,而 JS 代码层则赋予了全片高度统一、可完全掌控的独特视觉风格。 Pleometric 用自己的 PC-98 图库重新跑了一遍同一套简报,得到了另一部风格迥异却同样惊艳的短片。
donald (@donaldjewkes) · 9月24日
我用一个提示词和 Opus 5.5 制作了这个。我对着电脑说了 5 分钟,Claude 工作了 12 小时,然后我醒来就看到了这个(《Claude Pop》MV,210 万播放)。
Pleometric (@pleometric) · 9月24日
这个视频激励我真正全力推动 Opus 5.5 并测试它的极限。我遵循了 Donald 在这里描述的一般工作流程(结合 PC-98 画廊),结果非常棒。
导演简报(Director's Brief)标准模板
You are the director, animator, sound designer and render engineer for a [DURATION] filmmade in code. Treat this as a multi-session production. Don't rush to a final render.## The film in one line[LOGLINE. What the viewer should feel at the end.]## References and inputs- ./refs/ : [video / frames / image library]. Take the grammar, never the content.- ./audio/track.wav : use it unchanged. Measure beats with beats.py first.- Skills available: [/remotion-best-practices | /hyperframes | /claude-animation].- APIs in .env: [ELEVENLABS_API_KEY, FAL_KEY]. Budget: [$X]. Be economical.## Look[3-5 lines: palette, type, texture, camera language. Banned looks.]## Beat sheet0:00-0:02 hook: [the single most striking image]0:02-0:10 [act 1]... a new visual payoff every 3-5 seconds[END] the last frame sets up the first frame (loop)## Workflow, with gates1. Write docs/style_guide.md and docs/shotlist.md (every shot: frames, camera, text, SFX). Show me the shot list. Then continue without waiting if I don't answer in 10 minutes.2. Build stills for every shot. Contact sheet. Critique.3. Animatic at 960x540 with placeholder audio. Fix pacing before polish.4. Full animation, polish pass, sound pass, final render.5. Split work across subagents per chapter. Write docs/ANIMATION_GUIDE.md first so every subagent codes in the same style.## Critique loop (every shot, at least 3 rounds)Render 3-5 stills, score 1-10 on: hook, readability at 360px wide, motion, composition,depth, sound sync, polish. Log scores + 3 biggest problems in docs/review_log.md. Fix. Repeatuntil all are 8+.## Deliverablesout/final.mp4 · out/loop_check.mp4 · out/poster.png · out/contact.png · README.md多智能体并行模式(Subagent pattern): John Heibel 开源的 PDoom 仓库(1.1K Stars)展示了真实的多智能体协作——Opus 先编写了 ANIMATION_GUIDE.md 用于统一指导并行运行的各个子智能体(Subagents),并在首轮生成后编写了 STORYBOARD.md,将九个章节拆分在 src/ch/ 目录下独立开发。在你的提示词中,请直接点名要求模型生成这两个文件。
11. 视觉自检:让 Opus 审视自己生成的画面帧
Opus 5.5 具备强大的多模态识图能力。这意味着它可以“亲眼看到”自己渲染出来的画面。养成让模型看图自检的习惯,是区分“现象级爆款”与“平庸之作”的核心分水岭。
@mablesjoseph 在分享她的水彩动画短片时非常坦诚:整部片子经历了 163 次模型调用、耗时近 7 个小时,绝非什么一发入魂(One-shot)。Drew 在发布日制作的 170 万播放短片也同样经历了多轮肉眼可见的修整清理。迭代就是标准方法论,而不是失败。
1. 抽帧与自检图生成脚本
# 缩略图样片(Contact sheet):每秒抽取 2 帧,按 6 列x5 行拼接成一张大图ffmpeg -i out/final.mp4 -vf "fps=2,scale=270:-1,tile=6x5" -frames:v 1 out/contact.png# 连续帧条带(Strip):围绕 4.2 秒处的快速动作连续抽取 12 帧(专门抓画面闪烁、跳帧与图层重叠)ffmpeg -ss 4.1 -i out/final.mp4 -vf "scale=320:-1,tile=12x1" -frames:v 1 out/strip.png# 手机端可读性测试(Phone test):将画面缩放到 360px 宽度,检验小屏下的文字清晰度ffmpeg -i out/final.mp4 -vf "fps=1,scale=360:-1,tile=5x3" -frames:v 1 out/phone.png# 循环接缝检查(Loop check):将视频首尾相连播放两次,检查衔接处是否卡顿ffmpeg -stream_loop 1 -i out/final.mp4 -c copy out/loop_check.mp4# 确定性哈希校验(Determinism check):重复渲染两次前 5 秒,对比 MD5 哈希值是否完全一致node render.mjs --dur 5 --fps 60 --sub 1 && md5 out/silent.mp4 # 运行两次并对比结果2. 严苛导演审片提示词(prompts/critique-pass.txt)
Open out/contact.png, out/strip.png and out/phone.png and look at them properly.Be a harsh motion director, not a proud author.Score 1-10: hook in first 2s · readability at phone size · motion quality (springs,no dead frames) · variety (new thing every 2-4s) · composition · brand accuracy · sound sync.List the 3 biggest problems with timestamps. Hunt specifically for: text overlapping duringswaps, anything sliding instead of easing, corner labels and frame borders, centered-on-gradientshots, blurry scaled text, a dead beat with nothing happening, a stutter at the loop seam.Fix them, re-render only the affected seconds, show me the new contact sheet and new scores.DreW (@devteamdrew) · 9月23日
(展示:发布日 170 万播放量的代表作,经过了多轮清理打磨。)
由 @claudeai Opus 5.5 制作。
Mable Joseph (@mablesjoseph) · 9月25日
(展示:对“一句话生成”神话最诚实的反击——耗时近 7 小时、163 次调用的纯代码手绘水彩短片。)
我用 Opus 5.5 制作了一部 45 秒的手绘动画短片。没有使用任何动画软件。每一笔笔触、水彩晕染和音效都是通过代码生成的。
Opus 5.5 能一发即中吗?其实不算绝对。它很棒,但仍然需要一个好的辅助工程(Harness)。
数据如下:
- 6270 万个 Token(96% 为缓存读取)
- 163 次模型调用
- API 列表价约 34 美元
12. 商业化交付:多画幅适配、封装技能包与变现服务
最后三个动作,能将一段优秀的动画短片转化为可无限复用的商业流水线:从同一条时间轴导出所有画幅格式、将整套流水线封装为 Skill(技能包)从而让下一次制作简化为一句话,以及像 achxvi 在同一周所做的那样——将其作为服务直接变现。
1. 一条时间轴,导出全画幅格式
编写场景代码时,请基于相对布局函数(Layout function)而非写死的固定像素坐标,并要求 Opus 并行渲染 9:16、1:1 和 16:9 三种画幅。MakerMap 的规范中就明确提出了这一要求。请针对不同画幅重新编排字体大小与 UI 布局,绝不要把 16:9 的横屏视频粗暴裁剪成竖屏。
2. 将流水线封装为可复用的 Skill(SKILL.md)
---name: motion-reeldescription: Make a product or showreel motion video rendered from code. Use when the user asks for a launch video, showreel, product reel, animated explainer or motion ad.---# Motion reel## Inputs to collect firstProduct + URL, duration, formats (9:16 / 1:1 / 16:9), brand colors + fonts,a reference (frame, video or image folder), music (file or "synthesize").## Pipeline1. Gather assets from the URL with Playwright into ./assets. List them.2. If a reference exists, write docs/style_guide.md from it.3. Measure or synthesize music. beats.py → beats.json.4. Write docs/shotlist.md on the beat grid. Show it and wait for OK.5. Build index.html with window.seek(t) using lib/motion.js springs. Follow CLAUDE.md.6. Contact sheet → critique-pass (see prompts/critique-pass.txt) → fix. 3 rounds minimum.7. node render.mjs → sfx.mjs → mix to -14 LUFS → out/final.mp4, all formats.8. Deliver final.mp4, contact.png, poster.png. Say what you'd improve next.## Hard rules- Real product UI only. Never invent screens.- No Math.random, no timers, no CSS transitions in render mode.- Banned: corner labels, centered title on gradient, everything fading in.完成封装后,整套 12 步课程就浓缩成了一条极简指令:
/motion-reel for [URL], 20s, vertical, reference ./refs/frame.png
你可以将这个技能文件夹直接分享给团队成员,或者像 buildwithhanif 一样将其发布为公开插件。
3. 将其转化为商业收入
achxvi 的商业报价单是一个极佳的参考模板:包含定制音乐、任意风格的专属吉祥物角色、核心产品功能展示、片尾促销信息(CTA)、支持任意语种、提供最多 3 次修改机会。
Tony Dinh 提到的数据已经为这项服务锚定了市场价格:一年前人们愿意为此支付约 1,000 美元。而现在,一套封装好的 Skill 加上自检审片循环,能让你在一个下午之内就完成高质量交付。
Chain (@achxvi) · 9月27日
(展示:45 分钟内完成的 38 秒竖屏产品宣传片,并在评论区直接挂出了付费定制服务链接。)
Opus 5.5 在 45 分钟内完成了这个,这太疯狂了 🤯😳🫣
附录:值得克隆学习的开源仓库(Repos to clone)
- MV 与多智能体协作范例:https://github.com/JohnHeibel/PDoomVideo
- Claude 动画基础脚手架:https://github.com/JohnHeibel/ClaudeAnimationBase
- Node Canvas 手绘动画技能包:https://github.com/buildwithhanif/claude-animation-skill
- HTML/GSAP 视频渲染框架(HyperFrames):https://github.com/heygen-com/hyperframes
- React 视频渲染框架 AI 技能库(Remotion):https://www.remotion.dev/docs/ai/skills
- 长篇历史动画短片源码(奥斯特利茨战役):https://github.com/WinterArc21/Battle-of-Austerlitz-Film
- AI 动态设计提示词库:https://github.com/guanmo-ai/awesome-ai-motion
- Opus 5.5 爆款视频与提示词数据集:https://github.com/athemeroy/awesome-opus-5-5-videos