【学习笔记】HyperFrames 30 天拆解(四)Extend and ship:模板、目录与云渲染的交付工程

25 min

系列导航(一)总览(二)Start and create(三)Direct and refine(四)Extend and ship(本篇)(五)创作路径(六)Prompt Guide(七)Catalog 调研日期:2026-08-25 本篇对象:Days 20-30 + 官方 Cloud rendering / Deploy overview / Deploy guide / Variables / Color grading / Media effects / Overlays / Contributing 全文 说明:官方页面的事实、命令、表格、边界全录于此,目标是读完本篇不再需要翻网站

一、第三阶段的本质

Days 20-30 十一天全在讲复用与交付:设计方向复用(Day 20)、渲染算力复用(Day 21、27)、运动积木复用(Day 22、28、29)、composition 复用(Day 23)、视觉语言复用(Day 24、26)、知识复用(Day 25)。官方对本阶段的定义:从一个 composition 走向可重复的流水线——可复用积木、变量、调色,以及在你笔记本之外的地方渲染

二、Day 20:Claude Design——设计方向直接进项目

(源:Bring a design into a projectPrompt Guide

课程原话:把设计方向带进 HyperFrames 项目而不用手工重画。机制(来自 Prompt Guide 的设计工具协作章节 + Design tools):

Claude Design / Open Design 交接四步:① 给设计工具 HyperFrames 指令文件与你的品牌材料;② 要 working project,不要 loose mockups;③ 存盘后用编码代理打开那个文件夹;④ 让代理检查 timing、motion、media、captions、rendering。

交接合格标准:方向清晰;真资产或诚实标注的占位;可能变化的部分有可编辑源;本地媒体与字体;项目能打开。自查:npx hyperframes check + npx hyperframes preview,然后到 Studio 看它动——静帧看不出时序。没有设计工具能告诉你动起来对不对,静态观感定稿后,运动、媒体与渲染交还编码代理。

三、Day 21:云渲染(HeyGen 托管)

(源:Cloud rendering

Cloud rendering 全部要点——渲染不掉本地机器、免自建基础设施、免本地 Chrome/FFmpeg:

鉴权npx hyperframes auth login 走 OAuth(浏览器授权、回环端口捕获 token);CI/无头环境用 --api-key(隐藏输入或 stdin)。凭据存 ~/.hyperframes/,与 TTS、媒体目录共用。

流程:CLI 打包项目 zip → 上传托管端点 → 云端容器渲染 → 下载 MP4 到本地。

渲染参数:

参数取值
--fps1 到 240
--qualitydraft(最快)/ standard / high(推荐交付)
--formatmp4 / webm / mov(可带 alpha 通道,透明视频)
--resolution1080p / 4k(4k 按 1.5 倍计费档)
--aspectauto(沿用组合自带画幅)

变量支持:渲染命令可直接带 --variables,模板已就位、改值即出片(见 Day 23)。

三个运维级设计

  1. 上传一次、多次重渲:首次上传返回 asset_id,之后换变量、换参数重渲都复用同一上传,不再重复传项目;
  2. 异步与回调--no-wait 立即返回任务句柄,--callback-url 挂 webhook——渲染流水线可以进你的 CI;幂等键让重复提交不重复渲染计费;
  3. 云端资产管理cloud list / get / delete 管理托管端的项目与产物。

边界:单项目上传上限 200MB;逼近或超限时用 cloud render --dry-run --json 排查 .hyperframesignore(哪些资产被卷进包)——永远不要仅仅因为某个资产大就忽略它

四、Day 22:组件目录(消费侧)

(源:Catalog;接线与检索细节源自本机 /hyperframes-registry/hyperframes-cli 技能,权威版本见 skills 目录

Catalog 是官方注册表,llms.txt 全目录清单收录 370 余个条目(block 150 余、component 210 余)。双层结构决定两套用法:

Block(块)Component(组件)
本质独立子组合(自带尺寸、时长、时间线)效果片段(无自有尺寸)
安装到compositions/<name>.htmlcompositions/components/<name>.html
接线声明式挂载手工融合
hyperframes add data-chart               # 按名装一个块
hyperframes add shimmer-sweep            # 装一个组件
hyperframes add captions                 # 按标签装全部字幕块
npx hyperframes catalog --query "reveal a headline one line at a time"   # 按意图检索

Block 接线五属性data-composition-id 必须与块内部 ID 完全一致):

<div
  data-composition-id="data-chart"
  data-composition-src="compositions/data-chart.html"
  data-start="2"
  data-duration="15"
  data-track-index="1"
  data-width="1920"
  data-height="1080"
></div>

Component 三段融合:读安装产物,把 HTML 元素拷进宿主组合、<style> 并进样式块、<script> 并进脚本区(组件暴露 GSAP timeline 钩子时再在时间线里调用)。安装后 CLI 打印可粘贴的起始片段,时间属性自己补。

检索四规则:① 描述效果而非机制(查询写「想要什么动作」);② 必须英文——索引是英文的,中文查询返回 No searchable words in query,这是查询语言问题不是缺组件,别上报 gap;③ 两档排名——默认词汇匹配(words,纯本地零外发)、--on-device 语义排名(首次约 33MB 本地模型,同样零外发),--json 输出标明哪档答的话;④ 两个偏斜计数——dropped(向量库有、本注册表装不了)与 unindexed(注册表有、索引看不见),前者清 ~/.hyperframes/catalog/ 缓存,后者重跑 --on-device 自动重取索引。离线边界:manifest 有 24h TTL,断网可搜(用最后一份清单)但 add 安装永远要联网。

缺口反馈hyperframes feedback --search-miss "<查询>" --wanted "<想要的效果>" --tier <words|on-device>——官方明说这是目录唯一的需求数据源,描述效果、不写想象中的组件名、不带评分不进考核。

五、Day 23:变量与模板

(源:Reuse a design with variables

Variables 全部要点。判断标准:设计应跨版本保持稳定时用变量;结构本身要变时做普通源码编辑

5.1 声明(组合根元素上)

<html data-composition-variables='[
  {"id":"title","type":"string","label":"Title","default":"Pro"},
  {"id":"accent","type":"color","label":"Accent color","default":"#6c5ce7"},
  {"id":"logo","type":"string","label":"Logo","default":"assets/logo.svg"}
]'></html>

七种类型:string(文本或媒体路径)、number(数量/位置/尺寸/强度)、color、boolean(开关)、enum(受批列表选一)、font(字体族选择)、image(图片路径或图片值)。类型让 Studio 显示正确控件、让渲染捕获非法值。必填四件套 id / type / label / default

5.2 无脚本绑定(常态)

<h1 data-var-text="title">Pro</h1>
<img data-var-src="logo" src="assets/logo.svg" alt="" />
<style>.card-title { color: var(--accent); }</style>

data-var-text 替换元素文本;data-var-src 替换图片/视频/音频/源的 URL(运行时重读 DOM 装载新源——换片头视频不用改结构);标量变量自动成为 CSS 自定义属性var(--accent) 跟随覆盖)。需要条件、循环或派生值时才用脚本:window.__hyperframes.getVariables()

5.3 嵌套组合的每实例传值

父级可多次复用同一组合,data-variable-values 各给各的(注意第二个实例的 data-start="card-pro"相对另一实例的相对时间):

<div data-composition-id="card-pro" data-composition-src="compositions/card.html"
     data-start="0" data-duration="3" data-track-index="1"
     data-variable-values='{"title":"Pro","accent":"#ff4d4f"}'></div>
<div data-composition-id="card-enterprise" data-composition-src="compositions/card.html"
     data-start="card-pro" data-duration="3" data-track-index="1"
     data-variable-values='{"title":"Enterprise","accent":"#22c55e"}'></div>

5.4 从数据渲出版本与批量

npx hyperframes render \
  --variables '{"title":"Enterprise","accent":"#22c55e"}' \
  --strict-variables --output enterprise.mp4

--variables-file 用 JSON 文件;--batch 让同一组合按数据行各渲一次。rows.jsonJSON 数组、每个元素一组变量值,{name} 占位符命名输出:

[{"name":"acme","title":"Acme Pro"},
 {"name":"northstar","title":"Northstar Pro"}]
npx hyperframes render --batch rows.json --strict-variables \
  --output "renders/{name}.mp4"

默认单行并发;真实渲染稳定、机器内存足够后再调 --batch-concurrency。优先级链:组合默认值 → 宿主 data-variable-values → CLI 覆盖(后者永远赢)。

5.5 不能变量化(官方清单)

组合视口尺寸;根组合的总渲染时长;帧率;输出格式/编码/画质(这些在组合逻辑运行前从源码或渲染设置读取);父/兄弟组合(除非显式向其传值)。

5.6 校验

npx hyperframes lint 抓畸形声明、缺字段、默认值类型错、非法 enum 选项;--strict-variables 把未声明或类型错误的渲染值变成错误。

六、Day 24:调色(Color grading)

(源:Color grade images and footage

调色指南全部要点。调色改变图片/视频看起来如何,磁盘文件永不变;一次作用于一个媒体元素,文字、字幕、SVG 与普通 HTML 在自己的层上不受影响。

顺序纪律:先校正,后风格。曝光、白平衡、对比、饱和度先做到可信;然后塑形影调范围或单一颜色;然后预设或 LUT;grain、vignette、胶片效果最后。没有任何预设能救回曝掉的高光、死黑的阴影或选错的镜头。

Studio 操作:选中图片或视频(画布、Layers 或时间线)→ Inspector 的 Grade13 个预设从 Neutral、Clean Studio 到 Night Lift,Studio 把每个预设渲成你这一帧的缩略图(不是别人的样图);Strength 在无与全之间拨。按住面板头的 compare 键闪回原图。动素材先擦几处再定——讨好一帧的调色可能毁掉下一帧。

九组控件:预设与强度;曝光/对比/高光/阴影/白/黑(整体与分影调);暖度/色温/自然饱和/饱和(去色偏或加色);色轮(影调分离调色:阴影/中间调/高光各自 tint);RGB 曲线(重画亮度坡,整图或 R/G/B 单通道);色相曲线(挑一个色相只动它:偏移、加饱和、提亮);HSL 选区(键控一段色相/饱和/亮度只校正那些像素,最多四个、按序);grain 与 vignette;自定义 LUT。

读示波器,别信屏幕(屏幕可能过亮):

示波器读什么
Histogram全帧暗/中/亮分布;堆在两端 = 细节已丢
Waveform亮度从左到右的分布——看见哪部分曝掉了
RGB parade波形按 RGB 拆开;某通道骑高 = 色偏点名
Vectorscope色相圆:方向是哪种颜色、离圆心是饱和度;肤色落在一条已知线上,查脸最快

一图比候选npx hyperframes grade-compare --for frame.png --grades grades.json——--grades{label, grading} 的 JSON 数组,原图打头(--no-baseline 去掉),最多 16 格四列排进 grade-compare.png;换 --luts a.cube,b.cube 同样比 LUT。

对代理描述问题即可(不需要记控件名):

The interview looks too dark and slightly cold.
Keep skin natural, recover the background enough to read, and avoid a filtered look.

配套命令:npx hyperframes media-treatment --capabilities --json(列有什么)、--selector '#interview' --analyze --json(改前测量源:颜色元数据、亮度位置、什么在削波、一个有界的起步校正)。

复用调色:Copy grade to 把当前调色应用到其他媒体(同文件或跨项目)——起点而非保证,同样的数字很少同时适合两个镜头。跨项目复制拒绝相对 LUT 路径(换个组合目录那路径含义就变了);留在当前文件,或用 URL / data URL 可达的 LUT。

LUT 边界(承重知识):LUT 是把每个输入颜色映射到输出颜色的查找表;HyperFrames 读最高每边 64 点的 3D .cube,按设定强度混入。没有东西先归一化你的素材——HyperFrames 不识别相机配置文件、不跑 ACES/OCIO。安全场景是创意 Rec.709 LUT(为普通 web/广播视频构建,也是这套控件唯一工作的色彩空间);LOG 素材(刻意拍平保细节)需要相机期望的变换,否则出来是「错」不是「风格化」。

存储格式:结果写进 data-color-grading分命名段:校正在 adjust、grain/vignette 在 details、风格化处理在 effects

<video src="./interview.mp4" data-color-grading='{"preset":"skin-soft","intensity":0.7,"adjust":{"exposure":0.15},"effects":{"bloom":0.4}}'></video>

嵌套不可省——{"exposure":0.15} 这种扁平对象渲染不出任何东西lint 会抓并点名控件属于哪段。

做不到的:按值选像素、从不按位置——没有人脸跟踪、区域跟踪、rotoscoping 或遮罩(HSL 选区是颜色限定器不是形状);要处理画面一部分,把它拆成独立媒体层单独调。只针对媒体元素——整场景含 HTML 文字不能一起调。支持的是 SDR;4K 可用但预览渲染成本更高;HDR 源(iPhone HDR、HLG)得到 SDR 预览加横幅提示,不是真 HDR 调色。远程媒体需要宽松 CORS 且可能渲染前消失——媒体留在项目里

七、Day 25:Prompt Guide 七层课程

(源:Prompt Guide,全文深读见篇六

官方提示词体系的大成(本系列篇六全文深读),此处只放阶梯总表:

Level主题学会后能做什么
1Your first video一条提示词得到成片——工作流替你填空缺
2Control六段骨架:route / spec / beats / copy / technique / negatives
3Life运动与转场读起来高级而非幻灯片
4Substance真能力:代码动画、数据可视化、overlay、字幕、生成艺术、VFX、3D
5Voice & sound旁白、音乐与你给的任何素材,正确配乐混音
6Scale设计系统与变量模板
7Capstone每种技法汇成一部影片

八、Day 26:媒体特效与 overlay

(源:Apply media effectsOverlays and lower thirds

Media effects全部要点:特效改变素材看起来如何而非它是什么,原文件永不变,之后可调、可动画、可整体摘除。全家福:18 种效果、16 种色彩 look、4 条 LUT 路径,全在一个媒体层上、事后全部可编辑。

四族效果

效果用途
EssentialsBlur、Pixelate、Bloom藏东西、把注意力拉到别处、亮区发光
Retro 与 glitchTape Damage、Film Artifacts、Scanlines、CRT Curvature、Channel Separation、Digital Glitch、Chroma Softening像旧磁带、旧胶片、旧显示器或坏信号——损坏按真实行为构建(跟踪抖动、渗色、撕裂),不是随机彩噪
PrintHalftone、Two-Ink Print、Ordered Dither、Mono Screen印刷网点或双色海报
ArtASCII、Engraving、Crosshatch、Kuwahara Paint重画为字符、雕线、排线或油画笔触;ASCII 单独有八种风格

grain 与暗角归调色;HUD、漏光、闪光归 Catalog overlay。

Studio 操作:选媒体 → Inspector 的 Effects → 挑一个、调、完整播一遍(有些特效动起来才露馅)。特效覆盖整个媒体层,不跟脸、不跟屏幕、不跟物体——只改局部就先裁剪/遮罩成独立层。Blur、Bloom、Kuwahara 是贵的,大层上堆几个会拖慢预览与渲染。

对代理说话(不用记控件名):Make this product clip feel like a clean two-ink editorial print. Keep the product shape and label readable. 命令面:media-treatment --capabilities --json 查能力、--capability twoInkPrint 看单族、--selector '#product' --grading '{"preset":"two-ink-print"}' --apply --json 应用、--dry-run 试、--analyze 先测量、--clear 摘除——写的也是 Studio 读的同一份 data-color-grading,两边永不打架

有用纪律:真想藏/揭示才用 blur/pixelate;选了强 look 就贯彻(半强度 ASCII 读起来像失误);对着原版比;特效开始跟故事抢戏就摘掉。两条边界:特效跑 SDR 管线,原生 HDR 层走独立路径不会出现这些效果(必须进最终文件就先转 SDR);远程文件要 CORS 且可能消失——媒体留在项目里。

Overlay 与 lower third提示词章):overlay 是坐在素材/场景之上的定时块——提示词在「在某个时刻点什么」时触发:add a lower third at 0:03 with the name and titleshow an animated tweet during the intro。给时间戳、文案、语气,代理把块放到素材上方的轨道。两组:Lower thirds(说话人名条,分 cards 有底与 cardless 无底两路——活素材上优先 cardless,带文字阴影不加框;背景太乱用 lt-dark-card 炭色卡)按品牌语气映射:Minimal → lt-clean-bar / lt-soft-pill;High-energy → lt-bold-block / lt-color-block;Cardless over footage → lt-accent-underline / lt-kicker-name / lt-mask-reveal / lt-side-rule;Broadcast → lower-third-bild / news-ticker;两段式 wipe(名 + 头衔)→ lt-stack-bars。Social overlays 是平台 UI 的动画复刻(帖子、卡片、通知、关注提示)。课程那句「两到六条精心设计的色坡改变整片视觉语言」就是这一天的点题。

九、Day 27:部署——四条渲染路线

(源:Choose a rendering pathDeploy a preview and render API

Choose a rendering path:按基础设施所有权,渲染有四个去处——本地机器、应用后端、HeyGen 托管云、你自运营的分布式基础设施(AWS Lambda / Google Cloud Run)。CLI 对照(hyperframes-cli 技能):

需求命令
本地快速迭代render --quality draft
本地最终交付render --quality high --output out.mp4
可复现容器渲染render --docker --strict
本地变量批量render --batch rows.json --output "renders/{name}.mp4"
HeyGen 托管零基础设施cloud render
自管分布式 AWSlambda render <project> --width 1920 --height 1080 --wait
自管分布式 GCPcloudrun render <project> --width 1920 --height 1080 --wait

选择原则:要托管渲染但不想碰 Chrome/FFmpeg/云 → 托管云;只有当基础设施所有权是硬要求时才上 Lambda / Cloud Run

应用后端路线Deploy guide):三个官方托管模板,各自用 <hyperframes-player> 预览捆绑组合、在服务端 Chrome + FFmpeg 渲染 MP4:

模板渲染运行时产物存储适合
VercelVercel SandboxVercel Blob已在 Vercel 上的 Next.js 应用(/api/render 恢复预置 Sandbox、跑 render、传 Blob、返回公开 URL)
CloudflareCloudflare ContainerR2Workers 应用需要容器化渲染器(RenderContainer Durable Object 渲染并流式写 R2;附可选 OpenRouter 提示词生成——公开演示前关掉,需 Workers Paid
ModalSpawned Modal FunctionModal VolumePython 服务、渲染作业跑在 web 请求之外(FastAPI POST /api/render 起独立函数返回 call ID,浏览器轮询取 MP4;部署 modal deploy src/app.py

换自己的组合:本地 init → preview → check 通过后,替换模板的组合目录并改一行配置(Vercel 改 lib/preview.tsPREVIEW_COMPOSITION_DIR;Cloudflare 设环境变量;Modal 改 src/app.pyPREVIEW_COMPOSITION);非 1920x1080 还要改播放器尺寸。公开暴露端点前:这些是可运行示例不是完整多租户渲染服务——先加认证、请求限制、输入校验、成本控制;要重试/优先级/受控并发就加队列;为分布式作业设计的基础设施用 Lambda / Cloud Run。

十、Day 28:贡献 Catalog

(源:Contribute to the Catalog

Contribute to the Catalog全部要点。Catalog 从 HyperFrames 仓库的 registry 生成,两条贡献路径:提想法(开 GitHub issue 附视觉参考——录屏、Figma 草图或别家工具的例子即可起步);建条目(让代理用 /hyperframes-registry 技能,或照下述流程手工做)。

条目类型与目录结构:Block(固定尺寸时长的独立组合)需要 registry-item.json + 组合 HTML;Component(装进别的组合的片段)额外需要独立 demo.html(没有它 Catalog 预览生成器会跳过)。每个条目一个目录,元素 ID 一律加条目名缩写前缀防子组合安装时碰撞:

registry/blocks/my-block/        registry/components/my-effect/
  my-block.html                    my-effect.html
  registry-item.json               demo.html
                                   registry-item.json

manifest 要点:遵循 registry item schema;block 声明 dimensionsduration,component 不得params 暴露别人在 Studio 不改 HTML 就能换的值,控件四种:color / text / number / select;可选字段含 authorrelatedSkillregistryDependencieslicensesourcePromptdeprecated 等。

复用性铁律(每个条目必须):用注册在 window.__timelines 的暂停 GSAP 时间线;data-composition-id 与注册时间线 ID 一致;前缀元素 ID;不用 Date.now()、未播种 Math.random()、实时动画循环;任意帧正确 seek;装到源目录之外也能工作。一次性示例放 Examples,不进 Catalog。

验证与预览bun run lint:registry-items my-block(裸 lint 不行——CLI 找 index.html 而条目是 <name>.html);完整门禁:init scratchadd my-blockcheck(注意 add 不能装未发布的本地条目,它从 hyperframes.json 的 registry URL 解析——发布进 manifest 后再从干净项目测);生成 Catalog 页与预览资产:npx tsx scripts/generate-catalog-pages.ts + generate-catalog-previews.ts --only my-block不要手改生成的条目页——改 manifest 或生成器再重生成。全速看预览:过 check 证明组合有效,不证明运动可读或有用。五条评审问题:有没有一个视觉主角(第一秒知道看哪)?重要文字能读一遍吗(信息落地、切前保持)?运动有加速与落定吗(不像幻灯匀速漂移)?别人能换肤吗(品牌值暴露为参数)?真的可复用吗(解决重复出现的生产问题)?

PR 内容:条目目录;registry/registry.json 对应条目;重新生成的 Catalog 产物;npx hyperframes publish 的 hyperframes.dev 预览;使用时机、有效时长范围、已知坑。外部贡献者附预览 MP4,最终 Catalog 媒体由维护者发布。

十一、Days 29-30:组件更新与收官

(源:30 DaysProduct updates

  • Day 29 Components update:把扩充后的整套组件组合进单个项目——组件库是活的,消费端吃下迭代(官方描述仅此一句,配套入口是 Product updates 页);
  • Day 30 Thirty for thirty:收官混剪——三十天每课一秒、从 Day 1 安装到全系列。官方原话:“Thirty days in one cut — a second from every lesson, back to back. From install on Day 1 to the whole series here.”

十二、阶段篇收束

四个阶段篇合起来,HyperFrames 讲的是一句话:给视频配上软件工程的全部基础设施——工程文件(HTML+data-*,可 diff 可 lint)、导演沟通(BRIEF.md + 六段骨架)、看片审片(storyboard 板 + check/snapshot/compare)、手工重复(Catalog + 变量 + 批渲)、渲染农场(四条路线)、老剪辑师脑子里的经验(FRAME.md + skills + Prompt Guide)。我的行动清单:① 拿本博客一篇笔记喂 faceless-explainer 走全流程;② 把博客封面视觉语言沉淀成 frame.md;③ 把封面工作流改造成带变量的 HyperFrames 模板体验 render --batch 与云端重渲;④ 学「30 天日更、先做后发、每课链原帖」的内容打法。专题续读:(五)创作路径(六)Prompt Guide(七)Catalog,另见《公众号系列封面生成:HTML 模板 + 无头 Chrome 截图》