From 22dd44a78ee002b04dee3b4dcc1be4646895d980 Mon Sep 17 00:00:00 2001 From: zhanglinghao Date: Sun, 4 Oct 2026 12:36:35 +0800 Subject: [PATCH 1/3] Review rounds get caps; reading time follows the film's Pace instead of fixed seconds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A studio film's independent review ran 11 full rounds: each fresh reviewer found new taste nits, scores hovered at 7-9, and small fixes sometimes broke something else. The maintainer asked for at most 5 rounds per kind of issue, 10 in all, no full review for a small fix, and no hard-coded text intervals ("有的时候太慢"). Review caps (TASTE_CHECKLIST scoring layer, CLAUDE.md/AGENTS.md, playbook/01 and 02, READMEs, NOTES/REVIEW templates, video-types/09): - at most 10 full review rounds per film, then ship or go to gate 3; - the same kind of issue (one checklist item on one shot or segment) gets at most 5 fix-and-check cycles, then it is a known limitation for the human; - a local fix is rechecked on its own span (frames, strips, the automated checks, the author's look); a new round is for structural changes or the last pass; - minimums unchanged (standard 1, studio >= 3 with all eight >= 8); - a later round contradicting an earlier one on a taste item may be overruled with a DECISIONS line; - NOTES gets a one-line-per-round log, a per-issue counter and known limitations; bin/vh effort prints the caps. Reading time: - floor (TASTE_CHECKLIST #5): one brisk read, CJK/7 + other/20 + 0.5 s, never under 1 s; no fixed 2.5 s minimum; - target (taste default): BRIEF "- Pace: relaxed | normal | brisk", default normal: relaxed CJK/4.5 + other/15 + 1.0 s, normal CJK/6 + other/18 + 0.6 s, brisk = the floor; - tools/readcheck.py: --pace, else the nearest BRIEF's Pace, else normal; FAIL (exit 1) under the floor, WARN (exit 0) under the target; data-pace and "pace" per text; labels use brisk; old flags retune the target only; --budget and -h describe both; bin/vh rhythm draws WARNs amber; - playbook/03 §2 explains the numbers; templates, recipes (three recomputed at normal), style presets, a case and research note 04 stop restating 2.5 s; CI covers the new rules. --- AGENTS.md | 12 +- CHANGELOG.md | 7 + CLAUDE.md | 12 +- README.md | 2 +- README.zh-CN.md | 2 +- bin/vh | 6 +- cases/promo-video-shotcraft.md | 2 +- docs/research/04-readability.md | 1 + docs/research/en/04-readability.md | 1 + playbook/01-pipeline.md | 4 +- playbook/02-verification.md | 9 +- playbook/03-motion-design.md | 26 ++- recipes/README.md | 8 +- recipes/rhythm/drop-blackout-slam.md | 2 +- recipes/rhythm/paparazzi-flash.md | 2 +- recipes/seam/black-card.md | 23 +- recipes/sequences/README.md | 2 +- recipes/sequences/explainer-30s.md | 6 +- recipes/sequences/launch-15s.md | 6 +- recipes/sequences/machine-eye-portrait.md | 6 +- recipes/sequences/mascot-style-tour.md | 6 +- recipes/sequences/product-film-60s.md | 8 +- recipes/sequences/time-dilation-replay.md | 6 +- recipes/sequences/workflow-as-story.md | 6 +- recipes/type/brand-imprint-open.md | 17 +- recipes/type/breath-title-card.md | 18 +- styles/blueprint/STYLE.md | 2 +- styles/clockwork-map/STYLE.md | 4 +- styles/crt-terminal/STYLE.md | 2 +- styles/dark-math/STYLE.md | 2 +- styles/editorial-data/STYLE.md | 4 +- styles/monumental-scifi/STYLE.md | 2 +- styles/product-keynote/STYLE.md | 2 +- styles/swiss-grid-type/STYLE.md | 2 +- styles/symmetry-pastel/STYLE.md | 4 +- templates/BRIEF.md | 3 +- templates/NOTES.md | 14 ++ templates/REVIEW.md | 2 +- templates/STORYBOARD.md | 2 +- templates/TASTE_CHECKLIST.md | 25 +- tools/ci.sh | 24 +- tools/readcheck.py | 273 +++++++++++++++------- tools/rhythm.py | 37 +-- video-types/01-math-science-explainer.md | 2 +- video-types/09-editing-talking-head.md | 4 +- 45 files changed, 401 insertions(+), 209 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3064000..1fd6219 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -43,10 +43,10 @@ | 风格 | 从立意推出来,可以参考 `styles/` 的预设,写明借了什么 | 写在每张立意卡的"画面"一行(专属,或借一个预设);选卡就一起定了,人可以在回复里换 | 同左;每张卡的草图就是那种风格的小样,借来的预设人想看时在 E0 补小样 | | 分镜 | 简表:镜头、时长、reads | 完整 STORYBOARD + 分镜预览图 | 同左 + animatic | | 自查 | 整片一张联系表、一张按目标屏缩的联系表、前 2 s 的 strip,20 条清单速查一遍 | 每个场景:联系表、关键动作 strip、局部 crop;20 条清单 | 同左,再加目标屏尺寸测试、循环接缝、无损帧确定性、静默故障扫描 | -| 独立评审(打分层) | 不做 | 1 轮:全新上下文的 reviewer 打 8 项分(含立意),修最差的 3 处 | ≥ 3 轮,8 项都 ≥ 8 才出片;达不到就带着分数进关卡 ③ | +| 独立评审(打分层) | 不做 | 1 轮:全新上下文的 reviewer 打 8 项分(含立意),修最差的 3 处,改过的段落做局部复查 | ≥ 3 轮、最多 10 轮,8 项都 ≥ 8 才出片;同一类问题最多改 5 次,小修只做局部复查;到上限还没过线,就带着分数进关卡 ③ | | 声音 | 可以没有,或一段配乐 / 配音加基础混音 | 配乐或配音 + 关键动作音效 + 按视频类型的混音 profile(`bin/vh mix … profile=`)+ `bin/vh qa` | 同左 + 每个动作的拟音和声像 + 最终混音 cue check + 混音报告(`bin/vh qa mix`)没有硬失败 | | 渲染与交付 | draft 画质即可,一个 mp4 | 正式画质 mp4 + 联系表 | 同左 + 网页版、GIF、封面,按需出 9:16 | -| draft 版数 | 1–2 版 | 一般 3–5 版 | 不设上限,直到过线 | +| draft 版数 | 1–2 版 | 一般 3–5 版 | 直到过线,整片评审最多 10 轮 | | subagent | 不用 | 长片按章节并行 | 并行制作 + 独立评审,按需加作曲 subagent | | 参考研究 | 只读类型文档 | + 类型文档列的案例 | + 拉片参考(`playbook/07`)、深读 `references/` | | 大致耗时(30 s 左右的片子) | 10–30 分钟 | 1–2 小时 | 3 小时以上 | @@ -54,18 +54,20 @@ 最后一行是给能调推理强度的 agent 的建议(例如 Claude Code 选模型时的 effort 档位),不能调就忽略。 +**评审有上限**:整片评审(全新上下文的 reviewer 看完整片、打满 8 项分)一支片子最多 10 轮;同一类问题(同一条清单条目落在同一个镜头或段落上)最多改 5 次,改不动就写进 NOTES 的"已知局限"交给人;一条标签的时间、一个音效的音量这类小修,只查改过的那一段,不为它重开整片评审。后一轮在口味条目上推翻前一轮时,可以保留前一轮的决定,在 `DECISIONS.md` 记一行为什么。细则见 `TASTE_CHECKLIST.md` 的打分层。 + **任何档位都不降的底线**: - 硬规则 1(每一帧是 t 的纯函数)、5(事实照抄原文)、7(不在文件里写 key); - 片中不出现数字静音(管有声片;用户要的无声片不带音轨,不适用); - 全屏闪白每秒不超过 3 次; - 字号不低于 BRIEF"在哪看"那一档的下限(`playbook/03-motion-design.md` §4); - 素材许可要记清; -- `TASTE_CHECKLIST.md` 里标【底线】的条目:安全框、读时、字号、字不被光烧白、reads 不被盖掉、循环接缝、分镜里声明的卡点、没有占位和编造; +- `TASTE_CHECKLIST.md` 里标【底线】的条目:安全框、读时(够快读一遍;从容多少跟 BRIEF 的 `Pace` 走,是口味)、字号、字不被光烧白、reads 不被盖掉、循环接缝、分镜里声明的卡点、没有占位和编造; - 出片前跑一次 `bin/vh check`。 `quick` 省掉的是轮数和审阅,不是这些。 -**底线之外都是默认口味**:`TASTE_CHECKLIST.md` 里没标【底线】的条目、BRIEF 的 Motion defaults、类型文档 Prompt 增量块里的语域和节拍、镜头配方,都是没有立意时的稳妥做法。风格预设只是参考:借了什么在 `DECISIONS.md` 记一行,不借、借一半、几个混着借都行,和它不一样不用解释;借来的东西碰到清单里没标【底线】的条目,照口味覆盖记一行。立意需要时可以反着来:在写用到它的场景之前,把改了什么、立意为什么需要写在立意卡或 STYLE.md 上,记进 `DECISIONS.md`;人批过的卡上写了的,算人的决定,reviewer 只查有没有做到;之后才加的由 reviewer 判断站不站得住,判了 FAIL 再补的不算(`playbook/12-ideation.md` 第 6 节)。类型文档"禁止"一节也分两种:管事实、许可、可读和隐私的是底线,管长相的(配色、质感、缓动、图表样式)是默认口味。规则是用来防止犯错的,不是用来规定口味的。 +**底线之外都是默认口味**:`TASTE_CHECKLIST.md` 里没标【底线】的条目、BRIEF 的 Motion defaults 和 `Pace`、类型文档 Prompt 增量块里的语域和节拍、镜头配方,都是没有立意时的稳妥做法。风格预设只是参考:借了什么在 `DECISIONS.md` 记一行,不借、借一半、几个混着借都行,和它不一样不用解释;借来的东西碰到清单里没标【底线】的条目,照口味覆盖记一行。立意需要时可以反着来:在写用到它的场景之前,把改了什么、立意为什么需要写在立意卡或 STYLE.md 上,记进 `DECISIONS.md`;人批过的卡上写了的,算人的决定,reviewer 只查有没有做到;之后才加的由 reviewer 判断站不站得住,判了 FAIL 再补的不算(`playbook/12-ideation.md` 第 6 节)。类型文档"禁止"一节也分两种:管事实、许可、可读和隐私的是底线,管长相的(配色、质感、缓动、图表样式)是默认口味。规则是用来防止犯错的,不是用来规定口味的。 ## 导演模式:谁来拍板 @@ -129,7 +131,7 @@ effort 管 agent 自己查得多细,导演模式管人拍板哪些事,两个 1. **每一帧都是 t 的纯函数。** 不用 `Math.random()`、`Date.now()`、CSS transition 或 `@keyframes`,不保存跨帧状态;需要随机时用带种子的 `hash(i)`。乱序渲染同一帧,结果必须一致。检验方法:从中间抽几帧单独渲染,和整片里的同一帧比对,要逐像素相同;如果 GPU 光栅化带来细微差异,PSNR 至少 45 dB,而且肉眼看不出。比的是无损 PNG 帧,不是编码后的 mp4(x264 会放大差异)。 2. **有声音时,音频决定时长。** 先生成配音或拿到歌曲,转成词级时间戳和节拍表,再用实测时长回写分镜,让画面去对齐音频。静音视频的时长由分镜里的 reads 决定,画面必须在静音下读得懂。 3. **先分镜后代码。** 分镜里给每个镜头写出观众必须依次看懂的 reads,并标起止时间;重要的 reads 不能重叠。 -4. **每个场景都要自查。** 至少包括:一张联系表,关键动作一条逐帧 strip,承载剧情的脸或细节一个 crop;对照 `TASTE_CHECKLIST.md`,发现问题就修。整片 draft 还要过清单里的打分层:换一个严苛的 reviewer 按 8 个维度(含立意)打分,每项都要 ≥ 8。自查成本很低,不要省。 +4. **每个场景都要自查。** 至少包括:一张联系表,关键动作一条逐帧 strip,承载剧情的脸或细节一个 crop;对照 `TASTE_CHECKLIST.md`,发现问题就修。整片 draft 还要过清单里的打分层:换一个严苛的 reviewer 按 8 个维度(含立意)打分,每项都要 ≥ 8;轮数有上限,小修只查改过的那一段(见上面的"评审有上限")。自查成本很低,不要省。 5. **事实有纪律。** 论文元数据、数字、引文一律照抄原文;拿不准的写进 `NOTES.md`,不编进视频。 6. **只在 `projects/` 里改东西。** `engines/` 是模板,`references/repos/` 是只读参考;需要时复制到自己的项目里再改。 7. **不在文件里写 API key。** 一律从环境变量读取;缺 key 时告诉用户需要哪个。 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dc47e9..ac8bd95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## Unreleased +**Review rounds have caps; reading time follows the film's pace instead of fixed seconds** +- Why: a `studio` film's independent review ran 11 full rounds: each fresh reviewer found new taste nits, the scores hovered at 7–9, and small fixes sometimes broke something else. The maintainer: "我觉得可以了 其实我觉得也不必要你每次这么十几轮审阅 太多了 给项目加一个限制,每一种问题不超过5次,总共不超过10次,不要为了一个小问题就全部来一遍Review。另外,项目中关于字的节奏也不要写死间隔时间,有的时候太慢。" +- Review caps (`templates/TASTE_CHECKLIST.md`'s scoring layer; CLAUDE.md / AGENTS.md: the effort table and a new 评审有上限 paragraph; playbook/01 and 02; both READMEs; `templates/NOTES.md` and `REVIEW.md`; video-types/09). A film gets at most 10 full review rounds (a fresh-context reviewer scoring all eight dimensions over the whole film); then it ships, or the scores go to the human at gate ③. The same kind of issue (one checklist item on one shot or segment) gets at most 5 fix-and-check cycles, then goes into NOTES as a known limitation with its last evidence, for the human to decide. A local fix (one label's timing or size, a safe-frame nudge, an SFX level, one shot's layout) is checked on its own span: its frames and strips, the automated checks that cover it, the author's look; a new full round is for structural changes or the last pass. The minimums stay (standard 1 round; studio at least 3, all eight at 8 or above). When a later round contradicts an earlier one on a taste item, the author may keep the earlier decision with a line in DECISIONS. NOTES gets 评审记录 (one line a round), a 问题计数 table and 已知局限; the reviewer is given the known limitations so it stops re-raising them. `bin/vh effort standard|studio` prints the caps. +- Reading time has no fixed seconds. The floor (TASTE_CHECKLIST #5, 【底线】) is one brisk read: CJK/7 + other/20 + 0.5 s, never under 1 s. The comfortable target is a taste default set by a new BRIEF line, `- Pace: relaxed | normal | brisk` (default normal): relaxed CJK/4.5 + other/15 + 1.0 s, normal CJK/6 + other/18 + 0.6 s, brisk CJK/7 + other/20 + 0.5 s, which is the floor (the 8 CJK/s + 0.3 s first proposed for brisk sat under the floor at every length). Text the viewer already knows and short labels may run at brisk; text on a musical grid ends on a bar line instead of being padded. playbook/03 §2 explains the numbers; the old 2.5 s minimum and 1.5 s pad are gone, and #53's short-label rule folds in (labels use brisk). +- `tools/readcheck.py`: the pace comes from `--pace`, else the nearest BRIEF.md's Pace line, else normal. Under the floor is a FAIL (exit 1), under the target only a WARN (exit 0); lines read OK / WARN / FAIL (was OK / BAD). `data-pace` on a clip or scene (nearest wins, sub-compositions included) and `"pace"` in texts.json set the target for the texts under it, and `--export` writes it. `--mode label` and `data-read="label"` keep working and mean a brisk target. `--cjk-cps`, `--latin-cps`, `--pad` and `--min` still work and retune the target only. `--budget` gives the pace's target and the floor; `bin/vh readcheck -h` prints the rules. `bin/vh rhythm` draws under-the-floor texts red and under-the-target ones amber. CI covers the WARN band, the floor and its 1 s minimum, the BRIEF's Pace, `--pace`, a bad pace, and a new project's Pace line. +- Docs that restated 2.5 s now follow the rule: `templates/BRIEF.md` (Pace, Text rules), `templates/STORYBOARD.md`, video-types/01's prompt block, nine style presets, the recipes (black-card, breath-title-card and brand-imprint-open recomputed at normal: holds of 40, 56 and 36 frames, with their durations, QA frames and index rows; the sequence budgets say 读时 instead of ≥ 75 frames), `cases/promo-video-shotcraft.md`, and a current-state line in docs/research/04. + **The review desk: tick, comment and submit in a page, and the agent carries on by itself (`bin/vh desk`)** - Why: reviewing a film's first gate through the static pages, the maintainer found the outline, captions and stages hard to read (some were raw `.md` links), had no way to tick or comment in place, had to reply in chat with codes like "1 S1", and got a new one-off page every time. A prototype desk fixed that, and after two real rounds in it: "返回还是要手动给你触发,我觉得可以加一个监控", the outline should be split by content, not by 起承转合, reuse needs a basic infrastructure, and the desk belongs to `studio`, in Chinese or English by the first request. - `tools/desk/` (stdlib Python, offline, no CDN, light and dark): `bin/vh desk [--port N]` serves one project on 127.0.0.1 (the first free port of 8780–8799; a second start prints the running one's address). Ten views read fresh from the project's own files: this round (decisions with options, least sure, decided for you), concept and outline (a time bar by segment), captions or narration (grouped by segment, term chips, a rough reading speed), the storyboard synced to its video, sound (sections named from the gate JSON, listen prompts, timecoded notes), fact check, the film with timecoded notes (C key), the decision ledger, history, and every doc rendered as text. Any item can be marked ok / change / question with a line and a "change to"; a tray collects them and submits once. diff --git a/CLAUDE.md b/CLAUDE.md index a63f087..ff0ec67 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -40,10 +40,10 @@ | 风格 | 从立意推出来,可以参考 `styles/` 的预设,写明借了什么 | 写在每张立意卡的"画面"一行(专属,或借一个预设);选卡就一起定了,人可以在回复里换 | 同左;每张卡的草图就是那种风格的小样,借来的预设人想看时在 E0 补小样 | | 分镜 | 简表:镜头、时长、reads | 完整 STORYBOARD + 分镜预览图 | 同左 + animatic | | 自查 | 整片一张联系表、一张按目标屏缩的联系表、前 2 s 的 strip,20 条清单速查一遍 | 每个场景:联系表、关键动作 strip、局部 crop;20 条清单 | 同左,再加目标屏尺寸测试、循环接缝、无损帧确定性、静默故障扫描 | -| 独立评审(打分层) | 不做 | 1 轮:全新上下文的 reviewer 打 8 项分(含立意),修最差的 3 处 | ≥ 3 轮,8 项都 ≥ 8 才出片;达不到就带着分数进关卡 ③ | +| 独立评审(打分层) | 不做 | 1 轮:全新上下文的 reviewer 打 8 项分(含立意),修最差的 3 处,改过的段落做局部复查 | ≥ 3 轮、最多 10 轮,8 项都 ≥ 8 才出片;同一类问题最多改 5 次,小修只做局部复查;到上限还没过线,就带着分数进关卡 ③ | | 声音 | 可以没有,或一段配乐 / 配音加基础混音 | 配乐或配音 + 关键动作音效 + 按视频类型的混音 profile(`bin/vh mix … profile=`)+ `bin/vh qa` | 同左 + 每个动作的拟音和声像 + 最终混音 cue check + 混音报告(`bin/vh qa mix`)没有硬失败 | | 渲染与交付 | draft 画质即可,一个 mp4 | 正式画质 mp4 + 联系表 | 同左 + 网页版、GIF、封面,按需出 9:16 | -| draft 版数 | 1–2 版 | 一般 3–5 版 | 不设上限,直到过线 | +| draft 版数 | 1–2 版 | 一般 3–5 版 | 直到过线,整片评审最多 10 轮 | | subagent | 不用 | 长片按章节并行 | 并行制作 + 独立评审,按需加作曲 subagent | | 参考研究 | 只读类型文档 | + 类型文档列的案例 | + 拉片参考(`playbook/07`)、深读 `references/` | | 大致耗时(30 s 左右的片子) | 10–30 分钟 | 1–2 小时 | 3 小时以上 | @@ -51,18 +51,20 @@ 最后一行是给能调推理强度的 agent 的建议(例如 Claude Code 选模型时的 effort 档位),不能调就忽略。 +**评审有上限**:整片评审(全新上下文的 reviewer 看完整片、打满 8 项分)一支片子最多 10 轮;同一类问题(同一条清单条目落在同一个镜头或段落上)最多改 5 次,改不动就写进 NOTES 的"已知局限"交给人;一条标签的时间、一个音效的音量这类小修,只查改过的那一段,不为它重开整片评审。后一轮在口味条目上推翻前一轮时,可以保留前一轮的决定,在 `DECISIONS.md` 记一行为什么。细则见 `TASTE_CHECKLIST.md` 的打分层。 + **任何档位都不降的底线**: - 硬规则 1(每一帧是 t 的纯函数)、5(事实照抄原文)、7(不在文件里写 key); - 片中不出现数字静音(管有声片;用户要的无声片不带音轨,不适用); - 全屏闪白每秒不超过 3 次; - 字号不低于 BRIEF"在哪看"那一档的下限(`playbook/03-motion-design.md` §4); - 素材许可要记清; -- `TASTE_CHECKLIST.md` 里标【底线】的条目:安全框、读时、字号、字不被光烧白、reads 不被盖掉、循环接缝、分镜里声明的卡点、没有占位和编造; +- `TASTE_CHECKLIST.md` 里标【底线】的条目:安全框、读时(够快读一遍;从容多少跟 BRIEF 的 `Pace` 走,是口味)、字号、字不被光烧白、reads 不被盖掉、循环接缝、分镜里声明的卡点、没有占位和编造; - 出片前跑一次 `bin/vh check`。 `quick` 省掉的是轮数和审阅,不是这些。 -**底线之外都是默认口味**:`TASTE_CHECKLIST.md` 里没标【底线】的条目、BRIEF 的 Motion defaults、类型文档 Prompt 增量块里的语域和节拍、镜头配方,都是没有立意时的稳妥做法。风格预设只是参考:借了什么在 `DECISIONS.md` 记一行,不借、借一半、几个混着借都行,和它不一样不用解释;借来的东西碰到清单里没标【底线】的条目,照口味覆盖记一行。立意需要时可以反着来:在写用到它的场景之前,把改了什么、立意为什么需要写在立意卡或 STYLE.md 上,记进 `DECISIONS.md`;人批过的卡上写了的,算人的决定,reviewer 只查有没有做到;之后才加的由 reviewer 判断站不站得住,判了 FAIL 再补的不算(`playbook/12-ideation.md` 第 6 节)。类型文档"禁止"一节也分两种:管事实、许可、可读和隐私的是底线,管长相的(配色、质感、缓动、图表样式)是默认口味。规则是用来防止犯错的,不是用来规定口味的。 +**底线之外都是默认口味**:`TASTE_CHECKLIST.md` 里没标【底线】的条目、BRIEF 的 Motion defaults 和 `Pace`、类型文档 Prompt 增量块里的语域和节拍、镜头配方,都是没有立意时的稳妥做法。风格预设只是参考:借了什么在 `DECISIONS.md` 记一行,不借、借一半、几个混着借都行,和它不一样不用解释;借来的东西碰到清单里没标【底线】的条目,照口味覆盖记一行。立意需要时可以反着来:在写用到它的场景之前,把改了什么、立意为什么需要写在立意卡或 STYLE.md 上,记进 `DECISIONS.md`;人批过的卡上写了的,算人的决定,reviewer 只查有没有做到;之后才加的由 reviewer 判断站不站得住,判了 FAIL 再补的不算(`playbook/12-ideation.md` 第 6 节)。类型文档"禁止"一节也分两种:管事实、许可、可读和隐私的是底线,管长相的(配色、质感、缓动、图表样式)是默认口味。规则是用来防止犯错的,不是用来规定口味的。 ## 导演模式:谁来拍板 @@ -126,7 +128,7 @@ effort 管 agent 自己查得多细,导演模式管人拍板哪些事,两个 1. **每一帧都是 t 的纯函数。** 不用 `Math.random()`、`Date.now()`、CSS transition 或 `@keyframes`,不保存跨帧状态;需要随机时用带种子的 `hash(i)`。乱序渲染同一帧,结果必须一致。检验方法:从中间抽几帧单独渲染,和整片里的同一帧比对,要逐像素相同;如果 GPU 光栅化带来细微差异,PSNR 至少 45 dB,而且肉眼看不出。比的是无损 PNG 帧,不是编码后的 mp4(x264 会放大差异)。 2. **有声音时,音频决定时长。** 先生成配音或拿到歌曲,转成词级时间戳和节拍表,再用实测时长回写分镜,让画面去对齐音频。静音视频的时长由分镜里的 reads 决定,画面必须在静音下读得懂。 3. **先分镜后代码。** 分镜里给每个镜头写出观众必须依次看懂的 reads,并标起止时间;重要的 reads 不能重叠。 -4. **每个场景都要自查。** 至少包括:一张联系表,关键动作一条逐帧 strip,承载剧情的脸或细节一个 crop;对照 `TASTE_CHECKLIST.md`,发现问题就修。整片 draft 还要过清单里的打分层:换一个严苛的 reviewer 按 8 个维度(含立意)打分,每项都要 ≥ 8。自查成本很低,不要省。 +4. **每个场景都要自查。** 至少包括:一张联系表,关键动作一条逐帧 strip,承载剧情的脸或细节一个 crop;对照 `TASTE_CHECKLIST.md`,发现问题就修。整片 draft 还要过清单里的打分层:换一个严苛的 reviewer 按 8 个维度(含立意)打分,每项都要 ≥ 8;轮数有上限,小修只查改过的那一段(见上面的"评审有上限")。自查成本很低,不要省。 5. **事实有纪律。** 论文元数据、数字、引文一律照抄原文;拿不准的写进 `NOTES.md`,不编进视频。 6. **只在 `projects/` 里改东西。** `engines/` 是模板,`references/repos/` 是只读参考;需要时复制到自己的项目里再改。 7. **不在文件里写 API key。** 一律从环境变量读取;缺 key 时告诉用户需要哪个。 diff --git a/README.md b/README.md index e725bff..ed62f98 100644 --- a/README.md +++ b/README.md @@ -206,7 +206,7 @@ Not every film deserves the full process. Say "quick draft" or "studio quality" |---|---|---|---| | For | trying a direction, drafts | most real videos | launches, flagship pieces | | Stops for you | none | three | three, plus a short sample of each direction and a full-length animatic | -| Second-agent review | none | one round | at least three, all eight scores at 8 or above | +| Second-agent review | none | one round | three to ten, all eight scores at 8 or above; a small fix is rechecked on its own span, not with a new round | | A 30-second film takes about | 10–30 min | 1–2 h | 3 h or more | At every level: no invented facts, no sudden silence in a film with sound, no rapid flashing, and type no smaller than the floor for the target screen. diff --git a/README.zh-CN.md b/README.zh-CN.md index cbef345..bc574ba 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -206,7 +206,7 @@ AI 听不见,所以声音尽量做成能计算、能测量的: |---|---|---|---| | 适合 | 试方向、草稿 | 大多数正式视频 | 发布片、旗舰内容 | | 停下来等你 | 不停,直接出片 | 三次 | 三次,另附每个创意方向的样片和全片动态分镜(animatic) | -| 另一个 agent 打分 | 不打 | 1 轮 | 至少 3 轮,8 项都要 8 分以上 | +| 另一个 agent 打分 | 不打 | 1 轮 | 3 到 10 轮,8 项都要 8 分以上;小修只复查改过的那一段,不重开一轮 | | 30 秒的片子大概要 | 10–30 分钟 | 1–2 小时 | 3 小时以上 | 哪一档都不放松的:事实不编、有声片里没有突然的静音、画面不频闪、字不小于目标屏幕的下限。 diff --git a/bin/vh b/bin/vh index 0bc788a..f87a17b 100755 --- a/bin/vh +++ b/bin/vh @@ -52,8 +52,9 @@ # mux