@oh-story/dsh 0.1.8 → 0.1.10

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 (360) hide show
  1. package/README.md +14 -14
  2. package/lib/client.js +237 -84
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +183 -77
  5. package/lib/drama/skills/short-drama/SKILL.md +5 -1
  6. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +140 -9
  7. package/lib/drama/skills/short-drama/scripts/project_tool.py +11 -0
  8. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +28 -0
  9. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +8 -2
  10. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +28 -0
  11. package/lib/drama/skills/short-drama-edit/SKILL.md +146 -0
  12. package/lib/drama/skills/short-drama-edit/agents/openai.yaml +4 -0
  13. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +60 -0
  14. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +15 -0
  15. package/lib/drama/skills/short-drama-edit/assets/remotion/remotion.config.ts +6 -0
  16. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +26 -0
  17. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +88 -0
  18. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +46 -0
  19. package/lib/drama/skills/short-drama-edit/assets/remotion/src/index.ts +4 -0
  20. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +32 -0
  21. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +13 -0
  22. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +43 -0
  23. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +38 -0
  24. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +29 -0
  25. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +54 -0
  26. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +60 -0
  27. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +51 -0
  28. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1156 -0
  29. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +520 -0
  30. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +2 -0
  31. package/lib/drama/skills/short-drama-image-prompts/assets/image-prompts.md +5 -0
  32. package/lib/drama/skills/short-drama-image-prompts/assets/lookdev-prompts.md +3 -0
  33. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +11 -0
  34. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +2 -2
  35. package/lib/drama/skills/short-drama-novel-analyze/references/chapter-extraction.md +4 -1
  36. package/lib/drama/skills/short-drama-produce/SKILL.md +29 -4
  37. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +22 -0
  38. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +13 -12
  39. package/lib/drama/skills/short-drama-produce/references/providers/minimax-speech.md +41 -0
  40. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +7 -0
  41. package/lib/drama/skills/short-drama-produce/scripts/fixture_adapter.py +18 -1
  42. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +181 -2
  43. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +199 -3
  44. package/lib/drama/skills/short-drama-review/SKILL.md +2 -0
  45. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +7 -0
  46. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +10 -0
  47. package/lib/drama/skills/short-drama-storyboard/SKILL.md +12 -1
  48. package/lib/drama/skills/short-drama-storyboard/assets/keyframe-prompts.md +4 -0
  49. package/lib/drama/skills/short-drama-storyboard/references/lighting-craft.md +39 -0
  50. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +78 -2
  51. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +12 -5
  53. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +17 -0
  54. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +76 -7
  55. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +5 -2
  56. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +21 -0
  57. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +6 -17
  58. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +12 -3
  59. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +61 -5
  60. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +3 -3
  61. package/lib/drama/skills/short-drama-write/SKILL.md +11 -2
  62. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +6 -0
  63. package/lib/drama/skills/short-drama-write/references/stage-contract.md +1 -0
  64. package/lib/index.js +290 -90
  65. package/lib/index.js.map +4 -4
  66. package/lib/novel-to-game/README.md +299 -59
  67. package/lib/novel-to-game/README_ZH.md +299 -56
  68. package/lib/novel-to-game/VERSION +1 -1
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +3 -1
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +11 -3
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +397 -8
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +0 -31
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +71 -73
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +78 -89
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +37 -14
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +5 -5
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -1
  78. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +11 -16
  79. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +11 -11
  80. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +23 -0
  81. package/lib/novel-to-game/manifest.json +77 -87
  82. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +9 -35
  83. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +27 -106
  84. package/lib/novel-to-game/skills/game-build/SKILL.md +17 -35
  85. package/lib/novel-to-game/skills/game-build/references/blender-asset-workflow.md +24 -0
  86. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +45 -82
  87. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +14 -45
  88. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +30 -65
  89. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +13 -27
  90. package/lib/novel-to-game/skills/game-concept/SKILL.md +16 -34
  91. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +28 -75
  92. package/lib/novel-to-game/skills/game-qa/SKILL.md +9 -20
  93. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +10 -6
  94. package/lib/novel-to-game/skills/game-world-design/SKILL.md +19 -32
  95. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +23 -72
  96. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +14 -48
  97. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +36 -103
  98. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +9 -18
  99. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +4 -4
  100. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +10 -27
  101. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +5 -6
  102. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +6 -11
  103. package/lib/oh-story/manifest.json +419 -254
  104. package/lib/oh-story/roles/chapter-extractor.md +177 -237
  105. package/lib/oh-story/roles/character-designer.md +1 -1
  106. package/lib/oh-story/roles/consistency-checker.md +4 -4
  107. package/lib/oh-story/roles/narrative-writer.md +56 -243
  108. package/lib/oh-story/roles/story-architect.md +6 -6
  109. package/lib/oh-story/roles/story-explorer.md +11 -11
  110. package/lib/oh-story/skills/story/SKILL.md +13 -7
  111. package/lib/oh-story/skills/story/VERSION +1 -1
  112. package/lib/oh-story/skills/story/references/author-memory.md +61 -29
  113. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +934 -170
  114. package/lib/oh-story/skills/story-cover/SKILL.md +10 -1
  115. package/lib/oh-story/skills/story-deslop/SKILL.md +54 -229
  116. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +29 -56
  117. package/lib/oh-story/skills/story-deslop/references/author-memory.md +61 -29
  118. package/lib/oh-story/skills/story-deslop/references/banned-words.md +3 -1
  119. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +154 -0
  120. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +27 -0
  121. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +934 -170
  122. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +6 -1
  123. package/lib/oh-story/skills/story-deslop/scripts/check-degeneration.js +39 -20
  124. package/lib/oh-story/skills/story-deslop/scripts/normalize-punctuation.js +10 -5
  125. package/lib/oh-story/skills/story-deslop/scripts/style-whitelist.js +39 -0
  126. package/lib/oh-story/skills/story-import/SKILL.md +78 -82
  127. package/lib/oh-story/skills/story-import/references/character-state-reverse.md +1 -1
  128. package/lib/oh-story/skills/story-import/references/format-and-structure.md +2 -2
  129. package/lib/oh-story/skills/story-import/references/state-tracking.md +4 -69
  130. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +10 -8
  131. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +31 -0
  132. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +9 -34
  133. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +197 -15
  134. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +210 -2
  135. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +3 -0
  136. package/lib/oh-story/skills/story-long-analyze/SKILL.md +91 -258
  137. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +245 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +2 -2
  139. package/lib/oh-story/skills/story-long-analyze/references/inspiration-library.md +105 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +113 -105
  141. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +169 -125
  142. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +172 -64
  143. package/lib/oh-story/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  144. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +42 -132
  145. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +5 -5
  146. package/lib/oh-story/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  147. package/lib/oh-story/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  148. package/lib/oh-story/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  149. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +1106 -0
  150. package/lib/oh-story/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  151. package/lib/oh-story/skills/story-long-scan/SKILL.md +4 -1
  152. package/lib/oh-story/skills/story-long-write/SKILL.md +52 -216
  153. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +29 -56
  154. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +72 -12
  155. package/lib/oh-story/skills/story-long-write/references/author-memory.md +61 -29
  156. package/lib/oh-story/skills/story-long-write/references/banned-words.md +3 -1
  157. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +20 -0
  158. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +26 -0
  159. package/lib/oh-story/skills/story-long-write/references/dialogue-mastery.md +10 -4
  160. package/lib/oh-story/skills/story-long-write/references/emotional-methods.md +2 -2
  161. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +6 -15
  162. package/lib/oh-story/skills/story-long-write/references/long-format.md +2 -0
  163. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +2 -0
  164. package/lib/oh-story/skills/story-long-write/references/project-files.md +110 -0
  165. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +12 -4
  166. package/lib/oh-story/skills/story-long-write/references/reference-index.md +86 -0
  167. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -1
  168. package/lib/oh-story/skills/story-long-write/references/style-craft.md +9 -29
  169. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  170. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +27 -0
  171. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +31 -0
  172. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +9 -34
  173. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +88 -118
  174. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +55 -119
  175. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +15 -11
  176. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +73 -54
  177. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +22 -0
  178. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +63 -4
  179. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +934 -170
  180. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +531 -0
  181. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +6 -1
  182. package/lib/oh-story/skills/story-long-write/scripts/check-degeneration.js +39 -20
  183. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +197 -15
  184. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +90 -23
  185. package/lib/oh-story/skills/story-long-write/scripts/normalize-punctuation.js +10 -5
  186. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +285 -0
  187. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +58 -0
  188. package/lib/oh-story/skills/story-long-write/scripts/style-whitelist.js +39 -0
  189. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +210 -2
  190. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +3 -0
  191. package/lib/oh-story/skills/story-review/SKILL.md +80 -87
  192. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +29 -56
  193. package/lib/oh-story/skills/story-review/references/author-memory.md +61 -29
  194. package/lib/oh-story/skills/story-review/references/banned-words.md +3 -1
  195. package/lib/oh-story/skills/story-review/references/dialogue-mastery.md +10 -4
  196. package/lib/oh-story/skills/story-review/references/review-quality.md +6 -12
  197. package/lib/oh-story/skills/story-review/references/style-resolution.md +27 -0
  198. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +31 -0
  199. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +9 -34
  200. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +934 -170
  201. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +6 -1
  202. package/lib/oh-story/skills/story-review/scripts/check-degeneration.js +39 -20
  203. package/lib/oh-story/skills/story-review/scripts/normalize-punctuation.js +10 -5
  204. package/lib/oh-story/skills/story-review/scripts/style-whitelist.js +39 -0
  205. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +210 -2
  206. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +3 -0
  207. package/lib/oh-story/skills/story-setup/SKILL.md +58 -43
  208. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +29 -56
  209. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +3 -1
  210. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +154 -0
  211. package/lib/oh-story/skills/story-setup/references/agent-references/dialogue-mastery.md +10 -4
  212. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +2 -2
  213. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +2 -2
  214. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +1 -1
  215. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +1 -1
  216. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -1
  217. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  218. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +27 -0
  219. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +63 -4
  220. package/lib/oh-story/skills/story-setup/references/diagnostics.md +38 -0
  221. package/lib/oh-story/skills/story-short-analyze/SKILL.md +22 -3
  222. package/lib/oh-story/skills/story-short-analyze/references/analysis-writing-techniques.md +1 -1
  223. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +5 -1
  224. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +2 -2
  225. package/lib/oh-story/skills/story-short-scan/SKILL.md +5 -1
  226. package/lib/oh-story/skills/story-short-write/SKILL.md +15 -324
  227. package/lib/oh-story/skills/story-short-write/references/author-memory.md +61 -29
  228. package/lib/oh-story/skills/story-short-write/references/banned-words.md +3 -1
  229. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +60 -0
  230. package/lib/oh-story/skills/story-short-write/references/dialogue-mastery.md +10 -4
  231. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +2 -2
  232. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +1 -1
  233. 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
  234. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +3 -3
  235. 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
  236. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +5 -5
  237. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +4 -4
  238. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +5 -5
  239. 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
  240. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +1 -1
  241. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +1 -1
  242. package/lib/oh-story/skills/story-short-write/references/reference-index.md +55 -0
  243. package/lib/oh-story/skills/story-short-write/references/short-craft.md +12 -14
  244. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +10 -10
  245. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -1
  246. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -2
  247. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +27 -0
  248. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +78 -0
  249. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +126 -0
  250. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +32 -0
  251. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +5 -5
  252. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +934 -170
  253. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +6 -1
  254. package/lib/oh-story/skills/story-short-write/scripts/check-degeneration.js +39 -20
  255. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +34 -5
  256. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +90 -23
  257. package/lib/oh-story/skills/story-short-write/scripts/normalize-punctuation.js +10 -5
  258. package/lib/oh-story/skills/story-short-write/scripts/style-whitelist.js +39 -0
  259. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  260. package/lib/types/client/file-activity.d.ts +19 -1
  261. package/lib/types/client/file-activity.d.ts.map +1 -1
  262. package/lib/types/client/index.d.ts.map +1 -1
  263. package/lib/types/client/production-prompts.d.ts +7 -0
  264. package/lib/types/client/production-prompts.d.ts.map +1 -1
  265. package/lib/types/client/production-runtime.d.ts +33 -0
  266. package/lib/types/client/production-runtime.d.ts.map +1 -1
  267. package/lib/types/drama-adapters.d.ts +5 -3
  268. package/lib/types/drama-adapters.d.ts.map +1 -1
  269. package/lib/types/native-hooks.d.ts +52 -0
  270. package/lib/types/native-hooks.d.ts.map +1 -1
  271. package/lib/types/role-identity.d.ts +17 -0
  272. package/lib/types/role-identity.d.ts.map +1 -0
  273. package/lib/types/role-tool.d.ts.map +1 -1
  274. package/lib/types/skill-provider.d.ts.map +1 -1
  275. package/lib/video-recap/CHANGELOG.md +31 -1
  276. package/lib/video-recap/manifest.json +162 -162
  277. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +4 -9
  278. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +47 -60
  279. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +77 -115
  280. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +41 -40
  281. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +22 -32
  282. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +102 -192
  283. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +14 -35
  284. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +14 -12
  285. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +8 -9
  286. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +3 -14
  287. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +23 -12
  288. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +1 -4
  289. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +24 -25
  290. package/lib/video-recap/skills/video-assemble/scripts/lib.py +31 -85
  291. package/lib/video-recap/skills/video-assemble/scripts/media.py +100 -144
  292. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +101 -195
  293. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +10 -21
  294. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +90 -169
  295. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +69 -122
  296. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +10 -17
  297. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +33 -48
  298. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +14 -20
  299. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +135 -213
  300. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +49 -57
  301. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +38 -74
  302. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +46 -95
  303. package/lib/video-recap/skills/video-cut/scripts/lib.py +23 -25
  304. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +70 -173
  305. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +28 -53
  306. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +162 -322
  307. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +6 -7
  308. package/lib/video-recap/skills/video-recap/scripts/doctor.py +104 -124
  309. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +255 -412
  310. package/lib/video-recap/skills/video-recap/scripts/lib.py +30 -52
  311. package/lib/video-recap/skills/video-recap/scripts/materials.py +97 -120
  312. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +7 -12
  313. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +46 -97
  314. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +18 -36
  315. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +29 -47
  316. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +43 -76
  317. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +2 -1
  318. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +2 -1
  319. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +2 -2
  320. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +129 -145
  321. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +27 -20
  322. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +20 -31
  323. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +31 -106
  324. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +43 -113
  325. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +196 -377
  326. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +1 -1
  327. package/lib/video-recap/skills/video-script/scripts/agent_text.py +63 -172
  328. package/lib/video-recap/skills/video-script/scripts/brief_context.py +80 -135
  329. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +125 -167
  330. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +93 -208
  331. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +20 -46
  332. package/lib/video-recap/skills/video-script/scripts/lib.py +30 -26
  333. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +145 -140
  334. package/lib/video-recap/skills/video-script/scripts/review_response.py +12 -42
  335. package/lib/video-recap/skills/video-script/scripts/review_runner.py +0 -6
  336. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +39 -100
  337. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +33 -124
  338. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +1 -1
  339. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +63 -172
  340. package/lib/video-recap/skills/video-understanding/scripts/asr.py +1 -2
  341. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +80 -135
  342. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +125 -167
  343. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +93 -208
  344. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +1 -1
  345. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +20 -46
  346. package/lib/video-recap/skills/video-understanding/scripts/lib.py +31 -26
  347. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +145 -140
  348. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +39 -100
  349. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +33 -124
  350. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +1 -4
  351. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +7 -13
  352. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +12 -30
  353. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +98 -131
  354. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +17 -28
  355. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +151 -240
  356. package/package.json +45 -45
  357. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +0 -59
  358. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +0 -53
  359. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +0 -42
  360. package/lib/oh-story/skills/story-long-write/references/state-tracking.md +0 -108
