@oh-story/dsh 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (444) hide show
  1. package/README.md +7 -7
  2. package/lib/client.js +7 -3
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +212 -142
  5. package/lib/drama/skills/short-drama/SKILL.md +14 -2
  6. package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
  8. package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
  9. package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
  10. package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
  11. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
  12. package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
  13. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  14. package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
  15. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
  16. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
  17. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
  18. package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
  19. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
  20. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
  21. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
  22. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
  23. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
  24. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
  25. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
  26. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
  27. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
  28. package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
  29. package/lib/drama/skills/short-drama-edit/SKILL.md +43 -20
  30. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
  31. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
  32. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
  33. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
  34. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
  35. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
  36. package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
  37. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
  38. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
  39. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
  40. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
  41. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
  42. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
  43. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
  44. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
  45. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
  46. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +4 -2
  47. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +3 -1
  48. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +6 -2
  49. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +12 -6
  50. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +13 -8
  51. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1153 -121
  53. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +49 -9
  54. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
  55. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
  56. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
  57. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
  58. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
  59. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
  60. package/lib/drama/skills/short-drama-review/SKILL.md +2 -2
  61. package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
  62. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
  63. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
  64. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +15 -0
  65. package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
  66. package/lib/drama/skills/short-drama-storyboard/SKILL.md +13 -5
  67. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
  68. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +82 -14
  70. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +4 -2
  71. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +5 -3
  72. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +12 -0
  73. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
  74. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
  75. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +40 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +20 -14
  77. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +1 -1
  78. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +8 -7
  79. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
  80. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  81. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
  82. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
  83. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
  84. package/lib/drama/skills/short-drama-write/SKILL.md +8 -3
  85. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
  86. package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
  87. package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
  88. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
  89. package/lib/index.js +71 -21
  90. package/lib/index.js.map +3 -3
  91. package/lib/oh-story/manifest.json +545 -310
  92. package/lib/oh-story/roles/chapter-extractor.md +11 -11
  93. package/lib/oh-story/roles/character-designer.md +1 -2
  94. package/lib/oh-story/roles/consistency-checker.md +11 -9
  95. package/lib/oh-story/roles/narrative-writer.md +24 -25
  96. package/lib/oh-story/roles/story-architect.md +9 -61
  97. package/lib/oh-story/roles/story-explorer.md +20 -125
  98. package/lib/oh-story/roles/story-researcher.md +0 -1
  99. package/lib/oh-story/skills/story/SKILL.md +6 -6
  100. package/lib/oh-story/skills/story/VERSION +1 -1
  101. package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
  102. package/lib/oh-story/skills/story/references/author-memory.md +40 -118
  103. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +3 -3
  104. package/lib/oh-story/skills/story-deslop/SKILL.md +24 -25
  105. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
  106. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +1 -1
  107. package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  108. package/lib/oh-story/skills/story-deslop/references/author-memory.md +40 -118
  109. package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
  110. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +21 -4
  111. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
  112. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +3 -3
  113. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
  114. package/lib/oh-story/skills/story-import/SKILL.md +63 -579
  115. package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
  116. package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
  117. package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
  118. package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
  119. package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
  120. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
  121. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
  122. package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
  123. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +95 -91
  124. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
  125. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
  126. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +11 -9
  127. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
  128. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +101 -14
  129. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +278 -23
  130. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +179 -23
  131. package/lib/oh-story/skills/story-long-analyze/SKILL.md +28 -50
  132. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +12 -5
  133. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +1 -1
  134. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
  135. package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
  136. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +21 -55
  137. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  139. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  141. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
  142. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +17 -0
  143. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +1 -1
  144. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  145. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +47 -8
  146. package/lib/oh-story/skills/story-long-scan/SKILL.md +41 -193
  147. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  148. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
  149. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  150. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
  151. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
  152. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
  153. package/lib/oh-story/skills/story-long-write/SKILL.md +32 -73
  154. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
  155. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +1 -1
  156. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +18 -201
  157. package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  158. package/lib/oh-story/skills/story-long-write/references/author-memory.md +40 -118
  159. package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
  160. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +6 -10
  161. package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
  162. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
  163. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
  164. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
  165. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  166. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +3 -2
  167. package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
  168. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
  169. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
  170. package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
  171. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
  172. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
  173. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
  174. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
  175. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
  176. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
  177. package/lib/oh-story/skills/story-long-write/references/project-files.md +10 -6
  178. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +1 -1
  179. package/lib/oh-story/skills/story-long-write/references/reference-index.md +4 -4
  180. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
  181. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
  182. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  183. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
  184. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
  185. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +11 -9
  186. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +33 -44
  187. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +18 -51
  188. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
  189. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +53 -67
  190. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -251
  191. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
  192. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +5 -3
  193. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +18 -56
  194. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +3 -3
  195. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  196. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +96 -16
  197. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
  198. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +101 -14
  199. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
  200. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +2 -1
  201. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +250 -50
  202. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +278 -23
  203. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +179 -23
  204. package/lib/oh-story/skills/story-review/SKILL.md +19 -273
  205. package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
  206. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +1 -1
  207. package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
  208. package/lib/oh-story/skills/story-review/references/author-memory.md +40 -118
  209. package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
  210. package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
  211. package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
  212. package/lib/oh-story/skills/story-review/references/review-quality.md +2 -1
  213. package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
  214. package/lib/oh-story/skills/story-review/references/solo.md +52 -0
  215. package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
  216. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
  217. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +11 -9
  218. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +3 -3
  219. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
  220. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +278 -23
  221. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +179 -23
  222. package/lib/oh-story/skills/story-setup/SKILL.md +69 -458
  223. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
  224. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +1 -1
  225. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
  226. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  227. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
  228. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +21 -4
  229. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  230. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
  232. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
  234. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
  236. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
  237. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
  238. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
  239. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
  240. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
  241. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
  242. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
  243. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
  244. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  245. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +4 -4
  246. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +18 -56
  247. package/lib/oh-story/skills/story-setup/references/diagnostics.md +3 -3
  248. package/lib/oh-story/skills/story-short-analyze/SKILL.md +37 -110
  249. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
  250. package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
  251. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
  252. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
  253. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
  254. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
  255. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/{material-decomposition.md → stage4-6-reversal-summary.md} +303 -374
  257. package/lib/oh-story/skills/story-short-scan/SKILL.md +30 -64
  258. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
  259. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  260. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
  261. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
  262. package/lib/oh-story/skills/story-short-write/SKILL.md +23 -34
  263. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
  264. package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  265. package/lib/oh-story/skills/story-short-write/references/author-memory.md +40 -118
  266. package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
  267. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
  268. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
  270. package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
  271. package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -49
  272. package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
  273. package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
  274. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
  275. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
  276. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
  277. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
  278. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
  279. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
  280. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +19 -12
  281. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +22 -32
  282. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +84 -17
  283. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
  284. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +3 -3
  285. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
  286. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
  287. package/lib/types/client/video-studio.d.ts.map +1 -1
  288. package/lib/types/native-hooks.d.ts +2 -2
  289. package/lib/types/native-hooks.d.ts.map +1 -1
  290. package/lib/types/role-tool.d.ts.map +1 -1
  291. package/lib/types/skill-provider.d.ts.map +1 -1
  292. package/lib/types/video-project.d.ts.map +1 -1
  293. package/lib/types/workspace-route.d.ts.map +1 -1
  294. package/lib/video-recap/CHANGELOG.md +60 -1
  295. package/lib/video-recap/README.en.md +348 -137
  296. package/lib/video-recap/README.md +340 -136
  297. package/lib/video-recap/manifest.json +406 -251
  298. package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
  299. package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
  300. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  301. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
  302. package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
  303. package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
  304. package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
  305. package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
  306. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
  307. package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  308. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  309. package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  310. package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  311. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  312. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  313. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
  314. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
  315. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
  316. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
  317. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
  318. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
  319. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
  320. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
  321. package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  322. package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
  323. package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
  324. package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
  325. package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
  326. package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
  327. package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
  328. package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
  329. package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
  330. package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
  331. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
  332. package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
  333. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
  334. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
  335. package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
  336. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
  337. package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  338. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
  339. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
  340. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
  341. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  342. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
  343. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
  344. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
  345. package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
  346. package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
  347. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
  348. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
  349. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
  350. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
  351. package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
  352. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
  353. package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
  354. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
  355. package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
  356. package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
  357. package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
  358. package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
  359. package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
  360. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
  361. package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
  362. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
  363. package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
  364. package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
  365. package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
  366. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
  367. package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
  368. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
  369. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
  370. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
  371. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
  372. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
  373. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
  374. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
  375. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
  376. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
  377. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
  378. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
  379. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
  380. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
  381. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
  382. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
  383. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
  384. package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
  385. package/lib/video-recap/skills/video-script/SKILL.md +16 -13
  386. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
  387. package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
  388. package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
  389. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
  390. package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
  391. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
  392. package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
  393. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
  394. package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
  395. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
  396. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
  397. package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
  398. package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
  399. package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
  400. package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
  401. package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
  402. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  403. package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
  404. package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  405. package/lib/video-recap/skills/video-understanding/scripts/{agent_brief.py → briefing/builder.py} +38 -35
  406. package/lib/video-recap/skills/{video-script/scripts/brief_context.py → video-understanding/scripts/briefing/context.py} +4 -35
  407. package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
  408. package/lib/video-recap/skills/video-understanding/scripts/{brief_timeline.py → briefing/timeline.py} +5 -6
  409. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
  410. package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
  411. package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
  412. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
  413. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
  414. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
  415. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
  416. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
  417. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
  418. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
  419. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
  420. package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
  421. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
  422. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  423. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
  424. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
  425. package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  426. package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  427. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
  428. package/package.json +1 -1
  429. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -538
  430. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -603
  431. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
  432. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
  433. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
  435. package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
  436. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
  437. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +0 -399
  438. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +0 -327
  439. package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
  440. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +0 -348
  441. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
  442. /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
  443. /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
  444. /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
