
深入解读 Claude Design 动画视频 Skill基于 animations-v3 连续合成引擎的时间轴动态设计【免费下载链接】system_prompts_leaksExtracted system prompts from Anthropic - Claude Fable 5.1, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-6-Astra, Codex. Google - Gemini 3.8 Flash, 3.1 Pro, Antigravity. xAI - Grok, Grok Bot, Cursor, Kimi and more! Updated regularly.项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks导读本篇文章以仓库中 Claude Design 的animated-videoSkill 为核心原始指令见 Anthropic/claude-design/skills/animated-video/SKILL.md完整剖析其“用 HTML 页面制作可导出动画视频”的工程方法论。你将掌握为什么一切动画必须构建在animations_v3.jsx连续合成引擎之上、如何用OM_SCENES/OM_PLAYBACK文字量构建可被宿主时间轴编辑器回写的场景表、Cue-First编排纪律与时间拉伸模型、Shot/Captions/ 缓动库的用法以及视频导出的data-om-exportable-video契约与质量自查流程。文中还结合引擎源码 Anthropic/claude-design/starter-components/animations-v3.jsx 与 Anthropic/claude-design/starter-components/tweaks-panel.jsx 做原理级佐证可直接用于在 Claude Design 中制作产品走查、动态信息图、可导出的 16:9 / 9:16 短视频。一、Skill 定位与适用场景animated-video是 Claude DesignClaude Design 的完整系统提示与工具清单见 Anthropic/claude-design/claude-design.md内置的 19 个“用户可调用user-invocable”技能之一其 frontmatter 表明定位为 “Timeline-based motion design”时间轴驱动的动态设计在 2026 年 8 月 19 日的技能对齐中被重写为适配animations_v3.jsx连续合成引擎见 Anthropic/claude-design/skills/README.md。适用对象是“可导出为视频”的动画作品交付物是一个 HTML 页面时间轴驱动的动画 / 动态设计具备平滑转场逐帧设计的序列带播放控制play / pause、scrubber 拖拽条强调视觉叙事贴合 Anthropic 品牌调色板以固定宽高比16:9 或 9:16导出成片需要获知某元素坐标如让光标在元素之间移动时用 HTML ref 抓取位置。二、一切动画都必须构建在 animations_v3 引擎上Skill 开篇给出了一个强制要求任何动画作品——哪怕它托管在某个 design-components 页面上——都必须用animations_v3.jsxstarter 搭建。所谓“头盔脚本 x-import 结构”本身就是 starter 的标准使用场景而不是豁免理由。理由很实在跳过 starter 等于悄悄移除用户的时间轴编辑器——场景裁剪trim、速度调整speed change与视频导出这些能力只存在于基于引擎的页面上。许可的例外只有两类① 在某个更大的非动画设计里放一个次要的动态点缀② 用户明确要求不使用 starter。同时要遵守几条硬约束不要再把animations.jsx或animations-v2.jsx与它同时加载——各版引擎共享 window 全局变量后加载者覆盖先加载者“last wins”已使用旧版 starter 的既有项目保持原状不要迁移已有动画。开始动作copy_starter_component动画项目的第一步是调用copy_starter_component参数为kind: animations_v3.jsx。该引擎在claude-design.md中被描述为“continuous-composition engine”连续合成引擎复制完成后应立即通读文件文件头部有完整的 USAGE 注释块。引擎的核心理念连续合成从源码看动画的“整体是一棵元素树、由一个作者时间时钟渲染”这一模型贯穿始终见 animations-v3.jsxThe animation is ONE element tree rendered as a pure function of one authored-time axis. Nothing mounts or unmounts at section boundaries, so any element can move, morph, or persist across them by ordinary interpolation.也就是说场景边界处不会发生挂载/卸载——任何元素都可以通过普通的插值跨越边界移动、形变或驻留。整段动画在时间上是连续的这正是它读起来像“一部连续视频”而非“一组幻灯片”的原因。引擎对外暴露的核心 API均挂载为 window 全局API作用CompositionStage width height scenes playback bg舞台根组件内部包住唯一的整片组件Piece/useComposition()返回{T, CUES, time, duration, authoredTotal, playing}Shot from to在两个作者时间之间显示子元素作者侧硬切一行搞定Captions items字幕/说明条同一时刻至多一条可见按键 T 驱动Easing缓动库linear、Quad/Cubic/Quart/Expo/Sine/Back、easeOutElastic等interpolate(input, output, ease)多关键帧插值Popmotion 风格animate({from, to, start, end, ease})单段 tween返回fn(T)clamp(v, min, max)数值钳制其中useComposition()是编排的“数据源”T作者时间秒会随用户的裁剪/变速按节拉伸——所有 choreography 都以T为键绝不要用你自己的时钟或墙钟时间CUES由OM_SCENES推导出的{章节名: 作者起始秒}表。CUES 的容错语义源码级细节CUES在引擎中不是一个普通对象而是通过ccCueProxy包裹的 Proxyanimations-v3.jsx编排代码引用了不存在的章节名时不会抛错而是返回NaN同时记录到unknownRef随后CompositionStage会在预览区舞台下方SVG 导出区之外显示一个徽章choreography references unknown section(s): …animations-v3.jsx。徽章只会出现在预览与截图里永远不会进入导出视频。另外重复的章节名绑定到首次出现的那个位置ccDerive中通过hasOwnProperty去重animations-v3.jsx。三、作者契约THE AUTHORING CONTRACT这是 Skill 中“必须精确照做”的部分它决定了宿主时间轴的裁剪与变速手势能否回写到你的源文件场景表声明为 JSON 字符串字面量放在主文档的一个普通内联script中typetext/babel不行兄弟.jsx文件也不行——只有普通的内联脚本字面量可供编辑器回写定位scriptwindow.OM_SCENES [{name:Opening,dur:3},{name:Build,dur:5}];/script注意格式必须是精确的JSON.stringify输出没有多余空格。源码示例进一步展示了每个条目可带desc字段一句大白话描述该节发生什么用户会在时间轴的 section 弹层里读到见 animations-v3.jsx。window.OM_PLAYBACK同样声明并原样传入取值{mode:loop}或{mode:times,count:N}省略时保持循环行为但宿主 “Repeat” 控件对本文档会变为只读见 animations-v3.jsx。把两者原样透传给唯一包裹整片动画的组件CompositionStage scenes{window.OM_SCENES} playback{window.OM_PLAYBACK} Piece / /CompositionStage场景表就是用户控制视图名称、顺序、播放时长引擎从中推导 cue 表——因此字面量是结构的唯一来源single source of structure结构永远不可能漂移。用户编辑如何回写与生效双向通道引擎内部通过SceneSync/PlaybackSync两个隐藏组件实现“写回”闭环animations-v3.jsx组件把原始字符串逐字烙在导出根元素上data-om-timeline-scenes/data-om-timeline-playback——宿主回写就以这个精确值为锚点同时监听宿主派发的data-om-timeline-scenes-update/data-om-timeline-playback-update事件用ssParse/ppParse做严格校验后才更新本地状态不合法的更新会被忽略“坏更新绝不能拆掉一个正在工作的合成”。引擎侧的场景表校验规则ssParse与宿主shared/timeline.ts解析器保持一致见 animations-v3.jsx原始文本必须是字符串、非空、且 ≤ 16KB16 * 1024 字节JSON.parse 后必须是数组条目数 1 ~ 50每条必须含字符串name与数字dur且dur有限、落在(0, 300]秒区间。播放设置校验ppParseanimations-v3.jsx要么{mode:loop}唯一键要么{mode:times,count:N}其中count为 1 ~ 99 的整数二者严格“全有或全无”否则视为空、回退到循环默认值。播放回写PlaybackSync细节引擎会额外把播放字面量逐字烙为根元素的data-om-timeline-playback属性并监听宿主在写回后派发的data-om-timeline-playback-update事件只有通过ppParse的新值才会触发onUpdate。这段逻辑保证“宿主时间轴的 Repeat 控件与作者声明的播放模式永远一致”。可选字段nat引擎的作者时长锚点条目上的可选nat字段是引擎的作者时长锚点宿主时间轴在第一次重计时时把它烙到该节上作者不要手工去设置它animations-v3.jsx。ccDerive计算authStart累积作者时长时优先用nat否则退回用duranimations-v3.jsx。四、Cue-First 编排纪律让片子读起来像一部连续视频Skill 强调一个作品之所以“像一部连续视频”靠的是严格的Cue-First Discipline先写OM_SCENES字面量——它就是全片的提纲。然后从useComposition()取{T, CUES}把所有 choreography 全部键到T与CUES.SectionName作者秒上绝不键到自己的时钟或墙钟时间。每个章节一个辅助组件以求可读但这些组件始终全部渲染在那一棵树里、以 cue 为键——绝不做按章节的条件挂载。一个横跨边界的共享元素就是“起止点跨在一个 cue 两边的普通运动”animate({from: 0, to: 1, start: CUES.Build - 0.4, end: CUES.Build 0.6})(T)这种跨边界滑动会穿过 cue 平滑过渡用户放慢任意一边都只会放慢这段滑动而不会打断它。一开始就定义恰好三个运动辅助函数如MOTION {enter, draw, pop}包装 Easing 曲线除此之外不再使用任何缓动或 transform只有一个字幕元素、同一时刻只有一条可见Captions内置了此行为。硬切现在是内容而非结构当某节被用户裁剪或加速时引擎会把该节同一段作者切片重放到新的播放长度上——键到T上的 choreography 会整体重计时绝不会被截断这就是 time-stretch / 时间拉伸模型。作者侧的硬切因此要表达成“内容”把某镜头的元素包进Shot from{CUES.X} to{CUES.Y}可见性在两个 cue 处翻转子元素保持挂载图片与视频因此能维持就绪状态不因切走而重新加载。源码中Shot的实现证实了这一点animations-v3.jsx它用visibility: visible/hidden控制显隐而非display/ 条件渲染且to缺省为Infinity有头无尾的镜头直达片尾。循环片段的接缝循环播放的片子其最后一个作者帧会紧接着第一个帧出现——所以首尾必须一致收尾让编排落在authoredTotal上开场从 0 开始。Loop seams are the one surviving boundary rule循环接缝是唯一存活的边界规则animations-v3.jsx。五、时间模型与“只从 T 渲染”原则理解引擎关键是理解它的两层时间轴播放时间轴host 驱动time/duration由用户裁剪与变速后的总播放时长决定作者时间轴你编排所用T/authoredTotal由各节的原始作者时长累积而成。引擎把播放时刻映射回作者时刻靠的是ccWarp时间弯曲animations-v3.jsx先定位当前播放秒落在哪一节再取该节内的局部进度按nat / dur比例映射回作者时间。这正对应“引擎重放该节同一段作者切片到新播放长度”的语义。另一个不可违背的实现原则是RENDER FROM T ONLYanimations-v3.jsx导出器逐帧 seek 并同步提交可能在 seek 事件一返回的瞬间就序列化舞台——任何由useEffect或自己的requestAnimationFrame绘制的画面都会滞后于那次提交、导出成陈旧内容。因此一切可见内容都必须从T纯函数式地渲染seek 到的帧即是该时刻的确定性渲染。Seek 事件与宿主播放栏引擎的播放时间推进有三种来源且遵守“任一时刻只有一只时钟在驱动”的原则animations-v3.jsx引擎自己的 rAF 时钟autoplay / 空格键 / 播放栏宿主/导出传输派发的data-om-seek-to-time-frame事件detail: {time, playing?, sync?}宿主播放栏的连续 seek 泵其 seek 带playing: true标记靠SS_EXT_PLAY_MS 400ms看门狗在流中断时自动衰减外部播放锁存见 animations-v3.jsx。凡带sync: true的 seek 会走ReactDOM.flushSync同步提交使“dispatchEvent 返回的瞬间舞台 DOM 就已呈现该帧”这是视频导出器依赖的快路径运行时无flushSync时则自动降级为异步路径animations-v3.jsx。字体内联useInlineFontsInto会把页面里所有font-face规则复制进 SVG foreignObject 内的style并把字体 URL 重写为data:URL完成后给 svg 打上data-om-fonts-inlined标记animations-v3.jsx。这让 svg自描述——单独序列化它视频导出快路径依然能带上正确字体渲染。跨域样式表如 fonts.googleapis.com会回退为直接 fetch CSS 文本再正则抽取字体块。六、给每个动效项目配一个 Motion editor 开关每一个动效项目都要配一个 Tweaks 面板starterkind: tweaks_panel.jsx其TWEAK_DEFAULTS中必须包含const TWEAK_DEFAULTS /*EDITMODE-BEGIN*/{ motionEditor: true, /* 其它你的可调参数 */ }/*EDITMODE-END*/;并用一个TweakToggle labelMotion editor绑定该键。motionEditor键是宿主时间轴编辑器的可见性闸门用户在 Tweaks 面板翻转它即可显示或隐藏编辑器条而动画本体、时间数据和导出能力无论开关与否都不受影响。为让翻转状态能持久化TWEAK_DEFAULTS字面量必须声明在主文档的普通内联script中——对应源码里/*EDITMODE-BEGIN*/…/*EDITMODE-END*/注释块的约定见 tweaks-panel.jsx。从 tweaks-panel.jsx 的实现可以补全细节面板是右下角浮动的可拖拽外壳通过useTweaks(defaults)统一管理状态任何一次setTweak都会向宿主postMessage({type:__edit_mode_set_keys, edits})宿主据此把EDITMODE块中的改动回写到磁盘上的源文件tweaks-panel.jsx#L171-L188面板监听__activate_edit_mode/__deactivate_edit_mode消息开关自身同时广播__edit_mode_available告知宿主工具可用tweaks-panel.jsx#L229-L238除TweakToggle外面板还内置了TweakSlider、TweakRadio、TweakSelect、TweakText、TweakNumber、TweakColor、TweakButton等一整套控件供把颜色、字号、间距等参数暴露给用户作者可以在面板内构建自定义控件“Tweak* 控件是下限不是上限”tweaks-panel.jsx#L55-L56。截图黑屏是捕获伪影舞台渲染在svgforeignObject内部如果对它的截图返回全黑那属于捕获伪影capture artifact——应相信实时预览而不是据此认定页面坏了。这一点在 Skill 中单独点名提醒是因为导出与截图走的是 DOM 序列化/合成两条不同路径。七、验收流程做成前先“看”一遍“动画是复杂的代码”——每个视觉元素、每个章节都要做成可复用的 JSX 组件并投入迭代调时间轴。Skill 要求的收尾检查是在宣布完成前必须观看成片。只凭精心挑选时间戳的静态截图恰好会掩盖让片子显得割裂的边界 bug跳动、时间错位的运动。正确的姿势是用一次multi_screenshot调用生成一组连续剧照filmstrip——每次multi_screenshot至多 12 步长片请把步数花在边界上每一步的 JS 中先 seek再截图。seek 方式向导出根元素派发自定义事件document.querySelector([data-om-exportable-video-with-duration-secs]) .dispatchEvent(new CustomEvent(data-om-seek-to-time-frame, { detail: { time: T, sync: true } }));其中T取覆盖每一个场景边界两侧的值boundary ± 0.15s边界即OM_SCENES各dur的运行求和外加一两个场景中间锚点相邻两帧画面若无法视觉匹配就是需要修复的间断点。关于工具约束claude-design.md明确multi_screenshot每次调用最多 12 步、优于多次单步截图调用每步可先跑 JS 再捕获偏好“一步一状态、一次调用看多状态”见 Anthropic/claude-design/claude-design.md。可评论性辅助data-screen-label为了便于按时间点评论动画根的data-screen-label属性应每秒更新为当前时间戳——这样你评论“3.2 秒处……”时读取评论的另一端能拿到精确的绝对时间而不是相对描述。八、动画叙事与视觉节奏要点Skill 附带的动画创作建议同样是实战要点叙事优先动手做任何东西前先确定故事弧、关键张力、角色等与你想要传达的信息对齐并拿给用户确认遵循经典动画原理anticipation预备、easing缓动、follow-through跟随、exaggeration夸张等迪士尼动画师原则场景构成建立镜头establishing shot先交代环境必要时用标题或字幕但尽量 show-dont-tell随后对动作主体做重的推近可用硬切、Ken Burns 式缩放或鼠标跟随。大多数场景要存在于“写实语境”里有背景或存在于电脑/手机的 UI 中元素通常不应悬浮在虚空中短片中的“场景”多为单一镜头、或同一设定下的镜头序列场景也可以是“滑片”slide——屏幕上的文本或图形被生动地强调/高亮以吸引注意力。决定镜头可以是从远景慢慢推近到焦点区域可以是两人或两组图形张力下的快速来回切换也可以是跟随某物光标、曲线游走除非刻意留白held beat画面里始终要有东西在动——镜头、元素或转场在缓慢摇移、缩放、漂移或构建。完全静止的一帧会被当成 bug图片尤其要常做缓慢推拉/平移要有“动作”要有文字或图形浮现/构建或快速连续剪切展示文字或图片后要留出阅读停顿——秒级时长之后才能展示下一个东西若表现光标/指针运动如产品走查或原型应对它推近并用阻尼视口动画跟随类似 Screen Studio 的效果且必须用 HTML ref 定位屏幕元素保证光标指着正确的东西。九、导出为视频宿主编辑器下的默认路径与手写契约要让内容可被导出为视频流程为Share → Export → Video分两种情况情形 A基于 animations starter默认情况若构建在animations_v3.jsx旧项目中的animations_v2.jsx之上舞台组件已经完整履行导出契约它自己拥有可导出属性、seek 监听器、svgforeignObject包装与字体内联animations_v2另提供VideoSprite辅助组件来循环播放video片段。因此绝不要自己往任何元素上添加data-om-exportable-video-with-duration-secs。把它加在舞台上层的某个包装元素上会产生两个嵌套的可导出根导出器与时间轴传输会绑定到错误的外层根——播放控制与导出会静默失效。情形 B未用 starter 的页面自行实现契约只有在完全没有 starter 的页面里才需要手动实现且必须严格遵守四点把data-om-exportable-video-with-duration-secsN放在唯一想导出的根元素上N ≤ 300更长会被钳制整个文档只能有一个元素携带此属性禁止嵌套。该元素必须监听自定义事件data-om-seek-to-time-framedetail: {time, frame}收到后暂停播放并同步渲染到该精确时间戳使每个可见子元素都落在那个时刻。想要贡献音轨的嵌套video元素必须携带data-om-exportable-video-play-start、data-om-exportable-video-play-end源片内的秒数可选data-om-exportable-video-play-speed它们会在[start,end]区间按该速度循环其音频混入导出。视频的画面帧需要你自己与时间轴同步在 seek 事件/你的时钟里设置video.currentTime。最佳实践让根元素是一个svgforeignObject包装并把font-face规则一次性内联进去——导出器随后逐帧直接序列化 svg快速、像素级精确。普通 div 也可以但更慢每帧都要做整页快照。带此契约的页面在预览下方还会获得一条实时时间轴——宿主通过派发同一条 seek 事件来拖拽与播放因此每个 seek 都要当作“暂停并保持”在 seek 停止到达之前不要恢复你自己的时钟。引擎源码如何履行契约Stage组件的实现animations-v3.jsx展示了契约的内建形态svg上直接烙着data-om-exportable-video-with-duration-secs{duration}内部是foreignObject div TimelineContext.Provider同时Stage以fps60、默认 1280×720、背景#f6f4ef、支持playback来自OM_PLAYBACK的解析值覆盖 legacy loop 语义。导出的播放时长就是引擎推导出的duration derived.total各场景dur的运行总和。换句话说源码即契约的参考实现。十、把它们组合起来一个最小工作流综合上文在 Claude Design 里做一个可导出的动画短片端到端的最小流程是调用copy_starter_componentkind: animations_v3.jsx随后通读复制下来的引擎文件。先在主文档内联script里写window.OM_SCENES场景表字面量每条含name/dur建议desc这是全片提纲同步声明window.OM_PLAYBACK。搭CompositionStage包住唯一Piece/把 scenes / playback 原样透传。用useComposition()取{T, CUES}按 Cue-First 纪律写章节组件全部常驻渲染、键到 cues开场定义三个缓动辅助单Captions。硬切用Shot from{CUES.X} to{CUES.Y}跨边界运动用起止跨 cue 的animate(...)循环片首尾帧对齐。加 tweaks 面板TWEAK_DEFAULTS里含motionEditor: true与对应TweakToggle让用户能开关宿主时间轴编辑器。需要跟随光标/角色时用 ref 抓取目标元素位置再驱动阻尼视口。收尾用一次multi_screenshotseek 到边界 ±0.15s 与场景中间帧做胶片自查相邻帧对不上就修再把data-screen-label每秒刷到当前时间戳便于按点评论。让用户通过Share → Export → Video导出默认基于 starter路径下不要再手工添加任何data-om-exportable-video-with-duration-secs属性。参考资料与源码入口Skill 原始指令Anthropic/claude-design/skills/animated-video/SKILL.md引擎实现与 API 索引、作者契约说明Anthropic/claude-design/starter-components/animations-v3.jsxTweaks 面板与motionEditor持久化机制Anthropic/claude-design/starter-components/tweaks-panel.jsxClaude Design 整体系统提示与copy_starter_component/multi_screenshot工具定义Anthropic/claude-design/claude-design.md全部 19 个用户可调用 Skill 清单与版本变更记录Anthropic/claude-design/skills/README.md【免费下载链接】system_prompts_leaksExtracted system prompts from Anthropic - Claude Fable 5.1, Opus 5, Claude Design, Claude Code. OpenAI - ChatGPT GPT-6-Astra, Codex. Google - Gemini 3.8 Flash, 3.1 Pro, Antigravity. xAI - Grok, Grok Bot, Cursor, Kimi and more! Updated regularly.项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考