@@ -29,10 +29,24 @@ overall_soundscape: ...
29
29
  non_diegetic_music: ...
30
30
  ```
31
31
 
32
- - 画面段按 `[Shot 1]`、`[Shot 2]` 写动作和镜头;单镜也保留 `[Shot 1]`。
33
- - 声音段闭合所有对白、环境声与音效。无配乐时写 `non_diegetic_music: N/A`,不要留空让模型补乐。
32
+ - `integrated_multimodal_description` 按 `[Shot 1]`、`[Shot 2]` 写画面、动作、说话人、逐字对白和同步声音;
33
+ 单镜也保留 `[Shot 1]`。第一镜不加切镜时间戳,后续切镜用 `[Shot 2] At 00:03.500, ...`,时间递增且落在本次生成时长内。
34
+ 小样本观察到切点接近要求,但仍有偏差;交付要求精确时应检查实际切点并在剪辑中调整。
35
+ - `overall_soundscape` 汇总环境声、物理音效和非语言人声,不重复对白;对白事件留在上面的主时间线。
36
+ 无非画内配乐时写 `non_diegetic_music: N/A`,不要留空让模型补乐——这一条有实测支撑,见
37
+ [无对白镜](#无对白镜)。
34
38
  - 首帧模式从输入帧的可见姿态开始;首尾帧模式只能到达上游已接受终点,不发明过渡后的新状态。
35
39
 
40
+ ## 无对白镜
41
+
42
+ 在 `overall_soundscape` 写清全镜的环境声、音效或静默。
43
+ **`craft_default`**:优先描述需要的声轨;必要时可以补「无对白」,不因用了否定句判错。
44
+ 人物嘴部状态按实际表演写,不能把无对白一律改成全程闭嘴。
45
+
46
+ 无非画内配乐时保留 `non_diegetic_music: N/A`。小样本中省略这一层出现过额外配乐,
47
+ 显式写空可作为 H3 的默认写法,不保证所有生成都遵守。
48
+ 时间线总结只列本镜实际存在的声音层,不照抄包含对白的模板。
49
+
36
50
  ## 选哪一种模式
37
51
 
38
52
  模式由本镜「输入参考图」里各槽位的 `用途` 决定,不由“想不想用多模态”决定:
@@ -105,7 +119,11 @@ REF-STUDY-PLATE(顺序:3;用途:地理) -> <Picture 3>
105
119
 
106
120
  ### 每张图带什么、不带什么
107
121
 
108
- `用途` 决定这一张在正文里被要求保留什么,具体到哪几项由该槽位自己写下的 `控制` 范围决定:
122
+ `用途` 决定这一张在正文里被要求保留什么,具体到哪几项由该槽位自己写下的 `控制` 范围决定。
123
+
124
+ 需要保留构图时,在 `控制` 中点名构图、站位或机位高度。
125
+ `不得控制` 记录不应照搬的内容,生成后仍需检查实际参考影响,不能把文字声明当成模型保证。
126
+
109
127
  `起始帧` 只锚定开场构图与姿态,`身份` 锚定这个人跨镜不变的长相与体态(角色板同时固定本集造型时,
110
128
  `控制` 里会写明),
111
129
  `地理` 只锚定空间关系,`造型状态` 只锚定服装与损污。把这条差异写进 `retention_analysis`,
@@ -113,6 +131,7 @@ REF-STUDY-PLATE(顺序:3;用途:地理) -> <Picture 3>
113
131
 
114
132
  角色始终使用同一个说话人 ID;中文对白只出现在 `<d>[Chinese] ...</d>` 内。禁字幕写进可见文字约束,
115
133
  与获准的画内文字分开。
134
+ Full-reference 的逐字对白与同步声音放在 `detailed_description` 的对应事件里,`overall_soundscape` 仍只汇总底声与音效。
116
135
  不要为了“多模态”把所有资产图都带上;每镜只绑定它真正可见且需要保持的起始帧、人物、地点或关键道具图。
117
136
 
118
137
  ### 一个完整例子
@@ -135,7 +154,7 @@ non_diegetic_music: N/A
135
154
  ```
