mcpField
S
scroll-world

scroll-world

github.com/oso95设计与 UI10.6k4.9k 次安装13 周前更新
代码仓库

关于 scroll-world

scroll-world 是一项用于制作滚动驱动镜头运动落地页的技能,页面通过滚动控制预渲染视频链。它指导场景规划、视频生成、帧匹配连接,以及独立原生 JavaScript 引擎的集成。

主要功能

  1. 01规划场景与镜头路线
  2. 02生成静帧与下潜镜头片段
  3. 03以帧匹配方式衔接视频片段
  4. 04按滚动位置控制视频链播放
  5. 05集成独立的原生 JavaScript 引擎
  6. 06可选制作原生 9:16 手机视频链

适用场景

  1. 01制作滚动浏览产品场景的落地页
  2. 02跨多个页面区段构建连续镜头路线
  3. 03在纯 HTML 或框架页面加入滚动驱动视频
  4. 04为手机制作单独构图的竖屏体验

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oso95/scroll-world --skill scroll-world

安装后在 Claude Code 中输入/scroll-world确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
index-template.html
knockout.py
pipeline.md
prompts.md
scrub-engine.js

详细介绍

scroll-world

生成一个由滚动驱动摄像机的落地页:摄像机从场景外部俯冲进入内部,然后飞出并进入下一个场景,整个过程连续流畅,没有可见的剪切。视觉素材由 AI 生成——静帧通过 Higgsfield(或 Codex)生成,视频链默认通过 Monid 生成(按片段付费的 Seedance 2.0;Higgsfield 点数作为备用)——页面只根据滚动位置擦播预渲染的视频。这与 Apple 产品页面中滚动浏览的技术相同——摄像机确实在移动,滚动只驱动时间。

**生成内容:**N 张场景静帧 → N 段“俯冲进入”摄像机视频 → N-1 段“连接”视频,无缝衔接连续场景 → 一个便携式擦播引擎,将整条视频链作为一次飞行播放。

**成败攸关的一条规则:**接缝处必须做到帧完全一致。生成任何连接视频前,请先阅读无缝视频链。这是最常见的失败原因,处理不当会导致场景之间出现明显的“跳变”。

不要假设使用某种前端框架。references/scrub-engine.js 中的擦播引擎是独立的原生 JS(它会构建自己的 DOM,并将 CSS 注入你提供的容器),因此可以用于纯 HTML、Next.js、Vue、由 Python 提供服务的页面等任何环境。这项技能的价值在于 Higgsfield 流程、提示词和接缝处理方法,而非框架。


第 0 步 — 初始化

  1. **Monid CLI — 默认的视频链后端。**检查 monid --version、 monid keys list(活动密钥)和 monid balance——视频链按片段以美元计费 (第 1.7 步列出了具体费用;1080p、N=6 的视频链约为 $27)。如果未安装 CLI 或余额不足以支付整条视频链,请说明情况,并改用 Higgsfield 点数渲染视频链—— 模型和流程相同,只是计费方不同(第 4 步 → Monid 后端)。
  2. **Higgsfield CLI — 即使使用 Monid 流程也仍然需要:**它负责渲染场景静帧 (gpt_image_2),也是 kling3_0 NSFW 备用方案和备用视频链的所在平台。如果 $PATH 中没有 higgsfield,请按照 higgsfield-generate 技能安装。如果 higgsfield workspace list 身份验证失败,请让用户运行 higgsfield auth login (交互式 OAuth——你无法运行此命令),并在需要时运行 higgsfield workspace set <id>。确认点数足以生成静帧(约 N 张图)—— 如果视频链改由此处生成,还需额外支付 (2N-1) 次视频生成的费用。
  3. $PATH 中需有 ffmpeg / ffprobe(用于提取帧和编码)。
  4. 图像工具,用于抠除背景(如果需要场景悬浮效果)。可使用 PIL (python3 -c "import PIL"),或 cwebp/sips。此项为可选——见第 3 步。
  5. (可选)Codex CLI——如果 $PATH 中有 codex(≥ 0.125),且 codex login status 显示已登录 ChatGPT,则可以通过 Codex 内置的 image_gen (同一 gpt-image-2 模型)生成场景静帧,并从用户的 ChatGPT 订阅中扣费,而非使用 Higgsfield 点数——请在第 1.7 步提供此选项,命令见第 2 步。未安装只会导致该选项不可用。
  6. 注意事项:macOS 自带 bash 3.2(不支持 declare -A);脚本中不要使用关联数组。 Higgsfield 每次生成需要 3–8 分钟——始终在后台运行并轮询,切勿在前台阻塞运行。 媒体参数不接受通过任务 UUID 引用资源——请将本地文件路径传给 --image/--start-image/--end-image。视频模型接受的参数各不相同(例如 Kling 不支持 --resolution),且未必都支持起始/结束图像条件控制——批量生成前,请通过 higgsfield model get <job_type> 确认所选模型的参数规范,并参阅第 4 步的模型表。

第 1 步 — 询问用户

