@oh-story/dsh 0.1.3 → 0.1.5

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 (524) hide show
  1. package/README.md +58 -12
  2. package/lib/client.js +2970 -537
  3. package/lib/client.js.map +4 -4
  4. package/lib/drama/manifest.json +218 -178
  5. package/lib/drama/skills/short-drama/SKILL.md +110 -117
  6. package/lib/drama/skills/short-drama/references/audience-reveal.md +14 -67
  7. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +26 -77
  8. package/lib/drama/skills/short-drama/references/creator-documents.md +204 -0
  9. package/lib/drama/skills/short-drama/references/creator-workflow.md +73 -63
  10. package/lib/drama/skills/short-drama/references/knowhow-index.md +5 -0
  11. package/lib/drama/skills/short-drama/references/look-development.md +2 -3
  12. package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +14 -48
  13. package/lib/drama/skills/short-drama/references/production-form-profiles.md +1 -1
  14. package/lib/drama/skills/short-drama/references/reference-roles.md +32 -135
  15. package/lib/drama/skills/short-drama/references/runtime-preflight.md +16 -19
  16. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
  17. package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
  18. package/lib/drama/skills/short-drama-assets/SKILL.md +59 -170
  19. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +18 -25
  20. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +13 -15
  21. package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +11 -14
  22. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
  23. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +6 -12
  24. package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -11
  25. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +21 -2
  26. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +12 -105
  27. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +12 -32
  28. package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
  29. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +45 -155
  30. package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +12 -13
  31. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +12 -13
  32. package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +39 -51
  33. package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +3 -4
  34. package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +15 -14
  35. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +11 -15
  36. package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +1 -1
  37. package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +4 -7
  38. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +23 -23
  39. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +8 -65
  40. package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
  41. package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
  42. package/lib/drama/skills/short-drama-produce/SKILL.md +67 -15
  43. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
  44. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
  45. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
  46. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
  47. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
  48. package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
  49. package/lib/drama/skills/short-drama-review/SKILL.md +61 -123
  50. package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -15
  51. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +15 -16
  52. package/lib/drama/skills/short-drama-review/references/project-calibration.md +7 -9
  53. package/lib/drama/skills/short-drama-review/references/review-method.md +8 -9
  54. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +9 -13
  55. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +104 -4
  56. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +27 -19
  57. package/lib/drama/skills/short-drama-review/references/stage-contract.md +4 -63
  58. package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
  59. package/lib/drama/skills/short-drama-storyboard/SKILL.md +116 -238
  60. package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
  61. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +9 -34
  62. package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
  63. package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +5 -10
  64. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +12 -7
  65. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
  66. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +27 -62
  67. package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +16 -25
  68. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +21 -23
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -10
  70. package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +9 -13
  71. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +16 -71
  72. package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
  73. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +123 -230
  74. package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
  75. package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +10 -8
  77. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +24 -6
  78. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +2 -2
  79. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
  80. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +35 -27
  81. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -11
  82. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +13 -10
  83. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +34 -63
  84. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
  85. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
  86. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +17 -73
  87. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
  88. package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
  89. package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
  90. package/lib/drama/skills/short-drama-write/SKILL.md +74 -268
  91. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +7 -0
  92. package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +17 -43
  93. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +15 -15
  94. package/lib/drama/skills/short-drama-write/references/script-craft.md +208 -21
  95. package/lib/drama/skills/short-drama-write/references/stage-contract.md +11 -70
  96. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
  97. package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
  98. package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
  99. package/lib/index.js +971 -46
  100. package/lib/index.js.map +4 -4
  101. package/lib/novel-to-game/LICENSE +21 -0
  102. package/lib/novel-to-game/README.md +180 -0
  103. package/lib/novel-to-game/README_ZH.md +178 -0
  104. package/lib/novel-to-game/VERSION +1 -0
  105. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
  106. package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
  107. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
  108. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
  109. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
  110. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
  111. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
  112. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
  113. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
  114. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
  115. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  116. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
  117. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
  118. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
  119. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  120. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
  121. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
  122. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
  123. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
  124. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
  125. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
  126. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
  127. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
  128. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
  129. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
  130. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
  131. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
  132. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
  133. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
  134. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
  135. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
  136. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
  137. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
  138. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
  139. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
  140. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
  141. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
  142. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
  143. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
  144. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
  145. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
  146. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
  147. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  148. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
  149. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
  150. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
  151. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
  152. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
  153. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
  154. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
  155. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
  156. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
  157. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
  158. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
  159. package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
  160. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
  161. package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
  162. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
  163. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
  164. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
  165. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
  166. package/lib/novel-to-game/manifest.json +508 -0
  167. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
  168. package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
  169. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
  170. package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
  171. package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
  172. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
  173. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
  174. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
  175. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
  176. package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
  177. package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
  178. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
  179. package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
  180. package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
  181. package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
  182. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
  183. package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
  184. package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
  185. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
  186. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
  187. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
  188. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
  189. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
  190. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
  191. package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
  192. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
  193. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
  194. package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
  195. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
  196. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
  197. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
  198. package/lib/oh-story/manifest.json +419 -309
  199. package/lib/oh-story/roles/character-designer.md +4 -4
  200. package/lib/oh-story/roles/consistency-checker.md +1 -1
  201. package/lib/oh-story/roles/narrative-writer.md +41 -42
  202. package/lib/oh-story/roles/story-architect.md +19 -23
  203. package/lib/oh-story/roles/story-explorer.md +8 -5
  204. package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
  205. package/lib/oh-story/skills/story/SKILL.md +16 -9
  206. package/lib/oh-story/skills/story/VERSION +1 -1
  207. package/lib/oh-story/skills/story/references/author-memory.md +163 -0
  208. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
  209. package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
  210. package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
  211. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
  212. package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
  213. package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
  214. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
  215. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
  216. package/lib/oh-story/skills/story-import/SKILL.md +21 -8
  217. package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
  218. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
  219. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
  220. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
  221. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
  222. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
  223. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
  224. package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
  225. package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
  226. package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
  227. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
  228. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
  229. package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
  230. package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
  231. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
  232. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
  234. package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
  235. package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
  236. package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
  237. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
  238. package/lib/oh-story/skills/story-long-write/references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
  239. package/lib/oh-story/skills/story-long-write/references/{reversal-toolkit.md → long-reversal.md} +18 -32
  240. package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
  241. package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
  242. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  243. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  244. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
  245. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
  246. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +5 -4
  247. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
  248. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +17 -11
  249. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
  250. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
  251. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
  252. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
  253. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
  254. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
  255. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
  256. package/lib/oh-story/skills/story-review/SKILL.md +26 -17
  257. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
  258. package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
  259. package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
  260. package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
  261. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
  262. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
  263. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
  264. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
  265. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
  266. package/lib/oh-story/skills/story-setup/SKILL.md +85 -41
  267. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
  268. package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
  269. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
  270. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
  271. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
  272. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  273. package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
  274. package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
  275. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
  276. package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
  277. package/lib/oh-story/skills/story-setup/references/agent-references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
  278. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
  279. package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-setup/references/agent-references/long-reversal.md} +18 -32
  280. package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
  281. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
  282. package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
  283. package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
  284. package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
  285. package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → short-reversal.md} +29 -23
  286. package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
  287. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  288. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
  289. package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
  290. package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
  291. package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
  292. package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
  293. package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
  294. package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
  295. package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
  296. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
  297. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
  298. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
  299. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
  300. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
  301. package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
  302. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
  303. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
  304. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
  305. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
  306. package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
  307. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
  308. package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
  309. package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
  310. package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
  311. package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
  312. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
  313. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
  314. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
  315. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
  316. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
  317. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
  318. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
  319. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
  320. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
  321. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
  322. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
  323. package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
  324. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
  325. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
  326. package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
  327. package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
  328. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
  329. package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
  330. package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
  331. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
  332. package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
  333. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
  334. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
  335. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
  336. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
  337. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
  338. package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
  339. package/lib/types/client/drama-production-view.d.ts +34 -0
  340. package/lib/types/client/drama-production-view.d.ts.map +1 -0
  341. package/lib/types/client/drama-production.d.ts +92 -0
  342. package/lib/types/client/drama-production.d.ts.map +1 -0
  343. package/lib/types/client/file-activity.d.ts +9 -2
  344. package/lib/types/client/file-activity.d.ts.map +1 -1
  345. package/lib/types/client/index.d.ts +1 -1
  346. package/lib/types/client/index.d.ts.map +1 -1
  347. package/lib/types/client/production-intents.d.ts +9 -0
  348. package/lib/types/client/production-intents.d.ts.map +1 -0
  349. package/lib/types/client/production-prompts.d.ts +9 -0
  350. package/lib/types/client/production-prompts.d.ts.map +1 -0
  351. package/lib/types/client/production-runtime.d.ts +58 -0
  352. package/lib/types/client/production-runtime.d.ts.map +1 -0
  353. package/lib/types/client/video-studio.d.ts +41 -0
  354. package/lib/types/client/video-studio.d.ts.map +1 -0
  355. package/lib/types/client/workbench-ui.d.ts +5 -0
  356. package/lib/types/client/workbench-ui.d.ts.map +1 -0
  357. package/lib/types/game-verification.d.ts +16 -0
  358. package/lib/types/game-verification.d.ts.map +1 -0
  359. package/lib/types/index.d.ts +5 -2
  360. package/lib/types/index.d.ts.map +1 -1
  361. package/lib/types/production-intent.d.ts +21 -0
  362. package/lib/types/production-intent.d.ts.map +1 -0
  363. package/lib/types/production-tool.d.ts +5 -0
  364. package/lib/types/production-tool.d.ts.map +1 -0
  365. package/lib/types/reference-tool.d.ts +6 -0
  366. package/lib/types/reference-tool.d.ts.map +1 -0
  367. package/lib/types/role-provider.d.ts.map +1 -1
  368. package/lib/types/role-tool.d.ts +3 -1
  369. package/lib/types/role-tool.d.ts.map +1 -1
  370. package/lib/types/skill-provider.d.ts +7 -0
  371. package/lib/types/skill-provider.d.ts.map +1 -1
  372. package/lib/types/video-project.d.ts +42 -0
  373. package/lib/types/video-project.d.ts.map +1 -0
  374. package/lib/types/workspace-request-trust.d.ts +6 -0
  375. package/lib/types/workspace-request-trust.d.ts.map +1 -1
  376. package/lib/types/workspace-route.d.ts +20 -0
  377. package/lib/types/workspace-route.d.ts.map +1 -1
  378. package/lib/video-recap/CHANGELOG.md +282 -0
  379. package/lib/video-recap/LICENSE +21 -0
  380. package/lib/video-recap/README.en.md +257 -0
  381. package/lib/video-recap/README.md +255 -0
  382. package/lib/video-recap/manifest.json +684 -0
  383. package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
  384. package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
  385. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
  386. package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
  387. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
  388. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
  389. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
  390. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
  391. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
  392. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
  393. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
  394. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
  395. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
  396. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
  397. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
  398. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
  399. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
  400. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
  401. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
  402. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
  403. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
  404. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
  405. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
  406. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
  407. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
  408. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
  409. package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
  410. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
  411. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
  412. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
  413. package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
  414. package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
  415. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
  416. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
  417. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
  418. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
  419. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
  420. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
  421. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
  422. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
  423. package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
  424. package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
  425. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
  426. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
  427. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
  428. package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
  429. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
  430. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
  431. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
  432. package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
  433. package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
  435. package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
  436. package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
  437. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
  438. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
  439. package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
  440. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
  441. package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
  442. package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
  443. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
  444. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
  445. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
  446. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
  447. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
  448. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
  449. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
  450. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
  451. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
  452. package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
  453. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
  454. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
  455. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
  456. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
  457. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
  458. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
  459. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
  460. package/lib/video-recap/skills/video-script/SKILL.md +248 -0
  461. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
  462. package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
  463. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
  464. package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
  465. package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
  466. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
  467. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
  468. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
  469. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
  470. package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
  471. package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
  472. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
  473. package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
  474. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
  475. package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
  476. package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
  477. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
  478. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
  479. package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
  480. package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
  481. package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
  482. package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
  483. package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
  484. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
  485. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
  486. package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
  487. package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
  488. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
  489. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
  490. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
  491. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
  492. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
  493. package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
  494. package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
  495. package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
  496. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
  497. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
  498. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
  499. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
  500. package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
  501. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
  502. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
  503. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
  504. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
  505. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
  506. package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
  507. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
  508. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
  509. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
  510. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
  511. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
  512. package/package.json +57 -41
  513. package/lib/drama/skills/short-drama/references/lifecycle-commands.md +0 -130
  514. package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
  515. package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
  516. package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
  517. package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
  518. package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
  519. package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
  520. package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
  521. package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
  522. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
  523. /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
  524. /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
