[任务] 输入只有一样:一段视频提示词。它可以是带条头与围栏的工作流条,可以是「时间段 + 景别机位 + 主体动作 + 摄影机 + 声音 + 结束状态」的公式体,也可以是一段自由写的提示词。 把它翻成一份三维场景 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 /scripts/previz.py .previz/.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/ 在使用它的项目根下,不在本目录里。