主题应由用户自行说明——用平实的措辞提出开放式问题,绝不要编造多选题。虚构的行业列表会引导用户,也会让人觉得你在替他们决定业务;让他们用自己的话作答(可以是他们自己的业务、客户的业务,或任何想法)。只有对于以下确实可以枚举且风险较低的选项——艺术指导、镜头风格和品牌素材包方案——才使用结构化多选题(在 Claude Code 中使用 AskUserQuestion;其他地方使用简单的二选一问题);即便如此,也要表明他们可以另选(“其他”)。只询问那些无法合理预设的问题。涵盖:

  1. 主题(开放式提问,不要给出选择题)——“您希望这个世界围绕什么展开?可以是您的业务、客户的业务,也可以是任何创意——一个词或一句话都可以。”记录行业/产品和一句话简介(例如“从茶叶到最后一口的珍珠奶茶公司”);如果对方已有品牌名称,也一并记录,否则稍后由您提出一个。
  2. 品牌套件——提供三种方案,让对方选一种:
    • 从 URL 导入:higgsfield marketing-studio brand-kits fetch --url <site> --wait (提取名称、颜色和语气)。然后用 brand-kits list --json 读取结果。
    • 用户直接提供调色板、名称和语气。
    • 您提出调色板和名称,再让用户确认。 记录 4–6 个命名的十六进制颜色值、一个展示名称,以及一两个表示语气的词。
  3. 艺术指导——默认采用“柔和哑光低多边形黏土微缩景观、等距视角、移轴微缩效果、暖光”。也可以提供其他选择(平面纸艺、亮面玩具、黏土动画、霓虹夜景)。无论选择哪种,都要作为共享的风格前言,在每个场景提示词中原样复用(这能让整个世界风格统一)。
  4. **镜头风格——务必询问;这是影片的个性,而非技术细节。**根据感受提问(在 Claude Code 中使用 AskUserQuestion;其他地方直接提问),并将答案记录为 CAMERA。各选项对应第 4 步的架构——第 4 步负责实现选择,不会重新替用户决定:
    • “穿梭于世界之中”——镜头潜入每个场景,再向上拉远,穿过微缩世界跳转至下一个场景;角度不断变化,并运用大幅且富有表现力的空中运镜(这是旗舰演示片的风格)。 → 架构 B。推荐用于微缩景观/微缩模型艺术指导。
    • “一镜到底的连续漫游”——镜头持续向前飞行,流畅地穿过每个场景并直接进入下一个场景,从不拉远;每个场景中的运镜富有表现力,但始终向前(见镜头语言表)。 → 架构 A。推荐用于写实/照片级真实艺术指导。
    • “固定等距视角滑行”——整个影片中镜头都保持一个固定角度,采用 Emons 风格;世界从镜头前方掠过或朝镜头靠近,不旋转,也不揭示新场景。 → 架构 A + 每段提示词中的固定等距视角条款(prompts.md)。 用一句话分别说明取舍(架构 B 会在衔接处反转方向——用于微缩景观时很讨喜,用于写实时则会显得突兀;固定等距视角最平稳,也最省重新生成成本;连续漫游介于两者之间)。
  5. 旅程(各段场景)——镜头飞过的有序场景。根据主题自身的价值链提出一组场景,再让用户修改。5–7 个场景效果较好。 珍珠奶茶示例:茶园 → 珍珠制作厨房 → 旗舰店 → 配送 → 社区广场 → 主打产品。每个场景需要:简短的主体描述(微缩景观中包含什么)、眉题、标题、一行正文,以及 0–3 个标签胶囊。最后一个场景通常呈现主打产品和 CTA。
  6. **移动版——务必询问;绝不要默默生成两个版本。**以两个选项的形式提问(在 Claude Code 中使用 AskUserQuestion;其他地方直接提问): “还需要移动端优化版本吗?移动版是单独生成的第二条镜头链,以原生 9:16 竖屏呈现——专为手机构图,而不是从横屏影片裁剪而来——这会让 Higgsfield 积分消耗大致翻倍(请说明预估数量)。” 选项:“仅桌面版”/“桌面版 + 移动版(原生 9:16——约 2 倍积分)”。必须明确告知用户积分成本,不能只暗示。 答案决定的事项:
    • 是 → 渲染并交付并行的 9:16 竖屏链,作为移动版变体(第 6 步/pipeline.md §6b):竖屏起始画布 → 以自身渲染结果锁定帧的 9:16 下潜镜头 + 衔接镜头 → 编码为 720 像素宽的 -m.mp4 → 竖屏海报图 stillMobile。接入 clipMobile/connectorsMobile/stillMobile(第 7 步);运行完整的移动端 QA(第 8 步)。额外预算约为 2N-1 次视频生成 + NSFW 重新生成。 默认绝不要把居中裁剪版作为移动版交付——如果积分不足以覆盖竖屏链,要明确说明,并提出使用裁剪编码(pipeline.md §6)作为临时替代方案,且必须明确标注并经用户批准。
    • 否 → 完全跳过移动版编码和接入。引擎的手机兼容性强化(seek-coalescing、iOS priming、安全区域 CSS)始终启用——这不是“移动版”,只是确保手机访问时页面不会出问题——因此仅桌面版构建也能在手机上优雅降级。
  7. 预算——按成本展示引擎,并在开始渲染前确定。 展示渲染档位(AskUserQuestion),然后计算并说明用户 N 个场景的预估总价:N 张静帧 + (2N−1) 个视频 [移动端视频数 ×2] + ~15% 的重生成余量,并在生成前征得用户同意。
    • 视频档位(仅限以下名单——所有选项都会锁定帧间衔接,见步骤 4):

      档位模型粗略成本
      草稿 / 预演seedance_2_0_mini(720p)约为标准档的 ¼
      标准(默认)seedance_2_0(1080p)基准
      替代选项kling3_0(原生 720p)≈ 标准档;风格不同,且有内容过滤器

      草稿档也可用于预演路径:以低成本跑完整条链路,确认旅程后,再用标准档重新渲染最终片段(见 pipeline.md 的 Notes)——如果余额看起来吃紧,应主动建议此方案。

    • 后端——Monid 是整条链路的默认计费方(步骤 0.1;接线配置见 pipeline.md → Monid backend)。使用相同的 Seedance 2.0,按片段以美元计费,而非点数。按 token 计价,计算方式为 宽度 × 高度 × 24 × 秒数 / 1024,480p/720p 为 $7/1M,1080p 为 $7.7/1M——实测:1080p 8 秒俯冲片段约 $2.99,5 秒衔接片段约 $1.87;720p 约 $1.21 / $0.76;480p 约 $0.28 / $0.35。N=6 的桌面端链路在 1080p 下约 $27,720p 下约 $11,而 Higgsfield Plus 月付约 $32 / $16——每个片段便宜约 15%,与 Plus 年付持平;从结构上看更适合一次性构建(按使用量付费,没有月度到期)。在 Monid 上,草稿 / 预演档就是同一端点的 480p——无需切换模型,因此预演→最终输出从一开始就使用同一模型。根据预估说明 monid balance;当用户更倾向使用自己的订阅、余额不足,或必须使用 kling3_0(仅 Higgsfield 提供)时,改用 Higgsfield 点数(上方列出的各模型档位)。两者使用相同的底层模型(seedance_2_0 ≙ Monid 的 seedance-2.0),因此在另一计费方处完成中断的链路是合理的补救方式——但两边的服务栈不同,跨服务商的片段衔接效果尚未测试:在渲染其余内容前,先检查第一个补救片段的衔接效果,与任何模型切换时的做法相同。

    • 静帧来源(仅当存在 Codex CLI 时才提供,见步骤 0.5):Higgsfield gpt_image_2(消耗点数)或 Codex image_gen——同一 gpt-image-2 模型,费用计入 ChatGPT 订阅(不消耗点数;计入 Codex 使用限额;输出为 1536×1024,恰好是 3:2,比 Higgsfield 的 2k 略小)。静帧只是传给 --start-image 的普通 PNG,因此视频链路不受其来源影响。命令见步骤 2。同一个构建中的全部 N 张静帧必须使用同一来源——两种来源渲染出的角色观感略有不同(已验证:Codex 的效果更暖、更亮),跨场景混用会显得风格漂移,原因与视频链路统一使用同一模型相同。

    • 校准成本,不要猜。 CLI 不会显示定价,而且不同套餐也不一样。先各运行一个静帧和一个视频,比较运行前后的 higgsfield workspace list,据此推算完整运行的成本;如果预估超过余额的约 70%,务必提醒用户。(2026-07 在 Plus 套餐上的观察结果:标准视频约 40–55 点数,静帧约 15 点数。)运行中实际遇到 not_enough_credits 仍可补救(已完成的片段会保留;充值后可以续跑),但过程很不理想——这一步的核心目的,就是让用户在花费发生前做出决定。