@@ -103,17 +103,17 @@ pan 同时微调焦点、handheld 带自然呼吸、dolly 配合轻微 tilt 未
103
103
 
104
104
  ## 4. 对白、口型与声音
105
105
 
106
- 若上游有 accepted `scene_visual_plan.sound_strategy`,先把整场主导声源、撤出/恢复、距离变化、
106
+ 若分镜已经明确整场声音策略,先把主导声源、撤出/恢复、距离变化、
107
107
  主动留白与 sound bridge 分配到准确镜头,再写本镜 audio。逐镜实现必须能与相邻镜接上,不能
108
108
  让每镜各自重新启动一套环境音。场次计划没有登记的故事声源不得由本层发明;音乐仍服从下文的
109
109
  时间线边界,也不能替代表演或转向。
110
110
 
111
111
  ### 精确引用
112
112
 
113
- Motion spec 存 dialogue/VO/SFX/audio 的引用:`src` 指向文件头 `sources` 声明的那个快照,
114
- 再加记录与字段;copyable prompt 可呈现 exact accepted line 或引用标记,取决于交付需要,但不得改字、增删、交换说话人或把对白改 VO。
113
+ 每个 `MOTION-...` 直接引用 `剧本.md` 的场景 ID、准确对白/VO/OS/SFX 和对应 `SHOT-...`。可复制正文
114
+ 按交付需要呈现逐字台词或声源说明,但不得改字、增删、交换说话人或把对白改成 VO。
115
115
 
116
- 同一句 accepted dialogue 跨镜延续时,把相邻提示词串读,说明它在本镜是开始、画外延续、
116
+ 同一句对白跨镜延续时,把相邻提示词串读,说明它在本镜是开始、画外延续、
117
117
  被打断还是到此结束;不得在前镜声称已经说完,后镜又让同一句继续。没有逐字原句时只保留
118
118
  准确引用和延续关系,不为填满节奏补写台词。
119
119
 
@@ -225,16 +225,18 @@ Resolvable ref/显式否定可结构检查;delivery 是否语义背离则要 r
225
225
 
226
226
  ```markdown
227
227
  - **请求 owner**:`storyboard | write | assets`
228
- - **source evidence**:src + 记录/字段,以及该 `sources` 条目的 artifact
228
+ - **来源证据**:文件、场景/镜头 ID 与必要短引文
229
229
  - **当前边界**:精确值
230
230
  - **motion 需要**:期望变化与原因
231
231
  - **影响**:purpose/feasibility/continuity
232
232
  - **建议**:split | extend | reblock | amend dialogue | reconcile asset
233
- - **未执行**:列明保持 byte-identical 的 owner files
233
+ - **未执行**:列明本轮没有修改的 owner 文件
234
234
  ```
235
235
 
236
- Video-prompts 可以提议,不能应用。若 reported end 不同于 source end:先判断是 prompt 没实现(video-prompts 修)还是创作确需新边界(storyboard 修);无论哪种都不把 reported end 当成下一镜 authority。
236
+ Video-prompts 可以提议,不能替 owner 应用。若实际终点不同于分镜终点:先判断是提示词没实现
237
+ (video-prompts 修)还是创作确需新边界(storyboard 修);无论哪种都不把观察到的终点当成下一镜权威。
237
238
 
