@oh-story/dsh 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/README.md +58 -12
  2. package/lib/client.js +2970 -537
  3. package/lib/client.js.map +4 -4
  4. package/lib/drama/manifest.json +218 -178
  5. package/lib/drama/skills/short-drama/SKILL.md +110 -117
  6. package/lib/drama/skills/short-drama/references/audience-reveal.md +14 -67
  7. package/lib/drama/skills/short-drama/references/contract-and-ownership.md +26 -77
  8. package/lib/drama/skills/short-drama/references/creator-documents.md +204 -0
  9. package/lib/drama/skills/short-drama/references/creator-workflow.md +73 -63
  10. package/lib/drama/skills/short-drama/references/knowhow-index.md +5 -0
  11. package/lib/drama/skills/short-drama/references/look-development.md +2 -3
  12. package/lib/drama/skills/short-drama/references/pickup-and-alternate.md +14 -48
  13. package/lib/drama/skills/short-drama/references/production-form-profiles.md +1 -1
  14. package/lib/drama/skills/short-drama/references/reference-roles.md +32 -135
  15. package/lib/drama/skills/short-drama/references/runtime-preflight.md +16 -19
  16. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +1002 -0
  17. package/lib/drama/skills/short-drama/scripts/project_tool.py +485 -5
  18. package/lib/drama/skills/short-drama-assets/SKILL.md +59 -170
  19. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +18 -25
  20. package/lib/drama/skills/short-drama-assets/references/character-and-look.md +13 -15
  21. package/lib/drama/skills/short-drama-assets/references/continuity-delta.md +11 -14
  22. package/lib/drama/skills/short-drama-assets/references/continuity-lock.md +116 -0
  23. package/lib/drama/skills/short-drama-assets/references/identity-vs-variant.md +6 -12
  24. package/lib/drama/skills/short-drama-assets/references/occurrence-extraction.md +8 -11
  25. package/lib/drama/skills/short-drama-assets/references/prop-and-state.md +21 -2
  26. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +12 -105
  27. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +12 -32
  28. package/lib/drama/skills/short-drama-assets/scripts/asset_check.py +1 -1
  29. package/lib/drama/skills/short-drama-image-prompts/SKILL.md +45 -155
  30. package/lib/drama/skills/short-drama-image-prompts/references/character-and-look.md +12 -13
  31. package/lib/drama/skills/short-drama-image-prompts/references/common-recipe.md +12 -13
  32. package/lib/drama/skills/short-drama-image-prompts/references/edit-and-revision.md +39 -51
  33. package/lib/drama/skills/short-drama-image-prompts/references/location-plate.md +3 -4
  34. package/lib/drama/skills/short-drama-image-prompts/references/look-and-state-variant.md +15 -14
  35. package/lib/drama/skills/short-drama-image-prompts/references/lookdev-frame.md +11 -15
  36. package/lib/drama/skills/short-drama-image-prompts/references/production-sheet-recipes.md +1 -1
  37. package/lib/drama/skills/short-drama-image-prompts/references/prop-plate.md +4 -7
  38. package/lib/drama/skills/short-drama-image-prompts/references/review-and-fixtures.md +23 -23
  39. package/lib/drama/skills/short-drama-image-prompts/references/stage-contract.md +8 -65
  40. package/lib/drama/skills/short-drama-image-prompts/scripts/image_prompt_check.py +8 -8
  41. package/lib/drama/skills/short-drama-image-prompts/scripts/selftest.py +4 -2
  42. package/lib/drama/skills/short-drama-produce/SKILL.md +67 -15
  43. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +65 -8
  44. package/lib/drama/skills/short-drama-produce/references/providers/minimax-h3-video.md +85 -0
  45. package/lib/drama/skills/short-drama-produce/references/providers/seedance.md +27 -10
  46. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +362 -3
  47. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +627 -40
  48. package/lib/drama/skills/short-drama-produce/scripts/selftest.py +5 -4
  49. package/lib/drama/skills/short-drama-review/SKILL.md +61 -123
  50. package/lib/drama/skills/short-drama-review/references/anti-template-repair.md +10 -15
  51. package/lib/drama/skills/short-drama-review/references/production-quality-gates.md +15 -16
  52. package/lib/drama/skills/short-drama-review/references/project-calibration.md +7 -9
  53. package/lib/drama/skills/short-drama-review/references/review-method.md +8 -9
  54. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +9 -13
  55. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +104 -4
  56. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +27 -19
  57. package/lib/drama/skills/short-drama-review/references/stage-contract.md +4 -63
  58. package/lib/drama/skills/short-drama-review/scripts/review_check.py +1 -1
  59. package/lib/drama/skills/short-drama-storyboard/SKILL.md +116 -238
  60. package/lib/drama/skills/short-drama-storyboard/assets/shot-template.jsonl +1 -1
  61. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +9 -34
  62. package/lib/drama/skills/short-drama-storyboard/references/comic-keyframe-lexicon.md +156 -0
  63. package/lib/drama/skills/short-drama-storyboard/references/coverage-audition.md +5 -10
  64. package/lib/drama/skills/short-drama-storyboard/references/keyframe-craft.md +12 -7
  65. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +19 -4
  66. package/lib/drama/skills/short-drama-storyboard/references/review-and-fixtures.md +27 -62
  67. package/lib/drama/skills/short-drama-storyboard/references/scene-visual-plan.md +16 -25
  68. package/lib/drama/skills/short-drama-storyboard/references/screenplay-to-keyframe-example.md +21 -23
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +8 -10
  70. package/lib/drama/skills/short-drama-storyboard/references/shot-revision-identity.md +9 -13
  71. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +16 -71
  72. package/lib/drama/skills/short-drama-storyboard/scripts/storyboard_check.py +1 -1
  73. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +123 -230
  74. package/lib/drama/skills/short-drama-video-prompts/assets/motion-spec.jsonl.md +6 -1
  75. package/lib/drama/skills/short-drama-video-prompts/assets/video-prompts.md +17 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +10 -8
  77. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +24 -6
  78. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +2 -2
  79. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +154 -0
  80. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +35 -27
  81. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +8 -11
  82. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +13 -10
  83. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +34 -63
  84. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.0.md +41 -0
  85. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +66 -0
  86. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +17 -73
  87. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +115 -0
  88. package/lib/drama/skills/short-drama-video-prompts/scripts/container_check.py +1 -1
  89. package/lib/drama/skills/short-drama-video-prompts/scripts/music_spec_check.py +1 -1
  90. package/lib/drama/skills/short-drama-write/SKILL.md +74 -268
  91. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +7 -0
  92. package/lib/drama/skills/short-drama-write/references/scene-handoff-capsule.md +17 -43
  93. package/lib/drama/skills/short-drama-write/references/screenplay-format.md +15 -15
  94. package/lib/drama/skills/short-drama-write/references/script-craft.md +208 -21
  95. package/lib/drama/skills/short-drama-write/references/stage-contract.md +11 -70
  96. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +1 -1
  97. package/lib/drama/skills/short-drama-write/scripts/screenplay_index.py +2 -2
  98. package/lib/drama/skills/short-drama-write/scripts/voice_sheet_check.py +1 -1
  99. package/lib/index.js +971 -46
  100. package/lib/index.js.map +4 -4
  101. package/lib/novel-to-game/LICENSE +21 -0
  102. package/lib/novel-to-game/README.md +180 -0
  103. package/lib/novel-to-game/README_ZH.md +178 -0
  104. package/lib/novel-to-game/VERSION +1 -0
  105. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +217 -0
  106. package/lib/novel-to-game/examples/jin-ping-mei/build/app/.vercelignore +3 -0
  107. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +130 -0
  108. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
  109. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
  110. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
  111. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
  112. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
  113. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
  114. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
  115. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  116. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
  117. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
  118. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
  119. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  120. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
  121. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
  122. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
  123. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
  124. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
  125. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
  126. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
  127. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
  128. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
  129. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
  130. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
  131. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
  132. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
  133. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
  134. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
  135. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
  136. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
  137. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
  138. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
  139. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
  140. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
  141. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
  142. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
  143. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
  144. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
  145. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
  146. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
  147. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  148. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
  149. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +1105 -0
  150. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +2539 -0
  151. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +18 -0
  152. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +147 -0
  153. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +332 -0
  154. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +7472 -0
  155. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +13077 -0
  156. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +3028 -0
  157. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +32 -0
  158. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +10 -0
  159. package/lib/novel-to-game/examples/jin-ping-mei/build/app/vercel.json +23 -0
  160. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +161 -0
  161. package/lib/novel-to-game/examples/jin-ping-mei/example.json +12 -0
  162. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +31 -0
  163. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +99 -0
  164. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +41 -0
  165. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +129 -0
  166. package/lib/novel-to-game/manifest.json +508 -0
  167. package/lib/novel-to-game/skills/game-art-direction/SKILL.md +73 -0
  168. package/lib/novel-to-game/skills/game-art-direction/agents/openai.yaml +4 -0
  169. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +119 -0
  170. package/lib/novel-to-game/skills/game-build/SKILL.md +84 -0
  171. package/lib/novel-to-game/skills/game-build/agents/openai.yaml +4 -0
  172. package/lib/novel-to-game/skills/game-build/references/build-brief-contract.md +109 -0
  173. package/lib/novel-to-game/skills/game-build/references/generative-media-pipeline.md +56 -0
  174. package/lib/novel-to-game/skills/game-build/references/playable-model-contract.md +81 -0
  175. package/lib/novel-to-game/skills/game-build/references/tts-production-contract.md +37 -0
  176. package/lib/novel-to-game/skills/game-concept/SKILL.md +72 -0
  177. package/lib/novel-to-game/skills/game-concept/agents/openai.yaml +4 -0
  178. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +94 -0
  179. package/lib/novel-to-game/skills/game-qa/SKILL.md +50 -0
  180. package/lib/novel-to-game/skills/game-qa/agents/openai.yaml +4 -0
  181. package/lib/novel-to-game/skills/game-qa/references/qa-contract.md +66 -0
  182. package/lib/novel-to-game/skills/game-qa/references/test-design-method.md +45 -0
  183. package/lib/novel-to-game/skills/game-world-design/SKILL.md +63 -0
  184. package/lib/novel-to-game/skills/game-world-design/agents/openai.yaml +4 -0
  185. package/lib/novel-to-game/skills/game-world-design/references/dialogue-design-method.md +59 -0
  186. package/lib/novel-to-game/skills/game-world-design/references/game-writing-craft.md +53 -0
  187. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +84 -0
  188. package/lib/novel-to-game/skills/game-world-design/references/numeric-design-method.md +56 -0
  189. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +124 -0
  190. package/lib/novel-to-game/skills/novel-game-analyze/SKILL.md +77 -0
  191. package/lib/novel-to-game/skills/novel-game-analyze/agents/openai.yaml +4 -0
  192. package/lib/novel-to-game/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
  193. package/lib/novel-to-game/skills/novel-to-game/SKILL.md +71 -0
  194. package/lib/novel-to-game/skills/novel-to-game/agents/openai.yaml +4 -0
  195. package/lib/novel-to-game/skills/novel-to-game/references/intake-benchmark-reference.md +42 -0
  196. package/lib/novel-to-game/skills/novel-to-game/references/intake-method.md +51 -0
  197. package/lib/novel-to-game/skills/novel-to-game/references/pipeline-contract.md +65 -0
  198. package/lib/oh-story/manifest.json +419 -309
  199. package/lib/oh-story/roles/character-designer.md +4 -4
  200. package/lib/oh-story/roles/consistency-checker.md +1 -1
  201. package/lib/oh-story/roles/narrative-writer.md +41 -42
  202. package/lib/oh-story/roles/story-architect.md +19 -23
  203. package/lib/oh-story/roles/story-explorer.md +8 -5
  204. package/lib/oh-story/skills/browser-cdp/SKILL.md +1 -1
  205. package/lib/oh-story/skills/story/SKILL.md +16 -9
  206. package/lib/oh-story/skills/story/VERSION +1 -1
  207. package/lib/oh-story/skills/story/references/author-memory.md +163 -0
  208. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +871 -0
  209. package/lib/oh-story/skills/story-cover/SKILL.md +1 -1
  210. package/lib/oh-story/skills/story-deslop/SKILL.md +10 -5
  211. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +2 -1
  212. package/lib/oh-story/skills/story-deslop/references/author-memory.md +163 -0
  213. package/lib/oh-story/skills/story-deslop/references/banned-words.md +6 -4
  214. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +871 -0
  215. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +64 -1
  216. package/lib/oh-story/skills/story-import/SKILL.md +21 -8
  217. package/lib/oh-story/skills/story-import/references/format-and-structure.md +9 -10
  218. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +2 -2
  219. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +1 -1
  220. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +14 -6
  221. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +251 -0
  222. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +98 -9
  223. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +246 -0
  224. package/lib/oh-story/skills/story-long-analyze/SKILL.md +4 -4
  225. package/lib/oh-story/skills/story-long-scan/SKILL.md +1 -1
  226. package/lib/oh-story/skills/story-long-write/SKILL.md +35 -21
  227. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +2 -1
  228. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +7 -3
  229. package/lib/oh-story/skills/story-long-write/references/author-memory.md +163 -0
  230. package/lib/oh-story/skills/story-long-write/references/banned-words.md +6 -4
  231. package/lib/oh-story/skills/story-long-write/references/cross-book-recall.md +6 -6
  232. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-long-write/references/genre-readers.md +1 -1
  234. package/lib/oh-story/skills/{story-setup/references/agent-references/hooks-chapter.md → story-long-write/references/long-chapter-hooks.md} +5 -5
  235. package/lib/oh-story/skills/story-long-write/references/{quality-checklist.md → long-chapter-quality.md} +2 -1
  236. package/lib/oh-story/skills/story-long-write/references/long-format.md +42 -0
  237. package/lib/oh-story/skills/{story-setup/references/agent-references/genre-catalog.md → story-long-write/references/long-genre-catalog.md} +11 -97
  238. package/lib/oh-story/skills/story-long-write/references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
  239. package/lib/oh-story/skills/story-long-write/references/{reversal-toolkit.md → long-reversal.md} +18 -32
  240. package/lib/oh-story/skills/story-long-write/references/{hooks-suspense.md → long-suspense.md} +6 -6
  241. package/lib/oh-story/skills/story-long-write/references/opening-design.md +1 -1
  242. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +1 -1
  243. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  244. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +14 -6
  245. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +32 -27
  246. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +5 -4
  247. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +2 -2
  248. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +17 -11
  249. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +54 -54
  250. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +871 -0
  251. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +64 -1
  252. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +251 -0
  253. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +303 -0
  254. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +98 -9
  255. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +246 -0
  256. package/lib/oh-story/skills/story-review/SKILL.md +26 -17
  257. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +2 -1
  258. package/lib/oh-story/skills/story-review/references/author-memory.md +163 -0
  259. package/lib/oh-story/skills/story-review/references/banned-words.md +6 -4
  260. package/lib/oh-story/skills/story-review/references/{quality-checklist.md → review-quality.md} +22 -21
  261. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +14 -6
  262. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +871 -0
  263. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +64 -1
  264. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +98 -9
  265. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +246 -0
  266. package/lib/oh-story/skills/story-setup/SKILL.md +85 -41
  267. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +72 -0
  268. package/lib/oh-story/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
  269. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +2 -1
  270. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +6 -4
  271. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +9 -10
  272. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  273. package/lib/oh-story/skills/story-setup/references/agent-references/genre-readers.md +1 -1
  274. package/lib/oh-story/skills/{story-short-analyze/references/hooks-chapter.md → story-setup/references/agent-references/long-chapter-hooks.md} +5 -5
  275. package/lib/oh-story/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
  276. package/lib/oh-story/skills/{story-long-write/references/genre-catalog.md → story-setup/references/agent-references/long-genre-catalog.md} +11 -97
  277. package/lib/oh-story/skills/story-setup/references/agent-references/{genre-core-mechanics.md → long-genre-mechanics.md} +1 -1
  278. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +40 -0
  279. package/lib/oh-story/skills/{story-short-write/references/reversal-toolkit.md → story-setup/references/agent-references/long-reversal.md} +18 -32
  280. package/lib/oh-story/skills/{story-short-write/references/hooks-suspense.md → story-setup/references/agent-references/long-suspense.md} +6 -6
  281. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +1 -1
  282. package/lib/oh-story/skills/story-setup/references/agent-references/{emotional-methods.md → short-emotional-methods.md} +4 -4
  283. package/lib/oh-story/skills/{story-long-write/references/genre-writing-formulas.md → story-setup/references/agent-references/short-genre-formulas.md} +32 -44
  284. package/lib/oh-story/skills/story-setup/references/agent-references/short-quality.md +39 -0
  285. package/lib/oh-story/skills/story-setup/references/agent-references/{reversal-toolkit.md → short-reversal.md} +29 -23
  286. package/lib/oh-story/skills/story-setup/references/agent-references/{hooks-suspense.md → short-suspense.md} +31 -31
  287. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  288. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +55 -55
  289. package/lib/oh-story/skills/story-short-analyze/SKILL.md +28 -28
  290. package/lib/oh-story/skills/story-short-analyze/references/{character-basics.md → analysis-character-basics.md} +1 -1
  291. package/lib/oh-story/skills/story-short-analyze/references/{character-design-methods.md → analysis-character-design.md} +1 -1
  292. package/lib/oh-story/skills/story-short-analyze/references/{character-relations.md → analysis-character-relations.md} +1 -1
  293. package/lib/oh-story/skills/story-short-analyze/references/{hooks-paragraph.md → analysis-paragraph-hooks.md} +1 -1
  294. package/lib/oh-story/skills/story-short-analyze/references/{genre-readers.md → analysis-reader-profile.md} +2 -2
  295. package/lib/oh-story/skills/story-short-analyze/references/analysis-report-style.md +45 -0
  296. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
  297. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
  298. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
  299. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
  300. package/lib/oh-story/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
  301. package/lib/oh-story/skills/story-short-analyze/references/{genre-writing-techniques.md → analysis-writing-techniques.md} +21 -19
  302. package/lib/oh-story/skills/story-short-analyze/references/deconstruction-examples.md +1 -1
  303. package/lib/oh-story/skills/story-short-analyze/references/material-decomposition.md +21 -28
  304. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +1 -1
  305. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +17 -17
  306. package/lib/oh-story/skills/story-short-analyze/references/{quality-checklist.md → source-story-quality.md} +28 -49
  307. package/lib/oh-story/skills/story-short-analyze/references/zhihu-style.md +2 -2
  308. package/lib/oh-story/skills/story-short-scan/SKILL.md +1 -1
  309. package/lib/oh-story/skills/story-short-write/SKILL.md +78 -55
  310. package/lib/oh-story/skills/story-short-write/references/author-memory.md +163 -0
  311. package/lib/oh-story/skills/story-short-write/references/banned-words.md +6 -4
  312. package/lib/oh-story/skills/story-short-write/references/cross-book-recall.md +3 -3
  313. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +4 -4
  314. package/lib/oh-story/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +3 -3
  315. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +2 -2
  316. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +3 -3
  317. package/lib/oh-story/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +6 -6
  318. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +3 -3
  319. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +4 -4
  320. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +7 -7
  321. package/lib/oh-story/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +5 -5
  322. package/lib/oh-story/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +4 -4
  323. package/lib/oh-story/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +3 -3
  324. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +32 -44
  325. package/lib/oh-story/skills/story-short-write/references/genre-writing-techniques.md +20 -18
  326. package/lib/oh-story/skills/story-short-write/references/output-contract.md +1 -1
  327. package/lib/oh-story/skills/story-short-write/references/short-craft.md +18 -18
  328. package/lib/oh-story/skills/story-short-write/references/short-deslop.md +1 -1
  329. package/lib/oh-story/skills/story-short-write/references/short-format.md +38 -8
  330. package/lib/oh-story/skills/story-short-write/references/{quality-checklist.md → short-prose-quality.md} +22 -21
  331. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +355 -0
  332. package/lib/oh-story/skills/{story-short-analyze/references/hooks-suspense.md → story-short-write/references/short-suspense.md} +31 -31
  333. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +2 -2
  334. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +31 -22
  335. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +871 -0
  336. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +64 -1
  337. package/lib/oh-story/skills/story-short-write/scripts/check-delivery-contract.js +212 -0
  338. package/lib/oh-story/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
  339. package/lib/types/client/drama-production-view.d.ts +34 -0
  340. package/lib/types/client/drama-production-view.d.ts.map +1 -0
  341. package/lib/types/client/drama-production.d.ts +92 -0
  342. package/lib/types/client/drama-production.d.ts.map +1 -0
  343. package/lib/types/client/file-activity.d.ts +9 -2
  344. package/lib/types/client/file-activity.d.ts.map +1 -1
  345. package/lib/types/client/index.d.ts +1 -1
  346. package/lib/types/client/index.d.ts.map +1 -1
  347. package/lib/types/client/production-intents.d.ts +9 -0
  348. package/lib/types/client/production-intents.d.ts.map +1 -0
  349. package/lib/types/client/production-prompts.d.ts +9 -0
  350. package/lib/types/client/production-prompts.d.ts.map +1 -0
  351. package/lib/types/client/production-runtime.d.ts +58 -0
  352. package/lib/types/client/production-runtime.d.ts.map +1 -0
  353. package/lib/types/client/video-studio.d.ts +41 -0
  354. package/lib/types/client/video-studio.d.ts.map +1 -0
  355. package/lib/types/client/workbench-ui.d.ts +5 -0
  356. package/lib/types/client/workbench-ui.d.ts.map +1 -0
  357. package/lib/types/game-verification.d.ts +16 -0
  358. package/lib/types/game-verification.d.ts.map +1 -0
  359. package/lib/types/index.d.ts +5 -2
  360. package/lib/types/index.d.ts.map +1 -1
  361. package/lib/types/production-intent.d.ts +21 -0
  362. package/lib/types/production-intent.d.ts.map +1 -0
  363. package/lib/types/production-tool.d.ts +5 -0
  364. package/lib/types/production-tool.d.ts.map +1 -0
  365. package/lib/types/reference-tool.d.ts +6 -0
  366. package/lib/types/reference-tool.d.ts.map +1 -0
  367. package/lib/types/role-provider.d.ts.map +1 -1
  368. package/lib/types/role-tool.d.ts +3 -1
  369. package/lib/types/role-tool.d.ts.map +1 -1
  370. package/lib/types/skill-provider.d.ts +7 -0
  371. package/lib/types/skill-provider.d.ts.map +1 -1
  372. package/lib/types/video-project.d.ts +42 -0
  373. package/lib/types/video-project.d.ts.map +1 -0
  374. package/lib/types/workspace-request-trust.d.ts +6 -0
  375. package/lib/types/workspace-request-trust.d.ts.map +1 -1
  376. package/lib/types/workspace-route.d.ts +20 -0
  377. package/lib/types/workspace-route.d.ts.map +1 -1
  378. package/lib/video-recap/CHANGELOG.md +282 -0
  379. package/lib/video-recap/LICENSE +21 -0
  380. package/lib/video-recap/README.en.md +257 -0
  381. package/lib/video-recap/README.md +255 -0
  382. package/lib/video-recap/manifest.json +684 -0
  383. package/lib/video-recap/skills/video-assemble/SKILL.md +97 -0
  384. package/lib/video-recap/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
  385. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +15 -0
  386. package/lib/video-recap/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
  387. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
  388. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
  389. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
  390. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
  391. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
  392. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
  393. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
  394. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
  395. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
  396. package/lib/video-recap/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
  397. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +88 -0
  398. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +345 -0
  399. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +34 -0
  400. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +305 -0
  401. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +94 -0
  402. package/lib/video-recap/skills/video-assemble/scripts/audio_automation.py +205 -0
  403. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +555 -0
  404. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +261 -0
  405. package/lib/video-recap/skills/video-assemble/scripts/jianying_builders.py +767 -0
  406. package/lib/video-recap/skills/video-assemble/scripts/jianying_model.py +111 -0
  407. package/lib/video-recap/skills/video-assemble/scripts/jianying_optional.py +24 -0
  408. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +109 -0
  409. package/lib/video-recap/skills/video-assemble/scripts/jianying_templates.py +37 -0
  410. package/lib/video-recap/skills/video-assemble/scripts/jianying_timeline_contract.py +191 -0
  411. package/lib/video-recap/skills/video-assemble/scripts/jianying_tracks.py +75 -0
  412. package/lib/video-recap/skills/video-assemble/scripts/jianying_writer.py +394 -0
  413. package/lib/video-recap/skills/video-assemble/scripts/lib.py +239 -0
  414. package/lib/video-recap/skills/video-assemble/scripts/media.py +243 -0
  415. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +477 -0
  416. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +46 -0
  417. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +486 -0
  418. package/lib/video-recap/skills/video-assemble/scripts/subtitle_core.py +376 -0
  419. package/lib/video-recap/skills/video-assemble/scripts/subtitle_render.py +88 -0
  420. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +248 -0
  421. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +89 -0
  422. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +512 -0
  423. package/lib/video-recap/skills/video-cut/SKILL.md +90 -0
  424. package/lib/video-recap/skills/video-cut/scripts/cut.py +67 -0
  425. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +320 -0
  426. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +545 -0
  427. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +348 -0
  428. package/lib/video-recap/skills/video-cut/scripts/lib.py +77 -0
  429. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +341 -0
  430. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +249 -0
  431. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +745 -0
  432. package/lib/video-recap/skills/video-recap/SKILL.md +216 -0
  433. package/lib/video-recap/skills/video-recap/references/config-playbook.md +61 -0
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +225 -0
  435. package/lib/video-recap/skills/video-recap/references/data-schema.md +534 -0
  436. package/lib/video-recap/skills/video-recap/references/research-guide.md +74 -0
  437. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +23 -0
  438. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +251 -0
  439. package/lib/video-recap/skills/video-recap/scripts/doctor.py +483 -0
  440. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +737 -0
  441. package/lib/video-recap/skills/video-recap/scripts/lib.py +242 -0
  442. package/lib/video-recap/skills/video-recap/scripts/materials.py +457 -0
  443. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +95 -0
  444. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_client.py +18 -0
  445. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_contract.py +9 -0
  446. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_evidence.py +371 -0
  447. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_observations.py +201 -0
  448. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_payload.py +227 -0
  449. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_report.py +362 -0
  450. package/lib/video-recap/skills/video-recap/scripts/mimo_qc_runner.py +129 -0
  451. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +338 -0
  452. package/lib/video-recap/skills/video-recap/scripts/recap.py +9 -0
  453. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +140 -0
  454. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +550 -0
  455. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +77 -0
  456. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +654 -0
  457. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +335 -0
  458. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +217 -0
  459. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +795 -0
  460. package/lib/video-recap/skills/video-script/SKILL.md +248 -0
  461. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +225 -0
  462. package/lib/video-recap/skills/video-script/references/research-guide.md +75 -0
  463. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +399 -0
  464. package/lib/video-recap/skills/video-script/scripts/agent_text.py +410 -0
  465. package/lib/video-recap/skills/video-script/scripts/brief_context.py +403 -0
  466. package/lib/video-recap/skills/video-script/scripts/brief_inputs.py +332 -0
  467. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +442 -0
  468. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +237 -0
  469. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +492 -0
  470. package/lib/video-recap/skills/video-script/scripts/lib.py +327 -0
  471. package/lib/video-recap/skills/video-script/scripts/narration.py +12 -0
  472. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +678 -0
  473. package/lib/video-recap/skills/video-script/scripts/review.py +42 -0
  474. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +262 -0
  475. package/lib/video-recap/skills/video-script/scripts/review_response.py +761 -0
  476. package/lib/video-recap/skills/video-script/scripts/review_runner.py +200 -0
  477. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +204 -0
  478. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +199 -0
  479. package/lib/video-recap/skills/video-script/scripts/validate.py +164 -0
  480. package/lib/video-recap/skills/video-understanding/SKILL.md +75 -0
  481. package/lib/video-recap/skills/video-understanding/references/data-schema.md +299 -0
  482. package/lib/video-recap/skills/video-understanding/references/prompt-templates.md +37 -0
  483. package/lib/video-recap/skills/video-understanding/references/research-guide.md +74 -0
  484. package/lib/video-recap/skills/video-understanding/scripts/agent_brief.py +399 -0
  485. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +410 -0
  486. package/lib/video-recap/skills/video-understanding/scripts/asr.py +260 -0
  487. package/lib/video-recap/skills/video-understanding/scripts/brief.py +12 -0
  488. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +403 -0
  489. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +332 -0
  490. package/lib/video-recap/skills/video-understanding/scripts/brief_timeline.py +442 -0
  491. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +647 -0
  492. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +237 -0
  493. package/lib/video-recap/skills/video-understanding/scripts/detect.py +513 -0
  494. package/lib/video-recap/skills/video-understanding/scripts/extract.py +62 -0
  495. package/lib/video-recap/skills/video-understanding/scripts/lib.py +470 -0
  496. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +678 -0
  497. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +204 -0
  498. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +507 -0
  499. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +199 -0
  500. package/lib/video-recap/skills/video-understanding/scripts/understand.py +9 -0
  501. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +216 -0
  502. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +327 -0
  503. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +367 -0
  504. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +162 -0
  505. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +705 -0
  506. package/lib/video-recap/skills/video-voiceover/SKILL.md +81 -0
  507. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +637 -0
  508. package/lib/video-recap/skills/video-voiceover/scripts/fish_audio.py +109 -0
  509. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +421 -0
  510. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +113 -0
  511. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +782 -0
  512. package/package.json +57 -41
  513. package/lib/drama/skills/short-drama/references/lifecycle-commands.md +0 -130
  514. package/lib/oh-story/skills/story-deslop/scripts/check-outline-copy.js +0 -241
  515. package/lib/oh-story/skills/story-long-write/references/format-and-structure.md +0 -169
  516. package/lib/oh-story/skills/story-setup/references/agent-references/genre-writing-formulas.md +0 -444
  517. package/lib/oh-story/skills/story-setup/references/agent-references/quality-checklist.md +0 -247
  518. package/lib/oh-story/skills/story-short-analyze/references/anti-ai-writing.md +0 -582
  519. package/lib/oh-story/skills/story-short-analyze/references/banned-words.md +0 -147
  520. package/lib/oh-story/skills/story-short-analyze/references/genre-catalog.md +0 -490
  521. package/lib/oh-story/skills/story-short-analyze/references/genre-core-mechanics.md +0 -425
  522. package/lib/oh-story/skills/story-short-analyze/references/genre-writing-formulas.md +0 -453
  523. /package/lib/oh-story/skills/{story-long-write/references/hooks-chapter.md → story-setup/references/agent-references/short-chapter-hooks.md} +0 -0
  524. /package/lib/oh-story/skills/{story-long-write/references/hooks-paragraph.md → story-setup/references/agent-references/short-paragraph-hooks.md} +0 -0
