@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
@@ -0,0 +1,39 @@
1
+ # 光的设计
2
+
3
+ ## 分工
4
+
5
+ - 《视觉设定.md》的地点条目记录光源、窗户位置和已经确定的光线状态。
6
+ - 分镜选择本镜的注意中心,说明哪些脸、动作或证据必须可读。
7
+ - 提示词把这些选择写成可观察的画面结果。
8
+
9
+ 开灯、停电和时段变化会改变场景事实,应来自剧本或已接受的视觉设定。
10
+
11
+ ## 按镜头职责设计
12
+
13
+ 先确定观众需要看清什么,再选择亮暗关系、光比与背景分离程度。
14
+ 需要读表情时保留相关面部细节;需要隐藏身份时可以用剪影或遮暗。
15
+ 关注点可以靠亮度、色彩、轮廓或局部对比突出,不要求它总是全画面最亮的部分。
16
+
17
+ 竖屏按实际构图检查人物与背景是否分得开。近景中的脸部光线、多人纵深中的背景光,
18
+ 各自承担不同信息;不要仅按画幅省略环境或默认加轮廓光。
19
+
20
+ ## 把光位与画面效果一起写清
21
+
22
+ 光位术语后补充它在画面上的结果,并明确左右指画面还是人物自身。例如:
23
+
24
+ > 主光来自画面左侧;画面左侧脸颊较亮,另一侧留柔和阴影,眼睛仍可辨认。
25
+
26
+ 仅写「电影感、氛围感强」不足以决定画面。一次图片模型对照中,描述受光结果比只写
27
+ 光位更稳定;这可以作为起步写法,不能据此保证其他模型或视频同样执行。
28
+ 暗部深度、边缘亮光和背景亮度按本镜需要写,不把例子中的效果全部照搬。
29
+
30
+ ## 参考板与跨镜连续性
31
+
32
+ 参考板的均匀照明用于看清形制,不自动成为每个镜头的打光方案。
33
+ 绑定角色板时说明保留身份与造型;本镜的光仍依据场景事实。
34
+
35
+ 同一连续场景维持光源关系与既定色调;视角、取景范围和人物位置变化可以带来正常的
36
+ 画面亮度差异。不要要求所有镜头的平均 RGB 相同。
37
+
38
+ 生成后对比相邻镜头中可比较的脸、衣物或场景表面。曝光和白平衡的小幅偏差交给剪辑
39
+ 校正;光源方向或剧情光态错误回上游修订。测量用于定位差异,是否有问题仍结合画面判断。
@@ -183,10 +183,10 @@
183
183
 
184
184
  | 决策 | 如何确定 |
185
185
  |---|---|