238
239
  ### Handoff 核对
239
240
 
240
- 逐字段比较 motion end report 与 shot continuity out;next shot 仍直接读取 storyboard-owned start。Match 才是实现证据,不能用一句“保持连续”代替 position/gaze/hands/prop 等关键字段核对。
241
+ 逐字段比较运动终点与镜头终点;下一镜仍直接读取分镜拥有的起点。匹配才是实现证据,不能用一句
242
+ “保持连续”代替位置、目光、双手、持物等关键事实核对。
@@ -60,7 +60,27 @@
60
60
  并说明续接依据缺失。不要凭想象补一个结尾画面:续接提示词的每一条连续性指令都建立在那个
61
61
  起点上,起点是编的,后面整条链一起作废。
62
62
 
63
- 路由由创作者档案声明。项目没有声明时按逐镜写,不为“支持更多路由”预留空字段。
63
+ 连续段真正进入生产时,下一段同时使用两项真实输入:
64
+
65
+ - **上一段实际视频**:承接已经生成出来的动作速度、人物表演、运镜、环境运动与声音空间;
66
+ - **上一段实际尾帧**:从该视频直接取得,作为下一段第一帧的人物姿态、双手、持物、光线与构图起点。
67
+
68
+ 二者职责不同,不能只给其中一项,也不能用计划尾帧、分镜关键帧或文字描述冒充。提示词仍按下一段
69
+ 已接受的「起点 → 唯一动作 → 终点」写;实际尾帧若与已接受起点冲突,先处理上一段结果,不能把漂移
70
+ 写进下一段继续放大。
71
+
72
+ 创作者已经选择续接后,缺素材只改变**就绪状态**,不改变执行路由:后续容器标成“待续接、不可提交”,
73
+ 列明缺少上一段实际视频与实际尾帧,继续保留从已接受起点写出的内容草案;不得把它改称普通文生视频。
74
+ 真实素材到位后再按模型方言加入续接触发词与实际槽位。逐镜运动正文继续承担成员边界和内容依据,
75
+ 不能被当作绕开续接的平行提交方案。
76
+
77
+ 路由由创作者档案声明。项目没有声明时按逐镜写,不为“支持更多路由”预留空字段。声明后在
78
+ `视频提示词.md` 只标一个正式执行路由;其他粒度的正文若因可审查性而保留,要明确标成成员依据。
79
+
80
+ 这里的“逐镜 / 多镜容器”是打包粒度,不自动表示独立生成。同一场次、时间连续、地点与资产绑定链
81
+ 不变的相邻正式段,在目标档案支持续接时默认组成实际结果接力链:第一段从已接受起点生成,第二段起
82
+ 等待上一段实际视频和实际尾帧。只有创作者明确选择独立重生成,或已接受内容发生时间/地点跳变时才
83
+ 重新起链;不能仅凭 `one-shot-per-generation` 把每镜都解释成互不相干的文生任务。
64
84
 
65
85
  ## 二、容器算术(唯一允许的数字规则)
66
86
 
@@ -81,11 +101,9 @@
81
101
  **`structural_invariant`**:容器只能承载已接受镜头;容器时长等于其成员镜头已接受时长
82
102
  之和;镜头边界、镜头目的与逐镜独立可审查性不因打包发生变化(VID-13)。
83
103
 
84
- 这条不变式必须**可本地校验**,所以多镜容器要有一条 canonical 记录承载成员顺序、各成员
85
- 已接受时长的只读引用与容器时长——字段、校验点与所有权见
86
- [delivery-container.jsonl.md](../assets/delivery-container.jsonl.md)。渲染出来的交付文本
87
- 是它的缓存,不是权威;只写在文本里的容器无法被引用、无法标 `stale`,也无法复审。
88
- 单镜交付不需要这条记录,本节的算术由运动规格自身的镜头时长满足。
104
+ 这条不变式必须**可本地核对**,所以需要多镜打包时,在 `视频提示词.md` 增加“交付分组”章节:
105
+ 用稳定组 ID 依次列出成员 `MOTION-...` / `SHOT-...`、各镜时长、容器总时长,以及同场、连续、
106
+ 同一地理/资产链的理由。单镜交付不需要额外章节。
89
107
 
90
108
  ### 双向和不变式
91
109
 
@@ -11,8 +11,8 @@
11
11
 
12
12
  ## 1. 什么时候适用
13
13
 
14
- **只在项目声明的制作形态由生成模型承担画面时适用**(见 `short-drama.json` 的
15
- `creator_authority.production_profile`)。实拍项目不受本文件约束——演员能完成的精细动作,
14
+ **只在项目声明的制作形态由生成模型承担画面时适用**(见 `视觉设定.md` 的制作形态)。实拍项目
15
+ 不受本文件约束——演员能完成的精细动作,
16
16
  生成模型不一定能。形态未声明时保持未决,不要预先按生成条件裁剪动作。
17
17
 
18
18
  本文件不否定任何动作的戏剧价值,只判断**它能不能被当前交付方式实现**。同一个动作,
