Communitygithub.com

reel-motion-graphics

将脚本或概念转化为符合品牌风格的9:16竖屏解说短片(奢华科技风格,暖沙色接近黑色背景,玻璃拟态,CSS 3D,Bodoni + Instrument Sans字体),基于HyperFrames构建,动画置于折页上方,主持人头像置于下方。

reel-motion-graphics 是什么?

该技能专注于自动生成品牌化竖屏解说短片(Reel),适用于Claude Code、Cursor等AI编程助手。它基于HyperFrames框架,严格遵循一套完整的视觉规范,包括暖沙色接近黑色的背景、玻璃拟态面板、金色光泽、Bodoni和Instrument Sans字体,以及4px网格系统。用户只需提供脚本、概念或论文摘要,技能便会自动规划分镜、生成故事板,并构建包含标题、步骤图解和结语部分的完整项目。它支持使用用户提供的主持人视频或静态图片,并最终输出一个渲染好的MP4视频和一个可交互的HTML播放器。该技能特别适用于需要快速制作保持一致品牌调性的科技、金融或学术内容解说短片的场景,其核心优势在于从脚本到成片的端到端自动化,以及严格的设计一致性保障。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jamesisbuilding/App-Building-Skills/tree/main/skills/reel-motion-graphics

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

预览

来自技能 README

文档

Reel 动态图形设计

此技能用于制作风格统一的Reel短片,最初为“30秒升级改造”视频创建。template/ 目录包含该短片的完整HyperFrames项目,新副本在修改前即可正确渲染。你的任务是在保持以下所有规则的前提下,用新脚本内容替换原有内容。

在编写合成HTML之前,请加载 /hyperframes-core 以了解其组合契约。仅当你需要的动画模式不在 references/primitives.md 中时,才加载 /hyperframes-animation。

1. 阅读脚本并规划节拍

收集或推断以下信息,只询问那些会改变影片内容的问题:

  • 脚本或概念。 必需。
  • 主持人视频(MP4)或静态图片。如果没有,则保留模板中的占位静态图片。
  • 来源备注,用于标题眉标,例如 ICLR 2023 · Author et al.。
  • 目标时长。 默认30秒;20–60秒均可。

将脚本分解为:一个标题卡(约4秒),2–5个步骤(每个4.5–6秒),以及一个可选的结果/结尾(约5.5秒)。为每个步骤编写:

  • 一个标题:用普通文字加上1–2个单词的斜体强调(例如“复制MLP 八次”),最多约22个字符,以便在656px宽度、60px字号下适配;
  • 一个字幕:第一行是一个句子,最多约34个字符(Bodoni斜体40px),第二行是辅助说明句子,最多约40个字符;
  • 图解变化:来自原始元素词库(references/primitives.md → “编写新的图解”)。

如果字幕与旁白对应,则语速约为每秒2.5个口语词。将规划写入项目中的 STORYBOARD.md(节拍、时间范围、标题、字幕、视觉变化),展示给用户,并在用户批准后开始构建。对于用户已批准的很短的脚本,可以直接进入构建阶段。

2. 搭建脚手架

此技能位于Reel Creator项目(.claude/skills/reel-motion-graphics/)中。从项目根目录运行命令,并将每个新Reel放入 reels/<slug>/ 目录。下面的脚本路径(如 scripts/solve-fold.py)是相对于此技能文件夹的。

.claude/skills/reel-motion-graphics/scripts/new-reel.sh reels/<slug> [presenter.jpg|.mp4]

若使用主持人视频,将 index.html 中的 <img id="presenter"> 替换为: <video id="presenter" class="clip" src="assets/presenter.mp4" data-start="0" data-duration="<D>" data-has-audio="true" playsinline></video> #presenter 的CSS(cover填充、20%锚点、位于 --fold 下方)保持不变。

3. 构建:先编辑数据,再编写图解

文件需要修改的内容
index.html调整根节点和宿主节点的 data-start/data-duration 以匹配规划。宿主包括:bg(全局)、title(0–4秒)、headings和diagram(4秒至结束)、result(其自身窗口)、captions(全局)、presenter(全局)。
compositions/title.html眉标来源、两行展示文字、两行论点文字,以及当核心理念不是“1 → 多个”时的微型图解。
compositions/headings.html仅修改 STEPS 数组(宿主局部秒数)。进度条和“第N步,共M步”由它派生。
compositions/captions.html仅修改 CAPS 数组(全局秒数)。每条字幕在其对应步骤开始后约0.35秒进入,并在该步骤结束时离开。
compositions/diagram.html使用原始元素词库为新主题重写整个世界。保留镜头/世界/漂移结构、token-clock模式和背景衰退。
compositions/result.html统计数据标签、数值、计数器和元数据行,如果脚本中没有数字则删除该宿主。
compositions/bg.html通常保持不变。调整其yoyo重复次数,使其在根节点时长结束时完成。

