@oh-story/dsh 0.1.4 → 0.1.6

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 (479) hide show
  1. package/README.md +56 -12
  2. package/lib/client.js +2707 -268
  3. package/lib/client.js.map +4 -4
  4. package/lib/drama/manifest.json +136 -101
  5. package/lib/drama/skills/short-drama/SKILL.md +61 -1
  6. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +7 -4
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +133 -8
  8. package/lib/drama/skills/short-drama/references/creator-workflow.md +38 -2
  9. package/lib/drama/skills/short-drama/references/knowhow-index.md +3 -0
  10. package/lib/drama/skills/short-drama/references/reference-roles.md +10 -7
  11. package/lib/drama/skills/short-drama/references/runtime-preflight.md +3 -0
  12. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
  13. package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
  14. package/lib/drama/skills/short-drama-assets/SKILL.md +13 -3
  15. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
  16. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +2 -1
  17. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +19 -0
  18. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  19. package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
  20. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +6 -2
  21. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +4 -3
  22. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +1 -1
  23. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +1 -1
  24. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +3 -1
  25. package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
  26. package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
  27. package/lib/drama/skills/short-drama-produce/SKILL.md +46 -10
  28. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
  29. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
  30. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
  31. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
  32. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
  33. package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
  34. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +12 -0
  35. package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
  36. package/lib/drama/skills/short-drama-storyboard/SKILL.md +76 -7
  37. package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
  38. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +6 -2
  39. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
  40. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +5 -2
  41. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +16 -0
  42. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +8 -3
  43. package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
  44. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +81 -13
  45. package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
  46. package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
  47. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +21 -1
  48. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
  49. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -6
  50. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +11 -7
  51. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
  52. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
  53. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +5 -2
  54. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
  55. package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
  56. package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
  57. package/lib/drama/skills/short-drama-write/SKILL.md +3 -2
  58. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
  59. package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
  60. package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
  61. package/lib/index.js +865 -33
  62. package/lib/index.js.map +4 -4
  63. package/lib/novel-to-game/LICENSE +21 -0
  64. package/lib/novel-to-game/README.md +180 -0
  65. package/lib/novel-to-game/README_ZH.md +178 -0
  66. package/lib/novel-to-game/VERSION +1 -0
  67. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
  68. package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  78. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
  79. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
  80. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
  81. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  82. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
  83. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
  84. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
  85. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
  86. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
  87. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
  88. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
  89. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
  90. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
  91. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
  92. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
  93. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
  94. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
  95. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
  96. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
  97. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
  98. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
  99. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
  100. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
  101. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
  102. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
  103. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
  104. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
  105. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
  106. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
  107. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
  108. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
  109. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  110. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
  111. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
  112. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
  113. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
  114. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
  115. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
  116. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
  117. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
  118. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
  119. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
  120. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
  121. package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
  122. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
  123. package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
  124. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
  125. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
  126. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
  127. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
  128. package/lib/novel-to-game/manifest.json +508 -0
  129. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
  130. package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
  131. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
  132. package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
  133. package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
  134. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
  135. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
  136. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
  137. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
  138. package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
  139. package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
  140. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
  141. package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
  142. package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
  143. package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
  144. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
  145. package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
  146. package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
  147. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
  148. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
  149. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
  150. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
  151. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
  152. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
  153. package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
  154. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
  155. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
  156. package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
  157. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
  158. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
  159. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
  160. package/lib/oh-story/manifest.json +415 -305
  161. package/lib/oh-story/roles/consistency-checker.md +1 -1
  162. package/lib/oh-story/roles/narrative-writer.md +32 -33
  163. package/lib/oh-story/roles/story-architect.md +16 -26
  164. package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
  165. package/lib/oh-story/skills/story/SKILL.md +16 -9
  166. package/lib/oh-story/skills/story/VERSION +1 -1
  167. package/lib/oh-story/skills/story/references/author-memory.md +163 -0
  168. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
  169. package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
  170. package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
  171. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
  172. package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
  173. package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
  174. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
  175. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
  176. package/lib/oh-story/skills/story-import/SKILL.md +19 -10
  177. package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
  178. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
  179. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
  180. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
  181. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
  182. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
  183. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
  184. package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
  185. package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
  186. package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
  187. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
  188. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
  189. package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
  190. package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
  191. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
  192. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  193. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
  194. package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
  195. package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
  196. package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
  197. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
  198. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-core-mechanics.md → story-long-write/references/long-genre-mechanics.md} +1 -1
  199. package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-long-write/references/long-reversal.md} +18 -32
  200. package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
  201. package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
  202. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  203. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  204. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
  205. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
  206. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +4 -4
  207. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
  208. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +14 -14
  209. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
  210. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
  211. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
  212. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
  213. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
  214. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
  215. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
  216. package/lib/oh-story/skills/story-review/SKILL.md +26 -17
  217. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
  218. package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
  219. package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
  220. package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
  221. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
  222. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
  223. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
  224. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
  225. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
  226. package/lib/oh-story/skills/story-setup/SKILL.md +74 -33
  227. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
  228. package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
  229. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
  230. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
  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/genre-readers.md +1 -1
  234. package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
  236. package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
  237. package/lib/oh-story/skills/{story-long-write/references/genre-core-mechanics.md → story-setup/references/agent-references/long-genre-mechanics.md} +1 -1
  238. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
  239. package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → long-reversal.md} +18 -32
  240. package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
  241. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
  242. package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
  243. package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
  244. package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
  245. package/lib/oh-story/skills/{story-long-write/references/reversal-toolkit.md → story-setup/references/agent-references/short-reversal.md} +29 -23
  246. package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
  247. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  248. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
  249. package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
  250. package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
  251. package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
  252. package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
  253. package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
  254. package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
  255. package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
  257. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
  258. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
  259. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
  260. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
  261. package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
  262. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
  263. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
  264. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
  265. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
  266. package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
  267. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
  268. package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
  270. package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
  271. package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
  272. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
  273. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
  274. 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
  275. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
  276. 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
  277. 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
  278. 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
  279. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
  280. 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
  281. 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
  282. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
  283. 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
  284. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
  285. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
  286. package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
  287. package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
  288. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
  289. package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
  290. package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
  291. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
  292. package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
  293. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
  294. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
  295. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
  296. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
  297. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
  298. package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
  299. package/lib/types/client/drama-production-view.d.ts +34 -0
  300. package/lib/types/client/drama-production-view.d.ts.map +1 -0
  301. package/lib/types/client/drama-production.d.ts +92 -0
  302. package/lib/types/client/drama-production.d.ts.map +1 -0
  303. package/lib/types/client/file-activity.d.ts +4 -2
  304. package/lib/types/client/file-activity.d.ts.map +1 -1
  305. package/lib/types/client/index.d.ts +1 -1
  306. package/lib/types/client/index.d.ts.map +1 -1
  307. package/lib/types/client/production-intents.d.ts +9 -0
  308. package/lib/types/client/production-intents.d.ts.map +1 -0
  309. package/lib/types/client/production-prompts.d.ts +9 -0
  310. package/lib/types/client/production-prompts.d.ts.map +1 -0
  311. package/lib/types/client/production-runtime.d.ts +58 -0
  312. package/lib/types/client/production-runtime.d.ts.map +1 -0
  313. package/lib/types/client/video-studio.d.ts +41 -0
  314. package/lib/types/client/video-studio.d.ts.map +1 -0
  315. package/lib/types/client/workbench-ui.d.ts +5 -0
  316. package/lib/types/client/workbench-ui.d.ts.map +1 -0
  317. package/lib/types/game-verification.d.ts +16 -0
  318. package/lib/types/game-verification.d.ts.map +1 -0
  319. package/lib/types/index.d.ts +3 -1
  320. package/lib/types/index.d.ts.map +1 -1
  321. package/lib/types/production-intent.d.ts +21 -0
  322. package/lib/types/production-intent.d.ts.map +1 -0
  323. package/lib/types/production-tool.d.ts +5 -0
  324. package/lib/types/production-tool.d.ts.map +1 -0
  325. package/lib/types/role-tool.d.ts.map +1 -1
  326. package/lib/types/skill-provider.d.ts +7 -0
  327. package/lib/types/skill-provider.d.ts.map +1 -1
  328. package/lib/types/video-project.d.ts +42 -0
  329. package/lib/types/video-project.d.ts.map +1 -0
  330. package/lib/types/workspace-request-trust.d.ts +6 -0
  331. package/lib/types/workspace-request-trust.d.ts.map +1 -1
  332. package/lib/types/workspace-route.d.ts +20 -0
  333. package/lib/types/workspace-route.d.ts.map +1 -1
  334. package/lib/video-recap/CHANGELOG.md +282 -0
  335. package/lib/video-recap/LICENSE +21 -0
  336. package/lib/video-recap/README.en.md +257 -0
  337. package/lib/video-recap/README.md +255 -0
  338. package/lib/video-recap/manifest.json +684 -0
  339. package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
  340. package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
  341. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
  342. package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
  343. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
  344. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
  345. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
  346. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
  347. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
  348. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
  349. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
  350. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
  351. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
  352. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
  353. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
  354. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
  355. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
  356. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
  357. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
  358. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
  359. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
  360. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
  361. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
  362. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
  363. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
  364. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
  365. package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
  366. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
  367. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
  368. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
  369. package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
  370. package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
  371. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
  372. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
  373. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
  374. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
  375. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
  376. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
  377. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
  378. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
  379. package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
  380. package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
  381. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
  382. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
  383. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
  384. package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
  385. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
  386. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
  387. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
  388. package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
  389. package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
  390. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
  391. package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
  392. package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
  393. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
  394. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
  395. package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
  396. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
  397. package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
  398. package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
  399. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
  400. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
  401. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
  402. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
  403. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
  404. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
  405. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
  406. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
  407. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
  408. package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
  409. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
  410. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
  411. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
  412. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
  413. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
  414. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
  415. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
  416. package/lib/video-recap/skills/video-script/SKILL.md +248 -0
  417. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
  418. package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
  419. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
  420. package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
  421. package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
  422. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
  423. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
  424. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
  425. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
  426. package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
  427. package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
  428. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
  429. package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
  430. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
  431. package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
  432. package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
  433. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
  434. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
  435. package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
  436. package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
  437. package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
  438. package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
  439. package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
  440. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
  441. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
  442. package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
  443. package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
  444. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
  445. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
  446. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
  447. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
  448. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
  449. package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
  450. package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
  451. package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
  452. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
  453. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
  454. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
  455. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
  456. package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
  457. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
  458. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
  459. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
  460. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
  461. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
  462. package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
  463. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
  464. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
  465. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
  466. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
  467. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
  468. package/package.json +55 -40
  469. package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
  470. package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
  471. package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
  472. package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
  473. package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
  474. package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
  475. package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
  476. package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
  477. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
  478. /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
  479. /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