@@ -0,0 +1,154 @@
1
+ # MiniMax H3 提示词方言
2
+
3
+ 只在目标档案明确写 `target_video_model: minimax-h3` 时使用。推荐档案:
4
+
5
+ ```json
6
+ {
7
+ "target_video_model": "minimax-h3",
8
+ "video_prompt_dialect": "minimax-h3",
9
+ "video_prompt_language": "en",
10
+ "native_duration_seconds": {"min": 4, "max": 15},
11
+ "supported_generation_modes": ["text", "first_frame", "first_last_frame", "reference"],
12
+ "audio_generation": "same_pass"
13
+ }
14
+ ```
15
+
16
+ H3 的结构字段用英文;这不等于把中文对白翻成英文。每句中文对白保持原文并写成
17
+ `<d>[Chinese] 逐字台词</d>`,由稳定说话人 ID 引出。不要在对白前增加外语、语气词或未写入剧本的开场句。
18
+
19
+ 点名 MiniMax H3 只选定模型与方言,不表示创作者选了文生视频。当镜头需要人物、场景、道具或起始构图一致性时,
20
+ 先按主 Skill 完成真实图片发现与缺口列表。有任何必要图片仍缺失时,不因 H3 同时支持 Base 模式就默默改用文生视频。
21
+
22
+ ## Base / 首帧 / 首尾帧
23
+
24
+ 文生视频、首帧和首尾帧使用三段结构:
25
+
26
+ ```text
27
+ integrated_multimodal_description: [Shot 1] ...
28
+ overall_soundscape: ...
29
+ non_diegetic_music: ...
30
+ ```
31
+
32
+ - 画面段按 `[Shot 1]`、`[Shot 2]` 写动作和镜头;单镜也保留 `[Shot 1]`。
33
+ - 声音段闭合所有对白、环境声与音效。无配乐时写 `non_diegetic_music: N/A`,不要留空让模型补乐。
34
+ - 首帧模式从输入帧的可见姿态开始;首尾帧模式只能到达上游已接受终点,不发明过渡后的新状态。
35
+
36
+ ## 选哪一种模式
37
+
38
+ 模式由本镜「输入参考图」里各槽位的 `用途` 决定,不由“想不想用多模态”决定:
39
+
40
+ | 本镜绑定的图 | H3 模式 | 正文结构 |
41
+ |---|---|---|
42
+ | 没有图,且创作者已明确选择文生视频 | Base(文生) | 三段 |
43
+ | 只有一张 `用途:起始帧` | `first_frame` | 三段 |
44
+ | 一张 `用途:起始帧` + 一张 `用途:结束帧` | `first_last_frame` | 三段 |
45
+ | 其他任何组合(起始帧与人物/地点/道具图同时存在,或只有人物/地点/道具图) | `reference`(full-reference) | 六段 |
46
+
47
+ H3 官方另有只给尾帧、由模型推断开场的 L2VA 模式。本套件不使用它:开场由分镜已接受的起点决定,
48
+ 把它交给模型推断会让 `SHOT-...` 的起点失去权威。因此 `结束帧` 只在同时绑定 `起始帧` 时出现。
49
+
50
+ 第四行是最常见、也最容易写错的一种。H3 的首/尾帧输入与参考输入**互斥**,所以「起始帧 + 角色板 +
51
+ 场景板」不能拆成 `first_frame` 加 `reference_image`:整组统一走 full-reference,起始帧也以
52
+ `reference_image` 送入,正文按下面的标签编号引用。用哪一种模式在《视频提示词.md》里由 `用途` 组合读出,
53
+ 不写进「生成方式」字段——该字段仍只有「文生视频」和「图生视频」两个值。
54
+
55
+ ## Full-reference
56
+
57
+ 任何 `reference_image`、`reference_video` 或 `reference_audio` 进入任务时,改用六段结构,段名和正文说明均用英文:
58
+
59
+ ```text
60
+ subject_definitions: ...
61
+ summary: ...
62
+ retention_analysis: ...
63
+ detailed_description: [Shot 1] ...
64
+ overall_soundscape: ...
65
+ non_diegetic_music: ...
66
+ ```
67
+
68
+ **这六段是一条提示词,一次整体提交。** 它们是同一个 `MOTION-...` 的可复制正文,从第一段到最后一段
69
+ 一起放进那一次生成的提示词框,不是六次生成、也不是只提交第一段。三段结构的 Base / 首帧 / 首尾帧同理。
70
+ 一镜一次生成,所以下一镜换成它自己那条完整正文。
71
+
72
+ ### 素材标签怎么编号
73
+
74
+ 正文用 `<Picture N>`、`<Video N>`、`<Audio N>` 指向本次 job 的实际素材,`<Subject N>` 指向可复用的可见内容。
75
+ **编号按同类素材在本镜「输入参考图」里的 `顺序` 递增**:第 1 张图片是 `<Picture 1>`,第 2 张是 `<Picture 2>`,
76
+ 视频和音频各自从 1 开始。生产端 compiler 按同一顺序附加引用契约,所以文档里手写的编号必须和 `顺序` 一致;
77
+ 两套编号不一致时模型会收到互相矛盾的素材说明,而接口不会报错。
78
+
79
+ 因此写 full-reference 正文前,先把本镜的槽位按 `顺序` 列一遍,例如:
80
+
81
+ ```text
82
+ REF-SHOT-START(顺序:1;用途:起始帧) -> <Picture 1>
83
+ REF-XIAOYU-SHEET(顺序:2;用途:身份) -> <Picture 2>
84
+ REF-STUDY-PLATE(顺序:3;用途:地理) -> <Picture 3>
85
+ ```
86
+
87
+ `subject_definitions` 把每个主体绑到它的标签上,句式为
88
+ `<Subject 1> is the ... in <Picture 2>, with ...`;`retention_analysis` 逐条写保留强度和出现的镜次,
89
+ 视觉素材用 `fully_preserved`、`partially_preserved`、`attribute_transfer`、`weak_reference`,
90
+ 音频素材用 `fully_copy`、`partially_copy`、`reference`、`weak_reference`,例如
91
+ `<Subject 1> (appears in [Shot 1]): fully_preserved - 短发轮廓、连帽外套配色与鞋型保留`。
92
+ 每个标签在六段里保持同一写法,不留下没有定义的标签。
93
+
94
+ ### 每张图带什么、不带什么
95
+
96
+ `用途` 决定这一张在正文里被要求保留什么:`起始帧` 只锚定开场构图与姿态,`身份` 只锚定脸型体态,
97
+ `地理` 只锚定空间关系,`造型状态` 只锚定服装与损污。把这条差异写进 `retention_analysis`,
98
+ 不要让角色板顺带决定构图,也不要让场景板顺带决定人物长相。
99
+
100
+ 角色始终使用同一个说话人 ID;中文对白只出现在 `<d>[Chinese] ...</d>` 内。禁字幕写进可见文字约束,
101
+ 与获准的画内文字分开。
102
+ 不要为了“多模态”把所有资产图都带上;每镜只绑定它真正可见且需要保持的起始帧、人物、地点或关键道具图。
103
+
104
+ ### 一个完整例子
105
+
106
+ 分镜里的槽位(三张图:本镜起始帧、角色板、场景板):
107
+
108
+ ```markdown
109
+ - 输入参考图:REF-SHOT002-START(顺序:1)· 剧集/EP001/制作成果/images/SHOT-EP001-002.png《SHOT-EP001-002 起始帧》(用途:起始帧;控制:起始构图、双人站位;不得控制:尚未发生的动作、终态);REF-XIAOYU-SHEET(顺序:2)· 输入/参考图/小雨定妆.png《小雨定妆照》(用途:身份;控制:脸型、发型剪影、身高比例;不得控制:构图、动作、表情);REF-STUDY-PLATE(顺序:3)· 输入/参考图/家庭书房.png《家庭书房场景图》(用途:地理;控制:书桌方位、书架墙、灯位;不得控制:人物身份、动作、道具状态)
110
+ ```
111
+
112
+ 对应的 full-reference 正文(`生成方式:图生视频`,模式为 `reference`):
113
+
114
+ ```text
115
+ subject_definitions: <Subject 1> is the elementary-school boy in <Picture 2>, with a round short black haircut and a light grey-blue hooded jacket over a white inner shirt. <Subject 2> is the home study in <Picture 3>, with the desk against the window wall, a full bookshelf on the left and a warm desk lamp. <Picture 1> is the opening composition of this shot.
116
+ summary: The boy leans over an open textbook at his desk and stops when he notices the printed map.
117
+ retention_analysis: <Picture 1> (appears in [Shot 1]): fully_preserved - overhead framing, desk edge position and the boy's seated placement open the shot exactly as supplied. <Subject 1> (appears in [Shot 1]): fully_preserved - face shape, hair silhouette and the jacket-over-shirt layering stay identical; his pose and expression are set by this shot, not by <Picture 2>. <Subject 2> (appears in [Shot 1]): partially_preserved - desk orientation, bookshelf wall and lamp position are kept; the props on the desk follow this shot.
118
+ detailed_description: [Shot 1] ...
119
+ overall_soundscape: ...
120
+ non_diegetic_music: N/A
121
+ ```
122
+
123
+ 三张图各自只负责一件事:`<Picture 1>` 给构图,`<Picture 2>` 给身份,`<Picture 3>` 给地理。
124
+ 把这条差异写进 `retention_analysis`,角色板就不会顺带决定构图,场景板也不会顺带决定长相。
125
+
126
+ ## 素材数量上限
127
+
128
+ 一次生成最多 1 张首帧、1 张尾帧、9 张 `reference_image`、3 段 `reference_video`、3 段 `reference_audio`;
129
+ 视频与音频每段 2–15 秒,且各自合计不超过 15 秒。分辨率取 `768P` 或 `2K`(`MiniMax-H3-Max` 另为 `480P`/`768P`)。
130
+ 超过上限时在分镜阶段按重要性取舍,并写明放弃了哪些参考,不在正文里假装它们仍然生效。
131
+
132
+ 本镜还没有起始帧图片时,它由 `$short-drama-produce` 从 `分镜.md` 的 `SHOT-...` 冻结关键帧生成;
133
+ 拿到真实文件后由分镜 owner 绑成 `用途:起始帧` 的 `REF-...`,本阶段再原样抄入。
134
+
135
+ `输入参考图` 只登记参考**图片**。连续段需要的上一段实际视频与实际音频不走这个字段,由下面的
136
+ 「连续段」小节和生产 job 的绑定承担;不要为了凑成一份清单把视频路径塞进 `REF-...`。
137
+
138
+ ## 连续段
139
+
140
+ H3 的首/尾帧模式与 full-reference 模式互斥,不能在同一请求混用 `first_frame`/`last_frame` 和
141
+ `reference_image`/`reference_video`/`reference_audio`。连续段需要上一段实际视频和实际尾帧时,统一走
142
+ full-reference:
143
+
144
+ - 上一段实际视频:`reference_video`,正文称 `<Video 1>`,控制动作、节奏和声音连续;
145
+ - 该视频的实际尾帧:`reference_image`,正文称 `<Picture 1>`,只作为新段开场的可见姿态与构图锚点。
146
+
147
+ 不要把尾帧标成 `first_frame`。这不是措辞偏好,而是 H3 官方接口的互斥输入契约。
148
+
149
+ ## 时长
150
+
151
+ MiniMax-H3 的整数时长是 4–15 秒,`MiniMax-H3-Max` 是 5–15 秒(不支持 4 秒)。短动作在至少 4 秒的镜头内完成并 hold 已接受终点;超过 15 秒的
152
+ 镜头在分镜阶段按闭合状态拆开。本阶段不偷改镜头秒数。
153
+
154
+ 依据:MiniMax-H3 官方 base/ref prompt writing guides 与 MiniMax v2 video generation API。
@@ -14,8 +14,8 @@
14
14
  运动规格只实现这个区间,不能改写它。