当词库中没有合适的图形时:请求HyperFrames链接

词库位于 references/primitives.md。当一个节拍需要的视觉效果没有原始元素覆盖(如图表类型、地图、时间线、比较或任何未列出的内容)时,不要从头即兴创作。暂停并请求用户提供一个链接:

“节拍3(‘自2021年以来收入增长三倍’)需要一个增长图表,而词库中没有。你能发送一个你喜欢的图形的HyperFrames目录链接吗?我会将其重新样式化为我们的品牌风格。”

为了帮助他们选择,你可以列出2–4个候选方案(通过 npx --yes [email protected] catalog "<关键词>"),但让用户最终决定。在等待期间继续构建其他节拍,并在空位处留下一个带标签的占位符。

当链接到达时:

  1. 安装它。 注册表项名称是目录链接的最后一段路径。在项目中运行 npx --yes [email protected] add <name> --no-clipboard --json。对于非注册表的链接,请阅读页面或源代码并重新构建。
  2. 按内部规则重新样式化:
    • 将颜色替换为品牌令牌,将面板替换为 .glass;
    • 使用Bodoni和Instrument Sans字体及其opsz-18文件;
    • 将所有间距值设定为4px网格的倍数;
    • 使其适应内容列和区域;
    • 添加光泽、高光和漂移效果;
    • 移除任何不符合品牌风格的内容,例如扁平亮色填充、其他字体或投影样式。
  3. 接入它 作为图形轨道上的一个子合成宿主,或者当它需要与连续世界共享时,将其动画融入 diagram.html。然后像往常一样检查、截图和修复。
  4. 将其添加到词库。 在 references/primitives.md 的“从HyperFrames重新样式化”部分下添加一个条目:包括名称、来源链接、展示内容及其关键参数。将重新样式化后的文件复制到 template/compositions/library/ 中,以便下一个Reel无需再次请求即可重复使用。

4. 内部规则(每条Reel必须遵守,无一例外)

  1. 等距折页。 折页位于最低动画内容(字幕底部,约y=900)与主持人头顶之间的中间位置。使用 scripts/solve-fold.py <主持人静态图或一帧画面> 900 求解,并将 --fold 设置为 brand.css 中的一个值(4的倍数)。使用 scripts/measure-fold.py <截图> <fold值> 验证。对于视频,检查主持人头部位置最高的一帧。
  2. 4px网格。 所有内边距、间距、偏移、尺寸和行高均为4的倍数。容器应均匀填充并适应内容尺寸;切勿为卡片设定固定高度。运行 scripts/audit-grid.sh <项目>;唯一允许的例外是极细边框、发光半径和补间运动偏移。
  3. 稳定的衬线字体。 仅使用 fonts/ 目录中的 *-opsz18.woff2 Bodoni字体文件。可变字体的自动光学尺寸会选择极细的显示切割,这些切割在H.264编码和手机缩放后会消失。切勿切换回可变文件或Google的6..96范围。
  4. 区域。 应用栏0–175(保持空白),动画区域192–780,字幕条带812–904,主持人位于 --fold 下方,内容列 x 坐标为172–828(避开右侧轨道)。字幕仅位于一条轨道上。
  5. 一个连续的图解世界。 跨步骤持续存在的元素应位于 diagram.html 中并移动。它们绝不应在新场景文件中重新进入。
  6. 确定性。 仅使用在 window.__timelines["<id>"] 上注册的暂停GSAP时间线。使用种子化的 rng() 或 hh() 代替 Math.random,不使用 requestAnimationFrame、时钟或网络。动画计数器和粒子是代理补间值的纯函数。
  7. lint安全的编写方式。
    • 使用 document.querySelector('[data-composition-id="<id>"]:not([data-composition-src])') 定位子合成的自身根节点,切勿使用 #root(一旦组装,多个根节点共享该ID)。
    • 元素ID需添加合成前缀(dg-、hd-、rs-、ti-)。
    • 每个元素-属性对使用一个 fromTo,然后使用 to。
    • 切勿对 letterSpacing、width、height、top 或 left 进行补间;请使用变换和透明度。
    • 错开单独标签,使其在静止状态下不重叠。
  8. 外观。 接近黑色的温暖背景,带有漂移光线和颗粒感;每个面板使用 .glass;浅色点缀使用金色光泽;每个保持状态上都有微小的相机漂移;每个完成状态至少保持1秒。

5. 验证,然后交付

在项目目录中运行以下命令:

npx --yes [email protected] check
npx --yes [email protected] snapshot --at <每个节拍的中点>
  • check 必须通过且0错误。检查任何警告。
  • 查看截图联系表。裁剪并放大任何密集的帧:检查重叠、文字被截断、令牌未到达目标位置以及内边距不均匀。
  • 运行 measure-fold.py 和 audit-grid.sh,并修复它们标记的任何问题。
  • 使用 npx --yes [email protected] render 渲染;结果输出到 renders/ 目录。创建一个用于手机观看的30MB以下共享副本: ffmpeg -i renders/<file>.mp4 -c:v libx264 -crf 23 -preset slow -pix_fmt yuv420p -movflags +faststart renders/<slug>-share.mp4
  • 实时播放器:从项目根目录运行 node viewer/build.mjs。它会重新构建每个Reel的实时播放器(包括 reel/ 和每个 reels/<slug>/),并写入轮播图 viewer/index.html,同时在 viewer/reels/ 中为每个Reel生成一个副本。将 viewer/index.html 发布到Reel库制品 https://claude.ai/artifact/Joet84qdr6Kb47vYZzc8YR,并在 files 中传递所有 viewer/reels/*.html 文件。用户更喜欢实时HTML播放器而非嵌入式视频。对于单个独立的Reel,在其文件夹中运行 node build-preview.mjs 会生成 dist/preview.html。
  • 报告运行时间、检查内容(帧、折页间隙、审核结果)以及任何尚未验证的内容。

参考

  • references/primitives.md:所有视觉构建块及其实现文件。
  • template/:完整的“升级改造”Reel。它是质量标准;将新作品与之对比。

Individual skills in this repo

This repo contains 6 individual skills — each has its own dedicated page.

app-icon-design

Create, revise, and audit app icons using Apple's Human Interface Guidelines, with a clear visual identity and production-ready deliverables.

app-keyword-research

Validate an app idea against the App Store before building it. Turns the idea into search phrases, measures demand (App Store autocomplete) and competition (current top-10 apps) for each, ranks keywords by opportunity, and maps which apps own the market. Use when the user wants keyword research, ASO, "is there demand for…", "who are the competitors for…", "what should we call it / which keywords", or to validate or compare app ideas.

app-offer

Designs one opinionated "Grand Slam Offer" for any app idea, new or already shipped, by running Alex Hormozi's $100M Offers method adapted to app stores. It covers the market and niche, the commodity check, a value-equation audit, the problem inventory, delivery vehicles, the trimmed value stack, pricing and tiers, scarcity, urgency, bonuses, the guarantee, naming, the paywall per placement, the onboarding fast win, a test plan and a ship plan. It works within App Store and Google Play rules. For a shipped app it reads the code and notes first and produces a before/after. Use it when the user says "/app-offer", "run app-offer on <idea>", "make a grand slam offer for my app", "Hormozi my app", "price my app" or "design my paywall offer", or asks how to package, price, name, guarantee or paywall an app. It writes offer/grand-slam-offer.md (or ./<app-slug>-grand-slam-offer.md for a new idea).

brand-reference-pack

Build or refresh a shortform brand reference pack for any app from its real surfaces — website, App Store listing and reviews, socials, the live app (driven end to end on the simulator) and its code tokens — plus a status check of the upstream foundations (ICP, voice of customer, brand voice). Produces the context that content formats and design decisions are made from, as markdown, tokens.json and a PDF. Use for "build a brand pack for <app>", "refresh the brand pack", "capture the site/app/socials for shortform", "/brand-reference-pack".

deep-work

Timekeeper and scribe for the user's own timeboxed build session, default 90 min, also 1h / 1.5h / 2h (Orient, Build, Verify, Harden, Close, scaled to the block). Use when the user says "start a session", "deep work", "90 min block", "work block", or invokes /deep-work. Subcommands: status, park <note>, close, abort.

new-app-info

Builds the information pack Apple asks for when App Review replies "We need additional information to better understand the app". It covers all six required items: (1) a screen recording on a physical device, as a shot list the user records; (2) the app's purpose and target audience; (3) setup and main features, with any login credentials or sample files; (4) the external services the app uses; (5) regional differences; (6) regulated industry or protected third-party material. It also runs Apple's "Prevent common issues" checks. Every answer comes from the app's own code (accounts, user-generated content, in-app purchases, SDKs, locales, screen-capture blocking, data deletion). It reads the connected iPhone's iOS version and checks it is the latest. It ends by telling the user to paste the reply into App Review Information → Notes. Use it when the user pastes that App Review message, says "/new-app-info", "we got rejected, they want more info", "answer App Review", or "make the App Store review pack". It w...

相关技能