如果用户指定名单之外的视频模型,只有在该模型能够锁定帧间衔接时才予以采用(见步骤 4)。此技能只提供无缝输出,因此如果某个模型无法锁定帧间衔接,应以一句话说明原因并拒绝,而不是擅自替换——请改用名单中的模型。

保持滚动机制不变(连续飞行穿越)——这正是此技能的核心。 请参阅 references/prompts.md,了解信息收集清单和文案结构。


步骤 2 — 生成场景静帧

每个部分生成一张图,所有图片共用相同的风格前置提示词,以保持整体协调。默认 模型为 gpt_image_2(画面清晰,擅长等距插画;生成纯色/白色 背景,非常适合悬浮的立体模型“岛屿”)。仅当需求以角色/卡通为主时才使用 nano_banana_2(注意:nano_banana_2 是 CLI 别名,会解析为 nano_banana_pro;在 higgsfield model list 中不会显示此名称)。

提示词结构(完整模板见 references/prompts.md):

<STYLE PREAMBLE, identical every time>. On a plain solid <bg> background with a soft
contact shadow. <PALETTE hexes>. No text, no letters, no logos, centered, 3:2.
Subject: <what is in THIS diorama>.
  • 将全部 N 个任务并发运行,并使其脱离终端。每个场景的命令: higgsfield generate create gpt_image_2 --prompt "$(cat scene_i.txt)" --aspect_ratio 3:2 --resolution 2k --quality high --wait --wait-timeout 15m --json > scene_i.json 2>scene_i.err

  • 结果 URL 位于 --wait --json 输出中的 .[]0.result_url。使用 curl 下载。

  • Codex 静帧方案(若在步骤 1.7 中选择——按订阅计费,不消耗 点数):使用相同的提示词文件和逐字节相同的前置提示词,通过 Codex 内置的 image_gen 生成:

    codex exec -C "$WORK" -s workspace-write --skip-git-repo-check \
      'Use the image generation tool ($imagegen) to generate: '"$(cat "$WORK/still_i.txt")"' Wide 3:2 landscape, high resolution. Save it as ./still_i.png. Do not do anything else.' \
      < /dev/null
    

    将 $imagegen 部分用单引号括起来(shell 不得对其展开);如果使用参考图片进行编辑,提示词必须放在任何 -i 标记之前(该标记接受可变数量的参数)。 每张图约需 1–3 分钟;并行运行少量任务,不要一次运行全部 N 个任务——并保留 < /dev/null:多个 codex exec 调用共享脚本的标准输入时,会挂起等待输入(注意事项)。输出尺寸为 1536×1024(3:2),适用于 --start-image 和海报。后续所有步骤 (整体协调性检查、抠图、潜水镜头)均不变。

  • 生成可能会暂时失败(HTTP 503)——单独重新生成失败的那张;不要 重启整批任务。

  • 继续之前先检查静帧。 它们必须呈现为同一个协调一致的世界(角度、 色彩搭配、光线一致)。如果某张风格不符,请重新生成;也可以将一张已批准的场景作为 --image 传入,以锁定风格。

确切的批处理脚本见 references/pipeline.md。


步骤 3 —(可选)让场景悬浮

如果希望立体模型悬浮在氛围背景之上,而不是置于纯色方框中,可使用 references/knockout.py 将纯色背景抠成透明背景(基于边界连通区域的泛洪填充——保留与背景颜色相同的内部颜色, 例如奶油色墙壁)。然后编码为 webp。如果希望保持简单, 只需将页面背景设为与场景背景相同的颜色,并跳过此步骤。

这些静帧也会用作视频海报和延迟加载的后备图片,请保留。


步骤 4 — 摄像机架构(实现步骤 1.4 中的选择)

场景之间的摄像机移动方式,是影响质量的最大因素。用户 已在访谈中选择了风格(CAMERA,步骤 1.4):飞越 → B, 漫游 → A,锁定等距视角 → A + 锁定等距视角段落条款(prompts.md)。如果 访谈中意外遗漏了这一项,现在就询问——绝不要默默替用户选择。两种 结构,以及为其赋予风格的语法如下:

视频模型 — 整条链路只选一个

此技能只输出无缝视频,因此只有能够锁定衔接帧的模型才可用:每个串联片段都必须接受 --start-image,连接片段还需要 --end-image。选择规则取决于这项能力,而非个人偏好。使用 higgsfield model get <job_type> 检查模型,并跳过所有媒体输入仅支持参考素材的模型(没有起始/结束图像):它们只能为生成提供条件,不能延续镜头,因此无法真正保持衔接。以下架构已通过 CLI 确认:

模型起始/结束图像说明
seedance_2_0(默认)✓ / ✓支持完整链路(片段 + 连接片段)。使用 --mode std --resolution 1080p。它的 NSFW 过滤器最敏感(参见注意事项)。
kling3_0✓ / ✓支持完整链路 — 已测试:接受带起始和结束图像的 --mode std --sound off --duration 5,衔接帧锁定效果良好。没有 --resolution 参数(不要传入该参数;--mode std 返回原生 720p — 按 ffprobe 报告的结果编码,绝不要升采样)。声音默认开启 → --sound off。--duration 默认为 5,可尝试为片段设为 10。内容过滤器与 Seedance 不同 — 这是获准的 NSFW 备用模型。
seedance_2_0_mini✓ / ✓经济型草稿档,同时保留帧锁定能力(720p)。适用于预演:先在此模型上运行完整链路,再用完整版模型重新渲染最终片段 — 仍然无缝,因此可直接转换。