15
15
  - `VID-02` — 按需填写起点、有序动作、表演变化、摄影机、环境/声音和时间,
16
16
  最后输出结束报告。
17
- - `VID-03` — 当参考帧已经说明外观和构图时,运动提示词专注“怎样变化”和“什么不变”,
18
- 不要重抄整本人物与场景设定。
17
+ - `VID-03` — 先区分文生视频与图生视频。只有真实参考帧已作为输入时,运动提示词才可省略它已
18
+ 说明的外观和构图;没有真实图片时必须把静态视觉锚点写进可复制正文,不得假设执行端看过分镜。
19
19
  - `VID-12` — 补拍版/替代版逐项绑定原文要求,说明本版本没有承担哪些内容,
20
20
  并明确它是补充母版,还是请求经审查后替代母版;范围变小不等于完整覆盖。
21
21
 
@@ -48,36 +48,27 @@
48
48
 
49
49
  ### 参考图用途与补拍范围
50
50
 
51
- 每个 `reference_bindings` 条目声明准确的产物引用、用途 `role`、`may_control`、
52
- `must_not_control` 与检查状态。`start_frame` 可以决定本镜起始构图和可见状态,却不能
51
+ 每张参考声明准确的稳定 `REF-...` 槽位、顺序、项目相对路径、中文名称、用途、允许控制、不得控制与观察状态,
52
+ 且视频文档必须与分镜原文一致。起始帧可以决定本镜起始构图和
53
+ 可见状态,却不能
53
54
  提供尚未发生的终点;构图、尺度、效果参考也不能带入图中没有来源的人物、文字、
54
55
  道具或事件。只有创作者/参考图权利人的可核对说明,或运行环境获授权后形成的准确
55
- `reference_observation_ref` 才能支持像素/文字结论;只有文本记录时保持 `unverified`。
56
-
57
- **`VID-12 · reviewed_invariant`**:普通母版省略 `coverage_scope`;只有局部补拍或替代实现才增加
58
- 该对象,并按 [`coverage-scope.fragment.json`](../assets/coverage-scope.fragment.json) 的统一结构,
59
- 用 `mode: pickup | alternate` 区分。补拍版/替代版用同一文件内的 `master_motion_id` /
60
- `supplements_motion_ids` 说明它补什么,避免让文件引用自身;
61
- `source_obligations` 把动作、反应、对白、揭示、结束边界与已确认的项目要求分别绑定来源,
62
- 并把 `disposition` 对到当前 `motion_field`。运动规格只能提交 `replacement_intent`;reviewer
63
- 在下游审查结论中指名替代版或母版的记录后作出决定,不能把审查引用回写运动规格
64
- 造成循环引用。未承担的内容保留在母版/其他补拍版本,或退回分镜修改,不能随更短的
65
- 提示词消失。
56
+ 观察说明才能支持像素/文字结论;只有文本引用时保持“未验证”。
66
57
 
67
- ## 末镜交接
58
+ **`VID-12 · reviewed_invariant`**:普通母版不写覆盖清单;只有局部补拍或替代实现才在同一
59
+ `MOTION-...` 章节下写“版本关系”。用稳定 ID 指明母版与补拍,逐项列出动作、反应、对白、揭示、
60
+ 结束边界和项目要求由本版本、母版、另一补拍承担,还是必须退回分镜。运动提示词只能提出替代;
61
+ reviewer 结合完整故事义务决定,不能让未承担内容随更短提示词消失。
68
62
 
69
- **`VID-09 · structural_invariant`**:下一镜起点要么引用已经存在的记录,
70
- 要么使用明确的 `provisional` 定位信息,不得伪造记录或 `sources` 条目。
63
+ ## 末镜交接
71
64
 
72
- `next_start` 只有在目标已经存在时,才能写成引用:`src` 指向本文件 `sources` 里声明的那个
73
- 快照,`record_id` 指向该快照里已存在的记录。最后一镜可对照已有的
74
- 单集卡或分集表交接;若下一集尚未建立,就写 `next_start_locator` 和 `provisional`
75
- 状态。不得伪造 `EP002-START` 记录并声称匹配。
65
+ **`VID-09 · structural_invariant`**:下一镜存在时直接引用真实 `SHOT-...` 起点。最后一镜可对照
66
+ 已有分集规划;下一集尚未建立时明确写“下一集起点未定”,不得伪造一个不存在的 ID 并声称匹配。
76
67
 
77
68
  ## 1. 目的、输入与权属
78
69
 
79
- 视频提示词不负责“想一个更精彩的镜头”,而是把已接受镜头的变化写成能按时间执行的过程。
80
- 输入包括:镜头与关键帧快照、准确的资产引用、时长、镜头目的、起止边界、对白、画外音、音效和声音引用、
70
+ 视频提示词不负责“想一个更精彩的镜头”,而是把已确认镜头的变化写成能按时间执行的过程。
71
+ 输入包括:镜头与关键帧、准确的资产引用、时长、镜头目的、起止边界、对白、画外音、音效和声音引用、
81
72
  进出连续性、视觉/声音方向和可选的制作能力配置。
82
73
 
83
74
  分镜负责地点/时间、资产版本、构图意图、时长、对白、起止姿态/位置/目光/双手/持物、
@@ -88,12 +79,13 @@
88
79
  写提示词前先做内部卡片:
89
80
 
90
81
  ```text
91
- 镜头/关键帧:文件头 `sources` 声明的快照 key(`src`)加准确的记录与字段
82
+ 镜头/关键帧:准确的 `SHOT-...`;`IMG-...` 只定位图片提示词条目,不表示已有关键帧图片
92
83
  镜头目的:观众的注意、信息或情绪要怎样改变
93
84
  时长:已确认时长
94
85
  起点:姿态 / 重心 / 目光 / 双手 / 持物 / 空间关系
95
86
  终点:同一组字段的已确认 `end_boundary`
96
87
  对白/声音:准确来源引用 + 已确认的表演或声源要求
88
+ 持续关系:限制本镜动作空间的身体—物件—空间关系及有效范围
97
89
  下一镜:下一镜起点引用(只用于比较)
98
90
  ```
99
91
 
@@ -107,8 +99,10 @@
107
99
  - 与门、桌、人等行动相关对象的距离/方位;
108
100
  - 正在持续的运动(若关键帧冻结的是运动中瞬间)。
109
101
 