186
- | 拍如何拆镜 | 由动作边界、听者反应、空间变化与可执行时长共同决定,不追求固定比值。 |
186
+ | 拍如何拆镜 | 由动作边界、听者反应、空间变化与可执行时长共同决定;已接受节奏档案声明了目标平均镜长时按 [镜长从哪来](shot-craft.md#镜长从哪来-sht-28) 核对,否则不追求固定比值。 |
187
187
  | 台词如何分配 | 先保证一次可表演语气与口型负载;过长时按行动转向拆分,而非机械按字数。 |
188
188
  | 单镜还是镜头组 | 先把每个镜头写成可单独审查的记录,再按目标交付方式编组;编组不改变镜头身份。本环节只负责镜头本身:定清每个镜头的目的、起止边界与已接受时长。编组之后由谁承担时长加总与成员资格,属于交付环节的事,不在这里决定,也不因为将来会编组就提前合并镜头。 |
189
- | 子镜密度 | 9:16 信息流上的注意力是按切镜买的:`craft_default` 是可看的切镜密度大致每 4–8 秒一次,爽点更紧、情感处理更松在这条带宽内浮动,每次切换仍要有注意、压力或状态理由。项目把生成单元固定在更长的一档时,这条带宽由镜内调度承担——一镜里要有景别或视点的实际变化、或一次完整的动作与反应交接,否则无论单帧多好,观众读到的都是幻灯片。 |
189
+ | 子镜密度 | 按 [镜长从哪来](shot-craft.md#镜长从哪来-sht-28) 由声音事件与已接受的目标平均镜长推出;没有已接受节奏档案时不设数值带宽,把算出的平均镜长报给创作者。每次切换仍要有注意、压力或状态理由。项目把生成单元固定在更长的一档时,切镜密度由镜内调度承担——一镜里要有景别或视点的实际变化、或一次完整的动作与反应交接,否则无论单帧多好,观众读到的都是幻灯片。 |
190
190
  | 单元时长 | 先从必须保留的动作、反应、对白与最终状态反推这一镜需要多久;放不下就删减、拆镜或请求改边界。项目已经定下可用的生成长度档位时,取容得下它的最短一档;没定就按反推出的秒数写,并把用到的档位报给创作者。超过约五到八秒后,一张冻结关键帧只描述了镜头开头,其余部分实际上没有规格:更长的镜头要么按精确状态边界拆开,要么由创作者明确接受它是一个宽规格镜头。 |
191
191
 
192
192
  ## 七之二、单集时长加总(`SHT-16`)
@@ -12,10 +12,14 @@
12
12
  1. [先落实原文,再追求画面](#先落实原文再追求画面)
13
13
  2. [镜头目的](#镜头目的)
14
14
  3. [场面调度与地理](#场面调度与地理)
15
- 4. [景别与摄影机动机](#景别与摄影机动机)
15
+ 4. [景别与摄影机动机](#景别与摄影机动机),含[运镜逐镜选](#运镜逐镜选-sht-04)
16
16
  5. [时长与切镜](#时长与切镜)
17
- 6. [常见问题](#常见问题)
18
- 7. [审查问题](#审查问题)
17
+ 6. [视觉方向选择](#视觉方向选择-sht-07)
18
+ 7. [相连边界](#相连边界-con-01)
19
+ 8. [首尾成对](#首尾成对)
20
+ 9. [一镜到底还是切开](#一镜到底还是切开)
21
+ 10. [常见问题](#常见问题)
22
+ 11. [审查问题](#审查问题)
19
23
 
20
24
  ## 先落实原文,再追求画面
21
25
 
@@ -35,7 +39,8 @@
35
39
  ### 动作落实表
36
40
 
37
41
  **`SHT-08 · reviewed_invariant`**: 每个有权威来源的动作只有一个主要落实镜头;其他
38
- 镜头若再次涉及该动作,必须增加反应、细节或对原信息的新理解。
42
+ 镜头若再次涉及该动作,必须增加反应、细节或对原信息的新理解。峰值处的冲击重复是有意的例外,
43
+ 见下文。
39
44
 
40
45
  原文落实数量只能证明“某段原文被引用”,不能证明动作没有提前、重复或遗漏。对转手、
41
46
  开门、受伤、揭面、拿出证物等动作,另记:
@@ -49,6 +54,14 @@
49
54
  - 后一镜已经从动作后状态开始时,运动规格不得再完整表演一次该动作。
50
55
  - 其他镜头要写清自己负责细节、反应还是重新解释,不能成为第二个主要落实镜头。
51
56
 
57
+ **冲击重复**:情绪爆发、打脸或重大反转的那一下,可以把同一个关键动作从两三个角度各给一次,
58
+ 让观众连看几遍。这是有意的选择,不是忘了对应关系,所以要写出来,并守住连续性:
59
+
60
+ - 重复镜在说明里写「冲击重复:SHOT-...」,指向主要落实镜头;
61
+ - 状态只改变一次:每个重复镜都从同一个动作前状态走到同一个动作后状态,第二遍不能在第一遍的结果上再做一次;
62
+ - 重复镜之间起止不衔接,是这项选择本身,与声明过的蒙太奇一样按 `CON-05` 处理;最后一个重复镜之后,下一镜从动作后状态开始;
63
+ - 只用在峰值。一集里处处重复,就没有哪一下是冲击了。
64
+
52
65
  ## 镜头目的
53
66
 
54
67
  `SHT-02` 要求镜头守住来源原意,并说明观众或人物在本镜结束时发生了什么变化。
@@ -65,26 +78,13 @@
65
78
  镜头可以负责建立空间、让观众站到某个人物一边、展示证据、暂缓信息、转移权力、
66
79
  表现反应,或让后果无法回避。“中景展示人物说话”不算足够的镜头目的。
67
80
 
68
- ### 承受者也要有一镜
69
-
70
- 一次打击、否定、揭穿或翻盘,画面上有两个人:**说出它的人,和挨了它的人**。
71
- 只拍前者,观众收到的是一句评价;拍了后者,观众才收到一次事件。
72
-
73
- 这不是「多给一个反应镜头会更好」的锦上添花。剧情上被推翻的那个人如果全程只有后脑、
74
- 只在群像里占几十个像素,观众其实不知道该看谁输——那句最狠的台词就只是一个人在说话,
75
- 爽点不成立。**分镜阶段就要决定谁承受这一下、哪一镜给他**,不要留给剪辑去补,
76
- 因为剪辑只能在已经生成的素材里选,选不出一个没拍过的反应。
77
-
78
- 具体到写法:
81
+ ### 承受者的反应
79
82
 
80
- - 台词落点是针对某个在场的人时,检查分镜里有没有一镜的画面主体是**那个人**;
81
- - 没有就补一镜,通常很短(一到两秒足够:停手、抬眼、想开口又闭嘴);
82
- - 承受者不在场时,那一下的后果要落到别的可见东西上(屏幕、门、被推开的文件),
83
- 否则这次打击在画面上没有发生过;
84
- - 群像镜头**不算**承受者反应:一张在四个人里的脸承担不了「他输了」这件事。
85
-
86
- **这条只在剧情确实存在承受者时生效。** 不为每句台词配反应镜头,也不把它变成正反打配额——
87
- 安静的场次、独角戏、纯信息交代不适用。
83
+ **`SHT-27 · reviewed_invariant`**:打击、否定或翻盘需要观众理解其后果时,
84
+ 分镜应安排可读的承受者反应或其他后果载体。
85
+ 可以用独立反应镜、双人镜内的调度、清楚的群像反应、声音或物件状态承载。
86
+ 现有画面已经清楚就不必补镜;需要保留反应或承受者不在场时,注明叙事安排。
87
+ 审查按后果能否被理解判断,不按人数、景别或反应镜数量判断。
88
88
 
89
89
  ### 观众可见性 (`SHT-12`)
90
90
 
@@ -145,24 +145,61 @@
145
145
  要观众读到什么反而没人回答。判断标准始终是必须被读到的信息存在于哪个尺度——证据在
146
146
  指节上就给大特写,后果在两人距离上就不该切近。
147
147
 
148
+ 项目已接受节奏档案时,近景类镜头占全集镜数的比例不低于 `close_shot_share_min`,哪些景别算近景类以
149
+ `$short-drama-develop` 对该字段的定义为准。这是全集的下限,不是每场的配额:交代空间的场可以宽,对峙和揭示的场会更紧。
150
+ 占比不够时,先看对话段是不是一直停在中景,听者反应和要落地的台词有没有给到近处。
151
+
152
+ ### 竖屏把可用的景别收窄了
153
+
154
+ 上面那张表是横平竖直的电影景别谱系。**竖屏不是把它裁窄,是让其中两档变得难用**。
155
+
156
+ 机制很简单:远景和全景靠的是**横向铺开的信息**——谁站在谁旁边、队伍有多长、这个人
157
+ 离出口有多远。9:16 的横向只有 16:9 的三分之一强,同样的信息铺进去要么挤成一条,
158
+ 要么小到读不出。所以竖屏短剧的实际用法以中景、近景、特写为主,远景与全景出现得少。
159
+
160
+ 但这**不是禁令,是换一种排法**:竖屏的空间要靠**纵深**而不是横向来交代——前景、中景、
161
+ 后景分层,用门框、桌沿、台阶、人的前后遮挡把关系立起来(见
162
+ [竖屏多人调度](blocking-playbooks.md#1-竖屏多人调度))。做到了这一点,竖屏一样能给全景;
163
+ 做不到就不要用这一档去承担交代空间的职责,改用一个更近的镜头单独给一次。
164
+
165
+ **竖屏的横向视野窄,观众的视线本来就被逼到画面中央**,这既是小景别好用的原因,
166
+ 也是大景别失效的原因——同一件事的两面。
167
+
148
168
  只有注意或关系发生变化时才改变景别和角度。场面声音变大,不等于镜头必须从全景一路
149
169
  推到大特写。反过来,一旦决定切镜,新镜就要在景别、角度或人物关系里至少改变一项;
150
170
  相邻两镜完全同景别、同角度、同关系时,这次切镜没有职责,应当改变收放或并回一镜。
151
171
 
152
- 一个时间段内选择一套连贯的摄影机行为:
172
+ ### 运镜逐镜选 (`SHT-04`)
173
+
174
+ 每镜的「运镜」一行按本镜目的选。先问这一镜里观众的注意要不要移动、往哪里移,从上往下对照:
175
+
176
+ | 本镜在做什么 | 运镜 |
177
+ |---|---|
178
+ | 人物移动本身是这一镜的事:冲、追、逼近、爬上高处 | 跟拍或横移,让他在画面里的位置保持住 |
179
+ | 新信息从画外或画面一侧进来 | 摇、俯仰或后拉,停在新信息上 |
180
+ | 一句台词或一个认识正压到某人身上,对白镜里的说话者与听者都算 | 缓推或前移,停在承受者的脸或手上;拉开则是关系变远 |
181
+ | 两人的关系或处境在原地被重新评估:绕过去才看得到的另一面、被围住 | 环绕 |
182
+ | 高度本身有意义:升起交出全局或结局,落下把观众接进人物所在的高度 | 升降;不为“开场要大气”而升降 |
183
+ | 情绪爆发、重大反转 | 短促推近;定格、闪白由剪辑实现,本镜写明落在哪一拍 |
184
+ | 观察、等待、紧张、仪式、受困;插入镜;对白镜里这句台词不带来压力或处境的变化 | 固定 |
153
185
 
154
- - 固定机位用于观察、紧张、仪式或受困。
155
- - 摇镜或俯仰用于揭示信息或转移注意。
156
- - 前移或后移用于改变亲近、压力或人物认识。
157
- - 跟拍用于人物移动本身带有策略意义的场面。
158
- - 环绕用于关系或空间在原地被重新评估:绕过去才看得到的另一面、被围住的处境、
159
- 两人相对位置在不移动的情况下改变意义;没有这层理由时它只是装饰性运动。
160
- - 升降(摇臂)用于高度本身携带意义:升起交出全局或结局,落下把观众接进人物所在的
161
- 高度;不为“开场要大气”而升降。
162
- - 手持用于创作者已经接受的身体不稳或现场感。
186
+ 手持只用于创作者已经接受的身体不稳或现场感。
187
+
188
+ 固定是这张表的最后一行,不是起点:前面几行都不成立时才固定。写法是
189
+ 「运镜:<行为>,<从什么时候开始、停在哪里>;<为什么>」,固定写「运镜:固定;<为什么>」。
190
+ 固定也要写出来:这一行空着,动不动就改由视频提示词阶段替你选。只写「运镜:固定」
191
+ 说不出是上表哪一行,等于没有选。例如「运镜:缓推,他说出『给我五天』时开始,停在眼睛;这是他第一次把赌注
192
+ 压在自己身上」「运镜:固定;插入镜只要看清数字」「运镜:固定;这句话没有落到谁身上」。
193
+
194
+ 强调手段只有三种:短促推近、定格、闪白,只留给情绪爆发和重大反转,用在普通台词上,真正的峰值就
195
+ 显不出差别。跟随动作的跟拍、揭示信息的摇、压力落下时的缓推不是强调手段,任何一场都按上表使用。
196
+ 写完回读全集的「运镜」:有奔跑、有揭示、有峰值的一集,不会每镜都是固定。
163
197
 
164
198
  没有明确切换时,不要在同一时间段同时要求固定和移动。
165
199
 
200
+ **`craft_default · SHT-04`**:每镜按目的选运镜,写出行为、起止与理由;动作要跟、信息要进画、
201
+ 压力要落、峰值要强调时用有动机的运动,都不成立时固定,固定也写出行为与理由。短促推近、定格、闪白只留给峰值。
202
+
166
203
  ## 时长与切镜
167
204
 
168
205
  ### 短镜头的动作量 (`SHT-03`)
@@ -179,7 +216,8 @@
179
216
 
180
217
  ### 对白估时
181
218
 
182
- **`craft_default`**:先排完整声音事件,再确定镜长。不要先选一个短镜长,再要求人物加快语速把台词塞进去。
219
+ **`craft_default`**:先排完整声音事件,再确定镜长。不要先选一个短镜长,再要求人物加快语速把台词塞进去;
220
+ 一句台词比目标镜长更长时,把它拆到说话者与听者的几个镜头上,声音连续、画面切换,语速不变。
183
221
 
184
222
  - 有同一句、同语言、同表演方式的录音或配音时,使用实际发声区间;文件首尾静默与句内停顿分开核对,
185
223
  不把整个文件长度当作纯说话时间。没有音频时按原文、人物语速、情绪和换气估一个区间,明确标为
@@ -195,6 +233,42 @@
195
233
  文本估计是规划依据,实际生成后还需听完整性、语速和尾音。没有录音、配音或生成结果时,不把估计写成
196
234
  秒级准确的声音控制承诺;纯动作镜无需补对白预算。
197
235
 
236
+ ### 镜长从哪来 (`SHT-28`)
237
+
238
+ 镜长由声音事件和已接受的目标平均镜长共同决定,不按剧本字数或动作段数折算。字数折算得到的是
239
+ 朗读长度的平均分配,不是剪辑节奏。
240
+
241
+ 1. **排时间线**:按上一节把本场每句台词、`[VO]` 和关键声音事件排成一条时间线,再加上必须看清的
242
+ 无声动作和反应。这条时间线的长度就是本场时长。
243
+ 2. **算镜数**:项目已接受节奏档案时,本场镜数约等于本场时长除以 `target_avg_shot_seconds`,四舍五入,
244
+ 至少一镜。没有已接受档案时跳过这一步。
245
+ 3. **放切点**:按下一节的对白覆盖默认,把切点放在换人说话、听者反应、插入镜和动作变化处。每镜的
246
+ 时长就是它覆盖的那一段时间线。
247
+ 4. **回算**:本场平均镜长等于本场时长除以实际镜数。明显长于目标时,先补听者反应和插入镜,再把
248
+ 长台词拆到说话者和听者的镜头上;明显短于目标时,合并没有带来新信息的切点。
249
+
250
+ 目标平均镜长是整场的目标,不是每镜的配额:一个插入镜可以不到一秒,一句要落地的台词可以占四五秒。
251
+ 没有已接受档案时,末尾报告写出本集实际平均镜长,由创作者决定是否接受一份节奏档案。
252
+
253
+ **`craft_default · SHT-28`**:镜长由声音事件和已接受的 `target_avg_shot_seconds` 共同推出,目标是整场
254
+ 平均值;不从剧本字数折算。
255
+
256
+ ### 对白场怎么切 (`SHT-29`)
257
+
258
+ - **一句台词一个镜头**:说话者的镜头承载这一句;一句话里有转折时,可以在转折处切。
259
+ - **默认给听者**:重要的一句落下时,切到听的人,让观众看见它打中了谁。
260
+ - **来回对话用正反打**:两人交锋沿同一条轴线两侧对切,过肩或单人都可以。
261
+ - **景别顺序**:先给一个带着人物和动作的交代镜,对话落到中景或中近景,只在一句话需要落地时切到特写。
262
+ - **删空镜**:既没有台词也没有动作的镜头删掉。
263
+ - **插入镜是便宜的节奏工具**:手机屏幕、手、戒指、证件这类插入镜不需要表演,可以插在长台词或等待中间,
264
+ 也可以把一句话拆开。
265
+
266
+ 这是起步默认。一场戏有意用不切的双人镜施压,或让群像同时反应更清楚时,说明理由即可改,见
267
+ [调度手册](blocking-playbooks.md)。
268
+
269
+ **`craft_default · SHT-29`**:对白场默认一句一镜,给听者反应,交锋用正反打,先交代再落到中景,特写
270
+ 留给要落地的台词;删掉既无台词也无动作的空镜;插入镜用来调节节奏。
271
+
198
272
  ## 视觉方向选择 (`SHT-07`)
199
273
 
200
274
  焦段语言、节奏、固定机位、手持或形式化调度属于 `taste_option`,读取创作者已接受的
@@ -227,3 +301,34 @@
227
301
  - 是否绑定了准确的造型、观察视角、道具状态、双手状态和文字政策?
228
302
  - 结束边界是否为下一镜提供清楚的开始状态?
229
303
  - 删除或合并本镜,会不会丢失故事意义?
304
+
305
+ ## 首尾成对
306
+
307
+ 终点的可见状态对本镜重要,且目标模型支持尾帧时,可以补写
308
+ `### 收尾关键帧提示词`。它只描述终点,不混入起点或中间动作。
309
+ 若起终状态相同,或变化发生在画外,通常无需另做尾帧。
310
+
311
+ Seedance 2.5 的一个镜头对照中,绑定尾帧改善了末帧落位;这不是所有模型和动作的保证。
312
+ 生成后仍检查中间动作、节奏和终点,不能只比较最后一帧。
313
+
314
+ 当前生产工具从 `分镜.md` 的 `SHOT-...` 只提取「冻结关键帧提示词」,即首帧。
315
+ 要在套件内生产尾帧,交图片提示词阶段建立单独的 `IMG-...` 条目,注明来自本 SHOT 的
316
+ 终点、保留已确认的视觉依据,再以该条目作为 image job 的来源。不得用首帧选择器提交尾帧正文。
317
+ 实际图片生成后按目标方言绑定 `用途:结束帧`。
318
+
319
+ ## 一镜到底还是切开
320
+
321
+ 先看这场戏需要什么,再考虑生成与修订成本。
322
+
323
+ - 连续等待、沉默、空间调度或完整表演,可考虑一镜到底。
324
+ - 需要选择不同表演、突出反应或精确安排切点,可考虑分开生成再剪。
325
+ - 长段生成一处失败可能需要重出更多素材;分开生成则需要额外处理跨镜一致性。
326
+
327
+ 一次 Seedance 2.5 对白场次实测出现过长镜头发声时间过早的问题。
328
+ 有严格落点时应检查目标模型的时序能力并试听,不能保证分成镜头就能锁定每句发声时间。
329
+ 长镜头也可以在剪辑中截取,是否保留完整时长由叙事决定。
330
+
331
+ 多镜容器是在一次生成里安排多个切口;一镜到底则不切镜。
332
+ 容器可减少提交次数,但不自动保证跨镜一致性,也仍可在生成后剪辑。目标方言支持逐切挂关键帧时,
333
+ 每个切口都要有自己的已接受关键帧,具体写法见 `$short-drama-video-prompts` 的对应方言。
334
+ 各镜合并时重新整理参考素材与编号,并核对结果中的实际切点。
@@ -15,11 +15,11 @@
15
15
  | SHT-01 | structural_invariant | Every production-relevant scene action, line, sound and on-screen text is carried by a shot or explicitly omitted with a creative reason. Each shot's 来源 names scene ids that exist in `剧本.md`, and every scene is either claimed by a shot or recorded with its reason on the storyboard's `未拍场次` line. |
16
16
  | SHT-02 | reviewed_invariant | Each shot has a dramatic/viewing purpose and preserves its source meaning. |
17
17
  | SHT-03 | craft_default | Keep a short shot focused on the smallest action/reaction unit that carries its purpose; combine or split it according to performance, information, and continuity rather than a fixed count. |
18
- | SHT-04 | craft_default | Change framing/camera because attention, pressure, alignment, reveal, or rhythm changes. |
18
+ | SHT-04 | craft_default | Change framing/camera because attention, pressure, alignment, reveal, or rhythm changes. Each shot states its camera behavior, where it starts and stops, and why, chosen from the shot's purpose: follow movement that is itself the point, move to take in a reveal, push in as pressure lands on someone, and lock off only when none of these applies—a lock-off is stated with its reason too, never left blank or written bare. A locked camera is a choice, not the episode-wide default; emphasis devices—a short push-in, a freeze frame, a white flash—are reserved for emotional explosions and major reversals, while following, reveal, and pressure moves are not emphasis devices. |
19
19
  | SHT-05 | structural_invariant | A keyframe projects one shot boundary and the shot's declared visual basis. Any `IMG-...` used is an existing image-prompt heading, not a claim that generated media exists; when none is suitable, the shot names the relevant textual visual-setting entries without inventing an ID. |
20
20
  | SHT-06 | reviewed_invariant | A keyframe is one freezeable instant, not an ordered action chain. |
21
21
  | SHT-07 | taste_option | Lens vocabulary, tempo, and locked/handheld/formal style follow visual direction. |
22
- | SHT-08 | reviewed_invariant | Each authoritative source action is realized once; repeated coverage adds reaction/detail/recontextualization rather than replaying it. |
22
+ | SHT-08 | reviewed_invariant | Each authoritative source action is realized once; repeated coverage adds reaction/detail/recontextualization rather than replaying it. The one exception is a declared impact repetition at a peak: the same key action shown from two or three angles, each repeat naming the primary shot, every repeat running from the same before-state to the same after-state so the state changes once, and the next shot starting from the after-state. |
23
23
  | SHT-09 | reviewed_invariant | Exact Location/View orientation and visible anchors match the camera side used by the shot. |
24
24
  | SHT-10 | reviewed_invariant | Rendered keyframe prose contains only facts from the boundary that keyframe declares. A start frame carries no state first created by the shot's motion or end; an end frame carries no state already spent before it. Neither frame borrows the other's facts. |
25
25
  | SHT-11 | craft_default | When information changes another person's power, relationship, knowledge, or choice, preserve that reception visibly; shot count, framing, and duration follow the consequence and project profile. |
@@ -38,7 +38,9 @@
38
38
  | SHT-24 | reviewed_invariant | A visual basis describes this frame, not the episode's cast list. Each declared 控制 scope stays within what this frame can carry, and a binding is not carried forward merely because the subject remains in the scene. |
39
39
  | SHT-25 | structural_invariant | Every real reference image a shot binds declares one 用途 from the closed set 身份/造型状态/地理/构图/尺度/效果/起始帧/结束帧/风格, so the shot can say which start frame and which identity/geography/prop pictures a downstream job sends. At most one 起始帧 and one 结束帧 per shot, and 结束帧 requires 起始帧. |
40
40
  | SHT-26 | structural_invariant | A shot's 来源 is its claim on the screenplay: whatever it quotes, this shot is the one that films it. Every 视觉设定 entry the quote calls by name is therefore either in this shot's 视觉依据 or declared 画外 there. Quoting an action performed by someone the frame never shows takes that action off every list — no other shot claims it and nothing reports it missing, so it simply never gets filmed, and the gap only surfaces when a person watches the finished film. The check matches entry names rather than 画面代称, because a 来源 quote comes from 剧本.md; an entry that opted out with `画面代称:无` stays out of this check too. |
41
- | SHT-27 | reviewed_invariant | When a beat lands on a present character — a reversal, a rebuttal, an exposure, a decision that overrules someone — some shot takes that person as its subject. Filming only the speaker delivers a remark; filming the one it lands on delivers an event, and an audience that cannot see who lost does not experience the turn. A group shot does not count: one face among four cannot carry it. Editing cannot supply this later, because editing chooses among shots that exist. Inactive where no one is on the receiving end — quiet scenes, solo work, and plain exposition are not owed a reaction shot, and this is not a shot-reverse-shot quota. |
41
+ | SHT-27 | reviewed_invariant | When understanding a beat requires seeing its effect on a character, provide a readable reaction or consequence. A separate shot, staging within a shared shot, sound, or an object may carry it. Judge legibility against the intended reveal; do not require a shot count or exclude group shots by default. |
42
+ | SHT-28 | craft_default | Shot durations come from the scene's sound-event timeline together with the accepted `target_avg_shot_seconds`: the timeline sets scene length, the target sets roughly how many cuts it holds, and the average is a scene-level target rather than a per-shot quota. Durations are never folded from screenplay word or paragraph counts. Under an accepted rhythm profile, close-range shots, as the profile field defines them, make up at least `close_shot_share_min` of the episode's shots. A shot shorter than the model's native minimum is designed at its narrative length, and the storyboard proposes to the creator a multi-shot container (多镜容器) of adjacent same-scene shots, declared in the delivery profile and noting that the target dialect may require an accepted keyframe for every cut; until the creator declares one, or where the dialect cannot carry it, the shot runs to the native minimum and holds its end state. A missing or proposed profile leaves the numeric checks inactive. |
43
+ | SHT-29 | craft_default | Dialogue coverage starts from one line per shot, a listener or reaction shot where a line lands, shot/reverse-shot for exchanges, an establishing shot that carries people and action, medium framings for the talk, and close-ups only where a line must land; shots with neither line nor action are cut, and inserts (a phone screen, a hand, an object) are used as cheap rhythm tools. A long line is split across speaker and listener shots rather than sped up. |
42
44
 
43
45
  ### `CON`
44
46
 
@@ -46,7 +46,8 @@ license: MIT
46
46
 
47
47
  目标为 `seedance-2.0` 时按 [Seedance 2.0 方言](references/seedance-2.0.md) 写,目标为
48
48
  `seedance-2.5` 时按 [Seedance 2.5 方言](references/seedance-2.5.md) 写,目标为 `minimax-h3` 时按
49
- [MiniMax H3 方言](references/minimax-h3.md) 写。只读命中的一份。其他目标或版本不
49
+ [MiniMax H3 方言](references/minimax-h3.md) 写,目标为 `wan-3.0` 时按 [Wan 3.0 方言](references/wan-3.0.md)
50
+ 写。只读命中的一份。其他目标或版本不
50
51
  套用相近模型的语法,继续按 [目标模型能力档案](references/target-model-profile.md) 的通用路径写。
51
52
 
52
53
  沿用 creator-first 既有骨架:`## MOTION-... · 中文名`,字段名依次使用「分镜、时长、生成方式、
@@ -78,20 +79,21 @@ license: MIT
78
79
  [对白预算](references/performance-action-timing.md#对白预算) 补做判断。秒段加总正确不代表台词说得完。
79
80
  6. 写不能动的边框:图生视频以参考帧和视觉设定锁定;文生视频把必要静态事实写入「静态视觉锚点」和可复制正文。
80
81
  7. 原样读取分镜的「起点 → 唯一动作 → 终点」,确认人物、双手和持物的状态转换都发生在镜内。
81
- 8. 写“静态锚点 → 起点 → 唯一动作(触发、接触、落点)→ 次级反应 → 运镜 → 声音 → 终点”,
82
+ 8. 写“静态锚点 → 起点 → 唯一动作(触发、接触、落点)→ 次级反应 → 运镜 → 声音 → 终点”,运镜按分镜的「运镜」一行写,
82
83
  必要时用秒数分段;下一镜从这个终点继续,不另造镜外转换。
83
84
  9. 只在真实参考帧已经说明静态外观时删除重复描述;《视觉设定.md》连续性锁的锁面不在可删之列。
84
- 10. 把限制动作空间的已确认关系写成贯穿本镜的正向可见状态,只安排关系允许的动作通道;只有分镜明确改变关系时才写变化过程。可复制正文的动作边界只用肯定状态句,不用 `no/not/without + 动作` 改写。
85
+ 10. 把限制动作空间的已确认关系写成贯穿本镜的正向可见状态,只安排关系允许的动作通道;只有分镜明确改变关系时才写变化过程。优先用可见状态说明边界,必要时保留明确的排除条件。
85
86
  11. 逐镜读取文字义务。除非剧本或创作者明确要求,正文用本镜已解析的视频提示词语言直接写明任何时刻都不生成非画内字幕、caption 和对白文字叠加,不能只写抽象的“文字层为空”;这条默认与旗帜、标牌、屏幕等画内文字独立。画内 `exact_readable` 逐字写明字符、语言、承载面和位置,不能用全局 `no-text` 覆盖。
86
87
  12. 声音同轨时,把允许的发声按来源、说话人、口语语言和顺序写成完整时间线;每句从原文首字到末字,
87
88
  且逐字对白在单镜可复制正文中只出现一次。视觉动作段只按时间和说话人引用该声音事件,不再抄一遍
88
89
  台词。事件外回到已声明的环境声或静默。Brief、剧本或声音方向已经明确禁止外语前导、语气词、
89
90
  额外人声或重复时,把这些**已确认的发声边界**在完整时间线末尾合并写一次;不靠“只包含”让执行端
90
- 猜,也不自行扩充新的禁用类别。完整时间线声明是声音段落终点,其后不再追加第二组声音排除句,
91
- 且只列本镜实际有的声音层。本镜没有对白时,这条声明里不出现 dialogue,正文也不写 `no dialogue`、
92
- `无对白` 这类排除句,改为正面写出底声的构成与覆盖区间,并把「不说话」写成在场人物的可见状态:
93
- 正面句同时交代了这一镜该有什么声音。配乐层则必须显式关掉,那一条有实测支撑。
94
- 13. 成稿时逐句把 `no/not/without + 动作或状态变化` 改写为当前持续状态或允许动作;直接改正文,不调用工具或生成检查产物。再检查不跨下一镜、不要求互斥动作、不让人物或道具瞬移变形。
91
+ 猜,也不自行扩充新的禁用类别。时间线总结只列本镜实际有的声音层。
92
+ 无对白镜写清底声或静默及其覆盖区间;嘴部动作按剧本表演,不默认强制闭嘴。
93
+ 非画内配乐按目标方言声明,有需要时明确写空。
94
+ 13. 成稿时检查动作、声音和限制条件是否清楚且相容。正面状态有助于表达目标,必要的否定条件
95
+ 可以保留;不按否定句数量判错。确认不跨下一镜、不要求互斥动作、不让人物或道具瞬移变形。
96
+
95
97
  14. 用户要整集就完成整集,镜头组只是内部批次。
96
98
  15. 同一连续时空中相邻正式生成段、且目标档案支持续接时,默认选择“从上一段生成结果续接”;
97
99
  一镜一生成只决定每次装一个镜头,不等于各镜独立文生。只有创作者明确要求独立重生成,或上游
@@ -112,12 +114,12 @@ license: MIT
112
114
  - 运镜与人物动作不争夺注意力;复杂运镜必须有叙事理由。
113
115
  - 声音只写该镜需要的对白、画外音、环境或转场职责,不擅自补歌词。
114
116
  - 非画内字幕、caption 和对白文字叠加默认不生成;正文直接声明全镜任何时刻都不生成这些内容,不用抽象工作流术语代替执行指令。只有剧本或创作者明确要求才开启。画内精确文字是独立允许集合,不因关闭字幕而消失,也不让未批准文字混入。
115
- - 同轨对白/VO/OS 同时写逐字文本、口语语言和发声边界;完整时间线闭合后,不再枚举不存在的语言、语气或声源,也不追加 `no/not/without + 声音类别`。
116
- - 同轨模型下的无对白镜同样要写满声音段:正面写出底声的构成与覆盖区间,把「不说话」写成在场人物的可见状态,完整性声明只列本镜实际有的层,不枚举 dialogue。非画内配乐层显式写空(H3 为 `non_diegetic_music: N/A`)——不写配乐层实测会被模型补上,语音层未观察到同样现象。
117
+ - 同轨对白/VO/OS 同时写逐字文本、口语语言和发声边界;不添加来源没有的声源或重复限制。
118
+ - 无对白镜同样说明底声或静默;时间线总结与实际声音层一致。H3 无非画内配乐时写 `non_diegetic_music: N/A`。
117
119
  - 正文里被引号或 `<d>` 包起来的中文必须逐字来自《剧本.md》,画内标牌文字可来自《视觉设定.md》;
118
120
  分镜自己写下的画内文字与声音同样算数。`creator_markdown_check.py` 会核对四字以上的引文(VID-25)。
119
121
  台词不在剧本里就回到写作技能改剧本,不在提示词里改。
120
- - 上游持续关系只用贯穿状态和允许动作通道表达;不以 `no/not/without + 动作` 重复同一边界,也不给角色冲突动作。
122
+ - 上游持续关系用贯穿状态和允许动作通道表达,避免重复限制或冲突动作。
121
123
  - 本镜命中的连续性锁,锁面原样出现在可复制正文里;颜色、材质、形制这类跨镜不变事实不靠模型记忆。
122
124
  - 正文可直接复制,不含占位符、流程说明、文件路径或 QA 结论。
123
125
 
@@ -134,7 +136,8 @@ license: MIT
134
136
  - 目标执行端的时长、参考、声音同轨等能力:[目标模型能力档案](references/target-model-profile.md)
135
137
  - Seedance 2.0 的中文分镜、素材与声音语法:[Seedance 2.0 方言](references/seedance-2.0.md)
136
138
  - Seedance 2.5 的长叙事、时间戳和任务类型语法:[Seedance 2.5 方言](references/seedance-2.5.md)
137
- - MiniMax H3 的结构化正文与参考模式:[MiniMax H3 方言](references/minimax-h3.md)
139
+ - MiniMax H3 的结构化正文、参考模式与逐切关键帧容器:[MiniMax H3 方言](references/minimax-h3.md)
140
+ - Wan 3.0 的中文正文、素材编号与多镜时间段:[Wan 3.0 方言](references/wan-3.0.md)
138
141
  - 多镜容器或静态漫剧的交付方式:[交付形态](references/delivery-profile.md)
139
142
  - 完成前的边界检查:[审查与示例](references/review-and-fixtures.md)
140
143
 
@@ -30,6 +30,10 @@ Camera behavior 要回答“观众注意为什么在此刻改变”。常见动
30
30
  - **relationship**:重新组织两人距离/权力;
31
31
  - **transition**:把注意交给 accepted end 或出口。
32
32
 
33
+ 镜头动不动、怎么动,由分镜本镜的「运镜」一行决定,本阶段把它写成可执行的区间,不另选。
34
+ 分镜没写「运镜」的镜头按上面的动机补选,没写不等于锁定;在「注意」里写明这是本阶段补的,
35
+ 并请 `$short-drama-storyboard` 补上这一行。
36
+
33
37
  没有动机时 lock-off 是积极选择:镜头稳定地等待角色完成一次艰难决定,比装饰性环绕更有力。
34
38
 
35
39
  ### 描述 lock-off
@@ -80,6 +84,23 @@ Camera behavior 要回答“观众注意为什么在此刻改变”。常见动
80
84
 
81
85
  这里不是同时 lock 和 move。若 transition 改变 shot 已接受的 camera design,仍需 storyboard 同意。
82
86
 
87
+ ### 摄影机与主体的相对运动
88
+
89
+ 主体快跑与摄影机缓推可以同时成立,关键是写清两者的相对关系与画面结果。
90
+ 需要跟随时说明跟随方向和构图;需要人物离开画面时,保留缓推或固定机位也可以。
91
+ 不能为了消除速度差异而改写上游已确定的运镜。
92
+
93
+ ### 运动说明
94
+
95
+ 按本镜需要说明运动方式、方向、速度或触发时机、终点以及要保持的空间关系。
96
+ 与上一节的起点和落点一起核对,不要求每次恰好四项。
97
+
98
+ ### 运镜术语属于方言
99
+
100
+ 推轨、变焦、摇、甩、升降这些词在不同目标模型里的解析并不一致——有的模型的官方指南
101
+ 推荐 `push in` 而完全不收录 `dolly in`。**不要把一个模型上验证过的运镜词表照搬到另一个
102
+ 模型的正文里**;术语与写法以目标模型的方言文档为准,方言里没有记载的词按未验证对待。
103
+
83
104
  ### 非冲突但可能过载
84
105
 
85
106
  pan 同时微调焦点、handheld 带自然呼吸、dolly 配合轻微 tilt 未必矛盾;是否太复杂由 reviewer 结合 purpose 判断,不能靠 camera 动词计数硬挡。
@@ -126,6 +147,14 @@ pan 同时微调焦点、handheld 带自然呼吸、dolly 配合轻微 tilt 未
126
147
  - ambience:连续底声,不能遮蔽剧情必需对白;
127
148
  - music:写叙事功能、进入/退出与层级,不用曲名模仿未授权作品。
128
149
 
150
+ **`craft_default`**:VO 的说话人本人在画面里(内心独白、回忆旁白)且不该开口时,向分镜请求
151
+ 让她的嘴不在画面里——背身、侧脸避开镜头、取景不含嘴部,或换成手部与物件的镜头。只能保留正脸时,
152
+ 正文把 VO 标成画外,并明写她嘴唇全程闭合,生成后核对口型。一组 H3 首帧小样本里,她本人正脸
153
+ 近景、三种写法各 4 次:只标画外旁白,2 次张嘴说话、1 次微张、1 次闭合;加「嘴唇完全闭合」
154
+ 为 1/2/1;再加「旁白者不在画面、画中无人动嘴」为 1/1/2。文字约束有一点作用,但靠不住。
155
+ 同框另一个人在别人说话时不该开口,也按这个顺序:分镜能安排时让他出画或背身,只能正对镜头时
156
+ 正文明写他不说话、嘴唇闭合;各模型的实测写在对应方言里。
157
+
129
158
  ### 配乐属于时间线层 (`VID-14`)
130
159
 
131
160
  先分清两件常被混在一起的事:
@@ -113,9 +113,8 @@
113
113
  - **超出**:落在**该成员镜头**已接受时长之外的那部分被执行端截断,段尾的动作、逐字
114
114
  对白和终点姿态一起丢失,`end_report` 会声称到达了从未被拍出的终点。在多镜容器里,
115
115
  它还会挤占下一个成员镜头的起点,把两个镜头的边界一起搞坏;
116
- - **不足**:未分配的余量不会空着。执行端会用未经批准的动作、表情或镜头运动把它填满,
117
- 而这些内容没有任何上游来源,审查时也无从追责。修法是把余量分配给已有阶段,或补一个
118
- 有内容的收尾段(落住反应、保持终点姿态),不要留白。
116
+ - **不足**:执行端可能把已写动作拉长去占满镜头,写下的秒点整体后移,计划不再描述成片
117
+ (观察与修法见 [motion-recipe.md](motion-recipe.md) 3.6)。
119
118
 
120
119
  ### 多镜容器的成员资格
121
120
 
@@ -253,13 +252,13 @@
253
252
 
254
253
  `〈…〉`、方括号、竖线、分段编号和对白围栏的写法**都来自创作者档案**,本套件不把其中
255
254
  任何一种拼写规定为交付格式。可迁移的只有每一行必须回答的问题。若只写到 3.4 秒就收尾,
256
- 剩下的 1.6 秒不会是静止画面,而会被执行端用它自己选的动作填满。
255
+ 前两段的动作可能被拉长去占满 5 秒,段边界的秒点就不再是实际发生的时刻。
257
256
 
258
257
  ## 六、自检
259
258
 
260
259
  1. 容器里装了几个已接受镜头?容器时长是否正好等于这些镜头已接受时长之和?
261
260
  2. 在每个成员镜头内部,各分段时长相加是否正好等于该镜头的已接受时长?余量是被分配了,
262
- 还是被留白了?
261
+ 还是只写到一半?
263
262
  3. 多镜容器的成员是否来源顺序连续、共享同一条绑定链、不跨场次?是否每个成员仍能单独审查?
264
263
  4. 分段标识是否唯一、按时间升序?有没有跳号或重复?
265
264
  5. 每个分段内是否只有一个连续视角?切换是否都落在成员镜头边界上,而不是藏在段内叙述里?
@@ -35,7 +35,8 @@
35
35
  - **精确拦截**:两个人同时争夺一件小物、用手挡住正在合上的东西、在运动中截住某物。
36
36
  它要求两个主体的时序与位置同时精确,是最容易整镜崩掉的一类。
37
37
  - **不可见的内部状态**:`像是听见了什么`、`神色一凛`、`忽然明白过来`。这些是推断,
38
- 不是画面。演员可以演,生成模型没有可执行的目标。
38
+ 不是画面。演员可以演,生成模型没有可执行的目标。改写时不删掉情绪,而是把它翻成看得见的表情或
39
+ 身体动作:`眉头猛地皱起,转头看向门口`。
39
40
  - **否定式动作**:`没有接话`、`没有按下去`、`不去看他`。画面里"没有发生的事"无法生成;
40
41
  需要改写成一个**正在发生**的替代动作。
41
42
  - **精细编排链**:一拍里串起三步以上的手部动作,尤其是左右手分工。四秒内四步双手动作,
@@ -64,7 +65,8 @@
64
65
  1. **换承担者**:让物件或环境承担变化,而不是让手承担。`门被风带上` 好过 `他用脚勾住门`。
65
66
  2. **拆到相邻镜**:把精细动作拆成"动作前"与"结果"两镜,中间的过程不拍。
66
67
  写字的过程难生成,`笔停在纸上` 与 `纸上多了一行字` 都容易。
67
- 3. **换成停留**:把"精确地做某事"换成"做完之后手没有拿开"。停留是最容易生成的表演。
68
+ 3. **换成停留**:把"精确地做某事"换成"做完之后手没有拿开"。停留只替换精细操作,不替换表演:
69
+ 情绪峰值仍要有读得出的表情和身体变化,强度见 [motion-recipe.md](motion-recipe.md) 的表演过程。
68
70
  4. **交给声音**:动作不可见时,用已声明的声源承担(见
69
71
  [camera-audio-continuity.md](camera-audio-continuity.md))。
70
72
  5. **确实不可替代时**,在运动规格里写明该镜为高风险,并给出一个可接受的降级实现,