这三个就是候选名单 — 都支持这两种架构。(kling3_0_turbo 也可通过 --start-image 锁定帧,但没有 --end-image,因此仅支持架构 A,无法制作连接片段;它的标志参数也不同 — 没有 --mode,但有 --resolution — 所以无法直接用于现有流程。它不在默认名单中;只有在架构 A 的顺序渲染时间已被证实是瓶颈,且基准测试确认它确实更快时,才考虑使用并手动接入。)

还有一个仅支持架构 A 的候选模型,值得了解,因为它的测试成本低得多:minimax_hailuo(Hailuo-2.3,每段 768p/6s 视频约需 6 积分,而名单中的模型需 22–72 积分)。已于 2026-07 验证:--start-image + 提示词可锁定帧(输出第 0 帧 ≡ 输入,PSNR 为 33 dB),且能温和地遵循向前滑动的提示词。限制:2.3 版本会拒绝 end_image(不支持连接片段 → 仅限架构 A);输出宽高比跟随输入图像(请提供 16:9 画布,而不是未经处理的 3:2 静帧);运动效果比 seedance 更含蓄;不要传入 --resolution(CLI 会错误处理枚举值;默认 768 可用 — 1080 仅支持 6s)。一个片段不等于一条链路:投入完整构建前,先确认片段之间的衔接效果。

规则:

  • 所有串联片段使用同一个模型。 每个渲染器都有自己的运动、色彩和颗粒特征;在链路中途混用模型仍能保持位置连续性(帧仍可衔接),但渲染特征的变化会造成轻微跳变。唯一获准的例外是:单个顽固片段使用 NSFW 备用模型(参见注意事项)— 一个 5s 连接片段的轻微特征变化,总好过缺少连接片段。
  • 默认使用 seedance_2_0,并通过 Monid 默认渲染(按片段计价,美元 — 见下一节),以 Higgsfield 积分作为备用计费方式(步骤 0.1/1.6);只有用户指定的模型符合要求(能锁定帧)时,才遵循其偏好。如果不符合,请说明原因并使用受支持的模型 — 绝不要为了满足模型请求而交付不无缝的构建。kling3_0 和 seedance_2_0_mini 仅在 Higgsfield 端提供。
  • 流程脚本通过 $VMODEL 指定模型,并已为每个模型配置相应标志(references/pipeline.md)。
Monid 后端——默认链路计费方(2026-07-25 通过资格验证)

Monid 的 bytedance /v1/video/seedance-2.0 于 2026-07-25 通过了两项付费探测,是此技能渲染链路的默认方式,适用于两种架构——它是名册中的 seedance_2_0,按美元付费调用(接线方式见 pipeline.md →“Monid 后端”;Higgsfield 仅作为备用计费方或用于 Higgsfield 专属模型渲染链路):

  • 腿部探测(提示词 + first_frame 图像):输出第 0 帧 ≡ 输入静帧(PSNR 31.6 dB),遵循向前滑行提示词,按公布的价格档位计费($0.279 / 480p 4s)。
  • 连接器探测(提示词 + first_frame + last_frame):起始帧锁定(31.6 dB);结尾接近目标,但并非像素级完美(27.5 dB,构图相同,物体细节有偏差)——这与 Seedance 在 Higgsfield 上呈现的确切结尾图像效果一致,可通过引擎的接缝交叉淡化处理,并将下一段潜入视频的实际首帧用作结束图像(步骤 5 规则不变)。

I/O 契约与 Higgsfield CLI 不同——有三条规则:

  1. 图像必须通过 URL 传递,不能内联。 content 项的格式为 {"type":"image_url","image_url":{"url":…},"role":"first_frame"|"last_frame"}; base64 数据 URL 会被拒绝(“Must be a public https:// URL or an asset:// reference”)。本地帧通过 Monid 的免费工作区文件系统传输:sfs /put → 用 curl -T 上传字节 → sfs /cat 返回可粘贴到请求体中的签名公共 URL($0,明确为此用途而构建)。
  2. 明确传入 ratio(16:9,移动端链路则用 9:16)——自适应默认值会采用输入图像的宽高比。
  3. 逐段核对账单:费用按 token 计价(w × h × 24 × sec / 1024,费率为 $7–7.7/1M);每次运行都读取 cost.value。

这些规则的由来(截至 2026-07-25 仍然有效):seedance 端点直到 2026 年 7 月下旬都仅支持文生视频——每次构建前都要重新执行 inspect;目录变化可能朝任一方向发展。 minimax /v1/video_generation(Hailuo-2.3)仍不合格:同时发送 prompt 和 first_frame_image 会静默丢弃图像(输出与输入无关的文生视频结果,且价格档位错误);仅用图像时可以锁定帧(33 dB),但无法控制摄像机。

任何新增或变更 Monid 端点的资格验证流程(每项探测生成一个低成本 480p 视频):(1) 使用提示词和来自真实静帧的首帧——第 0 帧必须与输入一致,仅有编解码噪声(PSNR ≳ 30 dB),且 cost.value 必须与公布的价格档位相符;(2) 用于连接器时,再添加来自另一张静帧的 last_frame——结尾必须落在该构图上(可接受 Seedance 风格的近似偏差,交叉淡化会处理)。通过后 → 按片段付费档位(架构 A 仅需起始帧;完整名册需起始帧和结束帧)。

A) 连续向前镜头——适用于写实 / 逼真 / 漫游场景的推荐方案

摄像机始终只向前方滑行,从第一个场景到最后一个场景,一镜到底。 按顺序生成各段:第 0 段以场景 0 的静帧为起点(向前滑入场景);此后每段的 --start-image 都使用上一段的实际最后一帧(用 ffmpeg 提取),提示词为 "continue gliding smoothly FORWARD into [scene i], never pulling back"(或根据运动交接契约使用富有表现力的段中移动——见下文的 摄像机语法),并且不设置 --end-image——宽阔全景建立镜头的结束图像会迫使摄像机后退,这是卡顿的首要原因。提取每段的最后一帧,作为下一段的输入。这样每个接缝的帧都完全相同,且摄像机绝不会反向移动。不需要连接器(跳过步骤 5)——各段本身就是完整旅程。将每段接线为带 connectors: [] 和较短 crossfade(约 0.08)的分段视频。即使没有 --end-image,各段仍会到达不同房间(由提示词引导内容)。代价:必须严格按顺序生成(无法并行),速度较慢;室内场景会触发 NSFW 过滤器,因此要预留重试次数(每段尝试 3 次)。

B) 下潜 + 航拍衔接器 — 仅适用于立体模型 / 微缩模型 / 上帝视角世界