@@ -97,8 +97,7 @@ def main() -> int:
97
97
  == "gpt-image-2",
98
98
  "GPT Image 2 profile compiled the wrong model",
99
99
  )
100
- require(
101
- compile_seedance_payload(
100
+ seedance = compile_seedance_payload(
102
101
  {
103
102
  "modality": "video",
104
103
  "prompt": "slow push in",
@@ -109,8 +108,10 @@ def main() -> int:
109
108
  model="configured-endpoint",
110
109
  allowed_ratios={"9:16"},
111
110
  duration_range=(5, 10),
112
- )["content"][0]["text"].endswith("--ratio 9:16 --dur 5"),
113
- "Seedance profile did not compile explicit prompt switches",
111
+ )
112
+ require(
113
+ seedance.get("ratio") == "9:16" and seedance.get("duration") == 5,
114
+ "Seedance profile did not compile explicit API parameters",
114
115
  )
115
116
  require(
116
117
  compile_minimax_music_payload(
@@ -47,6 +47,18 @@
47
47
  expression, and light legible?
48
48
  - Does it avoid ordered actions, performance arcs, camera moves, or transforming
49
49
  environments?
50
+ - Read the finished keyframe text, not the shot's intent: is every visible character,
51
+ place, and prop whose identity, Look, or geography must stay recognizable listed in
52
+ this shot's `视觉依据` (`SHT-22`)? A second body that entered the composition while the
53
+ frame was being written is the usual miss.
54
+ - Does each declared 控制 scope stay inside what this frame can carry, and is nothing
55
+ bound merely because it was bound in the previous shot (`SHT-24`)?
56
+ - When real reference images are bound, does every `REF-...` slot declare a 用途, so the
57
+ shot says which start frame and which identity/geography/prop pictures it sends
58
+ (`SHT-25`, `VID-24`)?
59
+ - Is anything the frames need kept consistent across shots — a carried prop, a garment —
60
+ absent from `视觉设定.md` entirely, so it can appear in no shot's basis at all? The
61
+ mechanical check cannot see this: an entry that does not exist cannot be reported missing.
50
62
 
51
63
  ## Motion
52
64
 
@@ -317,7 +317,7 @@ def main() -> int:
317
317
  except (OSError, ValidationError) as exc:
318
318
  print(f"review check failed: {exc}", file=sys.stderr)
319
319
  return 2
320
- print(json.dumps(result, ensure_ascii=False, indent=2))
320
+ print(json.dumps(result, ensure_ascii=True, indent=2))
321
321
  return 0
322
322
 
323
323
 
@@ -22,25 +22,90 @@ license: MIT
22
22
 
23
23
  创作者可读说明跟随项目语言;冻结关键帧的可复制正文跟随
24
24
  `short-drama.json#/format/prompt_language`。没有 `short-drama.json` 时正文默认使用 `en`。
25
+ 分配镜头时长前读取
26
+ `short-drama.json#/creator_authority/production_profile/choices/native_duration_seconds`。已声明目标模型但
27
+ 没有原生时长时先补这一个选择;目标模型也未声明时照常按叙事节奏设计,不猜供应商限制。
28
+
29
+ 冻结关键帧写完之前,谁会出现在这一格画面里还没有定下来。所以三条依据都在关键帧之后回填,
30
+ 读的是成稿画面,不是镜头意图。
31
+
32
+ 用户没有手工点名参考图,不等于选择文生视频。冻结关键帧后先根据本镜可见人物、地点、关键道具与
33
+ 起始构图判断一致性需求,再检查项目中已有的真实图片。只有当前可读、内容与用途可核对的图片才能自动绑定;
34
+ 文件名像某个角色但内容未核对时,仍视为未准备好。
25
35
 
26
36
  ## 工作流
27
37
 
28
- 1. 确认每个场景动作、对白、声音、画面文字和转折由哪些镜头承载。
38
+ 1. 读取已接受的目标模型原生时长区间,再确认每个场景动作、对白、声音、画面文字和转折由哪些镜头承载。
29
39
  2. 确定观众何时知道什么、对齐谁、空间如何揭示、转折落在哪个可见动作。
30
- 3. 每镜写清唯一职责、来源、时长、景别/机位、起点、终点、声音和引用的 `IMG-...` 参考。
31
- 4. 锁定人物朝向、位置、视线、持物、出入口、屏幕方向和必要状态。
40
+ 剧本或 Brief 用“前半段 / 后半段 / 前三分之一 / 最后 N 秒”等相对时间限定首次出现、释放或禁止时,
41
+ 先用已接受集长换成明确时间边界再分镜;例如 60 秒作品的“后半段首次出现”不得早于 30 秒。
42
+ 3. 每镜写清唯一职责、来源、时长、景别/机位、起点、唯一主要动作、终点和声音;用
43
+ `起点 → 唯一动作 → 终点` 直接说明人物、双手与持物怎样完成本镜状态转换。三条依据留到第 6 步。
44
+ 4. 锁定人物朝向、位置、视线、持物、出入口、屏幕方向和必要状态;上游已有会限制动作空间的持续关系时,把关系投影进本镜起点与终点。
32
45
  5. 冻结关键帧只投影镜头起点;删除终点才出现的文字、动作、姿态或道具状态。
33
- 6. 整集请求完成整集,末端一次报告覆盖、节奏和真实未决选择。
46
+ 6. 关键帧成稿后,先从成稿正文读出这一格里需要保持身份、造型或地理的人物、地点和道具,
47
+ 再用同一份清单一次填满三条依据:
48
+
49
+ - **视觉依据**:清单里每一项写成《视觉设定.md》的条目引用,这是必写字段;
50
+ - **图片提示词项**:清单里已有合适 `IMG-...` 条目的写上,没有的留「无」;
51
+ - **输入参考图**:按清单在用户提供的输入、`剧集/<EP>/制作成果/` 和文档已指向的其他可见媒体中查找匹配图片;
52
+ 命中就写入 `REF-...`。一张都没命中时写「无(待补参考图:<本镜缺失的起始帧、人物、地点、道具>)」;
53
+ 只命中一部分时,在已有 `REF-...` 后追加「;待补参考图:<仍缺的图片>」,缺口之间只用 `、` 分隔。
54
+ 只有创作者明确表示不用图时,才写「无(创作者已明确选择文生视频)」。
55
+
56
+ 三条依据读的是同一格画面,所以不能互相矛盾:关键帧里点名的人物或道具,一定出现在视觉依据里。
57
+ 7. 整集请求完成整集,末端一次报告覆盖、节奏和真实未决选择。
34
58
 
35
59
  ## 镜头要求
36
60
 
37
61
  - 每镜有唯一职责、明确来源、可见起止状态和合理时长。
62
+ - 已声明原生时长时,每个一镜一生成的镜头都落在其最短与最长秒数内。短于下限的叙事动作在合法
63
+ 镜长内完成后保持终点;长于上限的动作按可见状态闭合点拆镜,拆出的每镜仍各有唯一职责与可信交界。
64
+ - 「唯一动作」写从本镜起点到终点的那条可见状态链;涉及交接、换手、放置或取回时,把接触者、
65
+ 接触方式和物件落点写在同一链里,不能让合法终点之间靠镜外瞬移衔接。
38
66
  - 切镜必须带来信息、权力、情绪、空间或节奏变化;同义重复镜头删掉。
67
+ - 相对时间词约束的是事件首次可见或可听的时刻,不因前置动作已经完成就提前释放;分镜时间轴直接
68
+ 写出该边界,不把“稍后”“交接后”等叙事顺序当成数值时间的替代。
39
69
  - 同一动作不跨镜重复发生;终点应能成为下一镜可信起点。
40
70
  - 关键信息的可读性优先于装饰性运镜,竖屏构图优先保证主体和反应可见。
41
71
  - 复杂群戏先锁空间锚点和屏幕方向,再决定景别变化。
72
+ - 起终边界除了逐人姿态,还要写清本镜依赖的身体—物件—空间关系。关系在镜内不变时两端都保留;确需改变时,过程与终点必须有剧本依据。
42
73
  - 冻结关键帧只写该瞬间能看见的内容;文字、手指、反射和遮挡要可生成。
43
- - 检查发现遗漏就直接修正文档,不生成覆盖表来证明自己检查过。
74
+ - 《视觉设定.md》的连续性锁在生效镜头上原样写进冻结关键帧正文;锁面不因“参考图会交代”而省略。
75
+ - 检查发现遗漏就直接修正文档,不生成覆盖表来证明自己检查过。镜头块里的「视觉依据」是本镜的依据字段,不是这里说的覆盖表。
76
+
77
+ ## 视觉依据与图片
78
+
79
+ - `IMG-...` 是《图片提示词.md》里的**提示词条目 ID**,不代表图片已生成、已提供或可用。
80
+ - 已有《图片提示词.md》且本镜需要其中条目时,写「图片提示词项」:ID 必须匹配该文档的可见二级标题,同时写中文名称和它控制的身份、造型、地理、构图或其他边界。ID 只用于查找,不让英文 slug 承担含义。
81
+ - 没有《图片提示词.md》或没有合适条目时,写「图片提示词项:无」,再以中文指向《视觉设定.md》的人物、地点或道具项及控制范围。这是正常直接入口;不为继续分镜而编造 ID,也不补造另一个阶段。
82
+ - 「视觉依据」是每镜必写字段:冻结关键帧成稿后按实际画面反查,需要保持身份、造型或地理的可见人物、地点和道具**必须**逐项写成
83
+ `《视觉设定.md》·<人物|造型|地点|道具>「<名称>」(控制:<范围>)`,多项用 `;` 连接,名称必须能在《视觉设定.md》里找到同名标题。
84
+ 小比例或背景人物只要需要认出身份仍在范围内,画外人声和不可识别局部不算;本镜确实没有这类条目时写「视觉依据:无」。
85
+ - 关键帧正文出现了某个条目的名字,但它本镜确实不在画面里(物主已离场、名字只出现在屏幕文字上、和某个词同形),
86
+ 在「视觉依据」末尾追加 `;画外:<类别>「<名称>」`。这是如实记录,不是把不在场的人写成在场。
87
+ - 某个条目的名字在正文里根本不可靠(`道具「手机」` 会撞上「手机店」,`人物「小雨」` 会撞上「下着小雨」),
88
+ 在《视觉设定.md》该条目写 `画面代称:无`,机械核对就不再按名字找它;这一镜是否画到它仍由「视觉依据」如实回答。
89
+ - 三条依据都描述同一格画面,不是本镜的资产花名册。「控制」只写这一格承担得起的范围:手背特写不写「本集造型」,
90
+ 只出现屏幕和一根手指的镜头不写「体态」。上一镜的绑定不因为“角色还在这场戏里”就顺延到下一镜。
91
+ - 关键帧正文点名的人物、地点或道具(《视觉设定.md》条目名称或它声明的「画面代称」),必须出现在本镜「视觉依据」里;
92
+ `creator_markdown_check.py` 会机械核对这一条。它只抓**被名字点到**的那一类:正文只描述不点名
93
+ ("a boy in a hooded jacket")时机器不发声,画面里有谁仍然要靠这一步自己读出来,不能等报错。
94
+ - 本镜需要保持一致、但《视觉设定.md》里还没有条目的可见物件(跨镜出现的道具尤其常见),不能因为
95
+ 「写不进视觉依据」就当它不需要一致性。四镜都出现的一支笔和一件外套是同一类问题。做两件事:
96
+ 正文里逐镜用完全相同的描述把它钉住,并在本轮末尾报告里点名它、建议 `$short-drama-assets` 补条目。
97
+ 不自行新增《视觉设定.md》条目,也不把它塞进「视觉依据」冒充已有条目。
98
+ - 「输入参考图」是独立的另一条轴:创作者已提供,或经确认生产且当前可读的实际图片,用不同于 `IMG-...` 的稳定 `REF-...` 槽位引用。每个槽位同时写显式顺序、仅用 `/` 分隔的项目相对路径、中文名称、「用途」、「控制」和「不得控制」范围;没有时必须区分「待补参考图」和「创作者已明确选择文生视频」,只准备了一部分时则保留已有 `REF-...` 并追加「;待补参考图:……」。不得把提示词条目、计划生成的图或对话中的描述写成已有图片。
99
+ - 每个 `REF-...` 必须逐字遵循唯一格式:`REF-<slot>(顺序:<n>)· <项目相对路径>《<中文名称>》(用途:<用途>;控制:<范围>;不得控制:<范围>)`。注意「顺序:」后的全角冒号和路径前的中点 `·`;不得用 `/` 代替字段分隔符。多图只用中文分号 `;` 连接,部分缺图则在最后一个完整槽位后接 `;待补参考图:<缺口>`,缺口之间用 `、` 分隔。写完后按此格式回读一次再交付。
100
+ - `用途` 只能取 `身份`、`造型状态`、`地理`、`构图`、`尺度`、`效果`、`起始帧`、`结束帧`、`风格` 之一;逐条能控制什么见 `$short-drama` 的《参考角色》。
101
+ 本镜的起始画面图写 `用途:起始帧`,人物图写 `用途:身份` 或 `造型状态`,场景图写 `用途:地理`,道具状态图按它决定的那一件写。
102
+ 一张图承担两件事就拆成两个槽位;一镜最多一张 `起始帧` 和一张 `结束帧`,写 `结束帧` 时必须同时有 `起始帧`。
103
+ 下游视频提示词靠 `用途` 说清「本镜送哪一张分镜起始帧、哪些人物/道具/场景图」,所以缺 `用途` 的槽位不算准备好。
104
+ - 本镜还没有起始画面图时,`用途:起始帧` 那一张由 `$short-drama-produce` 用本镜的冻结关键帧正文生成:
105
+ job 的 `source` 写 `剧集/<EP>/分镜.md`、`source_entry` 写本镜 `SHOT-...`,产出落在 `剧集/<EP>/制作成果/images/`。
106
+ 拿到真实文件后再回来绑成 `REF-...`;生产前它仍然只是「待补参考图」里的一项。
107
+ - 自动绑定不是把所有图都塞进一镜。只选本镜可见、且身份、造型、地理、关键道具状态或起始构图确实需要稳定的图;逐张写清它的用途、能控制什么、不得控制什么。
108
+ - 两条轴可以独立组合:有合法的图片提示词项时,输入参考图仍可为「待补」或创作者明确选择的文生视频;创作者给了真实参考图时,图片提示词项也可为「无」。
44
109
 
45
110
  ## 按需知识
46
111
 
@@ -65,8 +130,12 @@ license: MIT
65
130
 
66
131
  ## 完成
67
132
 
68
- 点名范围的原文都有镜头落实,每镜职责不重复、空间与状态连续、起止边界可制作、关键帧可冻结,即
69
- 完成。视频提示词、生产和审查只有用户点名时开始。
133
+ 点名范围的原文都有镜头落实,每镜职责不重复、空间与状态连续、起止边界可制作、关键帧可冻结,
134
+ 且每镜关键帧里的可见人物、地点、道具都在本镜「视觉依据」里,即完成。画面需要、但《视觉设定.md》
135
+ 还没有条目的可见物件,在末尾报告里逐项点名。本次请求同时修改
136
+ 《图片提示词.md》与《分镜.md》时,当轮刷新受影响镜头的引用;不另建覆盖表。
137
+ 视频提示词、生产和审查只有用户点名时开始。
138
+ 五份创作文档齐备后,可转 `$short-drama` 对跨文档结构做一次机械核对;内容质量仍由创作者审查。
70
139
 
71
140
  ## 安装维护
72
141
 
@@ -1,2 +1,2 @@
1
1
  {"record_type":"sources","schema_version":"1.0.0","sources":{"<characters-or-props>":{"owner":"short-drama-assets","artifact":"设定集/<characters-or-props>.jsonl"},"<looks-or-prop-states>":{"owner":"short-drama-assets","artifact":"设定集/<looks-or-prop-states>.jsonl"},"location-views":{"owner":"short-drama-assets","artifact":"设定集/location-views.jsonl"},"locations":{"owner":"short-drama-assets","artifact":"设定集/locations.jsonl"},"props":{"owner":"short-drama-assets","artifact":"设定集/props.jsonl"},"screenplay-index":{"owner":"short-drama-write","artifact":"剧集/<EP>/screenplay-index.jsonl"},"short-drama":{"owner":"short-drama","artifact":"short-drama.json"}}}
2
- {"shot_id":"SHOT-EXAMPLE","status":"candidate","source_refs":[{"src":"screenplay-index","record_id":"BLK-EXAMPLE"}],"coverage_role":"primary | intentional_repeat","purpose":"<what the audience must notice and why this is a new shot>","information_change":"<before -> after for audience/character>","audience_visibility":[{"source_ref":{"src":"screenplay-index","record_id":"BLK-<id>"},"fact":"<本镜必须展示或暂缓的一个事实>","permission":"show_now | withhold_now","carrier":"<可见/可听载体;暂未出现则写 none>","reveal_trigger":"<允许释放的动作/台词/cut;不在本镜则写 future>","protection_method":"<framing/crop/occlusion/offscreen/focus/timing/none,可组合说明>","rationale":"<与 source 信息权限和本镜职责的关系>"}],"location_binding":{"identity_ref":{"src":"locations","record_id":"LOC-<id>"},"variant_ref":{"src":"location-views","record_id":"VIEW-<id>"}},"asset_bindings":[{"identity_ref":{"src":"<characters-or-props>","record_id":"CHAR/PROP-<id>"},"variant_ref":{"src":"<looks-or-prop-states>","record_id":"LOOK/PSTATE-<id>"},"role":"<subject/evidence/background>"}],"duration_seconds":null,"start_boundary":{"positions":["<每条都写成不读上一镜也能理解的绝对事实:谁在哪个锚点的哪一侧;『同上』『位置不变』『同前』要往回翻才解释得通,不算已写>"],"facing":[],"gaze":[],"hands":[],"held_props":[],"visible_state":[]},"end_boundary":{"positions":["<同样是绝对事实:本镜结束时人在哪、朝哪,不写成与开始状态的差异>"],"facing":[],"gaze":[],"hands":[],"held_props":[],"visible_state":[]},"framing":{"size":"<extreme_wide 远景/wide 全景/medium 中景/medium_close 中近景/close 近景/close_up 特写/extreme_close_up 大特写/detail 细节镜头 or creator vocabulary>","angle":"<horizontal: 正面/斜侧/正侧/后斜侧/背面 or creator vocabulary; say which side of the axis>","camera_height":"<地平/低(仰)/平视/高(俯)/顶视; 平视 is a choice, not an unset field>","aspect_notes":"<composition constraint>"},"delivery_surface_ref":{"src":"short-drama","field":"/creator_authority/delivery_surface"},"blocking":{"axis":"<working side/bridge/deliberate break>","screen_direction":"<direction>","paths":[],"fixed_anchors":[]},"camera_plan":{"behavior":"locked | pan | tilt | push | pull | track | follow | orbit | crane | handheld | transition","motivation":"<attention/pressure/alignment/reveal/rhythm>","intervals":[]},"dialogue_audio_refs":[],"text_treatment_refs":[{"src":"props","record_id":"PROP-<id>","field":"/text_policy"}],"transition_intent":null,"creator_overrides":[]}
2
+ {"shot_id":"SHOT-EXAMPLE","status":"candidate","source_refs":[{"src":"screenplay-index","record_id":"BLK-EXAMPLE"}],"coverage_role":"primary | intentional_repeat","purpose":"<what the audience must notice and why this is a new shot>","information_change":"<before -> after for audience/character>","audience_visibility":[{"source_ref":{"src":"screenplay-index","record_id":"BLK-<id>"},"fact":"<本镜必须展示或暂缓的一个事实>","permission":"show_now | withhold_now","carrier":"<可见/可听载体;暂未出现则写 none>","reveal_trigger":"<允许释放的动作/台词/cut;不在本镜则写 future>","protection_method":"<framing/crop/occlusion/offscreen/focus/timing/none,可组合说明>","rationale":"<与 source 信息权限和本镜职责的关系>"}],"location_binding":{"identity_ref":{"src":"locations","record_id":"LOC-<id>"},"variant_ref":{"src":"location-views","record_id":"VIEW-<id>"}},"asset_bindings":[{"identity_ref":{"src":"<characters-or-props>","record_id":"CHAR/PROP-<id>"},"variant_ref":{"src":"<looks-or-prop-states>","record_id":"LOOK/PSTATE-<id>"},"role":"<subject/evidence/background>"}],"duration_seconds":null,"start_boundary":{"positions":["<每条都写成不读上一镜也能理解的绝对事实:谁在哪个锚点的哪一侧;『同上』『位置不变』『同前』要往回翻才解释得通,不算已写>"],"facing":[],"gaze":[],"hands":[],"held_props":[],"visible_state":[]},"primary_transition":{"trigger":"<什么可见或可听事件让动作开始>","action":"<从起点到终点的唯一主要动作;交接时写清接触者、接触方式与落点>","result":"<逐项落到 end_boundary,不在镜外补转换>"},"end_boundary":{"positions":["<同样是绝对事实:本镜结束时人在哪、朝哪,不写成与开始状态的差异>"],"facing":[],"gaze":[],"hands":[],"held_props":[],"visible_state":[]},"framing":{"size":"<extreme_wide 远景/wide 全景/medium 中景/medium_close 中近景/close 近景/close_up 特写/extreme_close_up 大特写/detail 细节镜头 or creator vocabulary>","angle":"<horizontal: 正面/斜侧/正侧/后斜侧/背面 or creator vocabulary; say which side of the axis>","camera_height":"<地平/低(仰)/平视/高(俯)/顶视; 平视 is a choice, not an unset field>","aspect_notes":"<composition constraint>"},"delivery_surface_ref":{"src":"short-drama","field":"/creator_authority/delivery_surface"},"blocking":{"axis":"<working side/bridge/deliberate break>","screen_direction":"<direction>","paths":[],"fixed_anchors":[]},"camera_plan":{"behavior":"locked | pan | tilt | push | pull | track | follow | orbit | crane | handheld | transition","motivation":"<attention/pressure/alignment/reveal/rhythm>","intervals":[]},"dialogue_audio_refs":[],"text_treatment_refs":[{"src":"props","record_id":"PROP-<id>","field":"/text_policy"}],"transition_intent":null,"creator_overrides":[]}
@@ -81,8 +81,12 @@ composition, camera/lens, frame-only staging, and exclusions.
81
81
  排除:无动作过程,无雨丝拖影。
82
82
  ```
83
83
 
84
- The keyframe must name the matching text policy or `IMG-...` entry in
85
- `视觉设定.md` / `图片提示词.md`. A frozen frame may determine whether the surface
84
+ Every visible entry the finished frame carries is listed in the shot's required
85
+ `视觉依据` field, resolving to a real `视觉设定.md` entry; an `IMG-...` prompt item
86
+ in `图片提示词.md` is a separate axis and does not stand in for it, and
87
+ `视觉设定.md` itself does not define `IMG-...` IDs. Write that list from the
88
+ finished frame, not from the shot's intent — the subject that gets missed is the
89
+ one that entered the composition while the frame was being written. A frozen frame may determine whether the surface
86
90
  is legible in this composition; it may not replace the exact wording or policy
87
91
  with an untraceable prose instruction. If the policy is still undecided, say so
88
92
  instead of inventing a hidden candidate state.
@@ -57,9 +57,21 @@
57
57
  | 一拍是爆发动作 | 若单镜过载,可按起势/接触/结果等力学阶段拆,切点绑定精确状态 |
58
58
  | 一拍是纯反应/沉默 | 只有承担反应或选择后果时独立成镜;停留由后果与节奏决定 |
59
59
 
60
- **建立镜头**是常见选择:新地点若观众尚不能定位人物、入口或冲突区域,
61
- 用合适景别交代;若前镜已经建立地理,或上游有意让观众先迷失/延迟识别,就不为
62
- 凑“第一镜全景”自增。任何新增镜头仍须解释它覆盖的内容与信息职责。
60
+ **建立镜头要自己挣到位置**。新地点确实可能需要让观众定位人物、入口或冲突区域,但
61
+ “先给一个空景全景说明这是哪儿”是长片的开场习惯:它把最前面的时间花在观众还没有理由
62
+ 在意的信息上。竖屏快节奏交付里默认反过来——**地理在动作内部到达**:人物已经在做的事、
63
+ 已经在说的话带出空间,观众边看边拼。这与剧本环节“在压力活跃处进入、用具体行动证明进入
64
+ 状态”的默认是同一条,不要在分镜层把它撤销。
65
+
66
+ 交代空间的镜头在这两种情况下成立:空间事实本身承担本镜因果(距离决定来不来得及、出口
67
+ 决定能不能走、谁站在门口决定谁看见了),或后续镜头的方位判断依赖它而动作本身给不出。
68
+ 成立时它也不必是空景全景——带着人物和动作的取景通常能一并完成,还省一个镜头。
69
+
70
+ 若前镜已经建立地理,或上游有意让观众先迷失/延迟识别,同样不为凑“第一镜全景”自增。
71
+ 任何新增镜头仍须解释它覆盖的内容与信息职责。
72
+
73
+ **`craft_default`**:以上是快节奏竖屏短剧的默认取向。项目声明了不同的观看契约(长篇、
74
+ 剧场感、慢节奏、以空间为主角)时,创作者说明理由即可覆盖,审查者不得单据此阻断交付。
63
75
 
64
76
  ## 四、动作顺序交接(给视频提示词环节的输入)
65
77
 
@@ -67,12 +79,15 @@
67
79
 
68
80
  ```text
69
81
  起点:<已接受镜头边界,可静止也可在运动中>
70
- 顺序:<上游动作> → <必要反应或注意力转移> → <已接受终点>
82
+ 唯一动作:<触发> → <主体完成一条可见状态转换;交接时写清接触与落点> → <必要反应>
83
+ 终点:<已接受镜头边界;逐项接住位置、双手、持物与可见状态>
71
84
  摄影意图:<固定/移动及其叙事职责>
72
85
  ```
73
86
 
74
87
  - 起点逐字段写入已接受的 `start_boundary`,不把静态关键帧的媒介性质改成“人物必须静止”;
75
88
  - 结束状态由分镜文件记录,下一镜通过引用比较,不靠复制长篇说明获得权威;
89
+ - 「唯一动作」是本镜的主状态链,不是限制镜内只能发生一个原子动作;它把必要步骤放在同一条
90
+ 因果线上,确保上一个可见状态确实走到下一个可见状态。
76
91
  - 并行槽只放有来源的变化:他人反应、环境压力或持续运动锚点可以
77
92
  帮助画面成立,但没有叙事/物理依据时宁可保持静止,不为满足配额发明微动态;
78
93
  - 只有已接受的时长或制作方案要求时才写秒数、角度或位移;它们是当前镜头选择,
@@ -11,7 +11,9 @@
11
11
  - 每镜时长是正数,全剧时长等于可见镜头时长之和;目标时长只用于报告差值,不是质量门槛;
12
12
  - 起点和终点都写绝对事实,不使用“同上”“保持不变”代替;
13
13
  - 相邻镜头的站位、朝向、视线、持物、伤势、光态与可读文字连续;
14
- - 每镜指名真实存在的 `IMG-...` 参考,并说明它控制身份、造型、地理、构图还是其他边界;
14
+ - 每镜都有「视觉依据」字段,条目名称能在《视觉设定.md》找到同名标题;关键帧正文点名的人物、地点、道具全部在列,「控制」不超过这一格画面承担得起的范围;
15
+ - 已用的 `IMG-...` 必须是《图片提示词.md》的可见标题,并带中文名称和控制范围;没有合适条目时明写「无」,不伪造 ID;
16
+ - 提示词条目与真实输入图片分开记录;只有创作者已提供或经确认生产、且当前可读的实际图片才能声称为「输入参考图」,并用独立稳定的 `REF-...` 槽位、显式顺序、仅用 `/` 分隔的项目相对路径、中文名称、用途、控制与不得控制范围定位;每个槽位的 `用途` 取自封闭词表,一镜最多一张起始帧与一张结束帧;一张都没有、只准备了一部分、全部就绪和创作者明确选择文生视频必须如实区分;
15
17
  - 冻结关键帧只投影所声明的边界:默认起点;外部工作流确实需要时才增加终点帧;
16
18
  - 可复制关键帧正文不含 ID、文件路径、工作流状态或工艺说明。
17
19
 
@@ -26,7 +28,8 @@
26
28
  - 景别、机位、运动和切点是否由注意、压力、关系、空间或节奏变化驱动;
27
29
  - 多人调度是否让主要关系和注意交接可读;
28
30
  - 证据文字、决定性手部动作、脸与眼神是否会被遮挡;
29
- - 关键帧是否既可冻结,又保留镜头下一步需要发生的动作空间。
31
+ - 关键帧是否既可冻结,又保留镜头下一步需要发生的动作空间;
32
+ - 画面里没有被名字点到、但仍需要认出身份的小比例或背景人物,是否也进了「视觉依据」——机械核对只抓被点名的那一类。
30
33
 
31
34
  关键帧数量、镜头数量、景别比例和目标时长差值都不是通用质量门槛。审查 finding 必须给出位置、
32
35
  证据、影响和必须达到的修订结果,不能只说“镜头不够电影感”或“看起来像 AI”。
@@ -95,6 +95,22 @@ A02(摊手与蓝线头)。
95
95
  冻结检查:所有事实能在同一时刻存在。摊开右手是 SHOT-02 的动作过程;KEY-03 只写
96
96
  “已经摊开”。
97
97
 
98
+ ## KEY-03 之后:从成稿画面回填三条依据
99
+
100
+ 关键帧写完才知道这一格里到底有谁、有什么。按成稿正文逐项读出来,再写进 SHOT-03 的字段:
101
+
102
+ ```markdown
103
+ - 图片提示词项:IMG-SHENHE-SHEET《沈禾角色板》(控制:身份、手部特征);IMG-CLAIM-TAG《取衣牌道具板》(控制:牌形、编号面、边缘磨损)
104
+ - 输入参考图:无(待补参考图:沈禾手部、取衣牌背面、本镜起始帧)
105
+ - 视觉依据:《视觉设定.md》·人物「沈禾」(控制:身份、右手特征);人物「蒋姨」(控制:身份、视线方向);道具「取衣牌」(控制:牌形、背面材质、蓝线头位置);地点「社区洗衣房」(控制:柜台横线、冷白顶光)。
106
+ ```
107
+
108
+ 三处值得注意:
109
+
110
+ - 蒋姨只在后景留一双模糊的眼睛,但观众要认出是她,所以她在列;
111
+ - 牌正面的“17”本镜看不到,所以「控制」写的是「背面材质」而不是「编号面」;
112
+ - 沈禾整身造型不在这一格里,所以不写「本集造型」——上一镜绑过不等于这一镜也该绑。
113
+
98
114
  ## 连续性交接
99
115
 
100
116
  | 字段 | SHOT-01 结束 | SHOT-02 开始与结束 | SHOT-03 开始 |
@@ -1,10 +1,10 @@
1
1
  # 分镜阶段契约
2
2
 
3
- 本阶段只拥有 `剧集/<EP>/分镜.md` 中的 `SHOT-...`、镜头职责、来源、时长、起止边界、声音、图片参考和
3
+ 本阶段只拥有 `剧集/<EP>/分镜.md` 中的 `SHOT-...`、镜头职责、来源、时长、起止边界、声音、视觉依据和
4
4
  冻结关键帧。它继承剧本事实与视觉设定,不改写剧情或资产身份。
5
5
 
6
6
  覆盖比较、场次视觉计划和调度推演都留在上下文;只有最终镜头与关键决定进入 `分镜.md`。来源使用
7
- 场景 ID,资产参考使用 `IMG-...`,不建立 coverage、shots、keyframes、audition 或接受记录。
7
+ 场景 ID。已存在的图片提示词条目可用 `IMG-...` 可见标题引用;它不是已生成图片的证明,也不是分镜的前置门禁。没有条目时直接引用《视觉设定.md》,不建立 coverage、shots、keyframes、audition 或接受记录。
8
8
 
9
9
  ## 本阶段规则
10
10
 
@@ -16,7 +16,7 @@
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
18
  | SHT-04 | craft_default | Change framing/camera because attention, pressure, alignment, reveal, or rhythm changes. |
19
- | SHT-05 | structural_invariant | A keyframe projects one shot boundary and the exact `IMG-...` references named by that shot. |
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
22
  | SHT-08 | reviewed_invariant | Each authoritative source action is realized once; repeated coverage adds reaction/detail/recontextualization rather than replaying it. |
@@ -33,6 +33,10 @@
33
33
  | SHT-19 | reviewed_invariant | When a coverage audition is used, its approaches genuinely differ by knowledge timing, alignment, performance space, strongest image, landing, losses, or production fit; it uses no fixed option, grid, framing, or shot-count formula, and the selected approach is stated before formal shots are written. |
34
34
  | SHT-20 | reviewed_invariant | Shot revision identity follows directing responsibility rather than array position or text similarity: reorder preserves IDs, insertion creates one, split/merge retires replaced IDs and creates successors, and active coverage plus downstream refs are reconciled before delivery. |
35
35
  | SHT-21 | reviewed_invariant | A keyframe's copyable text carries only what will be visible; IDs, workflow notes, file paths and craft commentary stay outside the prompt. Two prompts that differ only by identifiers are a template, not two frames. |
36
+ | SHT-22 | structural_invariant | Each shot carries a required `视觉依据` field, written after the frozen keyframe, listing every visible character, place, or prop whose identity, Look, or geography must remain recognizable; each item resolves to an existing `视觉设定.md` entry. Whatever the keyframe text calls by name — an entry name or its declared `画面代称` — appears there. Small/background subjects remain in scope when recognition matters; offscreen voices and unidentifiable fragments do not. |
37
+ | SHT-23 | structural_invariant | An omitted reference choice is not consent to text-to-video. After reference discovery, each shot either binds all verified real images, preserves partial bindings while naming the still-missing start/identity/geography/prop images, or records the creator's explicit text-to-video choice. A prompt entry, planned image, plausible filename, or text description never counts as a real image. |
38
+ | SHT-24 | reviewed_invariant | A visual basis describes this frame, not the episode's cast list. Each declared 控制 scope stays within what this frame can carry, and a binding is not carried forward merely because the subject remains in the scene. |
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 起始帧. |
36
40
 
37
41
  ### `CON`
38
42
 
@@ -44,6 +48,7 @@
44
48
  | CON-04 | structural_invariant | A continuity change states before, after, cause/source scene, effective range, and affected visible IDs. |
45
49
  | CON-05 | taste_option | Declared montage, ellipsis, dream, or subjective imagery may intentionally break ordinary continuity. |
46
50
  | CON-06 | structural_invariant | A continuity change names every existing downstream document it affects; future work is described, not pre-created. |
51
+ | CON-07 | structural_invariant | A continuity lock declared in `视觉设定.md` fixes one verbatim surface plus its shot and image scope; every in-scope frozen keyframe, motion prompt, and named image prompt carries that surface unchanged. |
47
52
 
48
53
  规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
49
54
  `reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、
@@ -816,7 +816,7 @@ def main(argv: list[str] | None = None) -> int:
816
816
  except CheckError as error:
817
817
  print(f"{type(error).__name__}: {error}", file=sys.stderr)
818
818
  return 2
819
- print(json.dumps(result, ensure_ascii=False, sort_keys=True))
819
+ print(json.dumps(result, ensure_ascii=True, sort_keys=True))
820
820
  return 0 if result["status"] == "pass" else 1
821
821
 
822
822
 
@@ -17,30 +17,93 @@ license: MIT
17
17
 
18
18
  ## 入口与边界
19
19
 
20
- 有当前分镜、冻结关键帧和必要视觉事实即可开始;图片提示词不是前置门槛。运动提示词拥有从已确认
21
- 起点到终点的变化:表演动作、道具状态、运镜、节奏和声音提示;静态身份、造型、地点和构图仍由
22
- 参考帧与视觉设定拥有。
23
-
24
- 创作者可读说明跟随项目语言;可复制正文跟随 `short-drama.json#/format/prompt_language`。没有
25
- `short-drama.json` 时正文默认
26
- 使用 `en`,并在同一任务中保持一致;不能从创作者说明语言推断提示词语言。
20
+ 有当前分镜、冻结关键帧和必要视觉事实即可检查参考准备;图片提示词不是已有图片的证明。运动提示词拥有从已确认
21
+ 起点到终点的变化:表演动作、道具状态、运镜、节奏和声音提示。先按分镜的「输入参考图」选择路径:
22
+
23
+ - 有可读的真实 `REF-...` 图片时是**图生视频**;原样携带分镜中的槽位、顺序、项目相对路径、
24
+ 中文名称、用途、控制与不得控制范围,静态身份、造型、地点和构图可由参考帧与视觉设定共同拥有。
25
+ 这一行就是本镜的素材清单:路径回答「送哪一张」,`用途` 回答「它在本镜负责什么」,`顺序` 回答
26
+ 「在可复制正文里叫哪个标签」。回答不了这三问的槽位不算准备好。
27
+ - 「输入参考图:无(创作者已明确选择文生视频)」时才是**文生视频**;视频文档必须写非空「静态视觉锚点」,且把它原样纳入
28
+ 可复制正文,让提示词本身交代人物、造型、地点、构图和光线中本镜必要的事实。不得只写
29
+ `preserve/keep/保持已有外观`,因为执行端没有收到可供保持的图片。
30
+ - 「输入参考图:无(待补参考图:……)」、已有 `REF-...` 后仍带「;待补参考图:……」,或普通的「无」都表示**未准备好**,不是文生视频授权。先自动查找可用真实图片并请分镜 owner
31
+ 刷新 `REF-...` 绑定;仍有缺失时,列出镜头、缺失图片及对应 `IMG-...` 或冻结关键帧,不写最终《视频提示词.md》。
32
+
33
+ 创作者可读说明跟随项目语言。开始前读取目标模型档案里的版本、执行模式、提示词方言、原生时长和
34
+ 参考方式;这些选择同时约束上游分镜和下游 adapter,不能只在正文阶段临时猜。创作者在本次请求里点名
35
+ 目标模型(例如“按 MiniMax H3 写”)而项目档案还没有这一项时,先转 `$short-drama` 把这个选择写进
36
+ `short-drama.json` 的 `production_profile`,再回到本阶段;一句会话里的点名如果没有落到档案上,
37
+ 下一轮就会退回通用路径,方言、原生时长和参考方式又要重猜。没有项目配置的独立任务把点名的模型
38
+ 和已解析的方言写在本文档开头一行,供下游核对。视频可复制正文优先跟随
39
+ `short-drama.json#/creator_authority/production_profile/choices/video_prompt_language`;未声明时回退到
40
+ `short-drama.json#/format/prompt_language`。没有 `short-drama.json` 时,根据用户点名的目标视频模型
41
+ 确认正文语言;目标模型也未声明时沿用用户当前语言,不固定为英文。对白、VO、OS 的口语语言仍由
42
+ 剧本和声音方向决定,不能从提示词正文语言推断。
43
+
44
+ 目标为 `seedance-2.0` 时按 [Seedance 2.0 方言](references/seedance-2.0.md) 写,目标为
45
+ `seedance-2.5` 时按 [Seedance 2.5 方言](references/seedance-2.5.md) 写,目标为 `minimax-h3` 时按
46
+ [MiniMax H3 方言](references/minimax-h3.md) 写。只读命中的一份。其他目标或版本不
47
+ 套用相近模型的语法,继续按 [目标模型能力档案](references/target-model-profile.md) 的通用路径写。
48
+
49
+ 沿用 creator-first 既有骨架:`## MOTION-... · 中文名`,字段名依次使用「分镜、时长、生成方式、
50
+ 输入参考图、静态视觉锚点、起始帧、状态链、终点」,正文标题使用 `### 可复制提示词`。静态视觉锚点
51
+ 跟随本镜已解析的视频提示词语言并原样进入正文;正文每个非空行都以 `>` 组成 Markdown 引用块。
52
+ 重写内容不能改名、另造替代字段或改成普通段落。
27
53
 
28
54
  ## 工作流
29
55
 
30
- 1. 写不能动的边框:起始帧锁定的身份、造型、空间、持物、光态和构图不可漂移。
31
- 2. 确定本镜唯一主要变化和可验证终点。
32
- 3. 写“起点 → 触发 → 主体动作 → 次级反应 → 运镜 → 声音 → 终点”,必要时用秒数分段。
33
- 4. 删除参考帧已经说明的静态外观,只保留防漂移约束。
34
- 5. 检查不跨下一镜、不要求互斥动作、不让人物或道具瞬移变形。
35
- 6. 用户要整集就完成整集,镜头组只是内部批次。
56
+ 1. 先检查每镜「输入参考图」。用户未手工点名图片时,根据本镜冻结关键帧和可见人物、地点、关键道具的一致性需求,在用户输入、
57
+ 「制作成果」和文档已指向媒体中查找真实图片。内容和用途核对后才自动绑定;不靠相似文件名猜图。
58
+ 2. 已有匹配图片时,在当前请求内先让分镜 owner 原地刷新受影响镜头的 `REF-...` 槽位,再回到本阶段;只绑本镜真正需要保持的图,不按资产数量凑槽位。
59
+ 同一次刷新里,如果这些镜头还缺「视觉依据」这个必写字段(旧文档常常没有),一并按已成稿的冻结关键帧回填——
60
+ 两者读的是同一格画面,分开两轮只会让绑了图的镜头仍然说不清画面里有谁。
61
+ 新槽位必须逐字使用 `REF-<slot>(顺序:<n>)· <项目相对路径>《<中文名称>》(用途:<用途>;控制:<范围>;不得控制:<范围>)`;`用途` 取 `身份|造型状态|地理|构图|尺度|效果|起始帧|结束帧|风格` 之一,不得自创斜杠分隔写法。多图只用 `;` 连接,写完后先按格式回读,再复制到视频文档。
62
+ 3. 仍有必要图片缺失时,一张都没有就把分镜写成「无(待补参考图:……)」;只缺一部分则保留已核对的 `REF-...`,并在末尾追加「;待补参考图:……」。一次列出缺失镜头、图片用途和对应的 `IMG-...` /冻结关键帧,然后停在视频提示词之前。
63
+ 不伪造路径,不把图片提示词当成图,不静默降级为文生视频。
64
+ 4. 只有创作者明确选择不用参考图时,才把分镜记为「无(创作者已明确选择文生视频)」。准备闭合后原样抄入分镜的「输入参考图」,据此标明
65
+ 「生成方式:图生视频」或「生成方式:文生视频」。该字段只写这两个精确值,不追加模型名、方言或 full-reference 等说明;模型说明留在正文结构中。
66
+ 具体走首帧、首尾帧还是多槽参考,由各槽位的 `用途` 组合读出:只有一张 `起始帧` 走首帧,`起始帧` 加 `结束帧` 走首尾帧,
67
+ `起始帧` 与人物/地点/道具图同时存在或只有这些图时走多槽参考。命中的模型方言负责把这个组合翻成它自己的素材 role 与正文结构;
68
+ 多槽参考与首/尾帧在同一请求内互斥的模型,起始帧也随整组走多槽参考,不拆成两套输入。
69
+ 5. 核对本镜时长落在目标模型档案的原生区间内;不在区间内就回到分镜修订,不能写完提示词后留给
70
+ adapter 报错,也不能在正文里暗自改变时长。
71
+ 6. 写不能动的边框:图生视频以参考帧和视觉设定锁定;文生视频把必要静态事实写入「静态视觉锚点」和可复制正文。
72
+ 7. 原样读取分镜的「起点 → 唯一动作 → 终点」,确认人物、双手和持物的状态转换都发生在镜内。
73
+ 8. 写“静态锚点 → 起点 → 唯一动作(触发、接触、落点)→ 次级反应 → 运镜 → 声音 → 终点”,
74
+ 必要时用秒数分段;下一镜从这个终点继续,不另造镜外转换。
75
+ 9. 只在真实参考帧已经说明静态外观时删除重复描述;《视觉设定.md》连续性锁的锁面不在可删之列。
76
+ 10. 把限制动作空间的已确认关系写成贯穿本镜的正向可见状态,只安排关系允许的动作通道;只有分镜明确改变关系时才写变化过程。可复制正文的动作边界只用肯定状态句,不用 `no/not/without + 动作` 改写。
77
+ 11. 逐镜读取文字义务。除非剧本或创作者明确要求,正文用本镜已解析的视频提示词语言直接写明任何时刻都不生成非画内字幕、caption 和对白文字叠加,不能只写抽象的“文字层为空”;这条默认与旗帜、标牌、屏幕等画内文字独立。画内 `exact_readable` 逐字写明字符、语言、承载面和位置,不能用全局 `no-text` 覆盖。
78
+ 12. 声音同轨时,把允许的发声按来源、说话人、口语语言和顺序写成完整时间线;每句从原文首字到末字,
79
+ 且逐字对白在单镜可复制正文中只出现一次。视觉动作段只按时间和说话人引用该声音事件,不再抄一遍
80
+ 台词。事件外回到已声明的环境声或静默。Brief、剧本或声音方向已经明确禁止外语前导、语气词、
81
+ 额外人声或重复时,把这些**已确认的发声边界**在完整时间线末尾合并写一次;不靠“只包含”让执行端
82
+ 猜,也不自行扩充新的禁用类别。完整时间线声明是声音段落终点,其后不再追加第二组声音排除句。
83
+ 13. 成稿时逐句把 `no/not/without + 动作或状态变化` 改写为当前持续状态或允许动作;直接改正文,不调用工具或生成检查产物。再检查不跨下一镜、不要求互斥动作、不让人物或道具瞬移变形。
84
+ 14. 用户要整集就完成整集,镜头组只是内部批次。
85
+ 15. 同一连续时空中相邻正式生成段、且目标档案支持续接时,默认选择“从上一段生成结果续接”;
86
+ 一镜一生成只决定每次装一个镜头,不等于各镜独立文生。只有创作者明确要求独立重生成,或上游
87
+ 已接受时间/地点跳变时才重新起链。选择续接后,这就是该链唯一正式执行路由。第二段起同时绑定上一段
88
+ **实际视频**和从该视频取得的
89
+ **实际尾帧**:视频负责动作、节奏和声音连续,尾帧负责下一段的可见起点。具体素材 role 和续写措辞
90
+ 由命中的模型方言决定,不能把通用职责直接翻译成供应商字段。未取得真实产物时,后续段在
91
+ `视频提示词.md` 标为“待续接、不可提交”,写明缺少这两项真实输入并保留下一段内容草案;不得把它
92
+ 降级成独立文生视频,也不用计划尾帧、关键帧提示词或文字描述冒充接力输入。逐镜 `MOTION-...`
93
+ 仍是成员边界和内容依据,不是与正式容器路由并列的另一套提交方案。
36
94
 
37
95
  ## 提示词要求
38
96
 
39
97
  - 从可见起点开始,以可验证终点结束。
98
+ - 可复制正文完整实现分镜的「起点 → 唯一动作 → 终点」;交接、换手和道具落位不跨镜省略。
40
99
  - 主体、动作对象、方向、幅度、速度和先后关系明确。
41
100
  - 表演写动作与反应,不写无法执行的抽象结果。
42
101
  - 运镜与人物动作不争夺注意力;复杂运镜必须有叙事理由。
43
102
  - 声音只写该镜需要的对白、画外音、环境或转场职责,不擅自补歌词。
103
+ - 非画内字幕、caption 和对白文字叠加默认不生成;正文直接声明全镜任何时刻都不生成这些内容,不用抽象工作流术语代替执行指令。只有剧本或创作者明确要求才开启。画内精确文字是独立允许集合,不因关闭字幕而消失,也不让未批准文字混入。
104
+ - 同轨对白/VO/OS 同时写逐字文本、口语语言和发声边界;完整时间线闭合后,不再枚举不存在的语言、语气或声源,也不追加 `no/not/without + 声音类别`。
105
+ - 上游持续关系只用贯穿状态和允许动作通道表达;不以 `no/not/without + 动作` 重复同一边界,也不给角色冲突动作。
106
+ - 本镜命中的连续性锁,锁面原样出现在可复制正文里;颜色、材质、形制这类跨镜不变事实不靠模型记忆。
44
107
  - 正文可直接复制,不含占位符、流程说明、文件路径或 QA 结论。
45
108
 
46
109
  ## 按需知识
@@ -53,6 +116,10 @@ license: MIT
53
116
  - 多人表演、口型和精确时序:[表演与动作时序](references/performance-action-timing.md)
54
117
  - 运镜、声音和相邻镜头连续性:[摄影与声音连续性](references/camera-audio-continuity.md)
55
118
  - 动作负载、形变和生成风险:[可生成性](references/generability.md)
119
+ - 目标执行端的时长、参考、声音同轨等能力:[目标模型能力档案](references/target-model-profile.md)
120
+ - Seedance 2.0 的中文分镜、素材与声音语法:[Seedance 2.0 方言](references/seedance-2.0.md)
121
+ - Seedance 2.5 的长叙事、时间戳和任务类型语法:[Seedance 2.5 方言](references/seedance-2.5.md)
122
+ - MiniMax H3 的结构化正文与参考模式:[MiniMax H3 方言](references/minimax-h3.md)
56
123
  - 多镜容器或静态漫剧的交付方式:[交付形态](references/delivery-profile.md)
57
124
  - 完成前的边界检查:[审查与示例](references/review-and-fixtures.md)
58
125
 
@@ -64,6 +131,7 @@ license: MIT
64
131
 
65
132
  每个点名镜头都有明确起点、主变化、时序、运镜/声音边界和可验证终点,且与相邻镜头连续,即完成。
66
133
  实际生成转 `$short-drama-produce`,先展示精确 job 并取得显式确认;本技能不调用外部服务。
134
+ 五份创作文档齐备后,可转 `$short-drama` 对跨文档结构做一次机械核对;内容质量仍由创作者审查。
67
135
 
68
136
  ## 安装维护
69
137
 
@@ -43,6 +43,11 @@
43
43
  "record_id": "SHOT-<id>",
44
44
  "field": "/start_boundary"
45
45
  },
46
+ "primary_transition": {
47
+ "src": "shots",
48
+ "record_id": "SHOT-<id>",
49
+ "field": "/primary_transition"
50
+ },
46
51
  "end": {
47
52
  "src": "shots",
48
53
  "record_id": "SHOT-<id>",
@@ -63,7 +68,7 @@
63
68
  "src": "keyframes",
64
69
  "record_id": "KEY-<id>"
65
70
  },
66
- "role": "start_frame",
71
+ "role": "start_frame | continuity_video | actual_tail_frame",
67
72
  "may_control": [
68
73
  "<本镜 accepted 起始构图与可见状态>"
69
74
  ],
@@ -8,13 +8,17 @@
8
8
  > 来源:`motion-specs.jsonl` 的已接受记录
9
9
  > 配方:`motion-generic@<version>`
10
10
  > 范围:本文件仅提供提示词,不触发媒体服务;实际视频生产交 `$short-drama-produce`
11
+ > 正式执行路由:`逐镜 | 多镜容器 | 从上一段实际结果续接`(只保留本次已选择的一项)
11
12
 
12
13
  ## `SHOT-<id>` · <镜头目的短句>
13
14
 
14
15
  - **运动规格**:`MOTION-<id>`
15
16
  - **覆盖范围(仅补拍/替代版)**:`pickup | alternate`;母版/补充 `<master_motion_id / supplements_motion_ids>`;逐项内容 `<source_ref → motion_field/disposition>`;替代请求 `<replacement_intent>`
16
17
  - **起始帧**:`KEY-<id>`
17
- - **参考图用途**:`<slot_id / order / reference>` 只决定 `<role / may_control>`;不得导入 `<must_not_control>`;检查状态 `<observation ref | unverified + risks>`;无附加参考则写“无”
18
+ - **生成方式**:`文生视频 | 图生视频`;文生视频必须已有创作者明确选择
19
+ - **输入参考图**:`REF-<slot>(顺序:<n>)· <项目相对路径>《<中文名>》(用途:<purpose>;控制:<may_control>;不得控制:<must_not_control>)`;`用途` 取 `身份|造型状态|地理|构图|尺度|效果|起始帧|结束帧|风格`;必须与分镜一致且全部就绪;只有创作者明确选择文生视频时可写「无(创作者已明确选择文生视频)」,无图或部分有图的「待补参考图」都不得进入最终视频提示词
20
+ - **静态视觉锚点**:文生视频必须把本镜必要的身份、造型、地点、构图与光线事实写在这里并原样纳入可复制正文;图生视频只补充动作所需、参考图不能独立说明的可见起点
21
+ - **状态链**:`<起点> → <唯一动作:触发、接触与落点> → <终点>`;直接投影分镜,不补镜外转换
18
22
  - **时长(只读)**:`<seconds>s`
19
23
  - **边界核对**:`end match | mismatch | unrealized`
20
24
  - **声音引用**:`<dialogue/VO/OS/SFX ids>`
@@ -44,3 +48,15 @@
44
48
  成员镜头各自的边界、终点报告与审查入口保持独立。
45
49
  若自然语言修改涉及时长、终点、对白或下一镜,展示交给负责技能的修改请求,而不是
46
50
  修改本文件来掩盖来源变化。
51
+
52
+ 连续交付段若选择从上一段生成结果续接,后续容器不得降级成普通文生视频。真实产物尚不存在时写:
53
+
54
+ ```markdown
55
+ - **就绪状态**:待续接、不可提交
56
+ - **接力输入**:等待上一容器实际视频与从该视频抽取的实际尾帧;两者缺一不可
57
+ ```
58
+
59
+ 此时可保留下一段内容草案,但不绑定虚构槽位、不声称已经续写。真实产物存在后才增加「接力输入」:
60
+ 上一段实际视频使用 `continuity_video` 角色,直接从该视频取得的实际尾帧使用 `actual_tail_frame` 角色。
61
+ 两者同时绑定;前者承接动作、节奏和声音,后者固定可见起点。计划尾帧、冻结关键帧或文字描述不能
62
+ 代替任一项。逐镜章节在多镜/续接路由下是成员依据,不是另一套可提交任务。
@@ -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