# Previz

> 当用户发来一段视频提示词（motion prompt）想在花钱生成前先看看画面时使用——读提示词，翻成三维场景，缺画面必需的信息就一次问齐，然后直接渲成导演台风格的三维 HTML 预览：动态放映为主，宫格 / 关键帧 / 站位图 / 场记平面图 / 接缝检查按需。代码画的，不调生成模型、不占额度；引擎随本目录走，不依赖任何工作流文件。

- Skill: `feicaiclub/previz` (Agent Skill, multi-file: 13 files)
- Install (CLI): `npx skillmds@latest add feicaiclub/previz`
- Raw SKILL.md: https://api.skillmd.com/api/skills/feicaiclub/previz/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: feicaiclub (https://skillmd.com/u/feicaiclub)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/feicaiclub/previz

---


[任务]
    输入只有一样：一段视频提示词。它可以是带条头与围栏的工作流条，可以是「时间段 + 景别机位 + 主体动作 + 摄影机 + 声音 + 结束状态」的公式体，也可以是一段自由写的提示词。
    把它翻成一份三维场景 JSON：谁在哪、朝向哪、什么姿态，屋里有什么，每一段是什么景别、机位在哪、怎么动、多长。缺了画面就不成立的信息先问，问完直接渲染，把 HTML 路径、引擎版本、假设清单与自检结果交回用户。

[第一性原则]
    最终预览的质量是唯一目的：用户看这张草图是为了在花钱之前确认「我写的提示词，脑子里的画面和它是不是同一个」。任何让这次确认失真的事都不做。
    1 · **只渲染提示词写死的东西**：站位、姿态、构图、走位、运镜、时长、台词时点。光线氛围、表演、材质质感一律不渲——白模给不出，给了会误导。
    2 · **不是生成**：草图是代码画的示意图，不调任何生成模型，不占用户额度。
    3 · **先推断，后提问，一次问齐**：提示词里有的直接用；能按常识推断且不改变画面判断的直接推断、把假设逐条列出来；只有缺了画面就不成立的才问——一问问齐、每问附默认值，用户回「按默认」就按默认渲。没有提问渠道时按默认渲，假设写在交付的最前面。判据在 references/prompt-to-scene.md [必需 · 可推断 · 缺就不填]。
    4 · **不设门禁，自检只报不拦**：草图不阻塞任何事。越轴、接缝、数据健康三项照报，但这里没有镜头表可以回流——报出来是给用户看提示词里机位是否自相矛盾，改不改由用户定。
    5 · **草图丑不等于提示词错，草图顺眼不等于成片稳。** 这句要原样告诉用户。
    6 · **人一律是 figures，陈设按 kind 词表认，词表没有的用基元拼**，不把人写成陈设、不写 block 凑数——这是草图跨场、跨模型、跨机器同一水平的来源。

[依赖检测]
    - 引擎本体 `scripts/previz.py` 与 `scripts/three.min.js` 在本 skill 目录内。下文命令里的 `<skill>` 指本目录从项目根算起的路径，装在 Claude Code 里通常是 `.claude/skills/previz`，Codex 里是 `.agents/skills/previz`。先跑 `python3 <skill>/scripts/previz.py --version`，要打出「previz 3.x」。低于 3 或没有 --version 的是旧引擎，人会画成锥台加方块：**停**，让用户把最新的整个 skills/previz 目录整体替换过来，不手搓 HTML 替代。
    - python3 可用；HTML 用任何现代浏览器打开，three.js 已内嵌、不需要联网。
    - 产物落在当前项目根的 `.previz/`：`<id>.json` 与同名 `.html`。目录没有就建；它是派生物，不属于本 skill，随时可删可重生成。

[执行方式]
    六步，判据全部在 references/prompt-to-scene.md，schema 在 references/scene-schema.md；两份都要先读完再动手。
    1 · 认格式：工作流条（条头 + 围栏）/ 公式体（[mm:ss-mm:ss] 分段）/ 自由文本。三种格式六类信息各从哪一段抽，见 [两种输入怎么认] 与 [六类信息从哪来]。
    2 · 抽六类：画幅与时长；空间与陈设；人物（数量、代称、相对站位、姿态、朝向、视线）；焦点物；分段→镜（每段的景别、机位方向、运镜、时长）；台词与音效时点。
    3 · 判缺失：按 [必需 · 可推断 · 缺就不填] 三档过一遍。必需项缺了就按 [提问模板] 一次问齐，最多五问、每问带默认值；用户答完或说按默认，再往下走。可推断项直接推断，写进 meta.note 的假设清单；缺就不填的项整项删掉，不猜。
    4 · 翻 JSON：先定机位侧（默认机位一侧 = z 大的那一侧），再摆地标，再摆人，再逐段摆机位；景别→视场角与机位距离查 [景别怎么翻] 那张表；方位词怎么变坐标查 [方位词 → 坐标]。落盘 `.previz/<id>.json`，id 取条号，没有条号取提示词首句的短串。
    5 · 渲染并读自检：
        python3 <skill>/scripts/previz.py .previz/<id>.json -m play
        终端三段都要读：数据健康（有 [拦下] 就没渲，退出码 2，就地补数据重跑）、轴线、接缝。默认只出动态放映；用户点名再出 grid / keyframes / plan / stage / cut，同一份 JSON 不用改。
    6 · 交付：HTML 路径；终端「引擎 3.x」那一行；假设清单逐条；三项自检各一行；一句边界——草图只验证构图、站位、姿态、走位、运镜、节奏时长、台词时点，光线、表演、质感它给不出；草图丑不等于提示词错，草图顺眼不等于成片稳。
    用户改了提示词回来重渲：只改 JSON 里对应的字段，不重翻全篇；改动涉及站位或机位时三项自检重读一遍。

[结构化结果]
    返回给用户或上游编排的固定几样：HTML 路径与引擎版本；镜数、总时长、画幅；问了什么与用户怎么答；推断了什么（假设清单）；三项自检结论；数据取自提示词的哪几段。

[文件结构]
    previz/                              # 本目录整体即 skill，拷到 .claude/skills/ 或 .agents/skills/ 下即用
    ├── SKILL.md
    ├── scripts/
    │   ├── previz.py                    # 渲染引擎本体 3.x（导演台三维白模），schema 与自检的唯一真相源；--version 核对
    │   └── three.min.js                 # three.js r128，内嵌进 HTML，草图离线可开
    ├── references/
    │   ├── prompt-to-scene.md           # 提示词 → 场景的判据卡：格式识别、六类信息来源、必需/可推断/不填、景别翻译、方位翻译、提问模板
    │   └── scene-schema.md              # 场景 JSON 的字段参考：坐标、陈设词表与基元、人偶姿态、摄影机三形态、六模式
    ├── templates/
    │   └── scene-template.json          # 可直接填空的母版，留着占位符跑会被引擎拦下（退出码 2）
    └── examples/
        ├── sample-prompt-pawnshop.md    # 一条真实的工作流条提示词（输入样本）
        ├── sample-prompt-pawnshop.scene.json  # 它翻出来的场景 JSON（输出样本，无需提问）
        ├── sample-prompt-formula.md     # 一段公式体提示词（输入样本，故意缺画幅与站位，示范提问）
        ├── scene-pawnshop.json          # 室内双人标杆，含环绕运镜
        └── scene-courtyard.json         # 外景单人标杆，含蹲姿、逐镜姿态覆盖、轴上镜
    产物 `.previz/` 在使用它的项目根下，不在本目录里。