@@ -12,7 +12,7 @@
12
12
  1. [先落实原文,再追求画面](#先落实原文再追求画面)
13
13
  2. [镜头目的](#镜头目的)
14
14
  3. [场面调度与地理](#场面调度与地理)
15
- 4. [景别与摄影机动机](#景别与摄影机动机)
15
+ 4. [景别与摄影机动机](#景别与摄影机动机),含[运镜逐镜选](#运镜逐镜选-sht-04)
16
16
  5. [时长与切镜](#时长与切镜)
17
17
  6. [视觉方向选择](#视觉方向选择-sht-07)
18
18
  7. [相连边界](#相连边界-con-01)
@@ -39,7 +39,8 @@
39
39
  ### 动作落实表
40
40
 
41
41
  **`SHT-08 · reviewed_invariant`**: 每个有权威来源的动作只有一个主要落实镜头;其他
42
- 镜头若再次涉及该动作,必须增加反应、细节或对原信息的新理解。
42
+ 镜头若再次涉及该动作,必须增加反应、细节或对原信息的新理解。峰值处的冲击重复是有意的例外,
43
+ 见下文。
43
44
 
44
45
  原文落实数量只能证明“某段原文被引用”,不能证明动作没有提前、重复或遗漏。对转手、
45
46
  开门、受伤、揭面、拿出证物等动作,另记:
@@ -53,6 +54,14 @@
53
54
  - 后一镜已经从动作后状态开始时,运动规格不得再完整表演一次该动作。
54
55
  - 其他镜头要写清自己负责细节、反应还是重新解释,不能成为第二个主要落实镜头。
55
56
 
57
+ **冲击重复**:情绪爆发、打脸或重大反转的那一下,可以把同一个关键动作从两三个角度各给一次,
58
+ 让观众连看几遍。这是有意的选择,不是忘了对应关系,所以要写出来,并守住连续性:
59
+
60
+ - 重复镜在说明里写「冲击重复:SHOT-...」,指向主要落实镜头;
61
+ - 状态只改变一次:每个重复镜都从同一个动作前状态走到同一个动作后状态,第二遍不能在第一遍的结果上再做一次;
62
+ - 重复镜之间起止不衔接,是这项选择本身,与声明过的蒙太奇一样按 `CON-05` 处理;最后一个重复镜之后,下一镜从动作后状态开始;
63
+ - 只用在峰值。一集里处处重复,就没有哪一下是冲击了。
64
+
56
65
  ## 镜头目的
57
66
 
58
67
  `SHT-02` 要求镜头守住来源原意,并说明观众或人物在本镜结束时发生了什么变化。
@@ -136,6 +145,10 @@
136
145
  要观众读到什么反而没人回答。判断标准始终是必须被读到的信息存在于哪个尺度——证据在
137
146
  指节上就给大特写,后果在两人距离上就不该切近。
138
147
 
148
+ 项目已接受节奏档案时,近景类镜头占全集镜数的比例不低于 `close_shot_share_min`,哪些景别算近景类以
149
+ `$short-drama-develop` 对该字段的定义为准。这是全集的下限,不是每场的配额:交代空间的场可以宽,对峙和揭示的场会更紧。
150
+ 占比不够时,先看对话段是不是一直停在中景,听者反应和要落地的台词有没有给到近处。
151
+
139
152
  ### 竖屏把可用的景别收窄了
140
153
 
141
154
  上面那张表是横平竖直的电影景别谱系。**竖屏不是把它裁窄,是让其中两档变得难用**。
@@ -156,20 +169,37 @@
156
169
  推到大特写。反过来,一旦决定切镜,新镜就要在景别、角度或人物关系里至少改变一项;
157
170
  相邻两镜完全同景别、同角度、同关系时,这次切镜没有职责,应当改变收放或并回一镜。
158
171
 
159
- 一个时间段内选择一套连贯的摄影机行为:
172
+ ### 运镜逐镜选 (`SHT-04`)
173
+
174
+ 每镜的「运镜」一行按本镜目的选。先问这一镜里观众的注意要不要移动、往哪里移,从上往下对照:
175
+
176
+ | 本镜在做什么 | 运镜 |
177
+ |---|---|
178
+ | 人物移动本身是这一镜的事:冲、追、逼近、爬上高处 | 跟拍或横移,让他在画面里的位置保持住 |
179
+ | 新信息从画外或画面一侧进来 | 摇、俯仰或后拉,停在新信息上 |
180
+ | 一句台词或一个认识正压到某人身上,对白镜里的说话者与听者都算 | 缓推或前移,停在承受者的脸或手上;拉开则是关系变远 |
181
+ | 两人的关系或处境在原地被重新评估:绕过去才看得到的另一面、被围住 | 环绕 |
182
+ | 高度本身有意义:升起交出全局或结局,落下把观众接进人物所在的高度 | 升降;不为“开场要大气”而升降 |
183
+ | 情绪爆发、重大反转 | 短促推近;定格、闪白由剪辑实现,本镜写明落在哪一拍 |
184
+ | 观察、等待、紧张、仪式、受困;插入镜;对白镜里这句台词不带来压力或处境的变化 | 固定 |
160
185
 
161
- - 固定机位用于观察、紧张、仪式或受困。
162
- - 摇镜或俯仰用于揭示信息或转移注意。
163
- - 前移或后移用于改变亲近、压力或人物认识。
164
- - 跟拍用于人物移动本身带有策略意义的场面。
165
- - 环绕用于关系或空间在原地被重新评估:绕过去才看得到的另一面、被围住的处境、
166
- 两人相对位置在不移动的情况下改变意义;没有这层理由时它只是装饰性运动。
167
- - 升降(摇臂)用于高度本身携带意义:升起交出全局或结局,落下把观众接进人物所在的
168
- 高度;不为“开场要大气”而升降。
169
- - 手持用于创作者已经接受的身体不稳或现场感。
186
+ 手持只用于创作者已经接受的身体不稳或现场感。
187
+
188
+ 固定是这张表的最后一行,不是起点:前面几行都不成立时才固定。写法是
189
+ 「运镜:<行为>,<从什么时候开始、停在哪里>;<为什么>」,固定写「运镜:固定;<为什么>」。
190
+ 固定也要写出来:这一行空着,动不动就改由视频提示词阶段替你选。只写「运镜:固定」
191
+ 说不出是上表哪一行,等于没有选。例如「运镜:缓推,他说出『给我五天』时开始,停在眼睛;这是他第一次把赌注
192
+ 压在自己身上」「运镜:固定;插入镜只要看清数字」「运镜:固定;这句话没有落到谁身上」。
193
+
194
+ 强调手段只有三种:短促推近、定格、闪白,只留给情绪爆发和重大反转,用在普通台词上,真正的峰值就
195
+ 显不出差别。跟随动作的跟拍、揭示信息的摇、压力落下时的缓推不是强调手段,任何一场都按上表使用。
196
+ 写完回读全集的「运镜」:有奔跑、有揭示、有峰值的一集,不会每镜都是固定。
170
197
 
171
198
  没有明确切换时,不要在同一时间段同时要求固定和移动。
172
199
 
200
+ **`craft_default · SHT-04`**:每镜按目的选运镜,写出行为、起止与理由;动作要跟、信息要进画、
201
+ 压力要落、峰值要强调时用有动机的运动,都不成立时固定,固定也写出行为与理由。短促推近、定格、闪白只留给峰值。
202
+
173
203
  ## 时长与切镜
174
204
 
175
205
  ### 短镜头的动作量 (`SHT-03`)
@@ -186,7 +216,8 @@
186
216
 
187
217
  ### 对白估时
188
218
 
189
- **`craft_default`**:先排完整声音事件,再确定镜长。不要先选一个短镜长,再要求人物加快语速把台词塞进去。
219
+ **`craft_default`**:先排完整声音事件,再确定镜长。不要先选一个短镜长,再要求人物加快语速把台词塞进去;
220
+ 一句台词比目标镜长更长时,把它拆到说话者与听者的几个镜头上,声音连续、画面切换,语速不变。
190
221
 
191
222
  - 有同一句、同语言、同表演方式的录音或配音时,使用实际发声区间;文件首尾静默与句内停顿分开核对,
192
223
  不把整个文件长度当作纯说话时间。没有音频时按原文、人物语速、情绪和换气估一个区间,明确标为
@@ -202,6 +233,42 @@
202
233
  文本估计是规划依据,实际生成后还需听完整性、语速和尾音。没有录音、配音或生成结果时,不把估计写成
203
234
  秒级准确的声音控制承诺;纯动作镜无需补对白预算。
204
235
 
236
+ ### 镜长从哪来 (`SHT-28`)
237
+
238
+ 镜长由声音事件和已接受的目标平均镜长共同决定,不按剧本字数或动作段数折算。字数折算得到的是
239
+ 朗读长度的平均分配,不是剪辑节奏。
240
+
241
+ 1. **排时间线**:按上一节把本场每句台词、`[VO]` 和关键声音事件排成一条时间线,再加上必须看清的
242
+ 无声动作和反应。这条时间线的长度就是本场时长。
243
+ 2. **算镜数**:项目已接受节奏档案时,本场镜数约等于本场时长除以 `target_avg_shot_seconds`,四舍五入,
244
+ 至少一镜。没有已接受档案时跳过这一步。
245
+ 3. **放切点**:按下一节的对白覆盖默认,把切点放在换人说话、听者反应、插入镜和动作变化处。每镜的
246
+ 时长就是它覆盖的那一段时间线。
247
+ 4. **回算**:本场平均镜长等于本场时长除以实际镜数。明显长于目标时,先补听者反应和插入镜,再把
248
+ 长台词拆到说话者和听者的镜头上;明显短于目标时,合并没有带来新信息的切点。
249
+
250
+ 目标平均镜长是整场的目标,不是每镜的配额:一个插入镜可以不到一秒,一句要落地的台词可以占四五秒。
251
+ 没有已接受档案时,末尾报告写出本集实际平均镜长,由创作者决定是否接受一份节奏档案。
252
+
253
+ **`craft_default · SHT-28`**:镜长由声音事件和已接受的 `target_avg_shot_seconds` 共同推出,目标是整场
254
+ 平均值;不从剧本字数折算。
255
+
256
+ ### 对白场怎么切 (`SHT-29`)
257
+
258
+ - **一句台词一个镜头**:说话者的镜头承载这一句;一句话里有转折时,可以在转折处切。
259
+ - **默认给听者**:重要的一句落下时,切到听的人,让观众看见它打中了谁。
260
+ - **来回对话用正反打**:两人交锋沿同一条轴线两侧对切,过肩或单人都可以。
261
+ - **景别顺序**:先给一个带着人物和动作的交代镜,对话落到中景或中近景,只在一句话需要落地时切到特写。
262
+ - **删空镜**:既没有台词也没有动作的镜头删掉。
263
+ - **插入镜是便宜的节奏工具**:手机屏幕、手、戒指、证件这类插入镜不需要表演,可以插在长台词或等待中间,
264
+ 也可以把一句话拆开。
265
+
266
+ 这是起步默认。一场戏有意用不切的双人镜施压,或让群像同时反应更清楚时,说明理由即可改,见
267
+ [调度手册](blocking-playbooks.md)。
268
+
269
+ **`craft_default · SHT-29`**:对白场默认一句一镜,给听者反应,交锋用正反打,先交代再落到中景,特写
270
+ 留给要落地的台词;删掉既无台词也无动作的空镜;插入镜用来调节节奏。
271
+
205
272
  ## 视觉方向选择 (`SHT-07`)
206
273
 
207
274
  焦段语言、节奏、固定机位、手持或形式化调度属于 `taste_option`,读取创作者已接受的
@@ -262,5 +329,6 @@ Seedance 2.5 的一个镜头对照中,绑定尾帧改善了末帧落位;这
262
329
  长镜头也可以在剪辑中截取,是否保留完整时长由叙事决定。
263
330
 
264
331
  多镜容器是在一次生成里安排多个切口;一镜到底则不切镜。
265
- 容器可减少提交次数,但不自动保证跨镜一致性,也仍可在生成后剪辑。
332
+ 容器可减少提交次数,但不自动保证跨镜一致性,也仍可在生成后剪辑。目标方言支持逐切挂关键帧时,
333
+ 每个切口都要有自己的已接受关键帧,具体写法见 `$short-drama-video-prompts` 的对应方言。
266
334
  各镜合并时重新整理参考素材与编号,并核对结果中的实际切点。
@@ -15,11 +15,11 @@
15
15
  | SHT-01 | structural_invariant | Every production-relevant scene action, line, sound and on-screen text is carried by a shot or explicitly omitted with a creative reason. Each shot's 来源 names scene ids that exist in `剧本.md`, and every scene is either claimed by a shot or recorded with its reason on the storyboard's `未拍场次` line. |
16
16
  | SHT-02 | reviewed_invariant | Each shot has a dramatic/viewing purpose and preserves its source meaning. |
17
17
  | SHT-03 | craft_default | Keep a short shot focused on the smallest action/reaction unit that carries its purpose; combine or split it according to performance, information, and continuity rather than a fixed count. |
18
- | SHT-04 | craft_default | Change framing/camera because attention, pressure, alignment, reveal, or rhythm changes. |
18
+ | SHT-04 | craft_default | Change framing/camera because attention, pressure, alignment, reveal, or rhythm changes. Each shot states its camera behavior, where it starts and stops, and why, chosen from the shot's purpose: follow movement that is itself the point, move to take in a reveal, push in as pressure lands on someone, and lock off only when none of these applies—a lock-off is stated with its reason too, never left blank or written bare. A locked camera is a choice, not the episode-wide default; emphasis devices—a short push-in, a freeze frame, a white flash—are reserved for emotional explosions and major reversals, while following, reveal, and pressure moves are not emphasis devices. |
19
19
  | SHT-05 | structural_invariant | A keyframe projects one shot boundary and the shot's declared visual basis. Any `IMG-...` used is an existing image-prompt heading, not a claim that generated media exists; when none is suitable, the shot names the relevant textual visual-setting entries without inventing an ID. |
20
20
  | SHT-06 | reviewed_invariant | A keyframe is one freezeable instant, not an ordered action chain. |
21
21
  | SHT-07 | taste_option | Lens vocabulary, tempo, and locked/handheld/formal style follow visual direction. |
22
- | SHT-08 | reviewed_invariant | Each authoritative source action is realized once; repeated coverage adds reaction/detail/recontextualization rather than replaying it. |
22
+ | SHT-08 | reviewed_invariant | Each authoritative source action is realized once; repeated coverage adds reaction/detail/recontextualization rather than replaying it. The one exception is a declared impact repetition at a peak: the same key action shown from two or three angles, each repeat naming the primary shot, every repeat running from the same before-state to the same after-state so the state changes once, and the next shot starting from the after-state. |
23
23
  | SHT-09 | reviewed_invariant | Exact Location/View orientation and visible anchors match the camera side used by the shot. |
24
24
  | SHT-10 | reviewed_invariant | Rendered keyframe prose contains only facts from the boundary that keyframe declares. A start frame carries no state first created by the shot's motion or end; an end frame carries no state already spent before it. Neither frame borrows the other's facts. |
25
25
  | SHT-11 | craft_default | When information changes another person's power, relationship, knowledge, or choice, preserve that reception visibly; shot count, framing, and duration follow the consequence and project profile. |
@@ -39,6 +39,8 @@
39
39
  | SHT-25 | structural_invariant | Every real reference image a shot binds declares one 用途 from the closed set 身份/造型状态/地理/构图/尺度/效果/起始帧/结束帧/风格, so the shot can say which start frame and which identity/geography/prop pictures a downstream job sends. At most one 起始帧 and one 结束帧 per shot, and 结束帧 requires 起始帧. |
40
40
  | SHT-26 | structural_invariant | A shot's 来源 is its claim on the screenplay: whatever it quotes, this shot is the one that films it. Every 视觉设定 entry the quote calls by name is therefore either in this shot's 视觉依据 or declared 画外 there. Quoting an action performed by someone the frame never shows takes that action off every list — no other shot claims it and nothing reports it missing, so it simply never gets filmed, and the gap only surfaces when a person watches the finished film. The check matches entry names rather than 画面代称, because a 来源 quote comes from 剧本.md; an entry that opted out with `画面代称:无` stays out of this check too. |
41
41
  | SHT-27 | reviewed_invariant | When understanding a beat requires seeing its effect on a character, provide a readable reaction or consequence. A separate shot, staging within a shared shot, sound, or an object may carry it. Judge legibility against the intended reveal; do not require a shot count or exclude group shots by default. |
42
+ | SHT-28 | craft_default | Shot durations come from the scene's sound-event timeline together with the accepted `target_avg_shot_seconds`: the timeline sets scene length, the target sets roughly how many cuts it holds, and the average is a scene-level target rather than a per-shot quota. Durations are never folded from screenplay word or paragraph counts. Under an accepted rhythm profile, close-range shots, as the profile field defines them, make up at least `close_shot_share_min` of the episode's shots. A shot shorter than the model's native minimum is designed at its narrative length, and the storyboard proposes to the creator a multi-shot container (多镜容器) of adjacent same-scene shots, declared in the delivery profile and noting that the target dialect may require an accepted keyframe for every cut; until the creator declares one, or where the dialect cannot carry it, the shot runs to the native minimum and holds its end state. A missing or proposed profile leaves the numeric checks inactive. |
43
+ | SHT-29 | craft_default | Dialogue coverage starts from one line per shot, a listener or reaction shot where a line lands, shot/reverse-shot for exchanges, an establishing shot that carries people and action, medium framings for the talk, and close-ups only where a line must land; shots with neither line nor action are cut, and inserts (a phone screen, a hand, an object) are used as cheap rhythm tools. A long line is split across speaker and listener shots rather than sped up. |
42
44
 
43
45
  ### `CON`
44
46
 
@@ -46,7 +46,8 @@ license: MIT
46
46
 
47
47
  目标为 `seedance-2.0` 时按 [Seedance 2.0 方言](references/seedance-2.0.md) 写,目标为
48
48
  `seedance-2.5` 时按 [Seedance 2.5 方言](references/seedance-2.5.md) 写,目标为 `minimax-h3` 时按
49
- [MiniMax H3 方言](references/minimax-h3.md) 写。只读命中的一份。其他目标或版本不
49
+ [MiniMax H3 方言](references/minimax-h3.md) 写,目标为 `wan-3.0` 时按 [Wan 3.0 方言](references/wan-3.0.md)
50
+ 写。只读命中的一份。其他目标或版本不
50
51
  套用相近模型的语法,继续按 [目标模型能力档案](references/target-model-profile.md) 的通用路径写。
51
52
 
52
53
  沿用 creator-first 既有骨架:`## MOTION-... · 中文名`,字段名依次使用「分镜、时长、生成方式、
@@ -78,7 +79,7 @@ license: MIT
78
79
  [对白预算](references/performance-action-timing.md#对白预算) 补做判断。秒段加总正确不代表台词说得完。
79
80
  6. 写不能动的边框:图生视频以参考帧和视觉设定锁定;文生视频把必要静态事实写入「静态视觉锚点」和可复制正文。
80
81
  7. 原样读取分镜的「起点 → 唯一动作 → 终点」,确认人物、双手和持物的状态转换都发生在镜内。
81
- 8. 写“静态锚点 → 起点 → 唯一动作(触发、接触、落点)→ 次级反应 → 运镜 → 声音 → 终点”,
82
+ 8. 写“静态锚点 → 起点 → 唯一动作(触发、接触、落点)→ 次级反应 → 运镜 → 声音 → 终点”,运镜按分镜的「运镜」一行写,
82
83
  必要时用秒数分段;下一镜从这个终点继续,不另造镜外转换。
83
84
  9. 只在真实参考帧已经说明静态外观时删除重复描述;《视觉设定.md》连续性锁的锁面不在可删之列。
84
85
  10. 把限制动作空间的已确认关系写成贯穿本镜的正向可见状态,只安排关系允许的动作通道;只有分镜明确改变关系时才写变化过程。优先用可见状态说明边界,必要时保留明确的排除条件。
@@ -135,7 +136,8 @@ license: MIT
135
136
  - 目标执行端的时长、参考、声音同轨等能力:[目标模型能力档案](references/target-model-profile.md)
136
137
  - Seedance 2.0 的中文分镜、素材与声音语法:[Seedance 2.0 方言](references/seedance-2.0.md)
137
138
  - Seedance 2.5 的长叙事、时间戳和任务类型语法:[Seedance 2.5 方言](references/seedance-2.5.md)
138
- - MiniMax H3 的结构化正文与参考模式:[MiniMax H3 方言](references/minimax-h3.md)
139
+ - MiniMax H3 的结构化正文、参考模式与逐切关键帧容器:[MiniMax H3 方言](references/minimax-h3.md)
140
+ - Wan 3.0 的中文正文、素材编号与多镜时间段:[Wan 3.0 方言](references/wan-3.0.md)
139
141
  - 多镜容器或静态漫剧的交付方式:[交付形态](references/delivery-profile.md)
140
142
  - 完成前的边界检查:[审查与示例](references/review-and-fixtures.md)
141
143
 
@@ -30,6 +30,10 @@ Camera behavior 要回答“观众注意为什么在此刻改变”。常见动
30
30
  - **relationship**:重新组织两人距离/权力;
31
31
  - **transition**:把注意交给 accepted end 或出口。
32
32
 
33
+ 镜头动不动、怎么动,由分镜本镜的「运镜」一行决定,本阶段把它写成可执行的区间,不另选。
34
+ 分镜没写「运镜」的镜头按上面的动机补选,没写不等于锁定;在「注意」里写明这是本阶段补的,
35
+ 并请 `$short-drama-storyboard` 补上这一行。
36
+
33
37
  没有动机时 lock-off 是积极选择:镜头稳定地等待角色完成一次艰难决定,比装饰性环绕更有力。
34
38
 
35
39
  ### 描述 lock-off
@@ -143,6 +147,14 @@ pan 同时微调焦点、handheld 带自然呼吸、dolly 配合轻微 tilt 未
143
147
  - ambience:连续底声,不能遮蔽剧情必需对白;
144
148
  - music:写叙事功能、进入/退出与层级,不用曲名模仿未授权作品。
145
149
 
150
+ **`craft_default`**:VO 的说话人本人在画面里(内心独白、回忆旁白)且不该开口时,向分镜请求
151
+ 让她的嘴不在画面里——背身、侧脸避开镜头、取景不含嘴部,或换成手部与物件的镜头。只能保留正脸时,
152
+ 正文把 VO 标成画外,并明写她嘴唇全程闭合,生成后核对口型。一组 H3 首帧小样本里,她本人正脸
153
+ 近景、三种写法各 4 次:只标画外旁白,2 次张嘴说话、1 次微张、1 次闭合;加「嘴唇完全闭合」
154
+ 为 1/2/1;再加「旁白者不在画面、画中无人动嘴」为 1/1/2。文字约束有一点作用,但靠不住。
155
+ 同框另一个人在别人说话时不该开口,也按这个顺序:分镜能安排时让他出画或背身,只能正对镜头时
156
+ 正文明写他不说话、嘴唇闭合;各模型的实测写在对应方言里。
157
+
146
158
  ### 配乐属于时间线层 (`VID-14`)
147
159
 
148
160
  先分清两件常被混在一起的事:
@@ -113,9 +113,8 @@
113
113
  - **超出**:落在**该成员镜头**已接受时长之外的那部分被执行端截断,段尾的动作、逐字
114
114
  对白和终点姿态一起丢失,`end_report` 会声称到达了从未被拍出的终点。在多镜容器里,
115
115
  它还会挤占下一个成员镜头的起点,把两个镜头的边界一起搞坏;
116
- - **不足**:未分配的余量不会空着。执行端会用未经批准的动作、表情或镜头运动把它填满,
117
- 而这些内容没有任何上游来源,审查时也无从追责。修法是把余量分配给已有阶段,或补一个
118
- 有内容的收尾段(落住反应、保持终点姿态),不要留白。
116
+ - **不足**:执行端可能把已写动作拉长去占满镜头,写下的秒点整体后移,计划不再描述成片
117
+ (观察与修法见 [motion-recipe.md](motion-recipe.md) 3.6)。
119
118
 
120
119
  ### 多镜容器的成员资格
121
120
 
@@ -253,13 +252,13 @@
253
252
 
254
253
  `〈…〉`、方括号、竖线、分段编号和对白围栏的写法**都来自创作者档案**,本套件不把其中
255
254
  任何一种拼写规定为交付格式。可迁移的只有每一行必须回答的问题。若只写到 3.4 秒就收尾,
256
- 剩下的 1.6 秒不会是静止画面,而会被执行端用它自己选的动作填满。
255
+ 前两段的动作可能被拉长去占满 5 秒,段边界的秒点就不再是实际发生的时刻。
257
256
 
258
257
  ## 六、自检
259
258
 
260
259
  1. 容器里装了几个已接受镜头?容器时长是否正好等于这些镜头已接受时长之和?
261
260
  2. 在每个成员镜头内部,各分段时长相加是否正好等于该镜头的已接受时长?余量是被分配了,
262
- 还是被留白了?
261
+ 还是只写到一半?
263
262
  3. 多镜容器的成员是否来源顺序连续、共享同一条绑定链、不跨场次?是否每个成员仍能单独审查?
264
263
  4. 分段标识是否唯一、按时间升序?有没有跳号或重复?
265
264
  5. 每个分段内是否只有一个连续视角?切换是否都落在成员镜头边界上,而不是藏在段内叙述里?
@@ -35,7 +35,8 @@
35
35
  - **精确拦截**:两个人同时争夺一件小物、用手挡住正在合上的东西、在运动中截住某物。
36
36
  它要求两个主体的时序与位置同时精确,是最容易整镜崩掉的一类。
37
37
  - **不可见的内部状态**:`像是听见了什么`、`神色一凛`、`忽然明白过来`。这些是推断,
38
- 不是画面。演员可以演,生成模型没有可执行的目标。
38
+ 不是画面。演员可以演,生成模型没有可执行的目标。改写时不删掉情绪,而是把它翻成看得见的表情或
39
+ 身体动作:`眉头猛地皱起,转头看向门口`。
39
40
  - **否定式动作**:`没有接话`、`没有按下去`、`不去看他`。画面里"没有发生的事"无法生成;
40
41
  需要改写成一个**正在发生**的替代动作。
41
42
  - **精细编排链**:一拍里串起三步以上的手部动作,尤其是左右手分工。四秒内四步双手动作,
@@ -64,7 +65,8 @@
64
65
  1. **换承担者**:让物件或环境承担变化,而不是让手承担。`门被风带上` 好过 `他用脚勾住门`。
65
66
  2. **拆到相邻镜**:把精细动作拆成"动作前"与"结果"两镜,中间的过程不拍。
66
67
  写字的过程难生成,`笔停在纸上` 与 `纸上多了一行字` 都容易。
67
- 3. **换成停留**:把"精确地做某事"换成"做完之后手没有拿开"。停留是最容易生成的表演。
68
+ 3. **换成停留**:把"精确地做某事"换成"做完之后手没有拿开"。停留只替换精细操作,不替换表演:
69
+ 情绪峰值仍要有读得出的表情和身体变化,强度见 [motion-recipe.md](motion-recipe.md) 的表演过程。
68
70
  4. **交给声音**:动作不可见时,用已声明的声源承担(见
69
71
  [camera-audio-continuity.md](camera-audio-continuity.md))。
70
72
  5. **确实不可替代时**,在运动规格里写明该镜为高风险,并给出一个可接受的降级实现,
@@ -84,7 +84,8 @@ non_diegetic_music: ...
84
84
 
85
85
  **这六段是一条提示词,一次整体提交。** 它们是同一个 `MOTION-...` 的可复制正文,从第一段到最后一段
86
86
  一起放进那一次生成的提示词框,不是六次生成、也不是只提交第一段。三段结构的 Base / 首帧 / 首尾帧同理。
87
- 一镜一次生成,所以下一镜换成它自己那条完整正文。
87
+ 默认一镜一次生成,下一镜换成它自己那条完整正文;几个镜头装进同一次生成的条件见
88
+ [多镜容器](#多镜容器每切一张关键帧)。
88
89
 
89
90
  ### 素材标签怎么编号
90
91
 
@@ -123,6 +124,8 @@ REF-STUDY-PLATE(顺序:3;用途:地理) -> <Picture 3>
123
124
 
124
125
  需要保留构图时,在 `控制` 中点名构图、站位或机位高度。
125
126
  `不得控制` 记录不应照搬的内容,生成后仍需检查实际参考影响,不能把文字声明当成模型保证。
127
+ 本镜没有起始帧时,地点图会把景别拉宽,要在 `detailed_description` 里写具体取景,见
128
+ [目标模型能力档案](target-model-profile.md#参考条件方式)。
126
129
 
127
130
  `起始帧` 只锚定开场构图与姿态,`身份` 锚定这个人跨镜不变的长相与体态(角色板同时固定本集造型时,
128
131
  `控制` 里会写明),
@@ -156,6 +159,28 @@ non_diegetic_music: N/A
156
159
  三张图各自只负责一件事:`<Picture 1>` 给构图,`<Picture 2>` 给身份,`<Picture 3>` 给地理。
157
160
  把这条差异写进 `retention_analysis`,生成后检查身份、构图与地理是否分别保留。
158
161
 
162
+ ### 多镜容器:每切一张关键帧
163
+
164
+ **`taste_option`**:几个相邻镜头可以装进同一次 full-reference 生成,每切挂它自己的已接受关键帧。
165
+ **`craft_default`**:装容器的条件是三条都满足:
166
+
167
+ - 每个成员镜头都有已接受的起始帧图片(`REF-...` 或 `PLAN-...`,`用途:起始帧`);缺一张就逐镜生成;
168
+ - 成员已接受时长之和在 4–15 秒内,且成员资格与容器算术按 [交付形态](delivery-profile.md) 的多镜容器记账;
169
+ - 容器用一份参考清单:各切关键帧按切的顺序排在前面,共用的身份、地点图接在后面,
170
+ `<Picture N>` 按这份清单的 `顺序` 编号,不照抄逐镜时的编号。
171
+
172
+ 正文第一行、`subject_definitions` 之前,写一句对齐句把每张关键帧钉到它那一切的起点:
173
+
174
+ ```text
175
+ <Picture 1> aligns with the 0.00-second mark as the opening frame of [Shot 1]; <Picture 2> aligns with the 3.00-second mark as the frame of [Shot 2]; <Picture 3> aligns with the 6.00-second mark as the frame of [Shot 3].
176
+ ```
177
+
178
+ `detailed_description` 里后续各切照常写 `[Shot 2] At 00:03.000, ...`,秒数与对齐句一致;
179
+ `retention_analysis` 为每张关键帧写它负责的那一切。一组 9 秒三切的小样本(要求 3.0/6.0 秒切):
180
+ 每切挂关键帧,切点落在 2.88–3.04 / 6.00–6.04 秒,各切与关键帧的构图相似度接近三次逐镜首帧生成,
181
+ 生成次数为三分之一;只挂第一切的关键帧时,切点偏到 2.92–3.88 / 5.88–6.21 秒,第 2、3 切的构图
182
+ 明显偏离关键帧,还出现过一次多出来的切。所以没有逐切关键帧时不装容器。
183
+
159
184
  ## 素材数量上限
160
185
 
161
186
  一次生成最多 1 张首帧、1 张尾帧、9 张 `reference_image`、3 段 `reference_video`、3 段 `reference_audio`;
@@ -209,6 +234,20 @@ H3 官方接口未提供独立 `speech_rate` 参数,也没有公布「中文
209
234
  保证两个独立 job 的音频无缝衔接。`<cutoff>` 表示视频结束时有意截断发声,只用于剧本已要求的截断,
210
235
  不用于处理装不下的完整台词。
211
236
 
237
+ ### 说话人绑定
238
+
239
+ **`craft_default`**:说话人第一次出现时,在 `<d>` 外交代他在画内还是画外、以及音色(年龄、性别、高低),
240
+ 台词跟在他的可见动作句后面(仍只出现一次),不集中列在正文末尾:
241
+ `<Subject 1> (S1), the boy on-screen with a clear high voice, opens his mouth and calls out: <d>[Chinese] ...</d>`。
242
+ 台词期间画里还有别人的正脸时,把那个人明写成不说话:
243
+ `The messenger does not speak; his lips remain completely closed.`——与官方画外音写法
244
+ `while his lips remain completely closed` 是同一句式。
245
+
246
+ 一镜实测(远处小孩喊一句,近处骑手不说话,骑手在台词期间仍正对镜头):现行写法 3 次中 2 次口型落在骑手、
247
+ 小孩闭嘴;加上述两条后 3 次全部落在小孩。19 条样本的发声基频都在儿童区间——模型没有选错声音,
248
+ 只是把口型放到画面里最显眼的正脸上。骑手已出画或背对时,两种写法 12 次全部正确。所以分镜能安排时,
249
+ 先让不说话的人出画或背身;不能时才靠这两条兜底,生成后仍核对口型落在谁脸上。
250
+
212
251
  ### 有配音或参考音频时
213
252
 
214
253
  **`craft_default`**:已有同句同表演音频时,先测实际发声与停顿,再确定镜长。没有现成音频仍可按文本估计
@@ -102,7 +102,8 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
102
102
  真实参考帧已作为输入并包含脸、服装全貌、墙面材料等内容时不重复。**`craft_default`** 是“图生视频
103
103
  只重述动作所需条件,不重述整份视觉设定”。文生视频没有这种省略资格,必须提供足以独立建立本镜
104
104
  人物、造型、地点、构图与光线的静态视觉锚点;若提示词离开参考帧会把左右手或物体搞错,图生视频
105
- 也应保留这些局部事实。
105
+ 也应保留这些局部事实。没有起始帧、只挂身份或地点图时也没有这种省略资格:取景要写具体,见
106
+ [目标模型能力档案](target-model-profile.md#参考条件方式)。
106
107
 
107
108
  ## 3. 运动说明的七个部分
108
109
 
@@ -147,13 +148,17 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
147
148
 
148
149
  1. **触发**:外部声音/动作/台词或内部决定(来源可追溯);
149
150
  2. **接收**:注意被什么抓住;
150
- 3. **处理**:一两个细微信号,而非面部部件清单;
151
+ 3. **处理**:一个读得出的信号,而非面部部件清单;外放到什么程度见下文的表演强度;
151
152
  4. **决定**:角色采取/抑制什么行动;
152
153
  5. **结果**:到达已确认终点的情绪与身体状态。
153
154
 
154
155
  - **`craft_default`**:把副词换成节奏和行为,“愤怒地说”可具体为先压低音量、吞回半句话、最后直呼对方全名——前提是符合台词与人物。
155
156
  - **`reviewed_invariant`**:不能发明新信息、关系转变或角色意图。审查者对照镜头目的和剧本资料判断。
156
157
  - **`taste_option`**:强度与外显程度可从克制到爆发,由导演选择,不强制“先微表情后爆发”。
158
+ - **`craft_default · VID-26`**:没有导演选择时,表演强度跟随制作形态与题材。漫剧和爽文的峰值,关键姿态和表情
159
+ 外放:表情变化大到一眼读得出,手势用整条手臂,情绪落在上身和整张脸上,仍按[可生成性](generability.md)写成
160
+ 常见的整体动作,剧情不压在微表情上。AI 真人剧保持生活化的克制,但峰值也要有一个读得出的表演拍,例如一次
161
+ 明显的变脸、一次猛地停住或转身,不让整集只剩静脸。形态读 `视觉设定.md` 的制作形态,或已接受节奏档案的 `form`。
157
162
 
158
163
  ### 3.4 摄影机 `camera`
159
164
 
@@ -184,12 +189,14 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
184
189
  默认把这几秒写成一条读得出先后的节拍链:
185
190
 
186
191
  ```text
187
- 首先<起手状态>;接着<动作、方向与幅度>;随后<这个动作造成的结果>;与此同时<另一条通道>;最终<结束状态>
192
+ 首先<起手状态>;接着<动作、方向与终点接触>;随后<这个动作造成的结果>;与此同时<另一条通道>;最终<结束状态>
188
193
  ```
189
194
 
190
- - **幅度、角度、距离是你写的这一拍的组成部分**。“肩线下沉约五厘米”“上身向左转约三十度”
191
- “右手停在离杯沿一掌处”说的是本镜要拍成什么样,直接写,不必等上游先给数字。写不出量级,
192
- 通常说明这一拍还没想清楚该有多大——先把动作想清楚,再回来写这一句。
195
+ - **动作停在哪里,用接触点或画面里的地标写**。“指尖碰到杯沿后停住”“视线落到桌面签名处”
196
+ “右手停在伞柄上”说的是本镜要拍成什么样,直接写,不必等上游先给数字。厘米和度数不写:
197
+ H3 一镜的小样本里,写「约二十厘米后停住」的 4 次中 3 次仍伸到杯子并接触,
198
+ 写「指尖碰到杯沿后停住」的 4 次全部停在杯沿。写不出终点接触什么、停在哪个地标,
199
+ 通常说明这一拍还没想清楚——先把动作想清楚,再回来写这一句。
193
200
  - **可以钉一到两个锚点秒数**:起手保持多久、终点定格多久、一次运镜走多久(“起手不动约半秒”
194
201
  “结束姿态定住约一秒”)。锚点是写在正文里的散文标注——不拆成 `timing_plan` 分段、不把
195
202
  `mode` 写成 `explicit`、不参与 `VID-04` 求和。所有锚点相加应当明显小于镜头时长,链条其余
@@ -201,7 +208,7 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
201
208
 
202
209
  - **`structural_invariant`**:明确标注的非重叠段落时长相加必须**等于**已接受的镜头时长;重叠段必须写明重叠关系,而不是靠猜。
203
210
  - **超出**:落在时长之外的部分被截断,段尾动作、逐字对白和终点姿态一起丢失。
204
- - **不足同样是缺陷**,而且后果更重:未分配的余量不会是静止画面,执行端会用未经批准的动作、表情或镜头运动把它填满,这些内容没有任何上游来源。把余量分配给已有阶段,或补一个有内容的收尾段(落住反应、保持终点姿态),不要留白。
211
+ - **不足同样是缺陷**:执行端可能不停在最后一段的秒点上,而是把已写的动作整体拉长去占满镜头,写下的秒点于是整体后移,计划里的时间就不再描述成片。H3 一个 8 秒单人镜的小样本里,秒段只写到 5 秒、补「定住终点」到 8 秒、只写相对顺序三种写法各 4 次,都没有出现计划外动作;三种写法的放杯都落在 6–7 秒,补写的 3 秒定格也没有出现。把余量分配给已有阶段,让写下的节奏与镜长一致;秒点只是计划记账,不是精确落点,需要按秒剪辑或对齐时以生成结果的实测为准,落幅保持靠剪辑余量而不是一段定格描述。
205
212
  - 两个方向都由 `VID-04` 管辖;审查者引用该编号时,超出与不足都算违约。
206
213
  - **`reviewed_invariant`**:即使数学不超时,台词、动作、反应是否可完成仍由审查者结合语言、强度和物理路径判断。
207
214
  - 不设通用“每秒几字/几个动作”硬门槛。
@@ -236,7 +243,7 @@ reported_end 不同:mismatch + 请求修改分镜
236
243
  ### 可复制的写法骨架
237
244
 
238
245
  ```text
239
- 从[最少但够用的起点信息]开始。首先[起手状态,可含一个锚点秒数];接着[动作、方向与幅度];
246
+ 从[最少但够用的起点信息]开始。首先[起手状态,可含一个锚点秒数];接着[动作、方向与终点接触];
240
247
  随后[这个动作造成的结果与随之而来的可见处理];与此同时[另一条通道上并行的一件事];
241
248
  最终[已确认终点的可见状态]。摄影机[写死构图并说明保持多久,或一次有动机的移动,含触发、路径与终点景别]。
242
249
  [必要的环境运动]。对白/声音:[准确来源与表演/空间意图]。
@@ -249,26 +256,25 @@ reported_end 不同:mismatch + 请求修改分镜
249
256
  | 必须写出来 | 缺了会发生什么 |
250
257
  |---|---|
251
258
  | 起手状态(这一拍从哪个姿态开始) | 执行端自选起点,接不上前一镜的终点 |
252
- | 串行链:接着→随后,每一步带方向与幅度 | 动作糊成一团,看不出先后 |
253
- | 至少一处量级(约五厘米/约三十度/约一掌) | 幅度由执行端决定,同一动作逐条漂移 |
259
+ | 串行链:接着→随后,每一步带方向,终点落到接触点或地标 | 动作糊成一团,看不出先后,也不知道停在哪 |
254
260
  | 一条并行通道,用「与此同时」标出 | 要么全片只有一个人在动,要么所有人一起动 |
255
261
  | 结束状态(终点姿态定在哪) | 收尾被自由发挥,下一镜起点失效 |
256
262
  | 摄影机:锁定写死构图与保持多久,移动写触发、路径、终点景别;两种都补一句**这次要让观众看清什么** | 空着会被读成可以自由漂移;没有理由的运镜是装饰,执行端换一种也说得通,于是真换 |
257
263
  | 有台词时把台词逐字挂在它发生的那一拍上 | 口型对不上,或台词被当成画面内容渲染 |
258
264
 
259
- **写短**:这段是给生成器的执行指令,不是给人读的散文。上表七项在**两百字上下**就能写满,
265
+ **写短**:这段是给生成器的执行指令,不是给人读的散文。上表六项在**两百字上下**就能写满,
260
266
  超过三百字基本可以确定有冗余。省字的办法是合并而不是删项——压到一百八十字以内时,
261
267
  最先掉的是台词挂载与声音这两项,把它们挤掉换来的字数不值:
262
268
  把景别、机位、角度、焦段并进一句(「固定中近景,轴线左侧平视,中焦」),把并行通道挂在它
263
- 真正发生的那一拍后面而不另起一句,量级只给关键的那一到两处而不是每个动作都标。
269
+ 真正发生的那一拍后面而不另起一句。
264
270
  形容词、情绪解释、把同一个动作换个说法再说一遍都不改变生成结果,只增加成本;
265
271
  参考帧已经表达的长相、服装、场景装修一律不重复。
266
272
 
267
- 写出来是这样(合成材料,约两百字覆盖上表全部七项):
273
+ 写出来是这样(合成材料,约两百字覆盖上表全部六项):
268
274
 
269
275
  ```text
270
276
  从她双手交叠压膝、视线在脚边水洼的起点开始。首先保持不动约半秒;接着右手离膝向伞柄
271
- 伸出约二十厘米;随后指节扣住伞柄,把伞立起点在地面;与此同时水洼被风推出一层细纹;
277
+ 伸出,指节碰到伞柄;随后扣住伞柄,把伞立起点在地面;与此同时水洼被风推出一层细纹;
272
278
  最终她站直,右手持伞垂在身侧,视线抬到对面门口。摄影机固定,平视,取头肩,轴线左侧,
273
279
  全程不动——让观众看清她起身前后手上的变化,而不是跟着她走。台词在「接着」这一拍:「我不等了。」
274
280
  ```
@@ -142,7 +142,7 @@
142
142
  2.6–4.0s:说完后停住,右手仍握笔,落到 accepted end
143
143
  ```
144
144
 
145
- 区间不可无意重叠;显式非重叠总量/最大终点不得超 duration。总量小于 duration 时也要处理:把余量分配给已有阶段或补一个有内容的收尾段,未分配的秒数会被执行端用自选动作填满(见 [motion-recipe.md](motion-recipe.md) 3.6)。不要为了塞进数学窗口而静默删掉 exact dialogue。
145
+ 区间不可无意重叠;显式非重叠总量/最大终点不得超 duration。总量小于 duration 时也要处理:把余量分配给已有阶段(原因见 [motion-recipe.md](motion-recipe.md) 3.6)。不要为了塞进数学窗口而静默删掉 exact dialogue。
146
146
 
147
147
  ### 对白预算
148
148
 
@@ -45,7 +45,8 @@
45
45
  先写不绑定供应商的核心动作说明,再决定交付格式。它只回答:从哪个已接受的镜头起点
46
46
  出发,谁因什么触发做什么,摄影机和声音怎样服务本镜目的,最后落到哪个已接受的镜头
47
47
  终点。构图、景别、机位、焦段、光线、情绪标尺或位置式引用只有项目确实需要时才加入,
48
- 不为凑齐栏目重复参考帧已经承载的事实。
48
+ 不为凑齐栏目重复参考帧已经承载的事实。没有起始帧、只挂身份或地点参考图时,取景就是
49
+ 确实需要的一项,写法见 [target-model-profile.md](target-model-profile.md#参考条件方式)。
49
50
 
50
51
  ### 可选的自然语言写法
51
52
 
@@ -59,20 +60,20 @@
59
60
  ```
60
61
 
61
62
  拟声词与实景距离(房间尺度、两处地点的间隔这类空间事实)取自上游内容或已接受项目方案。
62
- 动作的幅度、角度与锚点秒数属于另一类:它们是本环节自己写的这一拍的组成部分,正常写——
63
- “肩线下沉约五厘米”“上身向左转约三十度”“起手不动约半秒”说明的是这个动作要做多大、
64
- 往哪个方向、停多久,是本次的动作决定,不需要上游先给数字。摄影机的角度与轴线侧属于镜头
63
+ 动作的方向、终点接触与锚点秒数属于另一类:它们是本环节自己写的这一拍的组成部分,正常写——
64
+ “指尖碰到杯沿后停住”“起手不动约半秒”说明的是这个动作往哪去、停在哪、停多久,是本次的动作
65
+ 决定,不需要上游先给数字;终点用接触点或地标而不用厘米、度数(见
66
+ [motion-recipe.md](motion-recipe.md) 3.6)。摄影机的角度与轴线侧属于镜头
65
67
  记录,按 `framing.angle` 已接受的值写。越权只发生在这些量替上游做决定的时候:改写已接受
66
68
  时长、改掉镜头已接受的机位角度或轴线侧、声称一个未被接受的空间尺寸、给参考帧里没有的
67
69
  地理定尺。
68
- 可比较的方向、接触、占画关系与相对阶段同样好用,与量级并列,按哪一种更能消除执行歧义来选。
69
70
 
70
71
  ### 多段交付格式(仅项目已有明确要求时)
71
72
 
72
73
  交付格式可以要求片段编号、明确时间、位置式参考或文字策略,但这些只是外层格式,不
73
74
  改变创作者确认的镜头边界,也不创造额外动作。每个片段只写执行所需的起点状态;明确
74
- 区间不得重叠冲突,且各段相加要正好用完已接受时长——多出来会被截断,少下来的余量会被
75
- 执行端用未经批准的动作填满。若项目使用位置式引用,映射保持稳定且不侵入逐字对白;
75
+ 区间不得重叠冲突,且各段相加要正好用完已接受时长(`VID-04`,两个方向的后果见
76
+ [motion-recipe.md](motion-recipe.md) 3.6)。若项目使用位置式引用,映射保持稳定且不侵入逐字对白;
76
77
  没有该要求就不生成这些槽位。分段与槽位各自要回答什么,见
77
78
  [delivery-profile.md](delivery-profile.md)。
78
79
 
@@ -40,7 +40,7 @@ Finding 必须含文件与 `MOTION-...` / `SHOT-...`、必要短引文、影响
40
40
 
41
41
  - 每个 `MOTION-...` 唯一对应真实 `SHOT-...`,并继承相同时长;
42
42
  - 起点、主要变化、分段时序、声音、运镜和终点没有互相冲突;
43
- - 显式分段的并集既不超时,也不留下由模型自行填充的空白;重叠必须说明;
43
+ - 显式分段的并集既不超时,也不短于镜长(`VID-04`);重叠必须说明;
44
44
  - 固定和运动摄影机不在同一区间同时生效;
45
45
  - 终点逐项对齐分镜,下一镜仍读取分镜自己的起点;
46
46
  - 同一镜头最多进入一个交付分组;分组加散镜恰好覆盖点名范围一次;
@@ -42,6 +42,7 @@
42
42
  | VID-23 | reviewed_invariant | For models generating audio with video, specify the intended dialogue, VO, OS, vocalizations, effects, ambience and silence. Keep source, speaker, language and verbatim dialogue boundaries. Summaries must match the actual sound layers; follow model-specific music syntax without assuming missing layers will always be generated. |
43
43
  | VID-24 | structural_invariant | An image-to-video shot carries the storyboard's `REF-...` and `PLAN-...` slots unchanged, each with its 用途, so the motion document itself answers which start frame and which identity, geography, and prop pictures this shot sends — and, for `PLAN-...`, in which order the creator attaches them. The reference mode — first frame, first and last frame, or multi-slot reference — is read from that 用途 combination and translated by the matched model dialect; where a model makes frame and reference conditioning mutually exclusive, the start frame joins the reference group rather than splitting the request. |
44
44
  | VID-25 | structural_invariant | Quoted Chinese in a copyable body is delivered, not authored. Every run of four or more Han characters inside a `<d>` tag or quotation marks resolves, ignoring punctuation and spacing, to text that already exists in `剧本.md`, `视觉设定.md` or `分镜.md`. A line the shot wishes the character had said belongs upstream in the screenplay, not in the prompt. Runs of three characters or fewer are in-frame labels and interjections far more often than lines, so they stay with review rather than the mechanical check. |
45
+ | VID-26 | craft_default | Absent a director's choice, performance intensity follows form and genre. At motion-comic and wish-fulfilment peaks, key poses and expressions go outward—an expression change readable at a glance, whole-arm gestures, emotion carried by the upper body and the whole face—still written as common whole-body actions, never with the plot resting on a micro-expression. AI live action keeps a subtler realism but still gives each peak one readable performance beat. An inferred inner state is not deleted but translated into a visible expression or movement. |
45
46
 
46
47
  ### `CON`
47
48
 
@@ -41,7 +41,7 @@
41
41
  |---|---|---|
42
42
  | 模型版本 | 项目使用的版本化模型档案键;账号侧 Endpoint / model ID 留在生产配置 | 只路由到该版本的方言;不因名称相近套用另一版本 |
43
43
  | 提示词方言 | 通用自然语言 / 目标原生结构及版本 | 命中已有方言时按其字段、素材标记和声音语法写;语言标签不能代替方言 |
44
- | 单次原生时长 | 一次生成能覆盖的最短与最长秒数 | 分镜规划时就让每个投产镜头落在区间内;短动作在合法镜长内到达终点后 hold,长动作按闭合状态拆镜 |
44
+ | 单次原生时长 | 一次生成能覆盖的最短与最长秒数 | 分镜规划时就让每次生成落在区间内:默认一镜一生成,短动作在合法镜长内到达终点后 hold;创作者在[交付形态](delivery-profile.md)里声明多镜容器、且命中的方言支持时,短于下限的镜头可与同场相邻镜头装进一次生成,按方言写(例如 [H3](minimax-h3.md#多镜容器每切一张关键帧) 要求每切都有已接受关键帧)。长动作按闭合状态拆镜 |
45
45
  | 参考条件方式 | 无 / 首帧 / 首尾帧 / 多槽参考(及槽位数上限) | 见下节 |
46
46
  | 声音是否同轨生成 | `same_pass` 或 `separate` | 见下节 |
47
47
  | 画幅与分辨率 | 执行端实际接受的画幅与分辨率集合 | 只写项目已接受的那一个;不在正文里罗列备选 |
@@ -90,6 +90,13 @@ Brief、剧本或声音方向若已经点名排除外语前导、语气词、额
90
90
  无论哪一种,《视觉设定.md》连续性锁的锁面都留在正文里:参考帧只约束它自己画到的部分,
91
91
  跨镜不变的颜色、材质与形制仍然要逐镜带走。
92
92
 
93
+ **`craft_default`**:只挂身份或地点参考图、没有起始帧时,正文写具体取景:画面下沿切在哪
94
+ (腰、胸口、膝),主体占画多高,头顶落在画面哪一段,机位高度与离主体多远。只写景别名称不够,
95
+ 取景会被地点图拉宽。一组 H3 小样本里,只写「Medium shot」加地点图的 8 次出了远景 3、中远景 3、
96
+ 中景 2;换成上述取景字段的 8 次出了中景 7、中远景 1、没有远景。Wan 3.0 一组只写「双人中景」的 6 次
97
+ 也都出成全身远景(未做无地点图或取景字段的对照)。在参考说明里写「不继承它的构图」本身挡不住这种漂移。有起始帧时构图由起始帧
98
+ 承担,不需要这一步。
99
+
93
100
  参考条件方式由本镜各槽位的 `用途` 读出,不由“想不想用多模态”决定:只有一张 `起始帧` 是首帧,
94
101
  `起始帧` 加 `结束帧` 是首尾帧,`起始帧` 与身份/地理/道具图同时存在或只有这些图时是多槽参考。
95
102
  不少执行端把首/尾帧输入与多槽参考输入设为互斥,这时整组统一走多槽参考,起始帧也按参考素材送入——