@@ -0,0 +1,156 @@
1
+ # 漫剧关键帧视觉词表
2
+
3
+ ## 目录
4
+
5
+ - [这份词表解决什么问题](#这份词表解决什么问题)
6
+ - [规则分级与语言政策](#规则分级与语言政策)
7
+ - [三层组织方式](#三层组织方式)
8
+ - [项目级共享画风基底](#项目级共享画风基底)
9
+ - [镜头类型一:叙事关键帧](#镜头类型一叙事关键帧)
10
+ - [镜头类型二:对话镜头(中近景)](#镜头类型二对话镜头中近景)
11
+ - [镜头类型三:动作 / 特效帧](#镜头类型三动作--特效帧)
12
+ - [组合方法:选镜头类型,填主体](#组合方法选镜头类型填主体)
13
+ - [完整示例(合成改写)](#完整示例合成改写)
14
+ - [反模式](#反模式)
15
+
16
+ ## 这份词表解决什么问题
17
+
18
+ 项目视觉方向接受为漫剧 / 二维漫画形态后,写关键帧 `generic_prompt` 的人会撞上同一个
19
+ 问题:身份、地理、边界事实都绑好了,但“这一帧怎样投影已接受的画风、当前镜头要防什么
20
+ 可读性风险”每次都要重新发明措辞,同一个项目里不同集的提示词各说各话。这份词表把
21
+ 项目级画风基底与镜头级可选词分开,让同一项目复用一份视觉语言,又不把镜头差异抹平。
22
+
23
+ 它是 [关键帧手艺](keyframe-craft.md) 的补充,不是替代:主体、边界瞬间、构图、机位、光线、
24
+ 连续性与排除项仍先写清,本词表只负责画风投影、光色倾向和当前帧的可读性约束。
25
+ 事实先于审美词的优先级不变——词表里的任何词都不能顶替身份、地理、构图与连续性事实。
26
+
27
+ ## 规则分级与语言政策
28
+
29
+ - 本词表中的画风与镜头级选词都是 `taste_option`:它们供比较,不是质量门槛。创作者选定方向后,
30
+ 把可观察的稳定项写进 `视觉设定.md` 的“项目视觉方向”;在那之前,审查不得只因没用某个词判问题。
31
+ - 不用量、词数或“必须包含某词”设门槛。项目级基底读取一套已接受的方向(可以是创作者明确
32
+ 接受的兼容组合);镜头级词只取能解释当前叙事职责或可见风险的部分。
33
+ - 提示词正文语言跟随 `prompt_language`(没有项目配置时默认 `en`)。本词表给中文词根,写入
34
+ prompt 时译为当前任务声明的语言;改了描述语言不等于
35
+ 改了画面里的可读文字,可读文字仍由已接受的文字政策决定。
36
+ - 正文里不写镜头 / 记录 ID、规则编号与状态词;这延续 `SHT-21`。下表的“镜头类型”只是
37
+ 选词入口,不进提示词正文。
38
+
39
+ ## 三层组织方式
40
+
41
+ 建议按三层组织;重点是事实先于审美词,不把段落顺序本身当成机械门槛:
42
+
43
+ 1. **场景 / 主体事实**:这一帧拍谁、在哪、处于哪个边界瞬间——来自已接受的资产、镜头边界与
44
+ [keyframe-craft.md](keyframe-craft.md) 的十二项。本词表不提供这一层,也不允许用风格词冒充它。
45
+ 2. **视觉语言投影**:项目级共享画风基底 + 当前镜头需要的光色或表现手段。先从已接受的
46
+ “项目视觉方向”读取稳定项,再按镜头目的补局部变化;不能每集回表重新选一套。
47
+ 3. **可读性 / 风险约束**:只写当前帧确实可能失去的可见信息,例如目光、持物、特效起点或
48
+ 前中后景层级。分辨率、供应商质量标签和固定负面词尾不是这一层。
49
+
50
+ ## 项目级共享画风基底
51
+
52
+ 画风基底属于项目,不属于某一种镜头。分镜阶段从 `视觉设定.md` 的“项目视觉方向”读取
53
+ “选择 + 可观察写法”;尚未决定时回到 Look Development 比较,不在单镜里代选。叙事、对话和
54
+ 动作帧都读取同一组稳定项。
55
+
56
+ | 选择入口 | 写进可观察视觉方向的投影 |
57
+ |---|---|
58
+ | 赛璐璐动画帧 | 清晰轮廓线、平整色块、层数克制的硬边阴影 |
59
+ | 厚涂漫画 | 可见笔触、以明暗塑造体积、软硬边随材质变化 |
60
+ | 平涂漫画 | 形体概括、有限色阶、弱化表面纹理 |
61
+ | 国风条漫 | 墨线粗细变化、分层设色、留白参与空间组织 |
62
+ | 日系二次元漫剧 | 简化面部体块、干净线稿、赛璐璐式表面分区 |
63
+ | 复古港漫 | 密集轮廓与排线、高反差色块、印刷颗粒 |
64
+ | 水彩叙事 | 纸面纹理、透明色层、轮廓局部晕开 |
65
+ | 极简叙事漫画 | 克制线条、大面积留白、低数量色层 |
66
+
67
+ 表里的名称只是选择入口。若删掉名称后,线条、色层、阴影边缘、材质和空间写法都没有变化,
68
+ 这个方向仍只是标签,应先回到 Look Development 把它写成可观察选择。
69
+
70
+ ## 镜头类型一:叙事关键帧
71
+
72
+ 用于承担剧情转向、揭示或场尾落点的关键画面,是漫剧分镜的默认帧型。
73
+
74
+ | 分组 | 可选词根 | 何时使用 |
75
+ |---|---|---|
76
+ | 构图表现 | 强透视、前景遮挡、特写叙事、画面重心偏置 | 透视、遮挡或不平衡构图确实承担压力 / 揭示时 |
77
+ | 光影与色调 | 暗调叙事、冷暖分区、轮廓逆光、局部高反差、低饱和色层 | 已接受方向允许该变量,且它帮助观众找到叙事重点时 |
78
+ | 可读性约束 | 视觉重点不被氛围层遮住、身份锚点可辨、前中后景层级分明 | 当前帧有雨雾、群像、暗部或复杂景深等具体风险时 |
79
+
80
+ “动态张力”不能代替冻结姿态;要写清身体朝向、重心、持物和画面边界。“电影运镜感”不进
81
+ 关键帧,摄影机随时间的变化仍由 `$short-drama-video-prompts` 负责。
82
+
83
+ ## 镜头类型二:对话镜头(中近景)
84
+
85
+ 用于以台词和神态为主的镜头,风险集中在面部、目光、持物与背景竞争。
86
+
87
+ | 分组 | 可选词根 | 何时使用 |
88
+ |---|---|---|
89
+ | 构图表现 | 人物半身构图、肩后前景、反应特写、对话框留白 | 构图需要交代关系,或交付方案确实要叠加对话框时 |
90
+ | 光影与情绪 | 柔和侧光、单侧硬光、低饱和色层、冷暖肤色分离、背景降对比 | 光线 / 色层能让表情或双方权力差变得可见时 |
91
+ | 可读性约束 | 面部识别点与目光可辨、关键手势 / 持物不被裁掉、背景不争夺注意中心 | 当前镜头的台词落点依赖对应信息时 |
92
+
93
+ “对话框留白”是交付面上的构图决定,不是每个对话镜头的默认词。角色没有关键手势或持物时,
94
+ 也不添加相应排除项。
95
+
96
+ ## 镜头类型三:动作 / 特效帧
97
+
98
+ 用于打斗、施法、爆发瞬间。下表描述的是**冻结帧里可见的处理**(方向性拖影、粒子、光刃
99
+ 凝固在一个边界瞬间),不是动作过程——“先、再、最后”与运镜过程仍属于
100
+ `$short-drama-video-prompts`。
101
+
102
+ | 分组 | 可选词根 | 何时使用 |
103
+ |---|---|---|
104
+ | 冻结动态表现 | 方向性拖影、张力透视、流光残迹、碎片定格、冲击点形变 | 这些可见痕迹能说明当前边界瞬间,而不是暗示一段过程时 |
105
+ | 特效体系(按题材选一系) | 仙侠剑气 / 水墨飞白;赛博能量束 / 霓虹光刃;魔法辉光 / 冰晶;火焰 / 金属火花 / 电弧 / 沙尘 | 已接受题材与视觉方向允许该体系时;不同体系不为热闹而混用 |
106
+ | 层次与可读性 | 特效起点和受力点可辨、武器与肢体轮廓分离、粒子不遮住身份锚点、前后层特效有明确遮挡关系 | 当前帧确实存在特效遮挡或轮廓粘连风险时 |
107
+
108
+ 不要按“动作帧”类别固定追加“无肢体畸变、运动轨迹清晰”。前者只有在当前构图造成具体
109
+ 轮廓风险时才需要改写成可见约束;后者涉及时间变化,应交给视频运动规格。
110
+
111
+ ## 组合方法:选镜头类型,填主体
112
+
113
+ 1. 先按 [关键帧手艺](keyframe-craft.md) 写清谁、在哪、边界瞬间的姿态/目光/持物、构图、机位、
114
+ 光线、连续性和排除项。这一步不碰本词表。
115
+ 2. 读取 `视觉设定.md` 的“项目视觉方向”。若基底仍只有名称或尚未决定,就在当前任务完成最小
116
+ Look Development 比较;选定结果直接写回该章节。
117
+ 3. 判断这一帧的类型:叙事关键帧 / 对话镜头 / 动作特效帧。类型由镜头目的决定,不由
118
+ “想要好看的特效”决定。
119
+ 4. 投影项目级画风的稳定项,再从对应镜头表挑当前需要的局部变化。可读性约束必须能指向
120
+ 当前帧的具体风险;写不出风险就不加。
121
+ 5. 按“事实 → 视觉语言投影 → 可读性约束”的顺序写入 prompt,并译为项目声明的提示词语言。
122
+
123
+ ## 完整示例(合成改写)
124
+
125
+ 竖屏 9:16 漫剧,已接受视觉方向为“国风条漫:墨线粗细变化、分层设色、留白参与空间组织;
126
+ 暗调场景允许局部冷暖分区”。场:雨夜天台对峙,叙事关键帧。十二项事实按
127
+ `keyframe-craft.md` 写满后,视觉投影与可读性约束这样接在事实之后:
128
+
129
+ ```text
130
+ 竖屏 9:16 中近景。机位在轴线左侧、平视略低约五度,标准焦段。前景是湿透的栏杆扶手
131
+ (占下缘约六分之一);中景两人对峙;背景是虚焦的城市灯斑与雨幕。三分构图,她落右三分线。
132
+ 她在栏杆内侧,双手握栏杆,身体朝向正前,视线落在对方胸口,无持物。人物乙站在她正前方
133
+ 约两步、略偏画面左,一手插袋,身体朝向她。光自画面右上高杆灯斜下为硬主光,左侧留暗。
134
+ 视觉重点在她握栏杆的双手。位置与持物与上一镜相同。
135
+ 视觉语言:国风条漫,墨线粗细分明,前中后景分层设色;暗调叙事,右上硬光形成局部冷暖分区。
136
+ 可读性约束:雨幕不遮住两人的面部识别点与她握栏杆的双手;栏杆、人物和城市背景层级分明。
137
+ 排除:不出现动作过程;不新增道具或可读文字。
138
+ ```
139
+
140
+ 事实段独立承担身份、地理和边界;视觉段改变这些事实如何被看见,可读性段保护雨夜构图里
141
+ 最容易丢失的信息。三者职责不同,因此不会用审美标签掩盖一条缺失的事实。
142
+
143
+ ## 反模式
144
+
145
+ 1. **项目级画风漂移**:同一项目临时从“赛璐璐动画帧”换到“厚涂漫画”,或只记名称、不记
146
+ 可观察投影。项目基底应由创作者接受并写入 `视觉设定.md` 的“项目视觉方向”;单镜只使用
147
+ 已允许的局部变化。
148
+ 2. **特效体系混用**:仙侠剑气与赛博能量束为热闹而同框。题材外的词再好看也不进本项目。
149
+ 3. **质量标签冒充事实**:用泛化分辨率、“电影级”或“大师杰作”顶替“谁在谁正前方约两步”。
150
+ 分辨率属于制作配置,泛化质量标签不进入通用关键帧提示词。
151
+ 4. **万能排除清单**:每帧都带一长串防畸变禁词。约束只防当前帧的真实风险,否则正文被
152
+ 补丁稀释(与 [production-shot-grammar.md](production-shot-grammar.md) 的反模式同源)。
153
+ 5. **把镜头类型写进正文**:“叙事关键帧、对话镜头”是选词入口,不是画面内容;正文不写
154
+ 分类名、编号与状态词(`SHT-21`)。
155
+ 6. **词表当质量门槛**:审查时只因“没用词表词汇”打回。词汇被创作者接受进视觉方向之前,
156
+ 它只是 `taste_option`。
@@ -22,18 +22,13 @@ Coverage audition 在正式 shots 前比较真正不同的导演方案,避免
22
22
  这些是比较方向,不是每场必须生成的套餐。若两项方案的观众知情时机、对齐对象、表演空间、
23
23
  最强画面和结尾落点都相同,它们仍是同一个方案。
24
24
 
25
- ## 比较记录
25
+ ## 比较方式
26
26
 
27
- 使用 `assets/coverage-audition.example.jsonl`,用真实的 screenplay-index `BLK-…` 记录绑定场次,
28
- 并绑定已接受视觉方向、制作形态、Location/View 与参与资产;逐方案回答:观众何时知道什么、
27
+ 在上下文中用真实场景 ID 绑定当前剧本、项目视觉方向、制作形态、地点视图与参与资产;逐方案回答:
28
+ 观众何时知道什么、
29
29
  站在哪一边、谁拥有表演空间、最强画面与最终落点、可能丢失的空间/反应/信息、与制作形态是否
30
30
  相容。保留反对理由,不替创作者选择。
31
31
 
32
32
  不得固定四宫格、九宫格、二十五宫格或景别比例。宫格只是人工比较界面,不是镜头数量公式。
33
- audition 本体只保存方案与比较,**不把事后选择写回自身**。创作者选择与接受使用独立的
34
- `创作者决策/<artifact-id>.json`:它以 `decision_kind: artifact_acceptance` 指向当前 audition,并额外记录 `selected_audition_record_id` 与 `selected_approach_id`。
35
- 这样选择不需要写回 audition 本体。
36
-
37
- 正式 `scene_visual_plan` 同时绑定已接受的 `source_audition_ref` 与这份决定的
38
- `creator_selection_ref`,且只能投影 `selected_approach_id` 指向的方案。未选择时 audition 保持候选,
39
- 不能据此发布正式 plan 或 shots。
33
+ 展示各方案的取舍后,由创作者选择;只把选中的观看位置、信息时机、空间与声音策略投影进正式
34
+ `分镜.md`。未选择时所有方案都只是上下文候选,不能据此写正式镜头。
@@ -81,10 +81,15 @@ composition, camera/lens, frame-only staging, and exclusions.
81
81
  排除:无动作过程,无雨丝拖影。
82
82
  ```
83
83
 
84
- `text_treatment_refs` must resolve to the asset owner's accepted text-policy
85
- field (or explicitly candidate policy in a provisional chain). A frozen frame
86
- may determine whether the surface is legible in this composition; it may not
87
- replace the source wording or policy with an untraceable prose instruction.
84
+ Every visible entry the finished frame carries is listed in the shot's required
85
+ `视觉依据` field, resolving to a real `视觉设定.md` entry; an `IMG-...` prompt item
86
+ in `图片提示词.md` is a separate axis and does not stand in for it, and
87
+ `视觉设定.md` itself does not define `IMG-...` IDs. Write that list from the
88
+ finished frame, not from the shot's intent — the subject that gets missed is the
89
+ one that entered the composition while the frame was being written. A frozen frame may determine whether the surface
90
+ is legible in this composition; it may not replace the exact wording or policy
91
+ with an untraceable prose instruction. If the policy is still undecided, say so
92
+ instead of inventing a hidden candidate state.
88
93
 
89
94
  ## 尾帧:什么时候可以有,以及它换来什么代价(`SHT-17`)
90
95
 
@@ -122,11 +127,11 @@ from the boundary that frame declares. 首帧写进任何由运动或终点首
122
127
 
123
128
  Keyframe 默认是 shot start,不是“本镜最有戏的时刻”。为避免把 end 提前:
124
129
 
125
- 1. 先冻结 `boundary_ref`(`boundary_role: start`),草拟 prompt 时暂不读 end/motion prose;
130
+ 1. 先明确本帧冻结 `SHOT-...` 的起点,草拟正文时暂不读终点与运动描述;
126
131
  2. 只填 start 已成立的 position/pose/gaze/hands/held props/visible state;
127
132
  3. 再与 end 做“新出现事实”差集;差集中的事实不得出现在 keyframe prompt;
128
- 4. 渲染 Markdown 后从自然语言反向提取手位/持物/目光/可见状态,与
129
- structured boundary 再比一次;不能只验 JSON 投影而忽略真正交付的 prompt。
133
+ 4. 写完 Markdown 后从自然语言反向提取手位、持物、目光和可见状态,与镜头起点再比一次;
134
+ 不能只看条目说明而忽略真正交付的正文。
130
135
 
131
136
  反例:start 是“右手空置、看对方”,end 是“右手握铃绳、看门”。冻结帧写
132
137
  “手已握铃绳”即使很好看,也属于 boundary drift。
@@ -57,9 +57,21 @@
57
57
  | 一拍是爆发动作 | 若单镜过载,可按起势/接触/结果等力学阶段拆,切点绑定精确状态 |
58
58
  | 一拍是纯反应/沉默 | 只有承担反应或选择后果时独立成镜;停留由后果与节奏决定 |
59
59
 
60
- **建立镜头**是常见选择:新地点若观众尚不能定位人物、入口或冲突区域,
61
- 用合适景别交代;若前镜已经建立地理,或上游有意让观众先迷失/延迟识别,就不为
62
- 凑“第一镜全景”自增。任何新增镜头仍须解释它覆盖的内容与信息职责。
60
+ **建立镜头要自己挣到位置**。新地点确实可能需要让观众定位人物、入口或冲突区域,但
61
+ “先给一个空景全景说明这是哪儿”是长片的开场习惯:它把最前面的时间花在观众还没有理由
62
+ 在意的信息上。竖屏快节奏交付里默认反过来——**地理在动作内部到达**:人物已经在做的事、
63
+ 已经在说的话带出空间,观众边看边拼。这与剧本环节“在压力活跃处进入、用具体行动证明进入
64
+ 状态”的默认是同一条,不要在分镜层把它撤销。
65
+
66
+ 交代空间的镜头在这两种情况下成立:空间事实本身承担本镜因果(距离决定来不来得及、出口
67
+ 决定能不能走、谁站在门口决定谁看见了),或后续镜头的方位判断依赖它而动作本身给不出。
68
+ 成立时它也不必是空景全景——带着人物和动作的取景通常能一并完成,还省一个镜头。
69
+
70
+ 若前镜已经建立地理,或上游有意让观众先迷失/延迟识别,同样不为凑“第一镜全景”自增。
71
+ 任何新增镜头仍须解释它覆盖的内容与信息职责。
72
+
73
+ **`craft_default`**:以上是快节奏竖屏短剧的默认取向。项目声明了不同的观看契约(长篇、
74
+ 剧场感、慢节奏、以空间为主角)时,创作者说明理由即可覆盖,审查者不得单据此阻断交付。
63
75
 
64
76
  ## 四、动作顺序交接(给视频提示词环节的输入)
65
77
 
@@ -67,12 +79,15 @@
67
79
 
68
80
  ```text
69
81
  起点:<已接受镜头边界,可静止也可在运动中>
70
- 顺序:<上游动作> → <必要反应或注意力转移> → <已接受终点>
82
+ 唯一动作:<触发> → <主体完成一条可见状态转换;交接时写清接触与落点> → <必要反应>
83
+ 终点:<已接受镜头边界;逐项接住位置、双手、持物与可见状态>
71
84
  摄影意图:<固定/移动及其叙事职责>
72
85
  ```
73
86
 
74
87
  - 起点逐字段写入已接受的 `start_boundary`,不把静态关键帧的媒介性质改成“人物必须静止”;
75
88
  - 结束状态由分镜文件记录,下一镜通过引用比较,不靠复制长篇说明获得权威;
89
+ - 「唯一动作」是本镜的主状态链,不是限制镜内只能发生一个原子动作;它把必要步骤放在同一条
90
+ 因果线上,确保上一个可见状态确实走到下一个可见状态。
76
91
  - 并行槽只放有来源的变化:他人反应、环境压力或持续运动锚点可以
77
92
  帮助画面成立,但没有叙事/物理依据时宁可保持静止,不为满足配额发明微动态;
78
93
  - 只有已接受的时长或制作方案要求时才写秒数、角度或位移;它们是当前镜头选择,
@@ -1,70 +1,35 @@
1
- # 分镜诊断目录:可机器判定的那一部分
1
+ # 分镜完成前检查
2
2
 
3
- ## 目录
3
+ 这份清单只检查 `分镜.md` 能直接证明的结构事实,把审查注意力留给真正需要读懂戏的判断。
4
+ 检查发现问题就修正文档,不另建 coverage、QA 或校验结果文件。
4
5
 
5
- - [这份目录只收什么](#这份目录只收什么)
6
- - [诊断目录](#诊断目录)
7
- - [不进这份目录的东西](#不进这份目录的东西)
6
+ ## 可直接核对
8
7
 
9
- ## 这份目录只收什么
8
+ - 每个 `SHOT-...` ID 唯一,来源场景 ID 能在 `剧本.md` 找到;
9
+ - 每个制作相关的动作、对白、VO/OS、SFX、画面文字与连续性要求都由镜头承载,或有明确创作理由;
10
+ - 同一来源动作只有一个主要落实镜头,其他镜头只增加反应、细节或重新解释;
11
+ - 每镜时长是正数,全剧时长等于可见镜头时长之和;目标时长只用于报告差值,不是质量门槛;
12
+ - 起点和终点都写绝对事实,不使用“同上”“保持不变”代替;
13
+ - 相邻镜头的站位、朝向、视线、持物、伤势、光态与可读文字连续;
14
+ - 每镜都有「视觉依据」字段,条目名称能在《视觉设定.md》找到同名标题;关键帧正文点名的人物、地点、道具全部在列,「控制」不超过这一格画面承担得起的范围;
15
+ - 已用的 `IMG-...` 必须是《图片提示词.md》的可见标题,并带中文名称和控制范围;没有合适条目时明写「无」,不伪造 ID;
16
+ - 提示词条目与真实输入图片分开记录;只有创作者已提供或经确认生产、且当前可读的实际图片才能声称为「输入参考图」,并用独立稳定的 `REF-...` 槽位、显式顺序、仅用 `/` 分隔的项目相对路径、中文名称、用途、控制与不得控制范围定位;每个槽位的 `用途` 取自封闭词表,一镜最多一张起始帧与一张结束帧;一张都没有、只准备了一部分、全部就绪和创作者明确选择文生视频必须如实区分;
17
+ - 冻结关键帧只投影所声明的边界:默认起点;外部工作流确实需要时才增加终点帧;
18
+ - 可复制关键帧正文不含 ID、文件路径、工作流状态或工艺说明。
10
19
 
11
- 本文只登记**不需要读懂戏就能判定**的分镜缺陷:时长账目的算术、关键帧声明的边界是否
12
- 与它绑定的字段一致、边界条目有没有写成常见的回指说法、每条引用是否解析得到一个上游快照。它们由
13
- [storyboard_check.py](../scripts/storyboard_check.py) 执行,`enforcer` 一律是 `validator`。
14
- 脚本读引用时先取文件的 `sources` 声明,再按每条引用的 `src` 取回 `owner` 与 `artifact`。
20
+ 结构检查失败时点名文件、场景或镜头 ID、冲突事实和负责 owner,不回显整段私有文本。
15
21
 
16
- 分成脚本与审查两条路的理由很实际:账目类错误由人来核对既慢又不可靠——覆盖里少写一个
17
- 镜头 ID,肉眼看过去和写全了完全一样。把这类工作交给脚本,审查者的注意力才能留给
18
- 真正需要判断的东西。
22
+ ## 需要语义审查
19
23
 
20
- ## 诊断目录
24
+ 下列问题不能靠字段数量或脚本替代:
21
25
 
22
- | code | classification | enforcer | 默认 severity | owner | 含义 |
23
- |---|---|---|---|---|---|
24
- | REF_SRC_IS_NOT_DECLARED | structural_invariant | validator | error | storyboard | 引用的 `src` 在本文件 `sources` 里没有声明 |
25
- | REF_HAS_NO_UPSTREAM_BINDING | structural_invariant | validator | error | storyboard | 引用既没有 `src`,也没有完整的 `owner`/`artifact` |
26
- | REF_IS_NOT_AN_OBJECT | structural_invariant | validator | error | storyboard | 引用位置上不是一个对象 |
27
- | SOURCE_ENTRY_IS_INCOMPLETE | structural_invariant | validator | error | storyboard | `sources` 条目缺少 `owner` 或 `artifact` |
28
- | SHT05_BOUNDARY_ENTRY_IS_A_BACK_REFERENCE | structural_invariant | validator | error | storyboard | 边界条目整条是「同上」「位置不变」这类回指,没有写出绝对事实 |
29
- | SHT16_RECORD_MISSING | structural_invariant | validator | error | storyboard | 覆盖记录没有 `episode_duration` |
30
- | SHT16_RECORD_INCOMPLETE | structural_invariant | validator | error | storyboard | `episode_duration` 缺少 `counted_shot_ids` 或 `unresolved_durations` |
31
- | SHT16_SHOT_LEFT_THE_TOTAL | structural_invariant | validator | error | storyboard | 覆盖列出的镜头既不计入总和也没被挂起 |
32
- | SHT16_SHOT_COUNTED_AND_UNRESOLVED | structural_invariant | validator | error | storyboard | 同一镜头既算进总和又列为未定 |
33
- | SHT16_SHOT_UNRESOLVABLE | structural_invariant | validator | error | storyboard | 时长记录点名的镜头不在镜头文件里 |
34
- | SHT16_COUNTED_SHOT_HAS_NO_DURATION | structural_invariant | validator | error | storyboard | 计入总和的镜头没有数值 `duration_seconds` |
35
- | SHT16_SUSPENDED_SHOT_HAS_A_DURATION | structural_invariant | validator | error | storyboard | 挂起为未定的镜头其实已有时长 |
36
- | SHT16_TOTAL_MISSING | structural_invariant | validator | error | storyboard | `shot_seconds_total` 不是数值 |
37
- | SHT16_TOTAL_IS_NOT_THE_SUM | structural_invariant | validator | error | storyboard | 总和不等于各计入镜头时长之和 |
38
- | SHT16_DELTA_MISSING | structural_invariant | validator | error | storyboard | 声明了目标却没有带符号差值 |
39
- | SHT16_DELTA_IS_WRONG | structural_invariant | validator | error | storyboard | 差值不等于总和减目标 |
40
- | SHT16_SHOT_LISTED_TWICE | structural_invariant | validator | error | storyboard | 同一镜头在时长记录里出现多次,会被加两次 |
41
- | SHT16_EPISODE_SHOT_LEFT_THE_TOTAL | structural_invariant | validator | error | storyboard | `shots.jsonl` 里的镜头既不计入总和也没被挂起 |
42
- | SHT16_DISPOSITION_MISSING | structural_invariant | validator | error | storyboard | 声明了目标却没有对差值的处置 |
43
- | SHT16_DISPOSITION_CLAIMS_A_TARGET | structural_invariant | validator | error | storyboard | 没有目标却给出了判断目标的处置 |
44
- | SHT17_KEYFRAME_HAS_NO_ID | structural_invariant | validator | error | storyboard | 关键帧记录没有 `keyframe_id` |
45
- | SHT17_BOUNDARY_ROLE_MISSING | structural_invariant | validator | error | storyboard | 关键帧没声明它冻结的是哪一端 |
46
- | SHT17_BOUNDARY_REF_MISSING | structural_invariant | validator | error | storyboard | 关键帧没有绑定它投影的边界 |
47
- | SHT17_BOUNDARY_REF_DISAGREES_WITH_ROLE | structural_invariant | validator | error | storyboard | 声明的角色与绑定的边界字段不一致 |
48
- | SHT17_BOUNDARY_REF_UNRESOLVABLE | structural_invariant | validator | error | storyboard | 关键帧绑定的镜头不在镜头文件里 |
49
- | SHT17_DUPLICATE_BOUNDARY_KEYFRAME | structural_invariant | validator | error | storyboard | 同一镜头的同一端有两张关键帧 |
50
- | SHT01_BLOCK_UNCLAIMED | structural_invariant | validator | error | storyboard | 处理为 `covered`/`intentional_repeat` 的块没有镜头认领 |
51
- | SHT01_BLOCK_CLAIMED_TWICE | structural_invariant | validator | error | storyboard | 非 `intentional_repeat` 的块被多个镜头认领 |
52
- | SHT01_BLOCK_IS_ON_SCREEN_ANYWAY | structural_invariant | validator | error | storyboard | 记为不拍的块却有镜头认领 |
53
- | SHT01_BLOCK_NOT_IN_SCREENPLAY | structural_invariant | validator | error | storyboard | 镜头认领的块不在剧本索引里 |
54
- | SHT01_BLOCK_HAS_NO_DISPOSITION | structural_invariant | validator | error | storyboard | 有制作相关的块没有写处理 |
55
- | SHT01_DISPOSITIONS_MISSING | structural_invariant | validator | error | storyboard | 覆盖表没有 `dispositions` |
56
- | SHT01_DISPOSITION_MALFORMED | structural_invariant | validator | error | storyboard | 处理行不是对象或没点名块 |
57
- | SHT01_DISPOSITION_UNKNOWN | structural_invariant | validator | error | storyboard | 处理不是工作流定义的四种之一 |
58
- | SHT01_DISPOSITION_REPEATED | structural_invariant | validator | error | storyboard | 同一个块写了多行处理 |
59
- | SHT01_DISPOSITION_NOT_IN_SCREENPLAY | structural_invariant | validator | error | storyboard | 处理点名的块不在剧本索引里 |
60
- | SHT01_DISPOSITION_HAS_NO_REASON | structural_invariant | validator | error | storyboard | 重复或省略是决定,必须写理由 |
61
- | SHT01_SCREENPLAY_IS_NOT_FULLY_INDEXED | structural_invariant | validator | error | storyboard | 剧本索引里还有没归类的行,覆盖检查看不到剧本的全部 |
26
+ - 镜头是否守住来源原意和观众知情时机;
27
+ - 重复覆盖是否真的增加新的反应、证据或理解;
28
+ - 景别、机位、运动和切点是否由注意、压力、关系、空间或节奏变化驱动;
29
+ - 多人调度是否让主要关系和注意交接可读;
30
+ - 证据文字、决定性手部动作、脸与眼神是否会被遮挡;
31
+ - 关键帧是否既可冻结,又保留镜头下一步需要发生的动作空间;
32
+ - 画面里没有被名字点到、但仍需要认出身份的小比例或背景人物,是否也进了「视觉依据」——机械核对只抓被点名的那一类。
62
33
 
63
- ## 不进这份目录的东西
64
-
65
- - **目标时长的差值本身**:`SHT-16` 只让脚本核对差值算得对不对。差值多大是创作者的判断,
66
- 目标时长是计划而不是质量门槛,脚本不因为差值大小报错。
67
- - **关键帧数量**:默认一张首帧,只在交付工作流真的消费尾帧时才有第二张。缺尾帧不是缺陷,
68
- 脚本也不检查"是否该有尾帧"。
69
- - **镜头拆得对不对、景别选得对不对、构图好不好**:这些需要读懂本场在做什么,属于审查者,
70
- 判据在本技能的工艺参考里,不在这份目录。
34
+ 关键帧数量、镜头数量、景别比例和目标时长差值都不是通用质量门槛。审查 finding 必须给出位置、
35
+ 证据、影响和必须达到的修订结果,不能只说“镜头不够电影感”或“看起来像 AI”。
@@ -1,39 +1,30 @@
1
1
  # 场次视觉戏剧计划
2
2
 
3
- `scene_visual_plan` 是项目级视觉方向与逐镜规格之间的可选中间层。它回答整场怎样改变观众的
4
- 位置、空间压力、观看节奏和声音注意;它**不是第二份剧本**,也**不拥有镜头边界**。
3
+ 场次视觉计划是正式分镜前的可选思考层,回答整场怎样改变观众位置、空间压力、观看节奏和声音注意。
4
+ 它不是第二份剧本,也不拥有镜头边界。
5
5
 
6
- ## 启用条件
6
+ ## 什么时候使用
7
7
 
8
- 只在导演选择明显影响体验时使用:主要人物亮相、身份/证据揭示、关系反转、高潮/结尾、
9
- 复杂多人调度、延迟信息的悬念场或承担视觉母题的场景。普通场景直接从原文落实进入 shots,
10
- 不要把可选方法变成表单负担。
8
+ 只在导演选择明显影响体验时使用:主要人物亮相、身份/证据揭示、关系反转、高潮或结尾、复杂多人
9
+ 调度、延迟信息的悬念场、承担视觉母题的场景。普通场景直接写镜头,不增加表单。
11
10
 
12
- ## 写法
11
+ ## 在上下文比较什么
13
12
 
14
- 从 `assets/scene-visual-plan.example.jsonl` 建立一条候选。场次使用 screenplay-index 中真实的
15
- `BLK-…` heading/action 记录;再分别绑定已接受视觉方向、制作配置、Location/View 与涉及的
16
- CHAR/LOOK、PROP/PSTATE。只有创作者选过 audition 时才加 `source_audition_ref` 与独立的
17
- `creator_selection_ref`;没有 audition 时删除这两项,不能保留占位引用。先写:
13
+ 使用场景标题 ID,例如 `EP001-SC003`,并结合当前视觉设定比较:
18
14
 
19
- 1. **戏剧转向**:本场哪一种公开关系、信息或选择不可逆地改变;
20
- 2. **观众立场**:开场站在哪一方、结束被移到哪里;
15
+ 1. **戏剧转向**:哪一种公开关系、信息或选择不可逆地改变;
16
+ 2. **观众立场**:开场站在哪一方,结束被移到哪里;
21
17
  3. **空间压力**:入口、距离、占位、遮挡、让路或退路怎样承载人物策略;
22
18
  4. **视觉推进**:什么时候让信息、反应或空间先于特写落地;
23
19
  5. **摄影节奏**:固定、移动、切近和停留分别由什么变化触发;
24
20
  6. **反应落点**:结尾画面由谁的选择或空间后果承担;
25
- 7. **声音策略**:主导声源、主动留白、距离变化、撤出/恢复和相邻场 sound bridge。
21
+ 7. **声音策略**:主导声源、主动留白、距离变化、撤出/恢复和 sound bridge。
26
22
 
27
- 每次景别、机位或运动变化都应对应注意、关系、信息、压力或节奏变化。高潮不默认“主角特写
28
- + 推镜”;场尾也不只是把最后一句对白拍完。
23
+ 只有真正不同的方案才比较;不固定方案数、宫格、景别或镜头数。选定后直接把结果投影进
24
+ `分镜.md` 的镜头职责、景别/机位、起止边界与声音,不另存 audition、plan 或接受记录。
29
25
 
30
- ## 接受与投影
26
+ ## 检查
31
27
 
32
- 先向创作者展示转向、立场、空间、摄影、关键揭示、最终落点和声音运动。创作者接受后,正式
33
- shots 用准确 `scene_visual_plan_ref` 投影这条策略,并继续由每个 shot 自己拥有 purpose、
34
- duration、blocking 与 start/end boundary。计划与剧本或资产冲突时退回 owner,不让计划覆盖事实。
35
-
36
- 审查时不按字段完整度打分,而看 audience alignment、knowledge、spatial access/pressure、rhythm
37
- 中是否至少一项产生有意变化;有意保持同一观看位置也可以成立,但要说明它怎样制造观察、困住感
38
- 或重新解释同构画面。再看空间和声音是否共同承担同一转向,以及逐镜变化是否只是重复
39
- 中近景—反打—推镜。
28
+ 不按字段完整度打分。检查观众立场、知情时机、空间压力或节奏是否发生有意变化;有意保持同一观看
29
+ 位置也可以成立,但必须说明它怎样制造观察、困住感或重新解释同构画面。再检查空间、摄影和声音是否
30
+ 共同承担同一转向,而不是重复“中近景—反打—推镜”。
@@ -53,17 +53,8 @@ A02(摊手与蓝线头)。
53
53
  - 构图:纵向双人中景,柜台横线分隔双方。
54
54
  - 摄影机:固定机位,让“不递”这个选择持续存在。
55
55
 
56
- 来源:`shots.jsonl` 首行先声明本文件用到的上游快照——
57
-
58
- ~~~json
59
- {"record_type": "sources", "schema_version": "1.0.0", "sources": {"screenplay-index": {"owner": "short-drama-write", "artifact": "剧集/EP004/screenplay-index.jsonl"}}}
60
- ~~~
61
-
62
- 镜头记录里的每条来源引用只写这个快照键和记录 ID:
63
-
64
- ~~~json
65
- {"src": "screenplay-index", "record_id": "BLK-EP004-SC002-A01"}
66
- ~~~
56
+ 来源:`剧本.md / EP004-SC002` 中“沈禾把拳压在台沿但不递牌”的动作和对应对白。正式镜头在
57
+ `分镜.md` 直接写这个场景 ID 与必要短引文。
67
58
 
68
59
  若为了增加动作而让沈禾把取衣牌交出去,就改写了故事,必须拒绝这种改动。
69
60
 
@@ -104,6 +95,22 @@ A02(摊手与蓝线头)。
104
95
  冻结检查:所有事实能在同一时刻存在。摊开右手是 SHOT-02 的动作过程;KEY-03 只写
105
96
  “已经摊开”。
106
97
 
98
+ ## KEY-03 之后:从成稿画面回填三条依据
99
+
100
+ 关键帧写完才知道这一格里到底有谁、有什么。按成稿正文逐项读出来,再写进 SHOT-03 的字段:
101
+
102
+ ```markdown
103
+ - 图片提示词项:IMG-SHENHE-SHEET《沈禾角色板》(控制:身份、手部特征);IMG-CLAIM-TAG《取衣牌道具板》(控制:牌形、编号面、边缘磨损)
104
+ - 输入参考图:无(待补参考图:沈禾手部、取衣牌背面、本镜起始帧)
105
+ - 视觉依据:《视觉设定.md》·人物「沈禾」(控制:身份、右手特征);人物「蒋姨」(控制:身份、视线方向);道具「取衣牌」(控制:牌形、背面材质、蓝线头位置);地点「社区洗衣房」(控制:柜台横线、冷白顶光)。
106
+ ```
107
+
108
+ 三处值得注意:
109
+
110
+ - 蒋姨只在后景留一双模糊的眼睛,但观众要认出是她,所以她在列;
111
+ - 牌正面的“17”本镜看不到,所以「控制」写的是「背面材质」而不是「编号面」;
112
+ - 沈禾整身造型不在这一格里,所以不写「本集造型」——上一镜绑过不等于这一镜也该绑。
113
+
107
114
  ## 连续性交接
108
115
 
109
116
  | 字段 | SHOT-01 结束 | SHOT-02 开始与结束 | SHOT-03 开始 |
@@ -136,22 +143,13 @@ A02(摊手与蓝线头)。
136
143
  | 本镜表演状态 | 本技能 | 边界里可见的收敛:下颌收紧、身体不前倾、音量压在楼道回声之下 | 不把“压着嗓子”升级成“低吼”或“怒斥” |
137
144
  | 下游 `delivery` | 视频提示词 | 由同一条来源取到的语气,再落成呼吸、停顿和音量走向 | 不新起情绪词,也不与本镜表演状态相反 |
138
145
 
139
- 两处引用同一条来源。各自文件先在 `sources` 里声明这份剧本索引的快照:
140
-
141
- ~~~json
142
- {"screenplay-index": {"owner": "short-drama-write", "artifact": "剧集/EP002/screenplay-index.jsonl"}}
143
- ~~~
144
-
145
- 镜头记录与运动规格里的引用都写成:
146
-
147
- ~~~json
148
- {"src": "screenplay-index", "record_id": "BLK-EP002-SC004-D01"}
149
- ~~~
146
+ 两处引用同一条来源:`剧本.md / EP002-SC004 / 角色甲对白“你现在放回去……”`。分镜与视频提示词
147
+ 都保留这个场景 ID 与准确台词,不另造情绪来源。
150
148
 
151
149
  - 角色乙的 `(笑)` 同样同源投影:本镜写“嘴角上扬、眼睛不动、重心后靠”,下游写
152
150
  “句尾带气声的短笑”,两处解释的是同一条括注,不是两次独立发明。
153
151
  - 若下游认为该情绪不成立——例如楼梯间的回声让“压着嗓子”传不出信息——修订回到剧本:
154
- 编剧改括注并重新发布,本技能与视频提示词再各自重新投影一次。**不能**在镜头写
152
+ 编剧改括注后,本技能与视频提示词再各自重新投影一次。**不能**在镜头写
155
153
  “克制”、在运动规格写“爆发”,让同一句台词挂着两个互相冲突的情绪来源。
156
154
  - 情绪来源只决定表演状态,不自动决定景别或运镜。`(压着嗓子)` 不等于必须切特写;
157
155
  本镜给什么景别,仍由观众此刻必须读到的信息决定。
@@ -26,10 +26,8 @@
26
26
  连续表演和空间关系能守住原意时,几段原文可以合在一镜;揭示、反应、证据细节或空间
27
27
  变化很重要时,一段原文也可以由几镜承担。
28
28
 
29
- 已接受的原文落实表要保存完整的 `shot_refs`,不能只写裸镜头 ID。文件的 `sources` 为每个
30
- 上游快照声明一次负责人与准确文件,每条引用再用 `src` 指向这条声明并
31
- 写上 `record_id`,这样才能知道审查的是哪一版。同一文件内部的关系可以用 `*_ids`;
32
- 跨文件关系必须用 `*_refs`,以便来源改变后发现过期引用。
29
+ 原文落实直接写在 `分镜.md`:每个制作相关的动作、对白、声音和画面文字都指向承担它的
30
+ `SHOT-...`;镜头条目反向写场景 ID 与必要短引文。来源改变后逐场复核对应镜头,不依赖隐藏引用。
33
31
 
34
32
  重复拍同一段内容,只有在第二次带来新的观众体验时才成立,例如新增反应、矛盾、
35
33
  此前保留的证据或对前镜的新理解;不能因为第一次对应关系被忘了就重复。
@@ -69,8 +67,8 @@
69
67
 
70
68
  ### 观众可见性 (`SHT-12`)
71
69
 
72
- 构图同时决定观众此刻能知道什么。每个事实单独建立一条 `audience_visibility`:绑定准确
73
- 的 `source_ref`,选择 `show_now` 或 `withhold_now`,写明可见或可听的载体,并分别写出
70
+ 构图同时决定观众此刻能知道什么。每个事实单独写一条观众可见性判断:绑定准确场景 ID,说明
71
+ 现在展示还是暂时扣住,写明可见或可听的载体,并分别写出
74
72
  揭示条件、保护方法和理由。同一镜中的不同事实可以在不同时间放出。
75
73
 
76
74
  背影、只露腿部的入场、门缝、前景遮挡、延迟对焦,以及**逆光成剪影或压暗到只剩轮廓**,
@@ -98,10 +96,10 @@
98
96
  跨轴本身不是错误;没有动机又让空间难以理解才是问题。跨轴时可以使用中性过渡镜头、
99
97
  人物在同一镜内穿轴、有意制造主观错乱,或重新建立空间。
100
98
 
101
- 画面文字必须服从资产负责人确定的文字政策。镜头和关键帧通过 `text_treatment_refs`
102
- 指向准确政策字段,可以决定文字是否可见、大小、角度和对焦,但不能静默编造文案,
103
- 也不能改写 `exact_readable`、`graphic_only`、`no_readable_text` 或待定状态。候选预览只能
104
- 引用候选政策,并且不能直接交付。
99
+ 画面文字必须服从 `视觉设定.md` 中已经写明的文字政策。镜头和关键帧直接引用对应标题或
100
+ `IMG-...`,可以决定文字是否可见、大小、角度和对焦,但不能静默编造文案,也不能改写
101
+ “逐字可读”“只保留图形”或“无可读文字”等当前决定。政策仍未决定时要明确标为未决,不能
102
+ 假装已经可以交付。
105
103
 
106
104
  ## 景别与摄影机动机
107
105
 
@@ -7,23 +7,19 @@
7
7
 
8
8
  - **重排**:只改变顺序,镜头目的与边界职责不变时保留原 ID;刷新依赖顺序与相邻边界。
9
9
  - **插入**:新增一个独立注意或戏剧职责时创建新 ID;不要给后续所有镜头重新编号。
10
- - **内容修订**:同一镜头目的下调整构图、blocking 或边界,保留 ID 并重新发布。
11
- - **拆分**:原镜头被两个或更多独立职责取代时,retire 旧 ID,为每个新镜头创建新 ID;记录
12
- `revision_lineage`,不把旧 ID 偷给其中一个子镜头。
13
- - **合并**:多个旧镜头被一个新决定取代时,retire 全部旧 ID,创建新 ID,并记录来源集合。
14
- - **恢复**:retire 的 ID 不复用于无关镜头;需要恢复同一职责时用 lineage 显式说明。
10
+ - **内容修订**:同一镜头目的下调整构图、blocking 或边界,保留 ID 并更新当前文档。
11
+ - **拆分**:原镜头被两个或更多独立职责取代时,停用旧 ID,为每个新镜头创建新 ID;在修订说明中
12
+ 写清前身,不把旧 ID 偷给其中一个子镜头。
13
+ - **合并**:多个旧镜头被一个新决定取代时,停用全部旧 ID,创建新 ID,并列出来源集合。
14
+ - **恢复**:停用的 ID 不复用于无关镜头;需要恢复同一职责时显式说明关系。
15
15
 
16
- 普通新镜只需要稳定 `shot_id`;没有 predecessor 或 retired IDs 时省略 `revision_lineage`,
17
- 不保存 `mode: new` 和空数组来重复本段规则。
18
- 拆分、合并或恢复旧职责时,从
19
- [`revision-lineage.fragment.json`](../assets/revision-lineage.fragment.json) 插入统一结构;同一 shot 文件
20
- 内的前身与 retired 关系使用稳定 ID,不伪造指向本文件自身的引用。
16
+ 普通新镜只需要稳定 `SHOT-...`。拆分、合并或恢复旧职责时,在 `分镜.md` 的修订说明中列出前身、
17
+ 后继与停用 ID;没有关系时不写空模板。
21
18
 
22
19
  ## 每次拆分、合并或重排后的对账
23
20
 
24
- 重新核对 coverage 的每条 `shot_refs`、场次视觉计划投影、关键帧、motion、容器成员、相邻
25
- start/end boundary、总时长与审查记录。旧 ID 保留在 lineage / retire 记录中用于解释历史,
26
- 不能继续被 active coverage 或交付容器引用。
21
+ 重新核对原文落实、场次视觉计划、关键帧、`MOTION-...`、多镜分组、相邻起止边界、总时长与审查
22
+ 结论。旧 ID 只在修订说明中解释历史,不能继续被当前镜头或交付分组引用。
27
23
 
28
24
  脚本可以检查引用、集合和算术;“是否仍是同一个导演决定”由 agent 根据镜头目的、信息变化、
29
25
  表演所有权和边界职责判断,不能用文本相似度或数组位置硬判。