片段先“下潜进入每个场景”,再通过衔接镜头向上并向外拉出,飞往下一个场景(第 5 步)。拉出镜头会在每个衔接处反转摄像机方向(向前下潜 → 向后拉出)。在微缩模型 / 立体模型世界中,这会让人感觉是在刻意“缩小视野,回到地图,再飞往下一个岛屿”;但在写实的第一人称漫游中,则会显得像倒放一样突兀 / 卡顿。仅在地图式美学中使用 B——这正是“飞越这个世界”的访谈回答所选择的风格;在那里,方向反转看起来是刻意为之。如果用户在写实 / 照片级真实的风格下选择了 B,请说明它为什么会显得卡顿,并在渲染前确认。

摄像机运动语法 — 镜头运动应符合概念(A 并非“只能向前”)

“只能向前”是指衔接处的规则,并非单个镜头段的规则。整段镜头的运动逻辑如下:

  • 衔接处的位置连续性来自帧交接(下一镜头段从上一镜头段的实际最后一帧开始)。
  • 衔接处的速度连续性意味着摄像机绝不能在衔接处反向运动——否则就会像倒放一样卡顿。
  • 单个镜头段内,摄像机可以自由运动。 一个镜头段是一次连续渲染——中间没有衔接处,因此环绕、升降、横向跟拍,甚至推进后再缓缓拉回,都可以在片段内部安全使用。只有在衔接处发生方向反转才会出问题。

因此,为每个镜头段选择符合场景自身逻辑、富有表现力的运动,并遵守运动交接约定:每个镜头段结束时都要逐渐稳定为缓慢、平稳地向前漂移,朝向下一个目的地(最后约 1 秒);每个镜头段开始时都要延续相同的漂移。在提示词中逐字保留这两条要求(模板见 references/prompts.md)。

根据概念选择运动语法:

概念 / 基调镜头段中途的运动
产品 / 奢侈品零售围绕主体物缓慢环绕半圈,然后继续从旁经过
房地产 / 酒店与接待稳定器镜头滑过门道;在中庭轻柔升起
工业 / 流程 / 物流沿生产线低位横向跟拍,突出前景视差
旅行 / 户外 / 校园无人机式升起并展现全景,然后俯冲下降
美食 / 手工艺 / 细节导向推近工艺制作的关键瞬间,缓缓拉回,然后继续前进
趣味微缩景观(架构 B)下潜 + 航拍跳转 — 衔接镜头本身就是运动语法

需要坦诚说明的代价:富有表现力的镜头段中途运动会增加重拍的可能性——模型可能会在复杂运动结束时,无法停在干净的向前漂移状态。缓解方法:逐字保留最后一秒稳定镜头的要求;串接下一个镜头段前,仔细检查每个镜头段的最后一帧(看起来应像平缓向前滑行的一帧——否则就重拍,别浪费下一个镜头段);每个富有表现力的镜头段预留约 1 次额外重拍。简单的向前滑行仍是零风险默认选项——适用于场景本身就是重点的镜头段。

固定等距视角变体(CAMERA = 固定等距滑行):适用于架构 A,每个镜头段都固定视角,而不进行中途运动——“摄像机始终保持完全相同的高位等距角度,不旋转、不环绕、不倾斜;只直线水平移动,世界在同一视角下从下方掠过”(prompts.md 中的原文要求)。交接约定保持不变。长镜头段中,Seedance 的视角会略微漂移——现有的逐帧检查规则正是应对方法;如果某个镜头段的视角发生旋转,就重拍。画面最平静,重拍成本最低,也最接近 Emons 参考。

引擎中有两个相关的节奏控制项(第 7 步):每个部分的 scroll(滚动距离越大,该场景停留时间越长)和 linger(摄像机恰好在文案达到高潮时于场景中途稳定下来,然后加速驶向衔接处)。优先在片段中使用富有表现力的运动,在滚动映射中保持克制——两者叠加会强化效果。 还要记住,滚动条就是一个擦洗器:访客可以向上滚动,因此每个镜头也会反向播放。这是免费且符合预期的——无需额外操作——但这也说明了为什么接缝处的速度必须在两个方向上保持一致(正向看起来流畅的接缝,如果速度反转,反向播放时也会出现卡顿)。

对于 B,每个场景安排一次镜头飞行:从高处/外部开始,下降进入内部,建筑结构打开。模型:使用你在上面选择的链路模型(默认 seedance_2_0),--start-image = 场景静帧。

  • 使用纯色背景静帧(而非抠出主体后的透明静帧)作为起始图像,这样视频才会有完整画面。
  • 提示词:"Single continuous cinematic camera move, no cuts. Begin high and far looking at the whole from outside … descend and fly inside toward … the roof/walls gently open to reveal the interior. , smooth graceful slow motion. No text."(模板见 references/prompts.md。)
  • 参数(seedance):--mode std --resolution 1080p --aspect_ratio 16:9 --duration 8。对于 Kling:去掉 --resolution(没有这个参数),添加 --sound off、--duration 10。不要传入 --generate-audio(seedance 会报错;反正音频也用不上——你会将其静音)。
  • 并发运行并使进程脱离终端,然后下载每个 .result_url。单独重新生成失败项。保留原始 1080p 源文件——接下来还要从中提取帧。

第 5 步 — 连接镜头(仅架构 B)

架构 A 可跳过本步骤——向前推进的镜头没有连接镜头;它的各段本身就能无缝衔接。本步骤适用于 B(立体模型/微缩景观),并请注意第 4 步提到的反向播放注意事项。

连接镜头能让世界显得彼此相连,而不是被剪开。连接镜头会从场景 i 的结尾飞出,再进入场景 i+1 的开头。它的两个端点都必须是相邻片段的实际渲染帧——绝不能使用原始的立体模型静帧。

原因:每次 Higgsfield 生成的画面都会略有不同。如果连接镜头的结尾是重新生成的“厨房立体模型”,而下一个俯冲片段的开头则是该片段对同一立体模型的另一次渲染,两者就无法匹配,接缝处会出现跳变。解决方法是交接完全相同的像素:

For each connector between dive_i and dive_{i+1}:
  start-image = the LAST frame extracted from dive_i's rendered video
  end-image   = the FIRST frame extracted from dive_{i+1}'s rendered video

现在,每个接缝的两侧帧都完全一致: dive_i.end == connector.start 和 connector.end == dive_{i+1}.start。

从已渲染的俯冲片段中提取边界帧(不要从静帧中提取):