110
- 参考帧已包含脸、服装全貌、墙面材料等内容时不重复。**`craft_default`** 是“只重述动作所需条件,
111
- 不重述整份视觉设定”。但若提示词离开参考帧就会把左右手或物体搞错,应保留这些局部事实。
102
+ 真实参考帧已作为输入并包含脸、服装全貌、墙面材料等内容时不重复。**`craft_default`** 是“图生视频
103
+ 只重述动作所需条件,不重述整份视觉设定”。文生视频没有这种省略资格,必须提供足以独立建立本镜
104
+ 人物、造型、地点、构图与光线的静态视觉锚点;若提示词离开参考帧会把左右手或物体搞错,图生视频
105
+ 也应保留这些局部事实。
112
106
 
113
107
  ## 3. 运动说明的七个部分
114
108
 
@@ -134,6 +128,11 @@
134
128
  “缓缓、自然、电影感”不能替代路径与结果。只描述画面内可见动作;心理词要落为呼吸、
135
129
  注视、肌肉张力、停顿、话语节奏或明确的画外音。
136
130
 
131
+ 先把起点中的持续关系翻译成动作自由度:用正向状态写清贯穿本镜的支撑、固定、接触或空间关系,
132
+ 再只安排允许的身体/物件通道。关系变化必须来自已接受动作并落到已接受终点;否则按 `VID-01`
133
+ 保持只读。可复制正文只写持续状态和允许动作,不用 `no/not/without + 动作` 复述边界。
134
+ 成稿后在正文内直接改掉残留的这类否定结构,不另建检查步骤或报告。
135
+
137
136
  **`craft_default`**:一条运动提示词优先只有一个主导的戏剧变化,必要反应、环境与摄影
138
137
  都服务这项变化;这不是固定动作数量。若同一镜必须同时完成互不依赖的交接、追逐、身份
139
138
  揭示和大范围效果,先向 storyboard 请求按注意或力学边界拆镜。反过来,也不能为了变短
@@ -168,6 +167,15 @@
168
167
  不要给每个背景物同时加动作。声音部分引用准确的对白、画外音和音效,说明表演方式、同步要求、
169
168
  空间声源和层级,不改台词。
170
169
 
170
+ 目标执行端同轨生成声音时,把音频写成一个完整时间线:
171
+
172
+ 1. 按发生顺序列出本镜全部对白、VO、OS、必要非语言发声和 SFX;
173
+ 2. 每条台词同时标说话人、声源性质、口语语言和逐字文本,发声从原文首字开始、到末字结束;
174
+ 3. 所列事件之外只保留已声明的 ambience 或静默;相邻两句之间若有停顿,也明确回到这一底声;
175
+ 4. 声明时间线完整并结束声音段落,不再列出或否定集合外的语言、语气或声源。
176
+
177
+ 确有叹气、吸气、笑声或重叠说话时,把它作为有来源的事件列入。声音不同轨时仍只写后期职责。
178
+
171
179
  ### 3.6 时间 `timing_plan`
172
180
 
173
181
  默认把这几秒写成一条读得出先后的节拍链:
@@ -87,7 +87,7 @@
87
87
  表演与台词的说话方式都应当从这一个括注派生;三者互相矛盾时以剧本括注为准,需要改动
88
88
  就发修订请求,不在提示词里自行折中。
89
89
 
90
- ### 单人或多人 `performance_arcs[]`
90
+ ### 单人或多人表演弧
91
91
 
92
92
  每个真正承担本镜可见变化的角色才写一条;状态未变的旁观者不因字段完整度进入主表演通道。
93
93
  以下是可选词汇,不是六项必填拍表:
@@ -97,26 +97,23 @@
97
97
  3. **mask**:角色确实在掩饰、继续或压住什么时才写;
98
98
  4. **visible_leak**:掩饰漏出的目光、尾音、手部、距离或物件动作,且当前景别读得到;
99
99
  5. **choice**:说、做或刻意不做一个有方向的选择;
100
- 6. **landing**:选择落在 accepted end 状态。
100
+ 6. **landing**:选择落在分镜明确的终点状态。
101
101
 
102
- 需要时从 [`performance.fragment.json`](../assets/performance.fragment.json) 复制统一结构;
103
- `actor_ref`、触发和注意交接对象都写成引用:`src` 指向文件头 `sources` 声明的那个快照,
104
- `record_id` 指向该快照里的记录;不写裸角色名或另造引用形状。注意归属方所在的产物
105
- (设定集、分镜或剧本)也在同一个 `sources` 里声明一个 key。
102
+ 需要时在对应 `MOTION-...` 下按人物分条写;人物使用 `视觉设定.md` 的稳定 ID,触发与注意交接指向
103
+ 场景或镜头的可见 ID,不靠同名猜身份。
106
104
  只保留能让本镜更可演、更可读的字段。例如角色认出桌上印章后仍试图把原句说完,尾音降低、
107
105
  右手离桌,最后停止阻拦并让出通道;若没有掩饰,就删除 `mask` / `visible_leak`,不要填 `none`。
108
106
 
109
107
  若本镜只需要“听见门响后停止翻页”,写触发和可见动作即可,不必把其余字段补成同义句。
110
108
 
111
109
  空镜、道具细节、纯空间转场、无人物镜头,或只有物理动作而没有可见内在处理的镜头,省略
112
- `performance_arcs[]`。单人镜也不因人数自动生成 arc;多人镜更不是给每个人复制同一“震惊”。不同人物可以早认出但继续说、
110
+ 表演弧。单人镜也不因人数自动生成;多人镜更不是给每个人复制同一“震惊”。不同人物可以早认出但继续说、
113
111
  晚半拍才让路、故意制造噪声掩饰,或看见别人停顿后才理解变化。所有差异都要来自角色立场、
114
112
  已接受信息和空间关系。
115
113
 
116
- 只在注意真正交接时,用 `attention_handoffs[]` 简写“谁/什么拥有注意 → 哪个可见或可听触发 →
117
- 注意转给谁/什么”;没有交接时省略该字段。
118
- 交接两端可以是角色、道具、证据、声源或已建立的空间区域;分别指向拥有该事实的那个产物的
119
- `src` 与记录,不要为了套片段把道具或空间伪装成 `CHAR-*`。
114
+ 只在注意真正交接时,简写“谁/什么拥有注意 → 哪个可见或可听触发 → 注意转给谁/什么”;没有交接
115
+ 就不补这一段。交接两端可以是角色、道具、证据、声源或已建立的空间区域;使用它们在
116
+ `视觉设定.md` / `分镜.md` 中的可见 ID,不要为了套人物格式把道具或空间伪装成角色。
120
117
  交接不是全员同步转头:例如说话者尾音降低 → 最近的听者先停手 → 群体让路 → 主角获得空间。
121
118
  每一跳说明为何当前景别、遮挡和声音能读到;细微眼神在远景不可读时,改成视线转移加手部停顿,
122
119
  而不是只增加情绪形容词。
@@ -184,22 +184,26 @@
184
184
 
185
185
  ## 五、文字与缺陷约束
186
186
 
187
- 1. **无文字要求**(项目确实没有可读文字义务时):
187
+ 1. **字幕层默认关闭**:除非剧本或创作者明确要求字幕、caption 或对白文字叠加,每条视频正文都
188
+ 用项目提示词语言直接声明全镜任何时刻都不生成这些内容,让对白只通过声音与口型发生;不能只写
189
+ 抽象的“文字层为空”。这个默认与旗帜、标牌、屏幕等画内文字政策独立;有 `exact-readable` 时
190
+ 仍然直接禁止字幕层。
191
+ 2. **画内无文字要求**(项目确实没有可读文字义务时):
188
192
  `画面不要出现任何文字`。若上游或资产要求 `exact-readable`,改为列出唯一允许
189
193
  字段与受控显示位置,禁止同时写全局 `no-text`。
190
- 2. **参考图检查**:提示词中的无文字要求只约束生成意图,不能擦除参考图像素。人物、场景、道具
194
+ 3. **参考图检查**:提示词中的无文字要求只约束生成意图,不能擦除参考图像素。人物、场景、道具
191
195
  或关键帧参考若带未批准标牌、界面、号码、水印、字幕或伪字,先**裁切、清理、
192
196
  遮罩或替换**;会破坏身份、地理或构图时退回参考图归属方决策。`exact-readable`
