@oh-story/dsh 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/README.md +14 -14
  2. package/lib/client.js +209 -73
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +248 -168
  5. package/lib/drama/skills/short-drama/SKILL.md +16 -4
  6. package/lib/drama/skills/short-drama/assets/project-template/short-drama.json +3 -0
  7. package/lib/drama/skills/short-drama/references/creator-documents.md +3 -0
  8. package/lib/drama/skills/short-drama/references/knowhow-index.md +15 -0
  9. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +14 -0
  10. package/lib/drama/skills/short-drama/scripts/project_tool.py +131 -0
  11. package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
  12. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
  13. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +10 -0
  14. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +6 -9
  15. package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
  16. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  17. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
  18. package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
  19. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
  20. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
  21. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
  22. package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
  23. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
  24. package/lib/drama/skills/short-drama-develop/references/genre-cards//345/244/215/344/273/207/346/211/223/350/204/270.md +1 -1
  25. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
  26. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
  27. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/207/215/347/224/237/347/251/277/350/266/212.md +51 -0
  28. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
  29. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
  30. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
  31. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
  32. package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
  33. package/lib/drama/skills/short-drama-edit/SKILL.md +65 -44
  34. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
  35. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
  36. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
  37. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
  38. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
  39. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
  40. package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
  41. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
  42. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
  43. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
  44. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
  45. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
  46. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
  47. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
  48. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
  49. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
  50. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +6 -4
  51. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +26 -67
  52. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +31 -56
  53. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +42 -78
  54. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +44 -92
  55. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +14 -16
  56. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1272 -125
  57. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +113 -9
  58. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
  59. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
  60. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
  61. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
  62. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
  63. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
  64. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
  65. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
  66. package/lib/drama/skills/short-drama-produce/SKILL.md +5 -1
  67. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +14 -20
  68. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +8 -26
  69. package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  70. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +142 -1
  71. package/lib/drama/skills/short-drama-review/SKILL.md +4 -5
  72. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +6 -19
  73. package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
  74. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
  75. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
  76. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +24 -35
  77. package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
  78. package/lib/drama/skills/short-drama-storyboard/SKILL.md +23 -11
  79. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
  80. package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  81. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
  82. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +139 -34
  83. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +5 -3
  84. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +15 -12
  85. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +29 -0
  86. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
  87. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
  88. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +52 -39
  89. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +24 -21
  90. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +9 -23
  91. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +14 -26
  92. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
  93. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +2 -3
  94. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +34 -9
  95. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -2
  96. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
  97. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
  98. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
  99. package/lib/drama/skills/short-drama-write/SKILL.md +10 -7
  100. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
  101. package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
  102. package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
  103. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
  104. package/lib/index.js +346 -98
  105. package/lib/index.js.map +4 -4
  106. package/lib/novel-to-game/README.md +299 -59
  107. package/lib/novel-to-game/README_ZH.md +299 -56
  108. package/lib/novel-to-game/VERSION +1 -1
  109. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
  110. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
  111. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
  112. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
  113. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
  114. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
  115. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
  116. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
  117. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
  118. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
  119. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
  120. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
  121. package/lib/novel-to-game/manifest.json +77 -87
  122. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +7 -12
  123. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
  124. package/lib/novel-to-game/skills/game-build/SKILL.md +13 -14
  125. package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
  126. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
  127. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
  128. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
  129. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
  130. package/lib/novel-to-game/skills/game-concept/SKILL.md +13 -15
  131. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
  132. package/lib/novel-to-game/skills/game-qa/SKILL.md +6 -7
  133. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +9 -5
  134. package/lib/novel-to-game/skills/game-world-design/SKILL.md +12 -16
  135. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
  136. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
  137. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
  138. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +4 -10
  139. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
  140. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +9 -21
  141. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -4
  142. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +5 -8
  143. package/lib/oh-story/manifest.json +607 -327
  144. package/lib/oh-story/roles/chapter-extractor.md +177 -237
  145. package/lib/oh-story/roles/character-designer.md +1 -2
  146. package/lib/oh-story/roles/consistency-checker.md +15 -13
  147. package/lib/oh-story/roles/narrative-writer.md +36 -38
  148. package/lib/oh-story/roles/story-architect.md +9 -61
  149. package/lib/oh-story/roles/story-explorer.md +20 -125
  150. package/lib/oh-story/roles/story-researcher.md +0 -1
  151. package/lib/oh-story/skills/story/SKILL.md +15 -9
  152. package/lib/oh-story/skills/story/VERSION +1 -1
  153. package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
  154. package/lib/oh-story/skills/story/references/author-memory.md +46 -94
  155. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
  156. package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
  157. package/lib/oh-story/skills/story-deslop/SKILL.md +59 -73
  158. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
  159. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +12 -11
  160. package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  161. package/lib/oh-story/skills/story-deslop/references/author-memory.md +46 -94
  162. package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
  163. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +22 -5
  164. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
  165. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
  166. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
  167. package/lib/oh-story/skills/story-import/SKILL.md +64 -584
  168. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
  169. package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
  170. package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
  171. package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
  172. package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
  173. package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
  174. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
  175. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
  176. package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
  177. package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
  178. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +98 -92
  179. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
  180. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
  181. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +15 -11
  182. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
  183. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +132 -27
  184. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +478 -15
  185. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +182 -23
  186. package/lib/oh-story/skills/story-long-analyze/SKILL.md +81 -270
  187. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +252 -0
  188. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +3 -3
  189. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
  190. package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
  191. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
  192. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +138 -64
  193. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  194. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  195. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  196. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  197. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  198. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
  199. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +55 -128
  200. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +6 -6
  201. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  202. package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  203. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  204. package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  205. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1145 -0
  206. package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  207. package/lib/oh-story/skills/story-long-scan/SKILL.md +45 -194
  208. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  209. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
  210. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  211. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
  212. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
  213. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
  214. package/lib/oh-story/skills/story-long-write/SKILL.md +49 -81
  215. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
  216. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +12 -11
  217. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +24 -202
  218. package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  219. package/lib/oh-story/skills/story-long-write/references/author-memory.md +46 -94
  220. package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
  221. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +7 -11
  222. package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
  223. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
  224. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
  225. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +4 -0
  226. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
  227. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
  228. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
  229. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  230. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +7 -15
  231. package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
  232. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
  233. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
  234. package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
  235. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
  236. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
  237. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
  238. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
  239. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
  240. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
  241. package/lib/oh-story/skills/story-long-write/references/project-files.md +19 -13
  242. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +13 -5
  243. package/lib/oh-story/skills/story-long-write/references/reference-index.md +5 -6
  244. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
  245. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
  246. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  247. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
  248. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
  249. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +15 -11
  250. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +81 -121
  251. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +41 -139
  252. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
  253. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +57 -67
  254. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -253
  255. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
  256. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +6 -4
  257. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +19 -65
  258. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
  259. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  260. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +226 -25
  261. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
  262. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +132 -27
  263. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
  264. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +7 -4
  265. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +304 -46
  266. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +478 -15
  267. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +182 -23
  268. package/lib/oh-story/skills/story-review/SKILL.md +31 -302
  269. package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
  270. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +12 -11
  271. package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
  272. package/lib/oh-story/skills/story-review/references/author-memory.md +46 -94
  273. package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
  274. package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
  275. package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
  276. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +4 -0
  277. package/lib/oh-story/skills/story-review/references/review-quality.md +6 -11
  278. package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
  279. package/lib/oh-story/skills/story-review/references/solo.md +52 -0
  280. package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
  281. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
  282. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +15 -11
  283. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
  284. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
  285. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +478 -15
  286. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +182 -23
  287. package/lib/oh-story/skills/story-setup/SKILL.md +71 -452
  288. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
  289. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +12 -11
  290. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
  291. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  292. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
  293. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +22 -5
  294. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +4 -0
  295. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  296. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
  297. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
  298. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  299. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
  300. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
  301. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
  302. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
  303. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
  304. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
  305. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
  306. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
  307. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
  308. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
  309. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
  310. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
  311. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  312. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +4 -4
  313. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +19 -65
  314. package/lib/oh-story/skills/story-setup/references/diagnostics.md +4 -4
  315. package/lib/oh-story/skills/story-short-analyze/SKILL.md +56 -110
  316. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
  317. package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
  318. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
  319. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
  320. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
  321. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
  322. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  323. package/lib/oh-story/skills/story-short-analyze/references/stage4-6-reversal-summary.md +611 -0
  324. package/lib/oh-story/skills/story-short-scan/SKILL.md +35 -65
  325. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
  326. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  327. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
  328. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
  329. package/lib/oh-story/skills/story-short-write/SKILL.md +23 -175
  330. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
  331. package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  332. package/lib/oh-story/skills/story-short-write/references/author-memory.md +46 -94
  333. package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
  334. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
  335. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +4 -0
  336. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
  337. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
  338. package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
  339. package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -47
  340. package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
  341. package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
  342. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
  343. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
  344. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
  345. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
  346. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
  347. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
  348. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +21 -13
  349. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +116 -0
  350. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +99 -0
  351. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
  352. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
  353. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
  354. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
  355. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  356. package/lib/types/client/file-activity.d.ts +19 -1
  357. package/lib/types/client/file-activity.d.ts.map +1 -1
  358. package/lib/types/client/index.d.ts.map +1 -1
  359. package/lib/types/client/production-prompts.d.ts +7 -0
  360. package/lib/types/client/production-prompts.d.ts.map +1 -1
  361. package/lib/types/client/production-runtime.d.ts +16 -0
  362. package/lib/types/client/production-runtime.d.ts.map +1 -1
  363. package/lib/types/client/video-studio.d.ts.map +1 -1
  364. package/lib/types/drama-adapters.d.ts +5 -3
  365. package/lib/types/drama-adapters.d.ts.map +1 -1
  366. package/lib/types/native-hooks.d.ts +53 -1
  367. package/lib/types/native-hooks.d.ts.map +1 -1
  368. package/lib/types/role-identity.d.ts +17 -0
  369. package/lib/types/role-identity.d.ts.map +1 -0
  370. package/lib/types/role-tool.d.ts.map +1 -1
  371. package/lib/types/skill-provider.d.ts.map +1 -1
  372. package/lib/types/video-project.d.ts.map +1 -1
  373. package/lib/types/workspace-route.d.ts.map +1 -1
  374. package/lib/video-recap/CHANGELOG.md +60 -1
  375. package/lib/video-recap/README.en.md +348 -137
  376. package/lib/video-recap/README.md +340 -136
  377. package/lib/video-recap/manifest.json +406 -251
  378. package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
  379. package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
  380. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  381. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
  382. package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
  383. package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
  384. package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
  385. package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
  386. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
  387. package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  388. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  389. package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  390. package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  391. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  392. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  393. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
  394. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
  395. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
  396. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
  397. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
  398. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
  399. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
  400. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
  401. package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  402. package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
  403. package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
  404. package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
  405. package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
  406. package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
  407. package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
  408. package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
  409. package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
  410. package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
  411. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
  412. package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
  413. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
  414. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
  415. package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
  416. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
  417. package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  418. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
  419. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
  420. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
  421. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  422. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
  423. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
  424. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
  425. package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
  426. package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
  427. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
  428. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
  429. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
  430. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
  431. package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
  432. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
  433. package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
  434. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
  435. package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
  436. package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
  437. package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
  438. package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
  439. package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
  440. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
  441. package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
  442. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
  443. package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
  444. package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
  445. package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
  446. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
  447. package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
  448. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
  449. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
  450. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
  451. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
  452. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
  453. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
  454. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
  455. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
  456. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
  457. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
  458. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
  459. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
  460. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
  461. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
  462. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
  463. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
  464. package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
  465. package/lib/video-recap/skills/video-script/SKILL.md +16 -13
  466. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
  467. package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
  468. package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
  469. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
  470. package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
  471. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
  472. package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
  473. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
  474. package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
  475. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
  476. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
  477. package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
  478. package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
  479. package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
  480. package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
  481. package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
  482. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  483. package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
  484. package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  485. package/lib/video-recap/skills/{video-script/scripts/agent_brief.py → video-understanding/scripts/briefing/builder.py} +38 -35
  486. package/lib/video-recap/skills/video-understanding/scripts/{brief_context.py → briefing/context.py} +4 -35
  487. package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
  488. package/lib/video-recap/skills/{video-script/scripts/brief_timeline.py → video-understanding/scripts/briefing/timeline.py} +5 -6
  489. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
  490. package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
  491. package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
  492. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
  493. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
  494. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
  495. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
  496. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
  497. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
  498. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
  499. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
  500. package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
  501. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
  502. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  503. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
  504. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
  505. package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  506. package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  507. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
  508. package/package.json +45 -45
  509. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -58
  510. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
  511. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -38
  512. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -530
  513. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -559
  514. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
  515. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
  516. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +0 -678
  517. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
  518. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
  519. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
  520. package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
  521. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
  522. package/lib/video-recap/skills/video-script/scripts/brief_context.py +0 -348
  523. package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
  524. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +0 -399
  525. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
  526. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +0 -327
  527. /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
  528. /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
  529. /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