ffmpeg -sseof -0.15 -i dive_i.mp4   -frames:v 1 -q:v 2 dive_i_last.png    # interior of i
ffmpeg -ss 0      -i dive_{i+1}.mp4 -frames:v 1 -q:v 2 dive_next_first.png # establishing of i+1

生成连接镜头(--duration 5 足够)。连接镜头需要 --end-image,因此模型必须支持该参数——模型列表中的任意模型都支持(seedance_2_0、seedance_2_0_mini、kling3_0):

higgsfield generate create "$VMODEL" \
  --prompt "$(cat connector_i.txt)" \
  --start-image dive_i_last.png --end-image dive_next_first.png \
  $VOPTS --aspect_ratio 16:9 --duration 5 --wait --json
# seedance: VOPTS="--mode std --resolution 1080p"; kling3_0: VOPTS="--mode std --sound off"

连接镜头提示词:"Single continuous camera move, no cuts. Pull up and back out of , rise into the sky, glide across the connected miniature world, and arrive above <scene i+1>, beginning to descend toward it. Seamless flowing aerial transition. . No text."(模板见 references/prompts.md。)

保险措施:Seedance 生成的画面会接近结束图像,但不一定像素级完全一致,因此引擎仍会在每个接缝处应用短暂的交叉淡化(几帧)。端点帧匹配再加上短暂的交叉淡化,就不会出现可见的剪切。绝不要跳过实际帧交接而只依赖交叉淡化;内容变化幅度太大时,交叉淡化无法掩盖。

第 6 步 — 编码以实现流畅拖动浏览

拖动浏览 = 根据滚动位置设置 video.currentTime。有两点很重要,而且经常被弄错:

  1. 拖动浏览是否有效,取决于能否跳转,而非关键帧密度。 许多静态主机(以及 python -m http.server)不会提供 HTTP 字节范围请求,这会使 video.seekable 固定为 [0,0],并将每次跳转都限制在第 0 帧——视频看起来就像卡住了。稳妥的解决方法是将每个片段获取为 Blob,并通过内存中的对象 URL 播放(Blob 始终可以完整跳转)。引擎会这样处理。因此,不需要全帧内编码视频。
  2. 不要为了跳转流畅而降低画质。 使用原始分辨率编码(Seedance 输出为 1080p——不要缩小),crf ~20,并使用较小的 GOP(-g 8),而不是全帧内编码(全帧内编码会让 8 秒片段膨胀到约 25 MB;GOP 8 约为 8 MB,通过 Blob 拖动浏览也很流畅)。移除音频、添加 faststart,并使用轻度 unsharp 来改善视频的柔和感:
ffmpeg -i src.mp4 -an -vf "unsharp=5:5:0.8:5:5:0.0" \
  -c:v libx264 -preset slow -crf 20 -pix_fmt yuv420p \
  -g 8 -keyint_min 8 -sc_threshold 0 -movflags +faststart out.mp4

使用相同设置编码全部 2N-1 个片段(潜入片段 + 连接片段),以确保画质一致。

移动版编码(仅当用户在第 1.6 步选择启用时)。 移动版采用原生 9:16 竖屏片段链(pipeline.md §6b):为每个潜入片段和连接片段渲染竖屏画面,编码时设置宽度为 720(scale=720:-2)、-g 4(关键帧越多,跳转成本越低——手机解码器的跳转成本会随 GOP 长度增加),crf 23 — 并将其接入 clipMobile / connectorsMobile,同时提取每个竖屏潜入片段的首帧,作为该章节的 stillMobile 海报(第 7 步)。引擎会自动在手机上提供这些版本;如果没有,则回退到桌面版片段。16:9 中心裁剪的 encm() 编码版本(pipeline.md §6)仅作为备用方案——仅当额度不足以覆盖竖屏片段链时使用;如果要发布这些版本,必须告知用户,不能默不作声。如果用户选择仅支持桌面端,则跳过此项——无论如何,引擎仍会完善手机端的拖动浏览体验(跳转合并、iOS 预热),让页面能够平稳降级,而不是无法使用。


第 7 步 — 组装页面

将 references/scrub-engine.js(如果想要一个完全独立的页面,也可复制小巧的 references/index-template.html)复制到用户的项目中,或将其改编为适用于他们的 框架。它由配置驱动且独立自足:

mountScrollWorld(document.getElementById('world'), {
  brand: { name: 'Pearl & Co.' },
  diveScroll: 1.3, connScroll: 0.9,          // viewport-heights of scroll per clip
  sections: [
    { id:'farm', label:'The Farms', still:'assets/farm.webp',
      clip:'assets/vid/farm.mp4',
      clipMobile:'assets/vid/farm-m.mp4',      // mobile opt-in only: native 9:16 render
      stillMobile:'assets/farm-m.webp',        // its first frame as the portrait poster
      scroll: 1.6, linger: 0.45,   // optional pacing: longer dwell + camera settles mid-scene
      accent:'#8FB98A', eyebrow:'From leaf to last sip', title:'It starts in the hills.',
      body:'…', tags:['Single-origin','Hand-picked'] },
    // …one per section; last may carry a `cta`
  ],
  connectors:       ['assets/vid/conn1.mp4','assets/vid/conn2.mp4',   /* … length = sections-1 */],
  connectorsMobile: ['assets/vid/conn1-m.mp4','assets/vid/conn2-m.mp4' /* … same length; mobile opt-in only */],
});

引擎负责:有序的潜入/连接片段链、带 rAF 平滑处理的滚动→currentTime 映射、blob 加载、附近片段的延迟预取、帧匹配交叉淡化、每个分区固定的文案(首个分区在着陆时打招呼,最后一个分区保持其 CTA)、路线栏、 prefers-reduced-motion 和移动端适配。每个分区的节奏:scroll 会覆盖该场景的 diveScroll(滚动越多,停留越久);linger(0–1,保持 ≤ 0.6) 会重新映射时间,使摄像机在场景中段稳定下来——恰好与文案达到高潮的时刻一致——然后在接缝处加速;接缝帧不受影响(f(0)=0,f(1)=1)。为主视觉和结尾场景设置更高的 scroll 值并增加一些 linger;过渡场景则保持轻快。使用 CSS 变量(--accent、 --sw-bg、--sw-ink,…)为其设置主题——视觉识别来自生成的片段,因此界面装饰应保持低调。完整配置和 CSS 变量请参阅 scrub-engine.js 的文件头。