193
197
  镜头只允许批准的显示位置和文字版本,不让旧字样从参考图回流。
194
- 3. **文字要求一致**:只复述已选择的文字策略;不能用`【不出现任何文字字幕】`抹掉证据文字。
195
- 4. **语言与文字分别守上游要求**:对白保留原语言;字幕、屏显或无字策略读取已接受的
198
+ 4. **文字要求一致**:只复述已选择的文字策略;不能用`【不出现任何文字字幕】`抹掉证据文字。
199
+ 5. **语言与文字分别守上游要求**:对白保留原语言;字幕、屏显或无字策略读取已接受的
196
200
  文字方案,不把“出海”自动等同于无字幕,也不让翻译覆盖逐字对白。
197
- 5. **模型条件只来自已记录观察**:若创作者提供的项目反馈指出身份混淆、比例漂移
201
+ 6. **模型条件只来自已记录观察**:若创作者提供的项目反馈指出身份混淆、比例漂移
198
202
  或其他具体风险,针对该操作补最少的正向状态说明与保持项;不复制通用缺陷补丁,
199
203
  不靠首尾重复同一句增加权重。
200
- 6. **后处理不在本技能执行**:若项目已有受控文字层或清理决定,只在文本中保留其
204
+ 7. **后处理不在本技能执行**:若项目已有受控文字层或清理决定,只在文本中保留其
201
205
  归属方引用和交接说明;不把未来清理能力当成当前参考图已检查的证据。
202
- 7. **不要用词表判断审美**:项目已知能力若明确某种表达不可执行,记录它为什么失败、当前
206
+ 8. **不要用词表判断审美**:项目已知能力若明确某种表达不可执行,记录它为什么失败、当前
203
207
  替代表达和适用范围;不把一串形容词或生理细节词提升为跨题材禁用清单(VID-10)。
204
208
 
205
209
  ## 六、决策规则
@@ -214,9 +218,8 @@
214
218
  4. **台词负载**:从所选时长、语速、表演动作和口型能力反推;放不下就删减、拆镜或
215
219
  请求剧本修订,不用固定字数替代试听。
216
220
  5. **收到生产反馈后的修订要可解释**:只改变当前诊断所需变量(拆元素、补关键状态
217
- 或换措辞);必须联动的变量一起记录。若形成补拍或替代版,保留修改前后版本、
218
- `coverage_scope` 与逐项 `source_obligations` 和 `disposition` 记录;普通母版不增加这层账目。
219
- 本技能不负责重投。
221
+ 或换措辞);必须联动的变量一起记录。若形成补拍或替代版,在 `视频提示词.md` 中写明它与母版
222
+ 的关系、修改前后差异,以及每项原文义务由哪一版承担;普通母版不增加版本账目。本技能不负责重投。
220
223
  6. **生产预算不由本技能猜**:可读取创作者提供的项目观察来收窄文本,但不移植
221
224
  无来源的通用成本比例,也不从文字规格声称模型效果。
222
225
 
@@ -4,80 +4,51 @@
4
4
 
5
5
  1. 审查顺序
6
6
  2. 证据量表
7
- 3. 诊断目录
7
+ 3. 完成前结构检查
8
8
  4. 合成正例
9
9
  5. 合成反例
10
10
 
11
11
  ## 1. 审查顺序
12
12
 
13
- 先验证 refs、显式时长、camera interval、音频否定与 end equality,再由审查者看 performability、action feasibility、camera motivation 和 semantic invention。Reviewer 写 finding,不改 motion、shot 或 screenplay。
13
+ 先核对可见 ID、显式时长、摄影机区间、声音来源和终点一致,再由审查者判断表演可执行性、动作负载、
14
+ 运镜动机与语义发明。Reviewer 写 finding,不替 motion、shot 或 screenplay owner 修改来源。
14
15
 
15
- Finding 必须含被引用快照的 artifact(从该文件 `sources` 声明里读出)、引用片段、影响、
16
- required fix、owner、severity、status。禁止用 prompt 长度、动词数量、固定动作/秒或“AI 味”替代证据。
16
+ Finding 必须含文件与 `MOTION-...` / `SHOT-...`、必要短引文、影响、修订结果、owner、严重程度和状态。
17
+ 禁止用提示词长度、动词数量、固定动作/秒或“AI 味”替代证据。
17
18
 
18
19
  ## 2. 证据量表
19
20
 
20
21
  | 维度 | 核心问题 | 必须引用 |
21
22
  |---|---|---|