@@ -31,8 +31,7 @@ non_diegetic_music: ...
31
31
 
32
32
  - `integrated_multimodal_description` 按 `[Shot 1]`、`[Shot 2]` 写画面、动作、说话人、逐字对白和同步声音;
33
33
  单镜也保留 `[Shot 1]`。第一镜不加切镜时间戳,后续切镜用 `[Shot 2] At 00:03.500, ...`,时间递增且落在本次生成时长内。
34
- 实测这个时间戳很准:要求第 4.0 秒切,三次实际落在 3.96/4.04/4.12 秒。需要成员边界与已接受时长
35
- 对得上的多镜容器,用这种写法。
34
+ 小样本观察到切点接近要求,但仍有偏差;交付要求精确时应检查实际切点并在剪辑中调整。
36
35
  - `overall_soundscape` 汇总环境声、物理音效和非语言人声,不重复对白;对白事件留在上面的主时间线。
37
36
  无非画内配乐时写 `non_diegetic_music: N/A`,不要留空让模型补乐——这一条有实测支撑,见
38
37
  [无对白镜](#无对白镜)。
@@ -40,35 +39,13 @@ non_diegetic_music: ...
40
39
 
41
40
  ## 无对白镜
42
41
 
43
- H3 画音同轨。实测下来两个通道的表现并不一样:**配乐通道不写就会被模型填上**,语音通道在本套件
44
- 的样本里没有出现过这种情况。下面两节按这个差别分开写,别把配乐那条的力度套到语音上。
45
- 三段结构和六段结构同此处理。
42
+ 在 `overall_soundscape` 写清全镜的环境声、音效或静默。
43
+ **`craft_default`**:优先描述需要的声轨;必要时可以补「无对白」,不因用了否定句判错。
44
+ 人物嘴部状态按实际表演写,不能把无对白一律改成全程闭嘴。
46
45
 
47
- **`craft_default`**:无对白镜的声音段正面写,不用 `no dialogue`、`无对白`、`不说话` 这类排除句
48
- 关闭语音通道。这条是写法约定,不是已验证的因果:本套件用 H3 实测过含 `No dialogue` 排除句的正文
49
- (文生 5 次、多槽参考 3 次,共 8 次),没有一次生成出台词,所以**不能说**排除句会招来对白。
50
- 选正面写法的理由是它同时交代了这一镜该有什么声音,排除句只说了不要什么。
51
-
52
- 正面写法有两处,缺一处都不算写满:
53
-
54
- - `overall_soundscape` 写这条声轨**由什么组成、覆盖多长**,只列已声明的 ambience 与音效。例如
55
- `overall_soundscape: A faint wind outside the window is the only sound present, continuous from the first frame to the last.`
56
- - 主时间线(`integrated_multimodal_description` 或 `detailed_description`)把「不说话」写成**可见状态**,
57
- 绑到本镜真正在场的人身上。它是表演描述,说的是画面里看得见的事。例如
58
- `Both keep their lips closed and their mouths still for the full shot.`
59
-
60
- ### 配乐通道必须显式关掉
61
-
62
- 这一条有实测支撑,且比上面一条重要得多:正文写了 `non_diegetic_music: N/A` 的 14 次生成没有一次
63
- 自带配乐;完全不提配乐的 3 次里有 2 次返回了自造的背景音乐(持续谐波音床,随镜头变化换和弦)。
64
- **所以 `non_diegetic_music` 这一行不能省。** 语音通道目前没有观察到同样的现象,配乐通道有。
65
-
66
- ### 时间线完整声明
67
-
68
- 主时间线闭合时只声明**本镜实际有的**声音层:无对白镜写
69
- `The audio timeline is complete after the listed ambience and effects.`,
70
- 把 `timed dialogue` 加进这句是有对白时才成立的写法。无对白镜枚举 `timed dialogue` 是一句与本镜事实
71
- 不符的话;实测未观察到它单独导致生成台词,但正文不该写与本镜不符的内容。
46
+ 无非画内配乐时保留 `non_diegetic_music: N/A`。小样本中省略这一层出现过额外配乐,
47
+ 显式写空可作为 H3 的默认写法,不保证所有生成都遵守。
48
+ 时间线总结只列本镜实际存在的声音层,不照抄包含对白的模板。
72
49
 
73
50
  ## 选哪一种模式
74
51
 
@@ -107,7 +84,8 @@ non_diegetic_music: ...
107
84
 
108
85
  **这六段是一条提示词,一次整体提交。** 它们是同一个 `MOTION-...` 的可复制正文,从第一段到最后一段
109
86
  一起放进那一次生成的提示词框,不是六次生成、也不是只提交第一段。三段结构的 Base / 首帧 / 首尾帧同理。
110
- 一镜一次生成,所以下一镜换成它自己那条完整正文。
87
+ 默认一镜一次生成,下一镜换成它自己那条完整正文;几个镜头装进同一次生成的条件见
88
+ [多镜容器](#多镜容器每切一张关键帧)。
111
89
 
112
90
  ### 素材标签怎么编号
113
91
 
@@ -144,11 +122,10 @@ REF-STUDY-PLATE(顺序:3;用途:地理) -> <Picture 3>
144
122
 
145
123
  `用途` 决定这一张在正文里被要求保留什么,具体到哪几项由该槽位自己写下的 `控制` 范围决定。
146
124
 
147
- **实测口径**:模型响应的是 `控制` 这半句的肯定表述——正文明确写「保留起始构图、站位、机位高度」时,
148
- 构图会被准确带过来;只写 `fully_preserved` 或只写「不得控制构图」时,构图都不会被带过来。
149
- 所以**需要保住构图的槽位(典型是 `用途:起始帧`)必须在 `控制` 里点名构图**,漏写就拿不到这个锚点,
150
- 在别处补多少 `不得控制` 都无效。`不得控制` 照常写,但它是给 owner 与 reviewer 看的责任边界,
151
- 不是对模型的开关。
125
+ 需要保留构图时,在 `控制` 中点名构图、站位或机位高度。
126
+ `不得控制` 记录不应照搬的内容,生成后仍需检查实际参考影响,不能把文字声明当成模型保证。
127
+ 本镜没有起始帧时,地点图会把景别拉宽,要在 `detailed_description` 里写具体取景,见
128
+ [目标模型能力档案](target-model-profile.md#参考条件方式)。
152
129
 
153
130
  `起始帧` 只锚定开场构图与姿态,`身份` 锚定这个人跨镜不变的长相与体态(角色板同时固定本集造型时,
154
131
  `控制` 里会写明),
@@ -180,7 +157,29 @@ non_diegetic_music: N/A
180
157
  ```
181
158
 
182
159
  三张图各自只负责一件事:`<Picture 1>` 给构图,`<Picture 2>` 给身份,`<Picture 3>` 给地理。
183
- 把这条差异写进 `retention_analysis`,角色板就不会顺带决定构图,场景板也不会顺带决定长相。
160
+ 把这条差异写进 `retention_analysis`,生成后检查身份、构图与地理是否分别保留。
161
+
162
+ ### 多镜容器:每切一张关键帧
163
+
164
+ **`taste_option`**:几个相邻镜头可以装进同一次 full-reference 生成,每切挂它自己的已接受关键帧。
165
+ **`craft_default`**:装容器的条件是三条都满足:
166
+
167
+ - 每个成员镜头都有已接受的起始帧图片(`REF-...` 或 `PLAN-...`,`用途:起始帧`);缺一张就逐镜生成;
168
+ - 成员已接受时长之和在 4–15 秒内,且成员资格与容器算术按 [交付形态](delivery-profile.md) 的多镜容器记账;
169
+ - 容器用一份参考清单:各切关键帧按切的顺序排在前面,共用的身份、地点图接在后面,
170
+ `<Picture N>` 按这份清单的 `顺序` 编号,不照抄逐镜时的编号。
171
+
172
+ 正文第一行、`subject_definitions` 之前,写一句对齐句把每张关键帧钉到它那一切的起点:
173
+
174
+ ```text
175
+ <Picture 1> aligns with the 0.00-second mark as the opening frame of [Shot 1]; <Picture 2> aligns with the 3.00-second mark as the frame of [Shot 2]; <Picture 3> aligns with the 6.00-second mark as the frame of [Shot 3].
176
+ ```
177
+
178
+ `detailed_description` 里后续各切照常写 `[Shot 2] At 00:03.000, ...`,秒数与对齐句一致;
179
+ `retention_analysis` 为每张关键帧写它负责的那一切。一组 9 秒三切的小样本(要求 3.0/6.0 秒切):
180
+ 每切挂关键帧,切点落在 2.88–3.04 / 6.00–6.04 秒,各切与关键帧的构图相似度接近三次逐镜首帧生成,
181
+ 生成次数为三分之一;只挂第一切的关键帧时,切点偏到 2.92–3.88 / 5.88–6.21 秒,第 2、3 切的构图
182
+ 明显偏离关键帧,还出现过一次多出来的切。所以没有逐切关键帧时不装容器。
184
183
 
185
184
  ## 素材数量上限
186
185
 
@@ -221,8 +220,8 @@ full-reference:
221
220
 
222
221
  **`craft_default`**:按 [对白预算](performance-action-timing.md#对白预算) 先核对完整发声需要多久,
223
222
  再给主时间线安排开口、停顿与落点。分镜镜长够长但开口太晚,一样会赶词。
224
- 实测口径:H3 中文自然语速约 **4.1 字/秒**,容量约 `4.1 × 镜长`;超出后先赶语速(最快约 2.5 倍),
225
- 再超过约 9 字/秒就**静默截断**,接口不报错。别把"没报错"当成台词说完了。
223
+ H3 中文小样本可参考约 4.1 个可发声字/秒;用实际可发声区间估算,生成后核对台词完整性。
224
+ 样本出现过赶词与静默截断,不能据此确定通用截断阈值。
226
225
  口语语言、声线与语速描述放在 `<d>` 外;`<d>` 内只放语言标签和逐字台词,不放秒数或表演指令。
227
226
  稳定说话人用 `(S1)`、`(S2)`;full-reference 中说话人物同时写 `<Subject N> (Sx)`。
228
227
 
@@ -235,6 +234,20 @@ H3 官方接口未提供独立 `speech_rate` 参数,也没有公布「中文
235
234
  保证两个独立 job 的音频无缝衔接。`<cutoff>` 表示视频结束时有意截断发声,只用于剧本已要求的截断,
236
235
  不用于处理装不下的完整台词。
237
236
 
237
+ ### 说话人绑定
238
+
239
+ **`craft_default`**:说话人第一次出现时,在 `<d>` 外交代他在画内还是画外、以及音色(年龄、性别、高低),
240
+ 台词跟在他的可见动作句后面(仍只出现一次),不集中列在正文末尾:
241
+ `<Subject 1> (S1), the boy on-screen with a clear high voice, opens his mouth and calls out: <d>[Chinese] ...</d>`。
242
+ 台词期间画里还有别人的正脸时,把那个人明写成不说话:
243
+ `The messenger does not speak; his lips remain completely closed.`——与官方画外音写法
244
+ `while his lips remain completely closed` 是同一句式。
245
+
246
+ 一镜实测(远处小孩喊一句,近处骑手不说话,骑手在台词期间仍正对镜头):现行写法 3 次中 2 次口型落在骑手、
247
+ 小孩闭嘴;加上述两条后 3 次全部落在小孩。19 条样本的发声基频都在儿童区间——模型没有选错声音,
248
+ 只是把口型放到画面里最显眼的正脸上。骑手已出画或背对时,两种写法 12 次全部正确。所以分镜能安排时,
249
+ 先让不说话的人出画或背身;不能时才靠这两条兜底,生成后仍核对口型落在谁脸上。
250
+
238
251
  ### 有配音或参考音频时
239
252
 
240
253
  **`craft_default`**:已有同句同表演音频时,先测实际发声与停顿,再确定镜长。没有现成音频仍可按文本估计
@@ -102,7 +102,8 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
102
102
  真实参考帧已作为输入并包含脸、服装全貌、墙面材料等内容时不重复。**`craft_default`** 是“图生视频
103
103
  只重述动作所需条件,不重述整份视觉设定”。文生视频没有这种省略资格,必须提供足以独立建立本镜
104
104
  人物、造型、地点、构图与光线的静态视觉锚点;若提示词离开参考帧会把左右手或物体搞错,图生视频
105
- 也应保留这些局部事实。
105
+ 也应保留这些局部事实。没有起始帧、只挂身份或地点图时也没有这种省略资格:取景要写具体,见
106
+ [目标模型能力档案](target-model-profile.md#参考条件方式)。
106
107
 
107
108
  ## 3. 运动说明的七个部分
108
109
 
@@ -130,7 +131,7 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
130
131
 
131
132
  先把起点中的持续关系翻译成动作自由度:用正向状态写清贯穿本镜的支撑、固定、接触或空间关系,
132
133
  再只安排允许的身体/物件通道。关系变化必须来自已接受动作并落到已接受终点;否则按 `VID-01`
133
- 保持只读。可复制正文只写持续状态和允许动作,不用 `no/not/without + 动作` 复述边界。
134
+ 保持只读。可复制正文写清持续状态和允许动作,避免重复约束;必要的排除条件可以保留。
134
135
  成稿后在正文内直接改掉残留的这类否定结构,不另建检查步骤或报告。
135
136
 
136
137
  **`craft_default`**:一条运动提示词优先只有一个主导的戏剧变化,必要反应、环境与摄影
@@ -147,13 +148,17 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
147
148
 
148
149
  1. **触发**:外部声音/动作/台词或内部决定(来源可追溯);
149
150
  2. **接收**:注意被什么抓住;
150
- 3. **处理**:一两个细微信号,而非面部部件清单;
151
+ 3. **处理**:一个读得出的信号,而非面部部件清单;外放到什么程度见下文的表演强度;
151
152
  4. **决定**:角色采取/抑制什么行动;
152
153
  5. **结果**:到达已确认终点的情绪与身体状态。
153
154
 
154
155
  - **`craft_default`**:把副词换成节奏和行为,“愤怒地说”可具体为先压低音量、吞回半句话、最后直呼对方全名——前提是符合台词与人物。
155
156
  - **`reviewed_invariant`**:不能发明新信息、关系转变或角色意图。审查者对照镜头目的和剧本资料判断。
156
157
  - **`taste_option`**:强度与外显程度可从克制到爆发,由导演选择,不强制“先微表情后爆发”。
158
+ - **`craft_default · VID-26`**:没有导演选择时,表演强度跟随制作形态与题材。漫剧和爽文的峰值,关键姿态和表情
159
+ 外放:表情变化大到一眼读得出,手势用整条手臂,情绪落在上身和整张脸上,仍按[可生成性](generability.md)写成
160
+ 常见的整体动作,剧情不压在微表情上。AI 真人剧保持生活化的克制,但峰值也要有一个读得出的表演拍,例如一次
161
+ 明显的变脸、一次猛地停住或转身,不让整集只剩静脸。形态读 `视觉设定.md` 的制作形态,或已接受节奏档案的 `form`。
157
162
 
158
163
  ### 3.4 摄影机 `camera`
159
164
 
@@ -172,13 +177,10 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
172
177
  1. 按发生顺序列出本镜全部对白、VO、OS、必要非语言发声和 SFX;
173
178
  2. 每条台词同时标说话人、声源性质、口语语言和逐字文本,发声从原文首字开始、到末字结束;
174
179
  3. 所列事件之外只保留已声明的 ambience 或静默;相邻两句之间若有停顿,也明确回到这一底声;
175
- 4. 声明时间线完整并结束声音段落,不再列出或否定集合外的语言、语气或声源;这条声明只列本镜
176
- 实际有的层,不枚举本镜没有的层。
180
+ 4. 用实际存在的声音层总结时间线,避免模板与本镜内容矛盾。
177
181
 
178
- 本镜一句发声都没有时,第 1、2 步的列表为空,第 3、4 步照做,而且是这一镜声音写法的全部:正面写出
179
- 底声或静默的构成与覆盖区间,把「不说话」写成在场人物的可见状态(嘴唇闭合),完整性声明里不出现
180
- dialogue。不用 `no dialogue`、`无对白` 关闭语音通道:正面句同时说清了这一镜该有什么声音,排除句
181
- 只说了不要什么。非画内配乐层另外显式写空——这一层不写,实测会被模型补上一段自造配乐。
182
+ 无对白镜写清底声或静默及覆盖区间。必要的「无对白」声明可以保留,
183
+ 人物嘴部状态由本镜表演决定。非画内配乐的空形式按目标方言填写。
182
184
 
183
185
  确有叹气、吸气、笑声或重叠说话时,把它作为有来源的事件列入。声音不同轨时仍只写后期职责。
184
186
 
@@ -187,12 +189,14 @@ dialogue。不用 `no dialogue`、`无对白` 关闭语音通道:正面句同
187
189
  默认把这几秒写成一条读得出先后的节拍链:
188
190
 
189
191
  ```text
190
- 首先<起手状态>;接着<动作、方向与幅度>;随后<这个动作造成的结果>;与此同时<另一条通道>;最终<结束状态>
192
+ 首先<起手状态>;接着<动作、方向与终点接触>;随后<这个动作造成的结果>;与此同时<另一条通道>;最终<结束状态>
191
193
  ```
192
194
 
193
- - **幅度、角度、距离是你写的这一拍的组成部分**。“肩线下沉约五厘米”“上身向左转约三十度”
194
- “右手停在离杯沿一掌处”说的是本镜要拍成什么样,直接写,不必等上游先给数字。写不出量级,
195
- 通常说明这一拍还没想清楚该有多大——先把动作想清楚,再回来写这一句。
195
+ - **动作停在哪里,用接触点或画面里的地标写**。“指尖碰到杯沿后停住”“视线落到桌面签名处”
196
+ “右手停在伞柄上”说的是本镜要拍成什么样,直接写,不必等上游先给数字。厘米和度数不写:
197
+ H3 一镜的小样本里,写「约二十厘米后停住」的 4 次中 3 次仍伸到杯子并接触,
198
+ 写「指尖碰到杯沿后停住」的 4 次全部停在杯沿。写不出终点接触什么、停在哪个地标,
199
+ 通常说明这一拍还没想清楚——先把动作想清楚,再回来写这一句。
196
200
  - **可以钉一到两个锚点秒数**:起手保持多久、终点定格多久、一次运镜走多久(“起手不动约半秒”
197
201
  “结束姿态定住约一秒”)。锚点是写在正文里的散文标注——不拆成 `timing_plan` 分段、不把
198
202
  `mode` 写成 `explicit`、不参与 `VID-04` 求和。所有锚点相加应当明显小于镜头时长,链条其余
@@ -204,7 +208,7 @@ dialogue。不用 `no dialogue`、`无对白` 关闭语音通道:正面句同
204
208
 
205
209
  - **`structural_invariant`**:明确标注的非重叠段落时长相加必须**等于**已接受的镜头时长;重叠段必须写明重叠关系,而不是靠猜。
206
210
  - **超出**:落在时长之外的部分被截断,段尾动作、逐字对白和终点姿态一起丢失。
207
- - **不足同样是缺陷**,而且后果更重:未分配的余量不会是静止画面,执行端会用未经批准的动作、表情或镜头运动把它填满,这些内容没有任何上游来源。把余量分配给已有阶段,或补一个有内容的收尾段(落住反应、保持终点姿态),不要留白。
211
+ - **不足同样是缺陷**:执行端可能不停在最后一段的秒点上,而是把已写的动作整体拉长去占满镜头,写下的秒点于是整体后移,计划里的时间就不再描述成片。H3 一个 8 秒单人镜的小样本里,秒段只写到 5 秒、补「定住终点」到 8 秒、只写相对顺序三种写法各 4 次,都没有出现计划外动作;三种写法的放杯都落在 6–7 秒,补写的 3 秒定格也没有出现。把余量分配给已有阶段,让写下的节奏与镜长一致;秒点只是计划记账,不是精确落点,需要按秒剪辑或对齐时以生成结果的实测为准,落幅保持靠剪辑余量而不是一段定格描述。
208
212
  - 两个方向都由 `VID-04` 管辖;审查者引用该编号时,超出与不足都算违约。
209
213
  - **`reviewed_invariant`**:即使数学不超时,台词、动作、反应是否可完成仍由审查者结合语言、强度和物理路径判断。
210
214
  - 不设通用“每秒几字/几个动作”硬门槛。
@@ -239,7 +243,7 @@ reported_end 不同:mismatch + 请求修改分镜
239
243
  ### 可复制的写法骨架
240
244
 
241
245
  ```text
242
- 从[最少但够用的起点信息]开始。首先[起手状态,可含一个锚点秒数];接着[动作、方向与幅度];
246
+ 从[最少但够用的起点信息]开始。首先[起手状态,可含一个锚点秒数];接着[动作、方向与终点接触];
243
247
  随后[这个动作造成的结果与随之而来的可见处理];与此同时[另一条通道上并行的一件事];
244
248
  最终[已确认终点的可见状态]。摄影机[写死构图并说明保持多久,或一次有动机的移动,含触发、路径与终点景别]。
245
249
  [必要的环境运动]。对白/声音:[准确来源与表演/空间意图]。
@@ -252,26 +256,25 @@ reported_end 不同:mismatch + 请求修改分镜
252
256
  | 必须写出来 | 缺了会发生什么 |
253
257
  |---|---|
254
258
  | 起手状态(这一拍从哪个姿态开始) | 执行端自选起点,接不上前一镜的终点 |
255
- | 串行链:接着→随后,每一步带方向与幅度 | 动作糊成一团,看不出先后 |
256
- | 至少一处量级(约五厘米/约三十度/约一掌) | 幅度由执行端决定,同一动作逐条漂移 |
259
+ | 串行链:接着→随后,每一步带方向,终点落到接触点或地标 | 动作糊成一团,看不出先后,也不知道停在哪 |
257
260
  | 一条并行通道,用「与此同时」标出 | 要么全片只有一个人在动,要么所有人一起动 |
258
261
  | 结束状态(终点姿态定在哪) | 收尾被自由发挥,下一镜起点失效 |
259
262
  | 摄影机:锁定写死构图与保持多久,移动写触发、路径、终点景别;两种都补一句**这次要让观众看清什么** | 空着会被读成可以自由漂移;没有理由的运镜是装饰,执行端换一种也说得通,于是真换 |
260
263
  | 有台词时把台词逐字挂在它发生的那一拍上 | 口型对不上,或台词被当成画面内容渲染 |
261
264
 
262
- **写短**:这段是给生成器的执行指令,不是给人读的散文。上表七项在**两百字上下**就能写满,
265
+ **写短**:这段是给生成器的执行指令,不是给人读的散文。上表六项在**两百字上下**就能写满,
263
266
  超过三百字基本可以确定有冗余。省字的办法是合并而不是删项——压到一百八十字以内时,
264
267
  最先掉的是台词挂载与声音这两项,把它们挤掉换来的字数不值:
265
268
  把景别、机位、角度、焦段并进一句(「固定中近景,轴线左侧平视,中焦」),把并行通道挂在它
266
- 真正发生的那一拍后面而不另起一句,量级只给关键的那一到两处而不是每个动作都标。
269
+ 真正发生的那一拍后面而不另起一句。
267
270
  形容词、情绪解释、把同一个动作换个说法再说一遍都不改变生成结果,只增加成本;
268
271
  参考帧已经表达的长相、服装、场景装修一律不重复。
269
272
 
270
- 写出来是这样(合成材料,约两百字覆盖上表全部七项):
273
+ 写出来是这样(合成材料,约两百字覆盖上表全部六项):
271
274
 
272
275
  ```text
273
276
  从她双手交叠压膝、视线在脚边水洼的起点开始。首先保持不动约半秒;接着右手离膝向伞柄
274
- 伸出约二十厘米;随后指节扣住伞柄,把伞立起点在地面;与此同时水洼被风推出一层细纹;
277
+ 伸出,指节碰到伞柄;随后扣住伞柄,把伞立起点在地面;与此同时水洼被风推出一层细纹;
275
278
  最终她站直,右手持伞垂在身侧,视线抬到对面门口。摄影机固定,平视,取头肩,轴线左侧,
276
279
  全程不动——让观众看清她起身前后手上的变化,而不是跟着她走。台词在「接着」这一拍:「我不等了。」
277
280
  ```
@@ -142,7 +142,7 @@
142
142
  2.6–4.0s:说完后停住,右手仍握笔,落到 accepted end
143
143
  ```
144
144
 
145
- 区间不可无意重叠;显式非重叠总量/最大终点不得超 duration。总量小于 duration 时也要处理:把余量分配给已有阶段或补一个有内容的收尾段,未分配的秒数会被执行端用自选动作填满(见 [motion-recipe.md](motion-recipe.md) 3.6)。不要为了塞进数学窗口而静默删掉 exact dialogue。
145
+ 区间不可无意重叠;显式非重叠总量/最大终点不得超 duration。总量小于 duration 时也要处理:把余量分配给已有阶段(原因见 [motion-recipe.md](motion-recipe.md) 3.6)。不要为了塞进数学窗口而静默删掉 exact dialogue。
146
146
 
147
147
  ### 对白预算
148
148
 
@@ -157,31 +157,17 @@
157
157
  8–10 秒(含句内停顿),即使写成「0–7 秒」也不成立。请求分镜按至少 11 秒重新安排,或按语义拆镜,
158
158
  待上游修订后同步本镜时长、正文时序和生成设置。不要用更快语速、截断标记或静默删词让算术看起来成立。
159
159
 
160
- ### 超出容量时会发生什么(H3 中文实测)
160
+ ### H3 中文的估算参考
161
161
 
162
- **`craft_default`**:本套件在 MiniMax H3 上测过同一镜从 7 字到 108 字、镜长 5–13 秒的表现,
163
- 分三段,可作为该模型的可覆盖估算(别的模型、别的语言要各自实测):
162
+ **`craft_default`**:一次同镜头、20 次生成的中文对照中,自然语速约 4.1 个可发声字/秒。
163
+ 短镜装入更多台词时先出现赶词,较长输入还出现未报错的截断;延长镜头改善了该组表现。
164
+ 样本不能确定通用截断阈值,其他声音、表演和模型需要另行校准。
164
165
 
165
- | 送入字数 ÷ 镜长 | 表现 |
166
- |---|---|
167
- | ≤ 约 4.1 字/秒 | 自然语速,完整 |
168
- | 约 4.1–9 字/秒 | **完整但明显赶**,最快到自然语速的 2.5 倍 |
169
- | > 约 9 字/秒 | **静默截断**:超出的部分根本不发声 |
166
+ 无录音时可用约 4.1 字/秒辅助估算实际可发声区间,并另计开口等待、停顿和顺序动作。
167
+ 这不是按整个镜长计算的保证容量;有音频时以实际发声区间为准,生成后回听是否完整。
170
168
 
171
- 两件事决定了为什么必须先做预算,而不是"生成出来再听":
172
-
173
- - **接口不会报错**。截断时任务照样返回成功、画面正常,只是台词后半段没有了
174
- (实测送 78 字只说了 46 字,送 108 字同样只说了 46 字)。文字审查看不出来,
175
- 秒段加总也仍然"正确"——**算术通过从来不是台词说得完的证据**。
176
- - **延长镜头确实管用**,这一条也实测过:37 字从 5 秒改到 10 秒,语速由 7.0 回到 4.3 字/秒;
177
- 50 字从 5 秒改到 13 秒,由 9.6 回到 4.2 字/秒,都恢复自然且完整。所以下面第 3 项不是敷衍的建议。
178
-
179
- 估算按 **容量 ≈ 4.1 × 镜长(秒)字**:5 秒镜约 20 字,10 秒镜约 40 字。
180
- 样本为同一镜 20 次生成(7/15/20/29/37/50/78/108 字,镜长 5/10/13 秒)。
181
-
182
- **这里的「字」是可发声字,不含标点。** 写作阶段 `duration_estimate.py` 报的
183
- `dialogue_characters` 是另一个口径(标点计入),拿它乘 4.1 会高估约两成;按秒核对容量时
184
- 以可发声字数为准。
169
+ 这里的字数不含标点。`duration_estimate.py` 的 `dialogue_characters` 包含标点,
170
+ 不能直接按这一语速换算发声时长。
185
171
 
186
172
  对白太长时选项:
187
173
 
@@ -45,7 +45,8 @@
45
45
  先写不绑定供应商的核心动作说明,再决定交付格式。它只回答:从哪个已接受的镜头起点
46
46
  出发,谁因什么触发做什么,摄影机和声音怎样服务本镜目的,最后落到哪个已接受的镜头
47
47
  终点。构图、景别、机位、焦段、光线、情绪标尺或位置式引用只有项目确实需要时才加入,
48
- 不为凑齐栏目重复参考帧已经承载的事实。
48
+ 不为凑齐栏目重复参考帧已经承载的事实。没有起始帧、只挂身份或地点参考图时,取景就是
49
+ 确实需要的一项,写法见 [target-model-profile.md](target-model-profile.md#参考条件方式)。
49
50
 
50
51
  ### 可选的自然语言写法
51
52
 
@@ -59,20 +60,20 @@
59
60
  ```
60
61
 
61
62
  拟声词与实景距离(房间尺度、两处地点的间隔这类空间事实)取自上游内容或已接受项目方案。
62
- 动作的幅度、角度与锚点秒数属于另一类:它们是本环节自己写的这一拍的组成部分,正常写——
63
- “肩线下沉约五厘米”“上身向左转约三十度”“起手不动约半秒”说明的是这个动作要做多大、
64
- 往哪个方向、停多久,是本次的动作决定,不需要上游先给数字。摄影机的角度与轴线侧属于镜头
63
+ 动作的方向、终点接触与锚点秒数属于另一类:它们是本环节自己写的这一拍的组成部分,正常写——
64
+ “指尖碰到杯沿后停住”“起手不动约半秒”说明的是这个动作往哪去、停在哪、停多久,是本次的动作
65
+ 决定,不需要上游先给数字;终点用接触点或地标而不用厘米、度数(见
66
+ [motion-recipe.md](motion-recipe.md) 3.6)。摄影机的角度与轴线侧属于镜头
65
67
  记录,按 `framing.angle` 已接受的值写。越权只发生在这些量替上游做决定的时候:改写已接受
66
68
  时长、改掉镜头已接受的机位角度或轴线侧、声称一个未被接受的空间尺寸、给参考帧里没有的
67
69
  地理定尺。
68
- 可比较的方向、接触、占画关系与相对阶段同样好用,与量级并列,按哪一种更能消除执行歧义来选。
69
70
 
70
71
  ### 多段交付格式(仅项目已有明确要求时)
71
72
 
72
73
  交付格式可以要求片段编号、明确时间、位置式参考或文字策略,但这些只是外层格式,不
73
74
  改变创作者确认的镜头边界,也不创造额外动作。每个片段只写执行所需的起点状态;明确
74
- 区间不得重叠冲突,且各段相加要正好用完已接受时长——多出来会被截断,少下来的余量会被
75
- 执行端用未经批准的动作填满。若项目使用位置式引用,映射保持稳定且不侵入逐字对白;
75
+ 区间不得重叠冲突,且各段相加要正好用完已接受时长(`VID-04`,两个方向的后果见
76
+ [motion-recipe.md](motion-recipe.md) 3.6)。若项目使用位置式引用,映射保持稳定且不侵入逐字对白;
76
77
  没有该要求就不生成这些槽位。分段与槽位各自要回答什么,见
77
78
  [delivery-profile.md](delivery-profile.md)。
78
79
 
@@ -244,13 +245,8 @@
244
245
  **`VID-22 · reviewed_invariant`**:交给执行端的那段文本里,只能出现要被拍出来的画面内容。
245
246
  任何描述“我们内部怎么做这件事”的流程词都不得进入。本条同样管关键帧的交付文本。
246
247
 
247
- 执行端把整段交付文本当作**画面描述**读取,它没有办法区分“这句是给人看的工艺备注”和
248
- “这句是要画的东西”,于是把文件名渲染成画面上的字符、把版本号读成画面里有两个版本的
249
- 同一个人。「把否定罗列里的名词当成应当出现的物件」这一条常被当作定论,但本套件的定向实测
250
- 没有复现:向 H3 送入含 `There is no red balloon anywhere in the room.` 的正文 3 次,没有一次
251
- 画出气球。下面的禁入清单按“交付文本只含交付内容”成立,不依赖这个未复现的机制。这类缺陷和动作超载不是同一种问题:
252
- 超载只是难以完成,工艺词进入交付文本会直接让画面长出没有人要过的东西,而且是最难在
253
- 文字审查中被发现的一类——它读起来“信息很全”。
248
+ 可复制正文只保留生成所需的画面、动作、声音和限制条件。
249
+ 内部流程备注留在正文外,避免与生成内容混淆;不假定出现某个词就一定被模型画出来。
254
250
 
255
251
  不得进入交付文本:
256
252
 
@@ -258,18 +254,10 @@
258
254
  2. 内部锁定标记、规则 ID、`hash`、字段路径与状态词(`accepted`、`stale`、`provisional`);
259
255
  3. 走位草图、示意图、分镜板格号的指代(“按草图第二格”“沿用上次走位”);
260
256
  4. 任务备注、重投说明、失败记录与待办(“这次重生成”“上次手部崩坏”“重点修手”);
261
- 5. 成段的否定罗列:把一长串“不要 X”堆在正文首尾。唯一允许的否定是项目确实没有可读
262
- 文字义务时的无文字要求(见第五节第 1 条)。
263
- 6. **把本文件的规则本身抄进去**。实测最常见的一种:
264
- `以竖屏当代写实动画化 SHOT-EP001-01,时长 2.5 秒。戏剧目的:冷开场。表演者:CHAR-JIANGCHEN。
265
- 只做常见的整体动作,不做精确拦截、不可见内部状态、否定式动作或三步以上双手编排。`
266
- ——镜头 ID、角色记录 ID、内部工艺词(“戏剧目的”“表演者”)与 `VID-21` 的禁令原文一次踩齐。
267
- 它读起来“很规范”,但整段没有一个可以画出来的名词:谁、在哪、什么光、手里有什么,一个都没有。
268
- 判据只有一句:**把这段文本交给一个没读过规格的人,他能不能画出一张确定的画**。
269
-
270
- 这些内容留在 Markdown 卡片、规格字段和审查记录里;交付文本只承接它们的**结果**:否定
271
- 意图改写成正向状态,参考图约束改写成可见事实,重投经验改写成本次要保持的状态,而不是
272
- 失败史。
257
+ 5. 与本镜无关或重复的否定罗列。必要的排除条件可以保留,文字限制须服从本镜的文字政策。
258
+ 6. 把规则说明原样抄入正文,却没有描述主体、环境和具体动作。
259
+
260
+ 将参考范围与修订要求落实为本镜需要的状态和动作;失败记录、规则 ID 和维护说明留在正文外。
273
261
 
274
262
  ### 合成反例与改写
275
263
 
@@ -40,7 +40,7 @@ Finding 必须含文件与 `MOTION-...` / `SHOT-...`、必要短引文、影响
40
40
 
41
41
  - 每个 `MOTION-...` 唯一对应真实 `SHOT-...`,并继承相同时长;
42
42
  - 起点、主要变化、分段时序、声音、运镜和终点没有互相冲突;
43
- - 显式分段的并集既不超时,也不留下由模型自行填充的空白;重叠必须说明;
43
+ - 显式分段的并集既不超时,也不短于镜长(`VID-04`);重叠必须说明;
44
44
  - 固定和运动摄影机不在同一区间同时生效;
45
45
  - 终点逐项对齐分镜,下一镜仍读取分镜自己的起点;
46
46
  - 同一镜头最多进入一个交付分组;分组加散镜恰好覆盖点名范围一次;
@@ -21,9 +21,8 @@
21
21
  - 单镜直接按动作先后写。一次生成含多个镜头时才用 `镜头1:`、`镜头2:`;每个内部镜头都写
22
22
  “谁、在哪、做什么、镜头怎么动”。官方说明 2.0 响应镜头序号、不响应时间戳;秒数可作为内部预算,
23
23
  正文用动作顺序与相对停顿表达,不把逐秒时间码当作执行保证。
24
- **实测后果**:8 秒装两镜、按序号写,三次切点落在 5.21/5.38/5.54 秒,稳定偏后而不是均分。
25
- 也就是说 2.0 能给你两个镜头,但给不了你切在第几秒。**成员边界必须等于已接受时长时
26
- (`VID-13`),不要把容器交给 2.0**——改用会响应时间戳的方言,或一镜一生成。
24
+ 三次小样本的切点没有按两镜均分。需要精确成员边界时,评估独立生成再剪或其他方言,
25
+ 并核对实际输出;容器时长算术正确不代表切点准确。
27
26
  - 每个可辨对白事件都必须写成 `{角色用中文说:“逐字台词”}`,不能只留下普通引号或把说话要求散落
28
27
  在括号外;对白全文只用一种口语语言,专名除外,不在台词前增加外语暖场。
29
28
  - 每个音效事件写 `<声音>`,音乐写 `(音乐)`。字幕只有创作者明确开启时才用 `【字幕】`;默认禁字幕时正文
@@ -19,16 +19,40 @@
19
19
  ## 生成与参考
20
20
 
21
21
  - 短单镜按“主体 + 动作 + 场景 + 光色 + 运镜 + 风格 + 约束”写。
22
- - **单镜正文里用散文写的秒数不构成时间控制。** 「约第一秒八把眼镜戴回、约第三秒半开口」
23
- 这样的写法只对人有效:实测一条 9 秒单镜,动作顺序与终点都照做了,中途那个动作却被推到接近结尾,
24
- 说话时它还没发生。需要模型按秒排布时用下面的时间戳语法;散文秒数留给分镜与剪辑读,
25
- 它记录的是意图,不是给模型的指令。
26
- - 多镜或长叙事按 `镜头 1 [0:00–0:03]:` 顺序写;每段时间不重叠、不留无意空档,最后一个终点
27
- 等于总时长。官方时间戳以整数秒为单位;时间段塞入过多内容仍可能造成过度剪切或剧情遗漏。
28
- 实测切点精度约 ±0.4 秒(要求第 4 秒切,三次落在 3.71/4.29/4.46 秒),比 H3 松、比 2.0 可控。
29
- 时间戳服务于 2.5 的长叙事控制,不能反过来改写上游镜头状态链,也不是音节级同步保证。
22
+ - 单镜内部的动作时机先写清先后与触发;散文秒数不保证精确落点。
23
+ - 多镜或长叙事按 `镜头 1 [0:00–0:03]:` 写时间段,不重叠、不留无意空档,最后终点等于总时长。
24
+ 时间戳仍有生成偏差,不能作为音节同步或精确剪辑点的保证。
25
+
30
26
  - 每次使用素材时重复绑定 `人物 @图片1`、`@视频1 的表演节奏` 等具体职责。普通参考任务说明保留和
31
27
  借用什么,不让一个素材顺手控制身份、动作、构图等所有维度。
28
+ - 多镜容器使用一份参考清单,各镜的 `@图片N` 重新映射到这份清单,不能照抄独立生成时的编号。
29
+ - 多镜容器不自动保证跨镜一致性。一组对照没有改善,但容器的起始帧锚点也更少,不能归因于
30
+ 一次生成本身。按当前参考输入检查结果,不把该次观察变成禁用规则。
31
+ - 多镜容器包含切口;一镜到底是连续画面。按叙事目的选择,并保留生成后剪辑的余地。
32
+
33
+ ### 两端都锚:`用途:起始帧` 与 `用途:结束帧`
34
+
35
+ 接口提供 `first_frame` 与 `last_frame` 两个位置,各自只收一张。
36
+ 终点状态重要时可增加尾帧约束,仍需检查生成后的中间动作与节奏。
37
+
38
+ 按分镜已接受的终点制作尾帧并绑定 `用途:结束帧`;套件内生产入口见
39
+ `$short-drama-storyboard` 的「首尾成对」。未提供尾帧时,在正文中说明终点。
40
+
41
+ 两个帧位仍然各占一个图片序号,所以 `@图片N` 的编号按素材出现顺序连续往下数,不跳过它们。
42
+
43
+ 首尾帧与其他参考能否混用,按目标接口核对并验证。H3 的互斥规则不能直接套到 2.5,
44
+ 2.5 的素材角色共用一个 `content` 数组也不能证明任意组合都被接受。
45
+
46
+ ### 音色参考
47
+
48
+ 目标接口支持 `reference_audio` 时,可用已接受的角色参考音频辅助约束声音。
49
+ 参考可以来自预置音色合成或已授权录音,选型由视觉设定记录,生成后回听确认。
50
+
51
+ 当前 creator-first 的 `输入参考图` 只接受图片,封闭用途表也没有「音色」。
52
+ 不要在该字段塞入音频或写 `用途:音色`;这会被校验器拒绝。
53
+ 内置 adapter 可处理音频 role,但从五文档准备带音频的 job 尚无完整绑定路径。
54
+ 需要该能力时使用已支持音频绑定的外部执行流程,并记录角色、音频来源和实际 role;
55
+ 不能仅凭正文提到音频就声称已经绑定。
32
56
 
33
57
  ## 编辑与延长不是普通参考
34
58
 
@@ -51,7 +75,8 @@
51
75
  | `生成方式` | 这一镜送不送图 | `文生视频` / `图生视频` | 由「输入参考图」是否为空机械推出,`creator_markdown_check.py` 会核对 |
52
76
  | `任务类型` | 这一次是参考、编辑还是延长 | `reference` / `edit` / `extend` | 创作决定,本套件不推断 |
53
77
 
54
- 三种任务类型都是图生视频(都送素材),所以只看 `生成方式` 分不出它们;而 `edit` 与 `extend`
78
+ `edit` 与 `extend` 使用视频素材,不一定有图片;不能把“送素材”一律写成“图生视频”。
79
+ 现有五文档的图片字段不足以表达纯视频输入,准备 job 时需核对实际绑定。`edit` 与 `extend`
55
80
  在 API 上还各自要求 `ratio: adaptive`(`edit` 另要求 `duration: -1`),送错会被 2.5 判为任务
56
81
  类型不匹配。目标模型不是 2.5 时不写这一行——其余方言没有这个概念。
57
82
 
@@ -38,10 +38,11 @@
38
38
  | VID-19 | reviewed_invariant | When the creator profile declares required literal tokens for a delivery route, that route's delivery text preserves them byte-for-byte and outside the verbatim-dialogue fence. Paraphrase, translation, reordering, or omission is treated as a defect because a literal-matching surface has no reason to reject the rewritten text—the failure is silent rather than reported. The suite asserts no specific surface's behaviour, and whether a given result took the route is returned adherence, provable only by a bound production observation. Tokens declare a route and never substitute for the start state, action, or endpoint. Absent a declared token list the suite invents none; until the profile exposes a machine-readable list at a pinned field path, the reviewer cites the profile against the delivery text rather than claiming mechanical enforcement. |
39
39
  | VID-20 | reviewed_invariant | Packing routes change delivery granularity only, leaving shot boundaries, shot purpose, and per-shot reviewability intact. A single long-form generation carrying several accepted shots *is* a multi-shot container and is billed under VID-13 and VID-15; it introduces no separate accounting and no exemption from the contiguity, binding-chain, and scene-boundary constraints. A continuation route instead starts from a previously generated result, which is observation evidence and not an accepted artifact: the accepted shot start boundary stays the sole authority, and any claim about the observed state binds a production observation record or remains `unverified`. |
40
40
  | VID-21 | craft_default | When the project's accepted production profile has generated imagery carry the frame, actions are written as high-frequency, whole-body or single-limb movements common in everyday footage; precise interception, invisible internal states, negative actions, and three-or-more-step two-handed choreography are rewritten into equivalent common-action combinations, with the dramatic information carried by combination and timing. The rule is inactive for live action or an undeclared profile, and a rewrite may never change accepted shot boundaries, terminal states, or screenplay fact. |
41
- | VID-22 | reviewed_invariant | Copyable text carries only what will be filmed. IDs, workflow status, hashes, file paths and craft notes stay outside the prompt; negative action intent is rewritten as a visible positive state. Unless explicitly authored, the copyable prompt directly prohibits non-diegetic subtitles, captions and dialogue-text overlays at every moment rather than naming an abstract empty layer; this never erases an exact-readable in-scene text obligation, which stays a closed allow-list of exact glyph, language, carrier and placement. A prompt that only recites constraints renders as nothing. |
42
- | VID-23 | reviewed_invariant | When the target model is declared to generate audio in the same pass, the copyable body treats all allowed dialogue, VO, OS, non-verbal vocalization, SFX, ambience and silence as a closed event set. Each spoken event keeps its source, speaker, spoken language and verbatim text boundary; gaps return to declared ambience or silence instead of leaving an undefined vocal channel for the execution end to fill. |
41
+ | VID-22 | reviewed_invariant | Copyable text describes the intended image and action. IDs, workflow status, hashes and file paths stay outside it. Prefer observable states where they clarify execution; necessary negative constraints are allowed. Unless explicitly authored, prohibit non-diegetic subtitles, captions and dialogue overlays while preserving approved in-scene text and its exact content, carrier and placement. |
42
+ | VID-23 | reviewed_invariant | For models generating audio with video, specify the intended dialogue, VO, OS, vocalizations, effects, ambience and silence. Keep source, speaker, language and verbatim dialogue boundaries. Summaries must match the actual sound layers; follow model-specific music syntax without assuming missing layers will always be generated. |
43
43
  | VID-24 | structural_invariant | An image-to-video shot carries the storyboard's `REF-...` and `PLAN-...` slots unchanged, each with its 用途, so the motion document itself answers which start frame and which identity, geography, and prop pictures this shot sends — and, for `PLAN-...`, in which order the creator attaches them. The reference mode — first frame, first and last frame, or multi-slot reference — is read from that 用途 combination and translated by the matched model dialect; where a model makes frame and reference conditioning mutually exclusive, the start frame joins the reference group rather than splitting the request. |
44
44
  | VID-25 | structural_invariant | Quoted Chinese in a copyable body is delivered, not authored. Every run of four or more Han characters inside a `<d>` tag or quotation marks resolves, ignoring punctuation and spacing, to text that already exists in `剧本.md`, `视觉设定.md` or `分镜.md`. A line the shot wishes the character had said belongs upstream in the screenplay, not in the prompt. Runs of three characters or fewer are in-frame labels and interjections far more often than lines, so they stay with review rather than the mechanical check. |
45
+ | VID-26 | craft_default | Absent a director's choice, performance intensity follows form and genre. At motion-comic and wish-fulfilment peaks, key poses and expressions go outward—an expression change readable at a glance, whole-arm gestures, emotion carried by the upper body and the whole face—still written as common whole-body actions, never with the plot resting on a micro-expression. AI live action keeps a subtler realism but still gives each peak one readable performance beat. An inferred inner state is not deleted but translated into a visible expression or movement. |
45
46
 
46
47
  ### `CON`
47
48
 
@@ -41,7 +41,7 @@
41
41
  |---|---|---|
42
42
  | 模型版本 | 项目使用的版本化模型档案键;账号侧 Endpoint / model ID 留在生产配置 | 只路由到该版本的方言;不因名称相近套用另一版本 |
43
43
  | 提示词方言 | 通用自然语言 / 目标原生结构及版本 | 命中已有方言时按其字段、素材标记和声音语法写;语言标签不能代替方言 |
44
- | 单次原生时长 | 一次生成能覆盖的最短与最长秒数 | 分镜规划时就让每个投产镜头落在区间内;短动作在合法镜长内到达终点后 hold,长动作按闭合状态拆镜 |
44
+ | 单次原生时长 | 一次生成能覆盖的最短与最长秒数 | 分镜规划时就让每次生成落在区间内:默认一镜一生成,短动作在合法镜长内到达终点后 hold;创作者在[交付形态](delivery-profile.md)里声明多镜容器、且命中的方言支持时,短于下限的镜头可与同场相邻镜头装进一次生成,按方言写(例如 [H3](minimax-h3.md#多镜容器每切一张关键帧) 要求每切都有已接受关键帧)。长动作按闭合状态拆镜 |
45
45
  | 参考条件方式 | 无 / 首帧 / 首尾帧 / 多槽参考(及槽位数上限) | 见下节 |
46
46
  | 声音是否同轨生成 | `same_pass` 或 `separate` | 见下节 |
47
47
  | 画幅与分辨率 | 执行端实际接受的画幅与分辨率集合 | 只写项目已接受的那一个;不在正文里罗列备选 |
@@ -90,6 +90,13 @@ Brief、剧本或声音方向若已经点名排除外语前导、语气词、额
90
90
  无论哪一种,《视觉设定.md》连续性锁的锁面都留在正文里:参考帧只约束它自己画到的部分,
91
91
  跨镜不变的颜色、材质与形制仍然要逐镜带走。
92
92
 
93
+ **`craft_default`**:只挂身份或地点参考图、没有起始帧时,正文写具体取景:画面下沿切在哪
94
+ (腰、胸口、膝),主体占画多高,头顶落在画面哪一段,机位高度与离主体多远。只写景别名称不够,
95
+ 取景会被地点图拉宽。一组 H3 小样本里,只写「Medium shot」加地点图的 8 次出了远景 3、中远景 3、
96
+ 中景 2;换成上述取景字段的 8 次出了中景 7、中远景 1、没有远景。Wan 3.0 一组只写「双人中景」的 6 次
97
+ 也都出成全身远景(未做无地点图或取景字段的对照)。在参考说明里写「不继承它的构图」本身挡不住这种漂移。有起始帧时构图由起始帧
98
+ 承担,不需要这一步。
99
+
93
100
  参考条件方式由本镜各槽位的 `用途` 读出,不由“想不想用多模态”决定:只有一张 `起始帧` 是首帧,
94
101
  `起始帧` 加 `结束帧` 是首尾帧,`起始帧` 与身份/地理/道具图同时存在或只有这些图时是多槽参考。
95
102
  不少执行端把首/尾帧输入与多槽参考输入设为互斥,这时整组统一走多槽参考,起始帧也按参考素材送入——