在手机上,引擎会自动适配(粗略指针或 ≤860px):如果存在 clipMobile / connectorsMobile,就会使用它们;合并 seek 操作(解码器仍在 seek 时绝不排入新的 currentTime——这能避免快速滑动导致片段卡住);在片段绘制出首帧前,将静帧保留为海报图;并且首次触摸时预热每个视频(修复 iOS 视频在播放前显示空白的问题),移除漂移粒子,忽略仅由 URL 栏变化引起的尺寸调整(避免滚动跳动),并使用安全区域内边距,让文案避开刘海/主屏幕指示条。默认启用所有这些增强,无需配置。clipMobile / connectorsMobile 编码是可选部分 (第 1.6 步):只有用户要求移动端版本时才接入。

对于非 JS 后端(Python/Rails 等):提供这些资源,并将引擎 <script> 插入渲染后的 HTML 中;它不依赖任何特定框架。


步骤 8 — 检查衔接处(不要跳过)

在无头浏览器中操作页面,并验证衔接处的画面连续性。这是最容易出错的地方:

  • 在每个衔接处前后不远的位置截图。两帧必须几乎相同(下潜片段的最后一帧 == 连接片段的第一帧)。如果画面突然跳变,说明你用了场景模型静帧,而非实际渲染帧(重做步骤 5),或者交叉淡化带太短。校准:判断衔接处时看构图,而非原始 PSNR——在 720p/1080p 下,即使帧锁定正确,单是细节闪烁也可能让 PSNR 约为 18–25 dB(已在验证通过的构建中观察到);真正不匹配时,差异体现在构图或道具不同,而不只是画面柔和度。
  • 检查控制台是否有错误,确认 video.seekable.end(0) > 0(blob 正常工作),并确认 currentTime 会随每段片段的滚动区间变化。
  • 移动端——仅当用户选择了移动端版本(步骤 1.6)时,才进行完整检查清单。 对于仅限桌面端的构建,只需在手机视口下做一次基本检查:页面能加载,静态海报能显示,没有元素重叠——引擎的加固措施可确保优雅降级。 对于移动端构建(在真实手机或模拟设备上测试,竖屏和横屏都要测):
    • 模拟手机视口,将 CPU 降速 4–6 倍并快速滚动——片段应能跟随滚动,不会卡住(这依赖于寻帧合并和 -m.mp4 编码)。
    • 确认首个场景立即显示(其静帧是海报),并且滚动时视频会立即接管——不能出现空白或黑屏场景(iOS 预热修复)。务必专门测试 iOS Safari;如果出现回归,它是唯一会变成空白的浏览器。
    • 确认移动端实际提供的是 -m.mp4 版本(检查 Network 面板),而桌面端提供的是 1080p 大师版本。移动端片段必须是原生竖屏(videoWidth < videoHeight——不能是缩小后的 16:9 文件),并且必须提供 stillMobile 海报,且与对应竖屏片段的第一帧一致(视频开始绘制时不能出现从横屏闪切到竖屏的情况)。
    • 缓慢滚动,让 URL 栏收起——页面不能跳动(触摸操作时忽略仅高度变化)。旋转设备——布局应能平顺地重新排布。
    • 仅当使用了裁剪回退方案(没有预算用于竖屏素材链)时:竖屏画面会把 16:9 片段裁剪到中央——确认焦点主体仍清晰可辨,并提醒用户这只是权宜之计,不是移动端版本。
  • 检查减少动态效果设置(应回退到静帧,不播放视频,也不显示粒子)。