22
- | Start fidelity | 第一动作是否从 keyframe/shot start 真正可接上? | start 字段与 prompt 起始句 |
23
- | Ordered action | actor、方向、接触、先后和结果是否清楚? | action stages |
24
- | Performance | 触发、处理、选择、landing 是否可见且符合 agenda? | source beat/shot purpose + motion |
25
- | Action budget | duration 内能否保留故事动作、对白与 reaction? | duration、距离、台词、动作、camera |
26
- | Camera | lock/move 是否一致,且因注意/压力/揭示而发生? | camera interval + shot purpose |
27
- | Environment | 是否只动了有依据的环境,未发明天气/事件? | accepted continuity + environment |
28
- | Dialogue/audio | exact refs、`speaker_ref`、可选 `voice_direction_ref`、VO/OS/SFX 与本场 delivery 是否分别保持? | source audio fields + character voice direction + prompt |
29
- | End fidelity | reported end 是否逐项等于 continuity out? | end report + source end |
30
- | Economy | frame 已承载外观是否被无谓倾倒? | reference contents + copy block |
31
- | Shot boundary | 是否偷改 duration/end/next shot,或在单个镜头内部藏未声明的 cut? | source shot + motion |
32
- | Segment integrity | 每个计时段是否只有一个连续视角?各段相加是否正好等于**所属镜头**的已接受时长? | segment 列表 + accepted shot duration |
33
- | Container arithmetic | 容器承载了哪些已接受镜头?容器时长是否等于成员时长之和?成员是否顺序连续、同一绑定链、不跨场次、各自可单独审查? | container 成员列表 + 各镜 accepted duration |
34
- | Deliverable text | 交付文本里是否只剩要拍的画面内容,没有文件名、版本号、锁定标记、草图指代或任务备注? | prompt 正文 |
35
-
36
- 语义 finding 的修复应指出删/改哪一段 motion,或该向哪个 owner 发 revision request,而不是笼统说“动作自然一点”。
37
-
38
- ## 3. 诊断目录
39
-
40
- | code | classification | enforcer | 默认 severity | owner | 含义 |
41
- |---|---|---|---|---|---|
42
- | VID_SOURCE_REF_UNRESOLVED | structural_invariant | validator | error | video-prompts | shot/keyframe/dialogue/audio ref 未解析:`src` 在本文件 `sources` 里没有对应条目、引用没有给出任何上游绑定,或解析出的记录/字段在目标快照里不存在 |
43
- | VID_EXPLICIT_TIMING_OVERFLOW | structural_invariant | validator | error | video-prompts | 显式时间终点/非重叠总量超 duration |
44
- | VID_EXPLICIT_TIMING_SHORTFALL | structural_invariant | validator | error | video-prompts | 裁剪到镜头长度内的分段并集短于 duration;开头留空、中间留空与结尾留空都算,余量会被无来源动作填满 |
45
- | VID_TIMING_MODE_INCONSISTENT | structural_invariant | validator | error | video-prompts | `timing_plan.mode` 写 `relative` 却有分段标 `explicit`,两种计时同时声明 |
46
- | VID_EXPLICIT_TIMING_UNDECLARED_OVERLAP | structural_invariant | validator | error | video-prompts | 分段区间重叠但未声明重叠关系,合计无法判定 |
47
- | VID_EXPLICIT_TIMING_UNPARSEABLE | structural_invariant | validator | error | video-prompts | 声明 explicit 却没有可读秒区间,无法做 VID-04 算术 |
48
- | VID_DECLARED_TOTAL_MISMATCH | structural_invariant | validator | error | video-prompts | `declared_total_or_endpoint_seconds` 与分段实际覆盖不一致 |
49
- | VID_DURATION_PROJECTION_STALE | structural_invariant | validator | error | video-prompts | `boundary_refs.duration.value_seconds` 与镜头已接受时长不一致 |
50
- | VID_CAMERA_INTERVAL_CONFLICT | structural_invariant | validator | error | video-prompts | 同一区间 lock 与 move 等显式冲突 |
51
- | VID_END_REPORT_MISMATCH | structural_invariant | validator | error | video-prompts | reported end 不等于 storyboard continuity out |
52
- | VID_BOUNDARY_OVERRIDE | structural_invariant | validator | error | video-prompts | motion 写入 duration/end/next-shot override |
53
- | VID_ACTION_INFEASIBLE | reviewed_invariant | reviewer | error | video-prompts/storyboard | 一般动作负载不可行或掩盖故事变化 |
54
- | VID_SEMANTIC_INVENTION | reviewed_invariant | reviewer | error | video-prompts | 新造故事、关系、知识、状态或音频事实 |
55
- | VID_CAMERA_UNMOTIVATED | craft_default | reviewer | warning | video-prompts | movement 无助于目的/注意变化 |
56
- | VID_REFERENCE_DUMP | craft_default | reviewer | warning | video-prompts | bound frame 已带外观却重复整本 设定集 |
57
- | VID_HIDDEN_CUT_IN_SEGMENT | reviewed_invariant | reviewer | error | video-prompts | 单个计时段内藏入视角或空间跳变,等于一次未申报的剪辑 |
58
- | VID15_SHOT_PACKED_TWICE | structural_invariant | validator | error | video-prompts | 同一镜头被两个容器认领,全集时长凭空多一段 |
59
- | VID15_MEMBER_IS_NOT_AN_EPISODE_SHOT | structural_invariant | validator | error | video-prompts | 容器成员不属于本集镜头集合 |
60
- | VID15_MEMBER_SHOT_HAS_NO_DURATION | structural_invariant | validator | error | video-prompts | 被装箱的镜头没有数值时长,容器时长无从成立 |
61
- | VID15_CONTAINER_DURATION_IS_NOT_THE_SUM | structural_invariant | validator | error | video-prompts | 容器时长不等于成员已接受时长之和 |
62
- | VID15_EPISODE_TOTAL_DOES_NOT_RECONCILE | structural_invariant | validator | error | video-prompts | 容器加散镜不等于全集镜头时长总和 |
63
- | VID15_MEMBER_ORDER_IS_NOT_A_SEQUENCE | structural_invariant | validator | error | video-prompts | 成员 `order` 不是从 1 开始、升序、无重复无跳号 |
64
- | VID15_MEMBER_HAS_NO_ACCEPTED_DURATION | structural_invariant | validator | error | video-prompts | 成员没有投影它所装镜头的时长 |
65
- | VID15_MEMBER_DURATION_IS_STALE | structural_invariant | validator | error | video-prompts | 成员的 `accepted_duration` 与它所装镜头的值不一致 |
66
- | VID15_MEMBERSHIP_BASIS_MISSING | structural_invariant | validator | error | video-prompts | 容器没有记录成员为何同属一个容器 |
67
- | VID15_MEMBERSHIP_BASIS_INCOMPLETE | structural_invariant | validator | error | video-prompts | `membership_basis` 三项里有结论留空 |
68
- | VID15_CONTAINER_HAS_NO_ID | structural_invariant | validator | error | video-prompts | 容器记录没有 `container_id` |
69
- | VID15_CONTAINER_HAS_NO_MEMBERS | structural_invariant | validator | error | video-prompts | 容器没有成员 |
70
- | VID15_CONTAINER_DURATION_MISSING | structural_invariant | validator | error | video-prompts | `container_duration` 缺失或不是秒数 |
71
- | VID15_MEMBER_HAS_NO_SHOT_REF | structural_invariant | validator | error | video-prompts | 成员没有点名它所装的镜头 |
72
-
73
- `VID15_*` 由 [container_check.py](../scripts/container_check.py) 执行。未装容器的散镜与
74
- 时长尚未确定的镜头**只报告不判错**:前者是合法的打包选择,后者是上游还没做完,把它们
75
- 写成缺陷会让"进行中"和"做错了"无法区分。
76
- | VID_UNEXECUTABLE_MICRO_METRIC | craft_default | reviewer | warning | video-prompts | 亚秒偏移、厘米位移、角度数等读起来精确却无法执行也无法验证的计量 |
77
- | VID_INNER_MONOLOGUE_ONLY | craft_default | reviewer | warning | video-prompts | 绝大多数段落只有内心活动,没有可拍的可见事件或有来源的声音 |
78
- | VID_STYLE_ALTERNATIVE | taste_option | reviewer | note | video-prompts | 表演/摄影/声音风格的非阻断选择 |
79
-
80
- 语义问题只能由 reviewer 证据化判断;不要写正则把“缓慢”“同时”或动词数量变成错误。
23
+ | Start fidelity | 第一动作是否从关键帧/镜头起点真正可接上? | 起点事实与正文起始句 |
24
+ | Ordered action | 人物、方向、接触、先后和结果是否清楚? | 动作阶段 |
25
+ | Performance | 触发、处理、选择和落点是否可见且符合人物目标? | 剧本节拍、镜头职责与运动正文 |
26
+ | Action budget | 时长内能否保留故事动作、对白与反应? | 时长、距离、台词、动作、运镜 |
27
+ | Camera | 固定/运动是否一致,且因注意、压力或揭示而发生? | 运镜区间与镜头职责 |
28
+ | Environment | 是否只动了有依据的环境,未发明天气或事件? | 连续性与环境动作 |
29
+ | Dialogue/audio | 逐字台词、说话人、VO/OS/SFX 与本场声音策略是否保持? | 场景 ID、声音事实与正文 |
30
+ | End fidelity | 运动终点是否逐项等于分镜终点? | 终点说明与来源终点 |
31
+ | Economy | 参考帧已承载的外观是否被无谓重复? | 参考内容与可复制正文 |
32
+ | Shot boundary | 是否偷改时长/终点/下一镜,或在单镜内藏切? | `SHOT-...` 与 `MOTION-...` |
33
+ | Segment integrity | 每个计时段是否只有一个连续视角,时间并集是否正好覆盖本镜? | 分段与镜头时长 |
34
+ | Delivery grouping | 多镜分组是否连续、同场、同一地理/资产链,时长是否等于成员之和? | 分组章节与成员时长 |
35
+ | Deliverable text | 可复制正文是否只剩要生成的内容? | 提示词正文 |
36
+
37
+ 语义 finding 的修复应指出删/改哪一段运动,或该向哪个 owner 提出什么修订,不笼统说“动作自然一点”。
38
+
39
+ ## 3. 完成前结构检查
40
+
41
+ - 每个 `MOTION-...` 唯一对应真实 `SHOT-...`,并继承相同时长;
42
+ - 起点、主要变化、分段时序、声音、运镜和终点没有互相冲突;
43
+ - 显式分段的并集既不超时,也不留下由模型自行填充的空白;重叠必须说明;
44
+ - 固定和运动摄影机不在同一区间同时生效;
45
+ - 终点逐项对齐分镜,下一镜仍读取分镜自己的起点;
46
+ - 同一镜头最多进入一个交付分组;分组加散镜恰好覆盖点名范围一次;
47
+ - 静态漫剧只做关键帧切换加配音时可以没有逐镜运动正文;
48
+ - 可复制正文不含文件名、版本号、ID、状态、哈希或任务备注。
49
+
50
+ 未分组的散镜和时长尚未确定的镜头只报告为当前状态,不伪装成质量缺陷。动作可行性、隐藏剪辑、
51
+ 语义发明和无动机运镜仍需 reviewer 结合剧情判断。
81
52
 
82
53
  ## 4. 合成正例
83
54