136
155
 
137
156
  三张图各自只负责一件事:`<Picture 1>` 给构图,`<Picture 2>` 给身份,`<Picture 3>` 给地理。
138
- 把这条差异写进 `retention_analysis`,角色板就不会顺带决定构图,场景板也不会顺带决定长相。
157
+ 把这条差异写进 `retention_analysis`,生成后检查身份、构图与地理是否分别保留。
139
158
 
140
159
  ## 素材数量上限
141
160
 
@@ -164,7 +183,57 @@ full-reference:
164
183
 
165
184
  ## 时长
166
185
 
167
- MiniMax-H3 的整数时长是 4–15 秒,`MiniMax-H3-Max` 是 5–15 秒(不支持 4 秒)。短动作在至少 4 秒的镜头内完成并 hold 已接受终点;超过 15 秒的
168
- 镜头在分镜阶段按闭合状态拆开。本阶段不偷改镜头秒数。
186
+ **`structural_invariant`(执行端契约)**:MiniMax-H3 的 `duration` 必填,为 4–15 的任一整数秒,
187
+ 并非只有 5/10/15 三档。网页界面或 job 的时长设置要与分镜时长和正文终点一致;写在提示词里的秒数
188
+ 不能替代生成设置。短动作在合法镜长内完成并保持已接受终点;超过 15 秒的镜头回分镜按闭合状态拆开。
189
+ 本阶段不偷改镜头秒数。
190
+
191
+ `MiniMax-H3-Max` 是另一型号:5–15 秒、480P/768P,仅支持文生和首/尾帧,不支持 full-reference。
192
+ 不能把本页 H3 的参考音频路径或 4 秒下限套到 Max。
193
+
194
+ ### 对白容量与自然语速
195
+
196
+ **`craft_default`**:按 [对白预算](performance-action-timing.md#对白预算) 先核对完整发声需要多久,
197
+ 再给主时间线安排开口、停顿与落点。分镜镜长够长但开口太晚,一样会赶词。
198
+ H3 中文小样本可参考约 4.1 个可发声字/秒;用实际可发声区间估算,生成后核对台词完整性。
199
+ 样本出现过赶词与静默截断,不能据此确定通用截断阈值。
200
+ 口语语言、声线与语速描述放在 `<d>` 外;`<d>` 内只放语言标签和逐字台词,不放秒数或表演指令。
201
+ 稳定说话人用 `(S1)`、`(S2)`;full-reference 中说话人物同时写 `<Subject N> (Sx)`。
202
+
203
+ 无参考音频时,以自然语言交代说话方式、开口 cue、句间停顿和说完后的动作;文本估时区间只留在镜头说明中,
204
+ 不把每个词硬塞进小数秒槽。实际有音频对齐依据或已接受的精确时点时,才据此细化声音时序。
205
+ H3 官方接口未提供独立 `speech_rate` 参数,也没有公布「中文每秒固定几字」的可靠公式;
206
+ 提示词中的语速与时机是生成指导,不能当作秒级执行保证。仅追加“自然语速”无法补上缺失的发声时间。
207
+
208
+ 同一次生成内,已接受的对白跨切镜时可以用 `<scenetrans>` 并声明声音连续;它不会增加总时长,也不能
209
+ 保证两个独立 job 的音频无缝衔接。`<cutoff>` 表示视频结束时有意截断发声,只用于剧本已要求的截断,
210
+ 不用于处理装不下的完整台词。
211
+
212
+ ### 有配音或参考音频时
213
+
214
+ **`craft_default`**:已有同句同表演音频时,先测实际发声与停顿,再确定镜长。没有现成音频仍可按文本估计
215
+ 写提示词,不为完成本阶段自动调用 TTS 或生成服务。
216
+
217
+ - 只参照音色、情绪或说话方式:使用 `reference`;它会重新表演本镜台词,不能拿参考音频的文件长度
218
+ 当作新台词时长,也不携带参考音频里无关的原话。
219
+ - 已接受完整声音轨原样复用:`fully_copy` 表示整条最终音轨;只用对白层或片段并另加环境声时使用
220
+ `partially_copy`,写清源片段与目标时间的对应。复用用到的发声区间要完整容纳,不为适配镜长压缩语速。
221
+ - 参考音频走 full-reference,配合至少一张参考图或一段参考视频;每段音频 2–15 秒,最多三段、合计
222
+ 不超过 15 秒。图片改用 `reference_image`,不能与 `first_frame`/`last_frame` 混用。
223
+
224
+ `fully_copy` 等是官方提示词的复用意图,不是逐样本一致的验收证明。生成后核听逐字内容、语速、停顿、
225
+ 尾音完整性与口型;项目需要精确锁定已有音轨时,以后期保留该音轨并核对画面同步作为最终依据。
226
+
227
+ ### Context-IR 的作用
228
+
229
+ H3-Context-IR 把多模态输入增强成结构化提示词,本身不生成视频,且仍要求调用方先给出 4–15 秒的
230
+ `duration`。它不能代替对白预算。若执行端使用该服务,检查增强后的逐字台词、声音时间线与原时长一致,
231
+ 不因使用官方增强就跳过容量检查。
232
+
233
+ 官方依据(2026-09-07 核对):
169
234
 
170
- 依据:MiniMax-H3 官方 base/ref prompt writing guides 与 MiniMax v2 video generation API。
235
+ - [Base 提示词指南](https://github.com/MiniMax-AI/MiniMax-H3/blob/main/skills/h3-prompt-writing/references/base-en.txt):对白位置、说话人、语速描述、切镜时间戳与跨镜发声。
236
+ - [Full-reference 指南](https://github.com/MiniMax-AI/MiniMax-H3/blob/main/skills/h3-prompt-writing/references/ref-en.txt):六段结构、音频引用与复用语义。
237
+ - [视频生成 API](https://platform.minimax.io/docs/api-reference/video-generation-v2-create):必填时长、型号差异和输入模式互斥。
238
+ - [官方 CLI 的 H3 指南](https://github.com/MiniMax-AI/cli/blob/main/skill/h3-video/references/h3-video.md):音频配合视觉参考,声音对齐与生成后检查。
239
+ - [Context-IR API](https://platform.minimax.io/docs/api-reference/video-generation-v2-h3-context-ir):提示词增强和独立的时长输入。
@@ -130,7 +130,7 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
130
130
 
131
131
  先把起点中的持续关系翻译成动作自由度:用正向状态写清贯穿本镜的支撑、固定、接触或空间关系,
132
132
  再只安排允许的身体/物件通道。关系变化必须来自已接受动作并落到已接受终点;否则按 `VID-01`
133
- 保持只读。可复制正文只写持续状态和允许动作,不用 `no/not/without + 动作` 复述边界。
133
+ 保持只读。可复制正文写清持续状态和允许动作,避免重复约束;必要的排除条件可以保留。
134
134
  成稿后在正文内直接改掉残留的这类否定结构,不另建检查步骤或报告。
135
135
 
136
136
  **`craft_default`**:一条运动提示词优先只有一个主导的戏剧变化,必要反应、环境与摄影
@@ -172,7 +172,10 @@ reviewer 结合完整故事义务决定,不能让未承担内容随更短提
172
172
  1. 按发生顺序列出本镜全部对白、VO、OS、必要非语言发声和 SFX;
173
173
  2. 每条台词同时标说话人、声源性质、口语语言和逐字文本,发声从原文首字开始、到末字结束;
174
174
  3. 所列事件之外只保留已声明的 ambience 或静默;相邻两句之间若有停顿,也明确回到这一底声;
175
- 4. 声明时间线完整并结束声音段落,不再列出或否定集合外的语言、语气或声源。
175
+ 4. 用实际存在的声音层总结时间线,避免模板与本镜内容矛盾。
176
+
177
+ 无对白镜写清底声或静默及覆盖区间。必要的「无对白」声明可以保留,
178
+ 人物嘴部状态由本镜表演决定。非画内配乐的空形式按目标方言填写。
176
179
 
177
180
  确有叹气、吸气、笑声或重叠说话时,把它作为有来源的事件列入。声音不同轨时仍只写后期职责。
178
181
 
@@ -148,6 +148,27 @@
148
148
 
149
149
  评估:句长与语言、人物语速、情绪造成的停顿/吞吐、是否需要听见对方/环境 cue、口型要求、动作是否能与说话叠加、结尾是否有 reaction landing。固定每秒字数只能作为 production profile 的可覆盖估算,不能成为通用规则。
150
150
 
151
+ **`craft_default`**:先读取分镜「声音」的预算依据。有同句同表演录音时用实测发声区间;没有时按完整原文、
152
+ 语言和表演方式给出「文本估计」区间,以较慢一端检查容量,不假称朗读或 TTS 实测。对白可用窗口要扣除
153
+ 开口前等待、不能同时进行的动作、轮流说话的其他发声与末尾反应;句内停顿已经计入时不再重复扣除。
154
+ 并行动作可以共享时间,顺序事件必须累加。把依据简写在当前镜头说明里,不放进可复制正文当成模型指令。
155
+
156
+ 例如 accepted duration 为 7 秒,开场与收尾各占 0.5 秒,实际只剩 6 秒发声;若完整台词估计需要
157
+ 8–10 秒(含句内停顿),即使写成「0–7 秒」也不成立。请求分镜按至少 11 秒重新安排,或按语义拆镜,
158
+ 待上游修订后同步本镜时长、正文时序和生成设置。不要用更快语速、截断标记或静默删词让算术看起来成立。
159
+
160
+ ### H3 中文的估算参考
161
+
162
+ **`craft_default`**:一次同镜头、20 次生成的中文对照中,自然语速约 4.1 个可发声字/秒。
163
+ 短镜装入更多台词时先出现赶词,较长输入还出现未报错的截断;延长镜头改善了该组表现。
164
+ 样本不能确定通用截断阈值,其他声音、表演和模型需要另行校准。
165
+
166
+ 无录音时可用约 4.1 字/秒辅助估算实际可发声区间,并另计开口等待、停顿和顺序动作。
167
+ 这不是按整个镜长计算的保证容量;有音频时以实际发声区间为准,生成后回听是否完整。
168
+
169
+ 这里的字数不含标点。`duration_estimate.py` 的 `dialogue_characters` 包含标点,
170
+ 不能直接按这一语速换算发声时长。
171
+
151
172
  对白太长时选项:
152
173
 
153
174
  1. 简化非必要动作,让对白成为主事件;
@@ -244,11 +244,8 @@
244
244
  **`VID-22 · reviewed_invariant`**:交给执行端的那段文本里,只能出现要被拍出来的画面内容。
245
245
  任何描述“我们内部怎么做这件事”的流程词都不得进入。本条同样管关键帧的交付文本。
246
246
 
247
- 执行端把整段交付文本当作**画面描述**读取,它没有办法区分“这句是给人看的工艺备注”和
248
- “这句是要画的东西”,于是把文件名渲染成画面上的字符、把版本号读成画面里有两个版本的
249
- 同一个人、把否定罗列里的名词当成应当出现的物件。这类缺陷和动作超载不是同一种问题:
250
- 超载只是难以完成,工艺词进入交付文本会直接让画面长出没有人要过的东西,而且是最难在
251
- 文字审查中被发现的一类——它读起来“信息很全”。
247
+ 可复制正文只保留生成所需的画面、动作、声音和限制条件。
248
+ 内部流程备注留在正文外,避免与生成内容混淆;不假定出现某个词就一定被模型画出来。
252
249
 
253
250
  不得进入交付文本:
254
251
 
@@ -256,18 +253,10 @@
256
253
  2. 内部锁定标记、规则 ID、`hash`、字段路径与状态词(`accepted`、`stale`、`provisional`);
257
254
  3. 走位草图、示意图、分镜板格号的指代(“按草图第二格”“沿用上次走位”);
258
255
  4. 任务备注、重投说明、失败记录与待办(“这次重生成”“上次手部崩坏”“重点修手”);
259
- 5. 成段的否定罗列:把一长串“不要 X”堆在正文首尾。唯一允许的否定是项目确实没有可读
260
- 文字义务时的无文字要求(见第五节第 1 条)。
261
- 6. **把本文件的规则本身抄进去**。实测最常见的一种:
262
- `以竖屏当代写实动画化 SHOT-EP001-01,时长 2.5 秒。戏剧目的:冷开场。表演者:CHAR-JIANGCHEN。
263
- 只做常见的整体动作,不做精确拦截、不可见内部状态、否定式动作或三步以上双手编排。`
264
- ——镜头 ID、角色记录 ID、内部工艺词(“戏剧目的”“表演者”)与 `VID-21` 的禁令原文一次踩齐。
265
- 它读起来“很规范”,但整段没有一个可以画出来的名词:谁、在哪、什么光、手里有什么,一个都没有。
266
- 判据只有一句:**把这段文本交给一个没读过规格的人,他能不能画出一张确定的画**。
267
-
268
- 这些内容留在 Markdown 卡片、规格字段和审查记录里;交付文本只承接它们的**结果**:否定
269
- 意图改写成正向状态,参考图约束改写成可见事实,重投经验改写成本次要保持的状态,而不是
270
- 失败史。
256
+ 5. 与本镜无关或重复的否定罗列。必要的排除条件可以保留,文字限制须服从本镜的文字政策。
257
+ 6. 把规则说明原样抄入正文,却没有描述主体、环境和具体动作。
258
+
259
+ 将参考范围与修订要求落实为本镜需要的状态和动作;失败记录、规则 ID 和维护说明留在正文外。
271
260
 
272
261
  ### 合成反例与改写
273
262
 
@@ -19,7 +19,10 @@
19
19
 
20
20
  - 用中文写“主体 + 动作细节 + 场景 + 光色 + 运镜 + 视觉形态 + 约束”。具体可见事实优先,质量词只保留必要项。
21
21
  - 单镜直接按动作先后写。一次生成含多个镜头时才用 `镜头1:`、`镜头2:`;每个内部镜头都写
22
- “谁、在哪、做什么、镜头怎么动”,不强塞逐秒时间码。
22
+ “谁、在哪、做什么、镜头怎么动”。官方说明 2.0 响应镜头序号、不响应时间戳;秒数可作为内部预算,
23
+ 正文用动作顺序与相对停顿表达,不把逐秒时间码当作执行保证。
24
+ 三次小样本的切点没有按两镜均分。需要精确成员边界时,评估独立生成再剪或其他方言,
25
+ 并核对实际输出;容器时长算术正确不代表切点准确。
23
26
  - 每个可辨对白事件都必须写成 `{角色用中文说:“逐字台词”}`,不能只留下普通引号或把说话要求散落
24
27
  在括号外;对白全文只用一种口语语言,专名除外,不在台词前增加外语暖场。
25
28
  - 每个音效事件写 `<声音>`,音乐写 `(音乐)`。字幕只有创作者明确开启时才用 `【字幕】`;默认禁字幕时正文
@@ -34,8 +37,14 @@
34
37
 
35
38
  ## 时长与边界
36
39
 
37
- Seedance 2.0 原生整数时长是 4–15 秒。镜头进入本阶段前就应落在区间内。短于 4 秒的叙事动作放进
40
+ Seedance 2.0 手动指定的整数时长是 4–15 秒。镜头进入本阶段前就应落在区间内。短于 4 秒的叙事动作放进
38
41
  至少 4 秒的镜头,并让终点成为可见 hold;长于 15 秒的动作在分镜阶段按状态闭合点拆开,不能在这里
39
42
  截断或跨镜省略交接。
40
43
 
41
- 依据:Seedance 2.0 官方提示词指南与火山引擎视频生成 API。
44
+ 对白、VO、OS 都按 [performance-action-timing.md](performance-action-timing.md) 的发声窗口复核;
45
+ 同轨音画生成不代表正常语速必然容得下原文。API 另支持 `duration: -1`,由模型在 4–15 秒内自动选择。
46
+ 固定镜长交付仍传已接受的正整数;采用自动时长时说明它是自适应生成,返回后按实际视频重新核对剪辑时长、
47
+ 逐字完整性和语速。自动选择不会突破 15 秒上限,也不能替代超长对白的拆镜。
48
+
49
+ 依据(2026-09-07 核对):[视频生成 API](https://docs.volcengine.com/docs/82379/1520757)、
50
+ [Seedance 2.5 指南中的 2.0/2.5 时间控制差异](https://docs.volcengine.com/docs/82379/2607689)。
@@ -14,15 +14,45 @@
14
14
  ```
15
15
 
16
16
  2.5 沿用中文自然指令和 `@图片N`、`@视频N`、`@音频N` 绑定,但不能直接套 2.0:它支持 30 秒长叙事、
17
- 基于时间戳的精确控制,以及明确的参考、编辑、延长三类全模态任务。
17
+ 整数秒时间戳控制,以及明确的参考、编辑、延长三类全模态任务。
18
18
 
19
19
  ## 生成与参考
20
20
 
21
21
  - 短单镜按“主体 + 动作 + 场景 + 光色 + 运镜 + 风格 + 约束”写。
22
- - 多镜或长叙事按 `镜头 1 [0:00–0:03]:` 顺序写;每段时间不重叠、不留无意空档,最后一个终点
23
- 等于总时长。时间戳服务于 2.5 的长叙事控制,不能反过来改写上游镜头状态链。
22
+ - 单镜内部的动作时机先写清先后与触发;散文秒数不保证精确落点。
23
+ - 多镜或长叙事按 `镜头 1 [0:00–0:03]:` 写时间段,不重叠、不留无意空档,最后终点等于总时长。
24
+ 时间戳仍有生成偏差,不能作为音节同步或精确剪辑点的保证。
25
+
24
26
  - 每次使用素材时重复绑定 `人物 @图片1`、`@视频1 的表演节奏` 等具体职责。普通参考任务说明保留和
25
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
+ 不能仅凭正文提到音频就声称已经绑定。
26
56
 
27
57
  ## 编辑与延长不是普通参考
28
58
 
@@ -37,6 +67,19 @@
37
67
  若提示词写的是编辑而 job 标成参考,或反过来,2.5 仍会根据语义复判并报任务类型不匹配;因此任务
38
68
  类型是创作选择,不由 adapter 从若干关键词猜。
39
69
 
70
+ **它写在哪里**:creator-first 的 `MOTION-...` 条目里加一行 `- 任务类型:reference | edit | extend`,
71
+ 写在 `生成方式` 之后。这两个字段回答的不是同一个问题,谁也不能代替谁:
72
+
73
+ | 字段 | 回答什么 | 取值 | 谁决定 |
74
+ |---|---|---|---|
75
+ | `生成方式` | 这一镜送不送图 | `文生视频` / `图生视频` | 由「输入参考图」是否为空机械推出,`creator_markdown_check.py` 会核对 |
76
+ | `任务类型` | 这一次是参考、编辑还是延长 | `reference` / `edit` / `extend` | 创作决定,本套件不推断 |
77
+
78
+ `edit` 与 `extend` 使用视频素材,不一定有图片;不能把“送素材”一律写成“图生视频”。
79
+ 现有五文档的图片字段不足以表达纯视频输入,准备 job 时需核对实际绑定。`edit` 与 `extend`
80
+ 在 API 上还各自要求 `ratio: adaptive`(`edit` 另要求 `duration: -1`),送错会被 2.5 判为任务
81
+ 类型不匹配。目标模型不是 2.5 时不写这一行——其余方言没有这个概念。
82
+
40
83
  ## 对白、声音与文字
41
84
 
42
85
  - 每个可辨对白事件都必须整体写进 `{角色用中文说:“逐字台词”}`,不能只用普通引号;同一句带花括号
@@ -60,7 +103,20 @@
60
103
 
61
104
  ## 时长
62
105
 
63
- Seedance 2.5 原生整数时长是 4–30 秒。项目采用一镜一生成时每镜均落在此区间;采用 30 秒多镜容器时,
106
+ Seedance 2.5 手动指定的整数时长是 4–30 秒。项目采用一镜一生成时每镜均落在此区间;采用 30 秒多镜容器时,
64
107
  先按交付形态确认容器,不把若干独立镜头擅自合并。短动作到达终点后 hold,超长动作按状态闭合点拆分。
65
108
 
66
- 依据:火山引擎《Doubao Seedance 2.5 教程》《Doubao Seedance 2.5 提示词指南》和视频生成 API。
109
+ 对白、VO、OS 同样按 [performance-action-timing.md](performance-action-timing.md) 先预算再排时。
110
+ 30 秒扩大了可用容量,不代表固定短镜中的长对白会自动恢复自然语速。
111
+
112
+ - 普通生成/参考任务支持 `duration: -1`,由模型在 4–30 秒内选择,2.5 默认也采用该值。固定时长交付
113
+ 仍显式传已接受的正整数;采用自动时长时,不把规划镜长写成已经保证的输出长度。
114
+ - `edit` 的 `duration: -1` 表示基本保持待编辑视频的时长。换成更长对白时仍须检查原片发声窗口,
115
+ 不能靠 `-1` 自动延长;放不下就回上游调整任务或台词,不静默切换为延长。
116
+ - `extend` 的时长针对新增片段,预算其中新增对白与过渡,不把原片长度当成新增发声容量。
117
+
118
+ 实际回测需听台词完整性、语速、尾音,并测量媒体真实时长。API 返回的 `duration` 是按帧数折算后向下
119
+ 取整的近似秒数;编辑结果也可能与源片略有时长差异,不能只看响应整数就判定逐秒满足要求。
120
+
121
+ 依据(2026-09-07 核对):[视频生成 API](https://docs.volcengine.com/docs/82379/1520757)、
122
+ [Seedance 2.5 提示词指南](https://docs.volcengine.com/docs/82379/2607689)。
@@ -17,7 +17,7 @@
17
17
 
18
18
  | ID | Class | Knowledge |
19
19
  |---|---|---|
20
- | VID-01 | structural_invariant | Motion reads but cannot rewrite shot start/end/duration/dialogue and next-shot state. |
20
+ | VID-01 | structural_invariant | Motion reads but cannot rewrite shot start/end/duration/dialogue and next-shot state. The duration a MOTION declares is compared against its SHOT: they must be the same number, because 时长 is what reaches the execution end and what VID-04/VID-13 arithmetic is built on. A downstream copy left behind by an upstream revision is a defect even though every string still parses. |
21
21
  | VID-02 | craft_default | Write start anchor, ordered subject motion, camera behavior, timing, and end report; add performance change and environment/audio only when this shot actually carries them. |
22
22
  | VID-03 | structural_invariant | Choose image-to-video only when the matching storyboard's reference set is complete, declares readable REF inputs, and is copied unchanged. No REF is not by itself consent to text-to-video: first discover and bind matching real project images; preserve any verified partial bindings, but if required images remain missing, report them and stop before the final motion document. Choose text-to-video only after the creator explicitly selects it, and carry a non-empty static visual anchor in the copyable text. Only image-to-video may omit appearance/composition already carried by its real reference frame. |
23
23
  | VID-04 | structural_invariant | Explicit segment timing sums exactly to its shot's accepted duration—neither exceeding it nor leaving an unallocated remainder. |
@@ -38,8 +38,8 @@
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
45
 
@@ -67,8 +67,10 @@ license: MIT
67
67
 
68
68
  用户问时长时才把索引写入系统临时目录。先用 Python 查询跨平台临时目录,把第一条命令打印的完整
69
69
  路径原样替换进后两条命令的引号内。以下每条都是一行完整命令,不依赖 shell 变量或续行符;Windows
70
- 没有 `python3` 命令时使用 `py -3`。`--speaker` 的示例值必须替换为本集实际说话者;只有存在项目
71
- 配置时才添加 `--project short-drama.json`:
70
+ 没有 `python3` 命令时使用 `py -3`。`--speaker` 的示例值必须替换为本集实际说话者。
71
+ `--project short-drama.json` **只加在第三条命令上**(`duration_estimate.py` 才接受它,
72
+ `screenplay_index.py` 没有这个参数,加上去会直接报 `unrecognized arguments`),且只在项目
73
+ 配置确实存在时加:
72
74
 
73
75
  ```text
74
76
  python3 -c "from pathlib import Path; import tempfile, uuid; print(Path(tempfile.gettempdir()) / ('short-drama-' + uuid.uuid4().hex + '.jsonl'))"
@@ -76,6 +78,13 @@ python3 "{技能目录}/scripts/screenplay_index.py" "剧集/EP001/剧本.md" --
76
78
  python3 "{技能目录}/scripts/duration_estimate.py" "剧集/EP001/剧本.md" --index "粘贴第一条命令输出的完整路径"
77
79
  ```
78
80
 
81
+ **改稿后重跑**:第二条命令写过一次的输出路径不能直接再写一次,会以 `already holds an index` 失败。
82
+ 要保留原有块 ID 就加 `--previous-index <同一路径>`,要从头重编号就加 `--no-previous`;
83
+ 或者干脆回到第一条命令另取一个临时路径。
84
+
85
+ 估时前区分计数口径:`dialogue_characters` 包含标点,视频提示词中的参考语速按可发声字数计算。
86
+ 按语速换算时排除标点,并按实际读法处理数字和缩写;不把两个计数混用。
87
+
79
88
  估算是参考,不是门禁;没有语速或动作段速率时只报告可数事实,不猜秒数。但任务已给目标时长时,
80
89
  写作者仍须用真实朗读和动作通读判断能否容纳,并直接压缩重复节拍;“不能精确估秒”不是忽略目标的理由。
81
90
 
@@ -74,6 +74,12 @@
74
74
  - **`craft_default`**:使用现在时与可执行动词;焦点行动、信息或空间关系变化时另起段落。
75
75
  - **`reviewed_invariant · SCR-03`**:关键心理/认知变化要有行为、证据、空间后果或有意声音作为载体。
76
76
  - **`taste_option`**:完整动作链、氛围或推理可以保留较长段落,不按统一长度切分。
77
+ - **`craft_default · SCR-18`**:动作段落**不要以「短语+全角冒号」开头**。
78
+ `第二格:一只手把杯子推过去。` 与 `屏幕上正在放的东西:一段没有声音的录像。` 这样的写法
79
+ 和 3.2 的对白语法(`角色名:台词`)在字面上完全一样,索引器只能报
80
+ `ambiguous_dialogue_or_action` 交回本阶段判断,而它每次都要人来读一遍才能消掉。
81
+ 改法是把冒号换成破折号、逗号或一个动词:`第二格换成一只手把杯子推过去。`
82
+ `屏幕上正在放的是一段没有声音的录像。` 句中的冒号不受影响,只有**行首**这一处会撞。
77
83
 
78
84
  不要在动作段落里写镜号、景别、镜头运动、焦段、生成参数或素材位。
79
85
 
@@ -29,6 +29,7 @@
29
29
  | SCR-15 | craft_default | A local payoff leaves a legible result or aftereffect without replacing the episode's meaning with a slogan. A cost framed as central pressure has a material exit-state effect rather than automatically resetting once the action succeeds. The result may be plot change, relationship response, irony, stillness, tonal afterimage, or an intentionally open state; a new external event is not mandatory. |
30
30
  | SCR-16 | reviewed_invariant | When a literal precise deadline is foregrounded and audience-auditable, its action chain fits the stated time and established resources, or the screenplay makes compression, failure, or a changed objective legible. Qualitative urgency is not upgraded into invented minutes, timestamps, notifications, or records. Montage, ellipsis, subjective time, and declared stylization follow their own established convention rather than an automatic real-time test. |
31
31
  | SCR-17 | reviewed_invariant | When the brief defines a limited number of attempts, turns, breaths, beats, or other units, each unit is counted by its visible end-state. A label, count, request, authorization, preparation step, or cleanup after the boundary does not substitute for the required completion; intentional partial completion or failure remains valid when it is the legible result of that unit. |
32
+ | SCR-18 | craft_default | An action paragraph does not open with a noun phrase followed by a full-width colon. `第二格:一只手把杯子推过去。` is byte-for-byte the dialogue form `角色名:台词`, so the indexer can only return `ambiguous_dialogue_or_action` and hand it back for a human read; every such line costs one round trip for nothing. A dash, a comma, or a verb removes the collision. Colons inside a sentence are unaffected — only the start of the line collides. |
32
33
 
33
34
  规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
34
35
  `reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、