易踩的坑(经验之谈)

  • 接缝跳变 → 连接片段的端点使用了场景图静帧,而不是相邻片段的实际帧。务必提取真实帧(步骤 5)。
  • 接缝卡顿/镜头“倒退跳变” → 即使接缝匹配了帧,如果镜头速度反向(先向前推进,再接一个向后拉出的连接片段),看起来也会像倒带。这是架构 B 固有的问题。任何写实漫游都应使用架构 A(一次连续向前拍摄——各段从实际最后一帧开始衔接,不向后拉,也不使用 --end-image);参见步骤 4。
  • 视频冻结/卡在第 0 帧 → seekable=[0,0];主机未提供字节范围服务。请使用 blob URL(引擎会使用)。
  • 文件过大 → 你使用了全帧内编码。请改用 -g 8 + blob。
  • 画面模糊/质量低 → 你缩小了分辨率或压缩过度。请按原生 1080p 编码,crf ≤ 20,并添加 unsharp。视频本质上比静帧更模糊——为获得最高保真度,请将静帧保留为轻量备用方案。
  • 并发生成返回 503/出现 “not_enough_credits” 竞争 → 多个任务同时启动时会暂时出现;重新生成单个失败任务即可,实际上并非额度不足(用 higgsfield workspace list 验证)。
  • NSFW 误报(Seedance status "nsfw") → 视频内容过滤器会标记完全无害的片段,尤其是卧室、泳池、水疗/康养场景,以及 “bed”、“pool”、“waterfall”、“wine”、“swim” 等触发词。原因部分在于提示词措辞,部分在于参考帧。按以下顺序尝试修复:(1) 重新生成——结果通常不确定,第 2–3 次尝试往往能通过;(2) 删除触发词,并添加 “empty, unoccupied, no people, no figures, architectural, tasteful”;(3) 使用相同的起始/结束帧,仅在 kling3_0 上重新生成该片段——其他提供商的过滤器往往会放行 Seedance 阻止的内容。该片段的渲染风格可能略有变化(每个模型的颗粒感/运动感各不相同);对于淡入淡出后方的 5 秒连接片段,这通常比方案 (4) 更好:将连接片段槽位设为 null——引擎会直接淡化该接缝(连接片段为可选项),因此页面仍能完成。室内/房地产内容需预留额外额度和时间,以便重新生成。
  • 深色/自定义主题 → 引擎将默认令牌封装在 @layer sw 中,因此页面级的 :root / .sw-root { --sw-bg; --sw-ink; --sw-accent; --sw-font-* } 块可以直接覆盖(无需处理选择器优先级)。--sw-ink 是主要的文本/标题颜色;强调色用于填充主按钮和当前导航项。深色主题请将 --sw-bg 设为深色、将 --sw-ink 设为浅色——文案遮罩层和标题阴影会自动跟随 --sw-bg。
  • 手机上拖动进度时卡顿/快速滑动后冻结 → 1080p 母版对手机解码器来说太重,寻帧请求不断堆积。请提供 -m.mp4 移动端编码(720p、-g 4),并配置 clipMobile/connectorsMobile(步骤 6/7)。引擎已会合并寻帧请求;轻量编码也是解决方案的一部分。低端设备上仍然卡顿?请缩短 GOP(-g 2/全帧内编码)。
  • iOS 上场景空白/黑屏(桌面端正常) → 这是 iOS Safari 的一个问题:从未播放过的静音视频不会绘制寻帧后的画面。引擎通过在片段完成绘制前保留静帧作为海报,并在首次触摸时预热每个视频来修复此问题——因此,如果你将引擎适配到框架中,不要在 loadedmetadata 时隐藏静帧,也不要移除 playsinline/muted 属性。
  • 移动端滚动时页面跳动 → 某些操作会在 URL 栏显示/隐藏时触发 resize,重新执行布局。引擎会忽略触屏设备上仅高度变化的调整大小;如果你移植了引擎,请仅在宽度变化时触发调整大小处理程序(旋转时仍保留 orientationchange 处理路径)。
  • 移动端文案被 URL 栏/刘海遮挡 → 使用引擎支持安全区域的底部偏移(env(safe-area-inset-bottom) + dvh);确保页面的 <meta viewport> 包含 viewport-fit=cover(模板中已设置)。
  • 纵向画面裁切了场景 → 高屏手机上播放 16:9 片段时只能显示中间部分——因此移动端版本应使用原生 9:16 片段链(§6b),而不是裁切。如果移动端构建中出现此问题,可能是发布了裁切备用版本(请向用户说明),或者实际提供的并非 9:16 编码(检查 videoWidth < videoHeight)。每个场景的焦点主体仍应保持居中(prompts.md),这对桌面影片本身也很重要。
  • seedance 上 --generate-audio 报错 → 请省略该参数;在 HTML 中静音,并在编码时使用 -an。
  • Kling 拒绝你的标志参数 → kling3_0 没有 --resolution 参数(不要传入;请按 ffprobe 报告的原生分辨率编码),且默认开启声音——请传入 --sound off。默认时长为 5;分段/推进片段需要 10。
  • 只有你“省了额度”的位置出现接缝跳变 → 你在片段链中途切换了模型,或者连接片段需要 --end-image,却使用了仅支持起始图像的模型。整条片段链应使用同一个模型;唯一的低价档是 seedance_2_0_mini,它支持帧锁定,因此可以保持无缝。(任何仅接受参考图像的模型都无法保持接缝——参见步骤 4。)
  • Monid seedance 拒绝内嵌图像 → 错误信息为 “Must be a public https:// URL or an asset:// reference”:帧需通过免费 sfs 文件系统传递(put → curl -T → cat → 签名 URL;pipeline.md → Monid 后端),不要使用 base64。注意:/put 会回显 home/<path>,但 /cat 和 /ls 需要的是你传给 /put 的原始相对路径——使用回显路径会返回 404。
  • Monid 片段宽高比错误 → ratio 默认采用自适应模式,会跟随输入图像(3:2 静帧 → 近似 4:3 的视频)。每个链式片段都要显式传入 --ratio——桌面端用 16:9,移动端链用 9:16。
  • Monid CLI 显示 “Polling timed out after 120s” → 只是本地等待超时;任务仍在服务端继续运行。使用 monid runs get -r <runId> -w 120 重新轮询(在 monid runs list 中查找 ID)。结果 URL 会过期(约 24–48 小时)——请立即下载。
  • Monid minimax 在有提示词时丢弃图像 → 同时传入 prompt 和 first_frame_image 会返回无关的 t2v 片段,而且会按错误的计费矩阵单元收费(实测为 $0.56,而非 $0.28)。仅传入图像可以锁定帧,但无法控制镜头。在封装器修复之前,此端点无法用于链式生成——请使用 Monid 的 seedance-2.0。(模型本身没有问题——通过 Higgsfield minimax_hailuo 传入相同的提示词 + 图像即可锁定帧。)
  • Monid 计费异常 → 按矩阵/令牌定价的端点会依据选择器匹配项计费:请显式传入所有选择器字段(model、resolution、duration),并在每个片段完成后读取运行结果中的 cost.value。任何请求体中较大的 base64 字段也可能导致返回 HTML 错误页面(“Unexpected token '<'”)——这也是帧应通过 sfs URL 传递的另一个原因。
  • Monid 架构自上次构建后发生变化 → 这是常见情况(seedance 在 2026 年 7 月下旬之前仅支持 t2v,之后新增了首帧/末帧支持)。每次构建前运行 monid inspect;如果 Input 架构与 pipeline.md 中的文档不同,请重新运行步骤 4 的资格测试。
  • Codex 静帧生成卡在 “Reading additional input from stdin...” → 从同一个脚本并行启动的 codex exec 调用会共用父进程的 stdin;其中一个调用会占用它,其余调用则会永久阻塞(观察结果:3 个中只有 1 个完成,2 个卡住,第二批从未启动)。务必在每个后台运行的 codex exec 后添加 < /dev/null——流水线的 gen_still_codex 已包含此设置;若改用该命令,请保留它。
  • 白底场景 → gpt_image_2 会返回纯色背景;要么将页面背景与其匹配,要么将背景抠掉(步骤 3)。
  • macOS 上的 bash 3.2 → 脚本中不支持关联数组。
  • 连接片段抓取了错误场景的帧(或因某帧尚不存在而报错)→ 数组循环在 zsh 中运行(macOS 默认交互式 shell),而 zsh 的数组从 1 开始索引,不像 bash 从 0 开始。所有由数组驱动的片段链步骤都应放在 #!/bin/bash 脚本中,并通过 bash script.sh 运行——不要在交互式 shell 中直接运行数组循环。

参考资料

  • references/prompts.md — 素材收集清单、风格前缀模式,以及每个提示词模板(场景静帧、潜水、连接器)的填空栏位。
  • references/pipeline.md — 用于完整运行流程的复制粘贴批处理脚本(生成 → 提取帧 → 连接器 → 编码 → 移动端编码),兼容 bash-3.2。
  • references/scrub-engine.js — 可移植、由配置驱动的擦动引擎(构建 DOM + 注入 CSS;blob-seek、延迟加载、接缝交叉淡化、复制、路线栏、减少动态效果,以及手机端加固:移动端编码、seek 合并、iOS 预热、安全区域、调整大小时不跳动)。
  • references/index-template.html — 用于挂载引擎的最简独立页面。
  • references/knockout.py — 用于浮动场景的边缘连通背景抠除工具。

评论

支持 Markdown