@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
@@ -5,20 +5,24 @@
5
5
  - [改编契约](#1-先建立改编契约)
6
6
  - [长材料导入](#长材料导入先建立可追溯语义层)
7
7
  - [功能账本](#2-用功能账本压缩)
8
+ - [按爽点压缩](#先按爽点取舍)
8
9
  - [信息视觉化](#3-信息视觉化阶梯)
9
10
  - [因果桥](#4-保住因果桥)
11
+ - [重排登记](#重排也要登记)
12
+ - [新增登记](#新增也要登记)
10
13
  - [单集化](#5-单集化而不肢解)
11
14
  - [登记不等于兑现](#5b-登记不等于兑现)
12
15
  - [分级审查](#6-规则分级与审查)
13
16
 
14
- 改编不是把原文缩短,也不是为短剧补一套流行结构。目标是保留原材料真正承担的戏剧功能,
15
- 再为屏幕、单集边界和制作条件寻找新的载体。
17
+ 改编不是把原文按顺序缩短,也不是为短剧补一套原著没有的流行结构。先找出原著里观众为之
18
+ 而来的爽点,把它们排到观众最早能拿到的位置;再保住让这些爽点成立的戏剧功能,为屏幕、
19
+ 单集边界和制作条件寻找新的载体。
16
20
 
17
21
  ## 1. 先建立改编契约
18
22
 
19
23
  | 类别 | 含义 | 处理 |
20
24
  |---|---|---|
21
- | 不可改承诺 | 核心关系、关键选择、结局含义、必要世界规则 | 保持事实与功能 |
25
+ | 不可改承诺 | 核心人物的立场与性情、核心关系、主线、关键选择、结局含义、必要世界规则 | 保持事实与功能 |
22
26
  | 可换载体 | 叙述顺序、场景、配角、信息出现方式 | 可压缩/合并,但记录替代关系 |
23
27
  | 可删冗余 | 重复说明、只连接路程的段落、无新状态的复述 | 删除并说明没有损失什么 |
24
28
  | 未决歧义 | 原材料本身矛盾或授权不清 | 保留问题,不替作者定案 |
@@ -72,18 +76,25 @@ development,避免交付包把输入材料带出边界。
72
76
  谁已经与谁结盟、主角手里已经有什么。任何一项超前,这段就只能作为风格或信息参考,
73
77
  不能作为当前集的依据。
74
78
 
75
- **召回只补细节,不新增剧情**。 已接受的分集契约决定这一集发生什么;回原文是把已经
76
- 决定的事写具体。原文里另有更好看的段落时,它要走修订已接受契约的路径,由 develop
77
- owner 改分集地图,而不是在写正文时顺手塞进来。
79
+ **召回补细节;把后文提前是改地图**。 已接受的分集契约决定这一集发生什么;回原文是把
80
+ 已经决定的事写具体。原文后段另有该提前的高光时,把它提前是正当的改编,不是虚构——但它
81
+ 要作为 `move_earlier` 或 `cold_open` 登记进改编映射、由 develop owner 改分集地图,而不是
82
+ 在写正文时顺手塞进来。
78
83
 
79
84
  **`craft_default · STY-22`**:回原文取细节时,用"人物 + 地点/物件 + 当前动作或冲突"
80
85
  的事件锚点检索,回读命中段落而不是凭摘要写,并在使用前把片段的知情状态与当前集进入
81
- 状态对照;超前的片段只作参考。召回用于补足已接受契约的细节,不用于新增剧情。
86
+ 状态对照;超前的片段只作参考。召回只补足已接受契约的细节;要提前后文的情节,先改分集地图。
82
87
 
83
88
  ## 2. 用功能账本压缩
84
89
 
85
- **`STY-07 · reviewed_invariant`**:人物或场景合并必须保留戏剧作用、知情范围、
86
- 关系位置和因果桥;“人更少”不能单独证明合并成功。
90
+ **`STY-07 · reviewed_invariant`**:任何改编处理——合并、换载体、压缩、重排、新增——都保住
91
+ 原著核心人物的立场与性情、核心关系和主线,不与原著事实相矛盾,创作者已接受的改动除外;人物或
92
+ 场景合并还要保留戏剧作用、知情范围、关系位置和因果桥。“人更少”不能单独证明合并成功。
93
+
94
+ 立场与性情指这个人对主角是帮、是压还是观望,为什么,以及他做事的方式。压力可以放大、外化:
95
+ 原著里温和护短、只是不看好主角的上级,可以把怀疑当面说出来,成为第一个被打脸的人;改成冷脸拒绝、
96
+ 深夜来关灯的压制者,就换了一个人。改人物立场或关系不是换载体:映射按实际处理登记,在
97
+ `lost_or_changed` 写明改了什么,`creator_acceptance.status` 保持 `pending`,把提议写进简报交创作者决定。
87
98
 
88
99
  为候选人物、场景和信息记录它承担的功能:
89
100
 
@@ -93,6 +104,19 @@ owner 改分集地图,而不是在写正文时顺手塞进来。
93
104
  - 哪段建立后续兑现所需的误信/承诺;
94
105
  - 哪个空间限制让冲突必须现在发生。
95
106
 
107
+ ### 先按爽点取舍
108
+
109
+ 压缩分两步:先只留热度最高的情节点——爽点、糖点、虐点,排名来自原著分析的爽点表;
110
+ 再删掉不服务这些点的支线,合并功能重复的人物。一个改编实例只保留了原著约六成情节。
111
+ 核心人物通常 3–5 人,全剧不超过 20 人,高潮集新增的人物不超过 2 个。
112
+
113
+ 集数与章数的关系由爽点分布决定,不按章 1:1 切:没有爽点的长段并进相邻集或删掉,
114
+ 一章里有两个大爽点时可以拆成两集,后文的高光可以提前。按原著顺序一章一集往下切,
115
+ 结果通常是拉长而不是压缩,第一个爽点被推到好几集之后。
116
+
117
+ **`craft_default · STY-28`**:压缩先按爽点表留下热度最高的情节点,再删支线、合并功能重复的
118
+ 人物;集数跟着爽点分布走,不按章节 1:1 切分。
119
+
96
120
  ### 先删线,再合并
97
121
 
98
122
  删掉整条支线和合并人物是两种操作,判据不同,顺序也不能反。**先删线**:合并是把功能
@@ -112,8 +136,9 @@ owner 改分集地图,而不是在写正文时顺手塞进来。
112
136
  5. **删掉后会留下多少孤儿铺垫**?前面为它埋的每一处都要跟着删或改指向。孤儿铺垫比
113
137
  支线本身更伤:它们看起来像伏笔,观众会一直等。
114
138
 
115
- **最常见的错误删法**:把节奏慢的线删掉、把好看的线留下。慢线经常正是让快线成立的
116
- 条件——铺垫、代价、信息落差都住在慢线里。删掉之后快线还在,但它不再打中人。
139
+ **要防的误删**:慢线里常住着让快线成立的条件——铺垫、代价、信息落差。整条删掉之后
140
+ 快线还在,但它不再打中人。先留好看的线本身没有错;把这些条件压缩或换载体转移到保留的线上,
141
+ 不必连同慢线整条保留。
117
142
 
118
143
  删线时把这条线承担的功能逐项列出来(用本节开头的功能账本),标明每一项是**一起删掉**
119
144
  还是**转移到哪条保留的线**。转移的每一项都要写清接收方多承担了什么;只写"合并到主线"
@@ -177,13 +202,51 @@ owner 改分集地图,而不是在写正文时顺手塞进来。
177
202
  }
178
203
  ~~~
179
204
 
205
+ ### 重排也要登记
206
+
207
+ 改编映射的 `disposition` 取值:`preserve`(保留)、`merge`(合并)、`change_carrier`(换载体)、
208
+ `compress`(压缩)、`omit`(删去)、`move_earlier`(提前到更早的集)、`cold_open`(提前做某集
209
+ 开场,再回到原时序)、`add`(新增原著没有的人物、场景或对手,见[新增也要登记](#新增也要登记))、
210
+ `unresolved`(未决)。
211
+
212
+ `move_earlier` 和 `cold_open` 带一项因果补偿义务,写进 `causal_compensation`:
213
+
214
+ - **铺垫要跟着提前**:被提前的一拍依赖哪些事实,每条写清在哪一集、用什么可见载体先埋下;
215
+ 来不及埋的,改由开场后的补充交代承担,并写明补在哪里。
216
+ - **观众要能定位**:冷开之后回到起点时,观众靠什么知道时间回拨了——字幕卡、同一物件或场所
217
+ 的前后对照、一句点明时间的台词;提前到正常时序里的,写清它和前后集的因果怎样接上。
218
+ - **原位置要处理**:原来那一拍所在的集现在少了什么,是删去、改成余波,还是由别的爽点顶上。
219
+
220
+ **`reviewed_invariant · STY-29`**:登记为 `move_earlier` 或 `cold_open` 的映射写明它依赖的
221
+ 铺垫在哪一集、以什么载体先出现,或观众靠什么定位时间,以及原位置怎样处理;审查者按映射
222
+ 对照分集记录与剧本,提前的一拍在观众缺少必要事实时出现即为缺陷。
223
+
224
+ ### 新增也要登记
225
+
226
+ 原著没有的东西——一个新人物、一场新编的戏、一个新对手或换掉的对手——单独登记一条 `add`,
227
+ 不藏在 `change_carrier` 或 `move_earlier` 的备注里:
228
+
229
+ - `source_span` 指向它插进去的位置,或它服务的那段原著;
230
+ - `preserved_functions` 写它承担的功能;
231
+ - `addition_rationale` 写两件事:为什么原著已有的人和事承担不了这个功能;核对过哪些原著事实,
232
+ 逐条说明不矛盾;
233
+ - 在简报「原著没有、本轮新增的内容」里列出,交创作者确认。
234
+
235
+ 节奏档案要的有对手反转、题材卡要的当众压迫,先从原著已有的人和他们真做过的事里找:原著里的
236
+ 质疑者、起哄的群体、竞争者、规章与期限。某一集原著确实没有对手时,报出档案偏差,或把反转交给
237
+ 已有的人;不把支持者改成压迫者,也不为凑数新增对手。
238
+
239
+ **`craft_default · STY-30`**:原著没有的人物、场景或对手登记为 `add`,写明承担的功能、为什么
240
+ 原著已有的人和事承担不了、核对过哪些原著事实,并列进简报交创作者确认;对手先从原著已有的人和
241
+ 他们做过的事里找。
242
+
180
243
  ## 5. 单集化而不肢解
181
244
 
182
245
  短剧单集应完成一个局部状态变化,同时保持长线:
183
246
 
184
247
  - 当集兑现原材料的一部分吸引力;
185
248
  - 结尾压力由本集选择/后果产生;
186
- - 不靠把一个完整反应切掉来制造“卡点”;
249
+ - 卡点停在下一次揭晓之前,不靠把本集的局部结果切掉来制造;
187
250
  - 下一集的进入状态是精确事实,不是“局势更紧张”。
188
251
 
189
252
  可把一段长叙事拆成多集,但每集都要回答“本集观众具体得到了什么”。
@@ -200,6 +263,9 @@ owner 改分集地图,而不是在写正文时顺手塞进来。
200
263
 
201
264
  两种都答不出来的,它就不是“不可更改的事实”,是一句备注,按备注处理。
202
265
 
266
+ 世界设定尤其适合延后。第 1 集只需要观众看懂眼前这场冲突用到的那一条规则,其余设定登记到
267
+ 它第一次改变人物选择的那一集。把整套设定塞进首集,只会换来大段说明和旁白。
268
+
203
269
  同一个失败也发生在单集内部:分集记录写了“可见载体”“载体直接支持的判断”,剧本却从没演过
204
270
  那个载体。最常见的一种是需要对照才成立的证据——“装置生效前后哼的同一句,音准完全不同”——
205
271
  剧本只写了“之后”,“之前”从没上过屏幕,于是这条信息释放在纸面上成立、在画面上不成立。
@@ -212,7 +278,8 @@ owner 改分集地图,而不是在写正文时顺手塞进来。
212
278
  ## 6. 规则分级与审查
213
279
 
214
280
  - `structural_invariant`:来源与功能对应表、授权边界、铺垫、兑现和交接引用都能解析。
215
- - `reviewed_invariant`:合并没有造成知情穿帮,压缩没有删断因果,新的表现方式保留核心含义。
281
+ - `reviewed_invariant`:合并没有造成知情穿帮,压缩没有删断因果,新的表现方式保留核心含义,
282
+ 人物立场、核心关系和主线没有被改写(STY-07)。
216
283
  - `craft_default`:优先用选择、证据和空间后果承载说明;有明确风格理由时可以调整。
217
284
  - `taste_option`:保留旁白、倒叙、多声部人物、慢场或开放结尾均是创作者选择。
218
285
 
@@ -11,8 +11,9 @@
11
11
  7. 系列弧线与分集地图
12
12
  8. 集间状态交接
13
13
  9. 扩写、压缩与重排
14
- 10. 合成示例
15
- 11. 失败征兆与审查问题
14
+ 10. 项目节奏档案
15
+ 11. 合成示例
16
+ 12. 失败征兆与审查问题
16
17
 
17
18
  ## 1. 分集的工作定义
18
19
 
@@ -67,9 +68,10 @@
67
68
 
68
69
  钩子要连接本集目标。若开场刺激与后续无因果关系,它只是装饰。
69
70
 
70
- **可选的结果预演**:家庭、悬疑或关系戏有时先给观众看一个未来结果,再回到造成它的
71
- 决定。只有两段由同一关系动作、道具或场所事实清楚相连时才使用;否则会像无来源的
72
- 预告片。它是叙事选择,不是每集开场要求。
71
+ **倒叙与结果预演**:任何题材都可以先给观众看一个后面的结果或高光,再回到造成它的决定,
72
+ 只要它服务本集的钩子。两段要由同一人物、关系动作、道具或场所事实清楚相连,否则会像
73
+ 无来源的预告片。用来解释眼前危机的闪回放在集中段更好用:开场先给危机,观众开始追问
74
+ 「怎么会这样」时再闪回,闪回结束回到危机继续推。它是叙事选择,不是每集开场要求。
73
75
 
74
76
  ### 3.3 目标与反对力量
75
77
 
@@ -184,7 +186,9 @@ C 让状态 D 改变,迫使人物放弃旧策略或付出更大代价;
184
186
  - **决定钩子**:人物必须现在选择,拖延本身也有代价;
185
187
  - **信息钩子**:观众获得能重排现场意义的事实。
186
188
 
187
- **`taste_option · STY-06`**:可以安静开场、延迟解释、让观众先知道或让角色先知道;只要当前压力可感知并服务作品气质。
189
+ **`taste_option · STY-06`**:开场的气质可以安静、喜剧、亲密或激烈,可以延迟解释、让观众先知道或让角色先知道,
190
+ 只要当前压力可感知并服务作品气质。首钩在第几秒出现、情绪触点隔多久一次不由这一条决定,
191
+ 由[项目节奏档案](#10-项目节奏档案)里已接受的数值决定。
188
192
 
189
193
  ### 4.2 设计出去的压力
190
194
 
@@ -204,7 +208,7 @@ C 让状态 D 改变,迫使人物放弃旧策略或付出更大代价;
204
208
 
205
209
  有些项目的观看契约里存在一个**门槛集**:观众要继续看下去,必须先付出一点额外代价——
206
210
  解锁、跳转到另一个入口、等待,或完成某个平台动作。门槛是否存在、落在哪里,**由创作者
207
- 按项目声明**;本套件不设默认位置,不假定任何平台规则,也不把门槛位置当作质量判据。
211
+ 按项目声明**;本套件不假定任何平台规则,也不把门槛位置当作质量判据。
208
212
 
209
213
  门槛不新增规则,它让本文件已有的三条**在这个位置收紧**——因为别处失手观众只是走神,
210
214
  这里失手观众直接离开:
@@ -220,9 +224,56 @@ C 让状态 D 改变,迫使人物放弃旧策略或付出更大代价;
220
224
  门槛集本身仍是普通一集:有自己的局部结果,出去的压力仍从本集结果长出。门槛只是给
221
225
  "停在哪里"这个选择多加一层约束。
222
226
 
223
- **`craft_default`**:项目声明了门槛集时,把它安排在一次尚未兑现的爆发之前,并确认门槛
224
- 处的悬念只依赖观众已经建立起来的人物、规则与赌注。集号、比例、是否设门槛都由创作者
225
- 决定;套件不提供默认值。
227
+ 门槛的集号由创作者定,套件不提供默认值。创作者已经声明要设门槛、又请你建议落在哪一集时,
228
+ 可以拿常见的经验区间作示例——第一道约在第 8–16 集,第二道约在第 25–30 集——再按本项目的
229
+ 爽点分布挪动。没有声明门槛的项目不提这些区间。
230
+
231
+ 门槛处怎么停:
232
+
233
+ - **停在揭晓的前一秒**:身份揭穿、重大抉择、表白、秘密揭晓都可以。把这次高潮劈成两半,
234
+ 前一半在本集推到悬崖边,后一半留给门槛后的第一拍。本集自己的局部结果照样要先兑现,
235
+ 停住的是下一次揭晓,不是这一集的结果。
236
+ - **钩子分台词钩与画面钩**:台词钩是一句没说完的问句或一句身份暗示;画面钩是一个做到一半的
237
+ 动作——门推开一半、信封拆开一半。两种都要指向观众已经在等的那件事。
238
+
239
+ **`craft_default · STY-27`**:项目声明了门槛集时,把它安排在一次尚未兑现的爆发之前,停在
240
+ 揭晓的前一秒,并确认门槛处的悬念只依赖观众已经建立起来的人物、规则与赌注。集号与是否设
241
+ 门槛由创作者决定。
242
+
243
+ ### 4.4 首集入口
244
+
245
+ 第 1 集从危机或观众收益最强的一处开始,不从原著第一章或人物的日常开始。原著开篇常是
246
+ 温吞的日常,照搬过来观众几秒就划走。定入口前至少比较三个候选:
247
+
248
+ - **时序入口**:按原顺序最早能成立的一处,作为对照;
249
+ - **收益入口**:观众在此处收益最强、同时能交代主角身份、危机与目标的一处。改编项目优先取
250
+ 原著分析里的爽点表与开篇替换点;
251
+ - **冷开入口**:把后文一次高潮提前,先放它的最后一拍或揭晓前一秒,再回到起点追因。登记为
252
+ `cold_open`,补偿义务见 [改编重排](adaptation-craft.md#重排也要登记)。
253
+
254
+ 每个候选写清两件事,用同一把尺子比:
255
+
256
+ - **开场第一帧观众看见什么**:写成一格画面,再写它让观众问出的那个问题。这个问题要不靠读屏幕
257
+ 文字、不靠认识人物就成立;静止的画面也可以,只要它自己提出问题。
258
+ - **整集收益**:观众在这一集拿到什么,还缺什么信息,缺的在哪里补。
259
+
260
+ 冷开常见的三条否决理由,多半是把冷开做成了兑现本身:
261
+
262
+ - 「观众还不认识这些人,看不懂」:冷开取的是冲突最尖的那一下,要的是一眼读得懂的处境——一群人
263
+ 喊着要封号、一张被火光照亮的脸,不需要知道谁是谁;
264
+ - 「会把后面的兑现提前花掉」:取揭晓前一秒时答案留在原位;取最后一拍时只放结果的一个画面,
265
+ 不放来龙去脉,观众追的是「怎么走到这一步」;
266
+ - 「同一拍会在集中段再演一遍」:开场给片段,回到原位时给完整的一场,观众得到的是认出来的快感,
267
+ 不是重复。
268
+
269
+ 三条都答不了,再按收益选别的入口。
270
+
271
+ 第 1 集结束前,观众要知道主角是谁、他眼下被什么压着、他想要什么。大目标在观众刚认下主角时
272
+ 就说出口,而且要具体到可核对的数字、期限或对象,之后再拆成阶段小目标。
273
+
274
+ **`craft_default · STY-25`**:定第 1 集入口前比较至少三个候选,其中一个是后文高潮提前的冷开;
275
+ 每个候选写出开场第一帧观众看见的那一格画面和它提出的问题,再写整集收益;选开场画面自己就是
276
+ 钩子、观众收益强、且能在集尾前交代身份、危机与目标的一处;大目标尽早说出口,具体到可核对。
226
277
 
227
278
  ## 5. 因果节拍与升级链
228
279
 
@@ -452,7 +503,39 @@ C 让状态 D 改变,迫使人物放弃旧策略或付出更大代价;
452
503
 
453
504
  **`taste_option`**:单集长度、集数、每集镜头量级由创作者的格式与发行方案决定。
454
505
 
455
- ## 10. 合成示例
506
+ ## 10. 项目节奏档案
507
+
508
+ 节奏数值不是套件级规则,是项目档案。本阶段按制作形态提出一份,创作者接受或改写后,
509
+ 写进 `short-drama.json` 的 `creator_authority.rhythm_profile`。之后剧本、分镜与审查只拿
510
+ 已接受的数值做算术核对;档案缺失、未接受,就是未声明,不核对。
511
+
512
+ 提出时把候选档案写进创作简报「形式与制作边界」一节,`status` 写 `proposed`。创作者接受或
513
+ 改写后,由 `$short-drama` 把它写入项目配置,状态变为 `accepted`。以后要改,同样走一次决策。
514
+
515
+ | 字段 | 含义 | AI 真人短剧起点 | 漫剧起点 |
516
+ |---|---|---|---|
517
+ | `form` | 制作形态 | `ai_live_action` | `motion_comic` |
518
+ | `first_hook_seconds` | 第一个钩子最迟在第几秒出现 | 5 | 5 |
519
+ | `beat_interval_seconds_max` | 相邻两个情绪触点(冲突台词、动作或新信息)之间最长隔几秒 | 30 | 30 |
520
+ | `opposed_reversals_per_episode_min` | 每集至少几次有具体对手参与的反转 | 1 | 1 |
521
+ | `end_on_peak` | 集尾停在峰值上直接收,不在峰值后再缓一段 | `true` | `true` |
522
+ | `reprise_previous_last_beat` | 下一集开头先接上一集最后一拍 | `true` | `true` |
523
+ | `vo_share_max` | `[VO]`(旁白与内心独白)占全集台词可发声字数的比例上限;`[OS]` 画外对白不算 | 0.3(未实测) | 0.3(未实测) |
524
+ | `target_avg_shot_seconds` | 目标平均镜长(秒) | 2.5 | 3.0(未实测) |
525
+ | `close_shot_share_min` | 近景类镜头——近景、特写、大特写与细节镜头——合计占全集镜头数的比例下限 | 0.45 | 0.45(未实测) |
526
+ | `first_major_payoff_by_episode` | 全书第一个大爽点最迟在第几集 | 1 | 1 |
527
+
528
+ 真人列的镜长与近景类占比来自一组真人短剧的实测:平均镜长约 2.5 秒,特写加近景约占一半。首钩秒数
529
+ 来自一组实测:5 部里有 3 部在前 5 秒内给出第一个钩子。触点间隔取「每 20–30 秒一个情绪触点」的
530
+ 上沿。标「未实测」的是待校准的起点,没有测量依据。
531
+
532
+ 这些是起点,不是质量线。靠旁白推进的解说漫可以把 `vo_share_max` 调高;生活流、留白多的
533
+ 作品可以放宽触点间隔和镜长。改哪一项、为什么,写进创作简报交创作者决定。
534
+
535
+ **`craft_default · STY-26`**:按制作形态从上表起步提出项目节奏档案,交创作者接受或改写;
536
+ 默认值只是起点,不是套件级门槛,未接受的档案不作为任何核对依据。
537
+
538
+ ## 11. 合成示例
456
539
 
457
540
  沿用一个全新虚构情境:一家共享厨房面临关停,排班员叶澄一直暗中调换灶位保护弱势摊主。
458
541
 
@@ -479,7 +562,7 @@ C 让状态 D 改变,迫使人物放弃旧策略或付出更大代价;
479
562
 
480
563
  差别不在事件更多,而在前一选择改变了对手筹码,人物随后作出带代价的新选择。
481
564
 
482
- ## 11. 失败征兆与审查问题
565
+ ## 12. 失败征兆与审查问题
483
566
 
484
567
  ### 失败征兆
485
568
 
@@ -19,7 +19,7 @@
19
19
  - [职场与喜剧](#职场与喜剧用流程证明能力用反差制造笑点)
20
20
  - [身份错位喜剧](#身份错位喜剧让外部任务逼身份作选择)
21
21
  - [生活流与小人物](#生活流与小人物让小目标留下真实余波)
22
- - [开场选择](#开场选择从旧办法开始付出代价处进入)
22
+ - [开场选择](#开场选择从观众最先拿到收益处进入)
23
23
  - [钩子](#钩子要接着本集结果往下走)
24
24
  - [制作难点](#提前写清制作难点)
25
25
  - [审查问题](#审查问题)
@@ -53,6 +53,7 @@
53
53
  | 古装 / 奇幻 / 婚恋 / 隐藏身份 | 礼制、阶序、阵营与公开选择限制关系 | 行为让隐藏地位或联盟获得新的公开解释 | 造型、随行层级、身份道具、入场方式、空间区域与知情者反应 | 奢华/寒酸形容词堆叠;突然报身份代替此前证据 | [古装权谋](genre-cards/古装权谋.md) / [仙侠修真](genre-cards/仙侠修真.md) / [豪门婚恋](genre-cards/豪门婚恋.md) / [破镜重圆](genre-cards/破镜重圆.md) |
54
54
  | 职场 / 技术 / 轻喜剧 | 一个日常工作疏漏造成越来越具体的后果 | 别人能当场核对的修复结果,随后角色地位改变 | 必须照抄的技术名称、操作顺序、核对点、屏幕/设备状态与见证更新 | 同事先夸“天才”;通用屏幕特写;人人同一惊讶反应 | [职场喜剧](genre-cards/职场喜剧.md) |
55
55
  | 复仇 / 权力反转 | 对手拥有真实手段,主角以证据、联盟或能力改变实际权力 | 一项旧权力失效并产生后果,而非只获得口头认可 | 证据链、公开场合、对手反制、受影响者的反应与代价 | 重复受辱—亮牌;身份揭示不改变任何人的行动空间 | [复仇打脸](genre-cards/复仇打脸.md) |
56
+ | 逆袭 / 系统流 / 重生穿越(爽文) | 对手的轻视或压迫当众落地,主角手里有对手看不见的底牌 | 奖励兑现或当众打脸,旁观者改口也算 | 对手当众做过的事、见证者分区、奖励的可见数值(屏显交给后期) | 奖励换成焦虑;删掉喜剧反应;第一次打脸拖到很多集后 | [逆袭](genre-cards/逆袭.md) / [系统流](genre-cards/系统流.md) / [重生穿越](genre-cards/重生穿越.md) |
56
57
  | 动作 / 任务 / 冒险 | 地理、资源、时间与对手学习共同收窄可行路径 | 完成一个阶段目标并留下伤势、损耗、暴露或路线变化 | 轴线、出入口、距离、持物、能力边界、伤势与交接 | 动作更大但任务状态不变;同一镜承担过多力学阶段 | [动作任务](genre-cards/动作任务.md) |
57
58
  | 身份错位 / 身体互换喜剧 | 外部任务迫使人物用不合身的身份、身体或权限解决现实问题 | 任务状态先改变,再让身份误读带来关系或地位余波 | 当前身份占用、别人如何识别、身体能力边界与多主体位置 | 设定梗不断重复,任务和人物策略没有进展 | [身份错位](genre-cards/身份错位.md) |
58
59
  | 生活流 / 小人物 / 都市温情 | 一个具体小目标被来客、误会、匮乏或照料义务打断 | 小事被实际完成、放弃或重新理解,关系留下轻微但可见变化 | 日常物件、距离、手部选择、环境节奏与留白 | 套用真人爽剧的密集大特写和公开翻盘,压扁生活质地 | [生活流](genre-cards/生活流.md) |
@@ -178,18 +179,21 @@
178
179
  公开打脸、身份宣告或每段都升高音量。二维漫剧可以利用 hold pose、局部循环、环境声和
179
180
  留白承接余韵,不要把真人爽剧的密集大特写、眼部推进和群体震惊当成提速办法。
180
181
 
181
- ## 开场选择:从旧办法开始付出代价处进入
182
+ ## 开场选择:从观众最先拿到收益处进入
182
183
 
183
- 不规定第几秒或必须哪种景别。比较几个入口,选择能让观众立刻追踪因果的一处:
184
+ 首钩最迟在第几秒出现,由已接受的[项目节奏档案](episode-design.md#10-项目节奏档案)决定;
185
+ 这里不规定景别。第 1 集的入口按[首集入口](episode-design.md#44-首集入口)至少比较三个,
186
+ 包括一个冷开;下面是常见的入口形态:
184
187
 
188
+ - 危机已经爆发,或一次打脸、奇观、反转正在发生;
185
189
  - 人物正在使用惯常办法,异常结果让这套办法开始带来损失;
186
190
  - 日常仪式出现一个会改变人物处境的小错误;
187
191
  - 一个关系请求同时触碰双方不能兼得的义务;
188
192
  - 已经发生的后果通过一件看得见的东西或行动再次出现;
189
193
  - 观众比角色多知道一条会影响下一步的事实,或少知道一条必须追问的原因。
190
194
 
191
- 开场可以安静、喜剧化、亲密或激烈。通常应让观众感到压力,并看见一个还没解决的问题,
192
- 不是固定时长、台词数量、冲突音量或镜头类型。更完整的切入方法见
195
+ 开场的气质可以安静、喜剧化、亲密或激烈;无论哪种,观众都要很快感到压力,并看见一个
196
+ 还没解决的问题。前史与切入窗口见
193
197
  [serial-character-and-memory.md](serial-character-and-memory.md)。
194
198
 
195
199
  ## 钩子要接着本集结果往下走
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  genre: 复仇打脸
3
- aliases: [复仇, 打脸, 逆袭, 权力反转, 扮猪吃虎, 隐藏身份归来, 清算]
3
+ aliases: [复仇, 打脸, 权力反转, 扮猪吃虎, 隐藏身份归来, 清算]
4
4
  form: 竖屏连续短剧
5
5
  confidence: high
6
6
  basis: 套件既有工艺文件与短剧写作经验归纳
@@ -0,0 +1,51 @@
1
+ ---
2
+ genre: 系统流
3
+ aliases: [系统流, 系统, 金手指, 任务奖励, 签到, 面板升级, 积分兑换]
4
+ form: 竖屏连续短剧
5
+ confidence: medium
6
+ basis: 套件既有工艺文件与短剧写作经验归纳
7
+ ---
8
+
9
+ # 系统流题材卡
10
+
11
+ ## 题材核心与观众为什么看
12
+
13
+ 观众看的是**奖励一笔一笔到账,以及看不起主角的人一个一个被迫改口**。奖励先行:系统上线的那一集就要兑现第一笔,观众先尝到甜头,才会追着看下一笔怎么来。系统是外部授权的能力,它的契约、边界与可靠性按 [premise-devices.md](../premise-devices.md) 写;本卡只管观众契约。
14
+
15
+ ## 压力来源与冲突发动机
16
+
17
+ 压力主要来自对手,不来自系统的代价。对手的压迫要落成一件当众做过的事:在群里带头举报、当面把申请表推回来、公开断言「不好看就别回来」。压迫越具体,打脸落下时的高度差越大。改编时对手优先取原著人物;原著此处没有时按 STY-30 登记新增并交创作者。系统任务的时限与失败后果是第二层压力,按契约披露,不要写成一条替代爽感的焦虑条款。发动机:对手按表面判断下注,主角手里有对手看不见的底牌,结果当众揭晓。
18
+
19
+ ## 人物策略与信息权限
20
+
21
+ 只有主角知道面板,这个信息差就是打脸的来源:别人按他们看见的下注,观众按面板下注。主角可以对系统碎嘴、吐槽、讨价还价,这些喜剧反应是题材的一部分,改编时保留,不要删成一脸凝重。系统给选项,主角做选择;每次都照做的主角会退化成执行者。
22
+
23
+ ## 观众回报与情绪落点
24
+
25
+ 回报有两层,同集给:**奖励兑现**(能看见的数:到账、涨粉、名次、证书)和**打脸**(有人当众改口、道歉、表态,或对手当场吃瘪)。打脸可以由旁观者完成——评论区集体改口、一直沉默的前辈站出来——收益同样落在观众身上。情绪落点就是赢,而且赢得痛快;不必用一条新的代价把它冲淡。
26
+
27
+ ## 常见场面颗粒
28
+
29
+ 面板弹出与数值跳动、奖励清单、任务倒计时、群聊刷屏、评论区翻转、粉丝数或到账提示、被推回又被抢着要回的文件、对手接到的一通电话、围观者掏出手机。动作层面:主角对着空气小声吐槽、对手笑容僵住、有人默默删掉自己刚发的那条。见证者按「能做什么」分区:能拍板的、会改口的、只会围观的。
30
+
31
+ ## 集尾钩子取向
32
+
33
+ 新任务弹出且奖励更大;离大目标还差一个具体的数;对手换了更狠的手段;刚到账的奖励引来新的眼红者。不成立的替代品:系统无缘无故宣布惩罚;把上集的奖励再报一遍。
34
+
35
+ ## 前中后期打法
36
+
37
+ - **前期**:第 1 集内系统上线、兑现第一笔奖励、完成第一次打脸;大目标是可核对的数字或期限。打脸与反转隔多久一次、下一集怎样接上一集,按已接受的[项目节奏档案](../episode-design.md#10-项目节奏档案)。
38
+ - **中期**:对手学会了——换渠道、找更大的靠山、针对主角的规律设局;奖励越大,任务越难,主角开始要在两个奖励之间选。
39
+ - **后期**:系统本身的来历或规则成为新的问题;结局气质由创作者决定。
40
+
41
+ ## 制作难点
42
+
43
+ 面板是后期 UI 或字幕:生成画面里不写面板文字,只拍主角看向面板的视线与反应,并留出面板出现的位置;面板上的数值与剧本逐字一致,由后期叠加。系统语音与面板不要逐字重复:一个给条款,一个给数值。群聊、评论区是低成本的见证者,同样按后期叠加处理。
44
+
45
+ ## 禁止漂移
46
+
47
+ 不要把奖励换成一条焦虑条款;不要删掉主角对系统的吐槽与喜剧反应;不要让对手只会嘴上看不起而没有当众做过的事;不要让系统替主角做决定;不要为救场临时给系统加能力。
48
+
49
+ ## 证据与置信度
50
+
51
+ 本卡不来自抽样统计或任何真实作品,全部例子为合成虚构。它由本套件既有工艺文件([premise-devices.md](../premise-devices.md)、[story-craft.md](../story-craft.md)、[episode-design.md](../episode-design.md))和短剧写作经验归纳而成。置信度:**中**,指这些做法尚未在套件内被多处交叉印证,不指任何测量结果。与创作者已接受的事实或单集契约冲突时,以后者为准。
@@ -0,0 +1,51 @@
1
+ ---
2
+ genre: 逆袭
3
+ aliases: [逆袭, 废柴逆袭, 草根崛起, 被看不起, 一鸣惊人, 越级]
4
+ form: 竖屏连续短剧
5
+ confidence: medium
6
+ basis: 套件既有工艺文件与短剧写作经验归纳
7
+ ---
8
+
9
+ # 逆袭题材卡
10
+
11
+ ## 题材核心与观众为什么看
12
+
13
+ 观众看的是**被看不起的人当众证明自己,看不起他的人被迫改口**。它和复仇打脸的区别在账本:复仇清算的是一次具体的剥夺,逆袭要翻的是「看不起」本身。所以轻视必须被写成看得见的动作,观众才有一笔可以等着翻的账。
14
+
15
+ ## 压力来源与冲突发动机
16
+
17
+ 对手或群体的轻视要落成一件当众做过的事:一句断言、一次拒绝、一张被推回的申请、一场公开的嘲笑。只会嘴上看不起的对手撑不起落差。改编时对手优先取原著人物;原著此处没有时按 STY-30 登记新增并交创作者。发动机:众人按表面下注,主角手里有观众知道、他们不知道的底牌,结果在有人见证的场合揭晓。
18
+
19
+ ## 人物策略与信息权限
20
+
21
+ 常见策略:先不辩解,直接拿出结果;让结果被第三方当场核对;把私下的轻视引到公开场合裁决。信息权限要写清谁已经看出主角的本事、谁还在押反方向、谁会第一个改口。主角面对轻视时的吐槽和反差喜剧是题材的一部分,改编时保留。
22
+
23
+ ## 观众回报与情绪落点
24
+
25
+ 回报是**当众的落差**:押反方向的人当场改口、道歉、表态,对手的笑容僵住。打脸可以由旁观者完成,群体集体改口本身就是兑现。情绪落点就是赢得痛快,不必每次都找一个代价冲淡它。
26
+
27
+ ## 常见场面颗粒
28
+
29
+ 被推回的申请表、公开的排名或榜单、群聊与评论区、试用或试演的现场、被当众撕掉又被抢着捡起的东西、裁判或前辈的一句表态、对手打出又没人接的电话。见证者按「能做什么」分区:能拍板的、会改口的、只看热闹的。
30
+
31
+ ## 集尾钩子取向
32
+
33
+ 更大的舞台向主角打开,也带来更强的对手;刚改口的人转头去找更狠的办法;离大目标还差一个具体的数。不成立的替代品:领导突然宣布提拔;所有人同时鼓掌。
34
+
35
+ ## 前中后期打法
36
+
37
+ - **前期**:第 1 集就立起一次具体的轻视,并在同集兑现第一次打脸;大目标具体到可核对的数字、期限或对象。打脸与反转隔多久一次、下一集怎样接上一集,按已接受的[项目节奏档案](../episode-design.md#10-项目节奏档案)。
38
+ - **中期**:对手学会了,开始针对主角的规律设局;成功带来更高的舞台,也带来更具体的压迫。
39
+ - **后期**:主角要在守住已经赢到的位置和冒险去拿更大的之间选;结局气质由创作者决定。
40
+
41
+ ## 制作难点
42
+
43
+ 公开见证的场合成本最高,可以用群聊、评论区、榜单这类低成本见证者替代一部分群演;屏幕上的文字按后期叠加处理。群体反应按职责分区,避免全员同一个表情。
44
+
45
+ ## 禁止漂移
46
+
47
+ 不要把第一次打脸拖到很多集之后;不要让对手只会嘴上看不起;不要把喜剧反应和吐槽删成一脸凝重;不要用一条焦虑条款替代赢的痛快;不要用「报出头衔」代替当众可核对的结果。
48
+
49
+ ## 证据与置信度
50
+
51
+ 本卡不来自抽样统计或任何真实作品,全部例子为合成虚构。它由本套件既有工艺文件([story-craft.md](../story-craft.md)、[episode-design.md](../episode-design.md)、[genre-and-hook-playbook.md](../genre-and-hook-playbook.md))和短剧写作经验归纳而成。置信度:**中**,指这些做法尚未在套件内被多处交叉印证,不指任何测量结果。与创作者已接受的事实或单集契约冲突时,以后者为准。
@@ -0,0 +1,51 @@
1
+ ---
2
+ genre: 重生穿越
3
+ aliases: [重生, 穿越, 前世复仇, 改命, 带着记忆重来, 穿书, 未卜先知]
4
+ form: 竖屏连续短剧
5
+ confidence: medium
6
+ basis: 套件既有工艺文件与短剧写作经验归纳
7
+ ---
8
+
9
+ # 重生穿越题材卡
10
+
11
+ ## 题材核心与观众为什么看
12
+
13
+ 观众看的是**主角带着上一世的教训回来,把这一世的第一笔账当场翻过来**。重来一次的记忆是先知型装置,它的切法、起点与观众知情档位按 [premise-devices.md](../premise-devices.md) 写;本卡只管观众契约:第 1 集就要兑现第一次打脸,不把翻盘留到很多集之后。
14
+
15
+ ## 压力来源与冲突发动机
16
+
17
+ 对手还是上一世害过主角的那些人,而且此刻还不知道主角已经变了。压迫要落成一件当众做过的事:泼酒、抢位、当着众人翻旧账。改编时对手优先取原著人物;原著此处没有时按 STY-30 登记新增并交创作者。发动机:对手按老剧本出手,主角已经知道这一步,观众等着看他怎么接。
18
+
19
+ ## 人物策略与信息权限
20
+
21
+ 主角知道「会发生什么」,对手不知道主角知道。主角的常用打法是抢在对手前面一步,或者原样奉还——用对手刚用过的手段、刚说过的借口回敬。内心独白能换成动作加一句台词的就换,大段「我重生了」的独白压缩成两句。
22
+
23
+ ## 观众回报与情绪落点
24
+
25
+ 回报是**上一世的屈辱在这一世被原样翻过来**:同一个场合、同一类手段,这次落在对手身上。集尾可以用一句复刻对手台词的金句收,也可以用一句内心独白揭开新的信息反转。
26
+
27
+ ## 常见场面颗粒
28
+
29
+ 镜子、醒来时的旧房间、日历或手机上的日期、上一世没躲过的那杯酒、被抢走又拿回来的座位、旁人压低声音的闲话、一件上一世丢失的物件、年份字幕卡。见证者按「能做什么」分区:会站队的、会传话的、只看热闹的。
30
+
31
+ ## 集尾钩子取向
32
+
33
+ 对手察觉主角不对劲并开始试探;记忆里的下一步提前或变样;一条内心独白揭出观众还不知道的前世细节。不成立的替代品:陌生人突然宣布身世;把前世惨死再放一遍。
34
+
35
+ ## 前中后期打法
36
+
37
+ - **前期**:可用的开场模板——前世高光与惨死约 30 秒 → 醒来,字幕卡交代年份 → 两句内心独白加一次照镜子交代重来 → 旁人闲话交代这一世的身份 → 第 1 集内兑现第一次打脸,例如对手当众泼来一杯酒,主角反手泼回,用对手自己的借口回敬。打脸与反转隔多久一次、下一集怎样接上一集,按已接受的[项目节奏档案](../episode-design.md#10-项目节奏档案)。
38
+ - **中期**:时间线开始偏离记忆,主角的先知越来越不可靠,必须靠这一世新建立的关系与能力。
39
+ - **后期**:上一世的真相或最初那次失去以新形式回来;结局气质由创作者决定。
40
+
41
+ ## 制作难点
42
+
43
+ 前世与今生是两套造型、场景和状态,资产量会翻倍:前世段尽量压短,能用今生的一件物件承担的就不新建场景。闪回每次控制在三行剧本以内,放在需要解释眼前危机的位置。年份字幕卡和人物名牌交给后期。
44
+
45
+ ## 禁止漂移
46
+
47
+ 不要从日常开篇、把第一次打脸拖到很多集之后;不要用大段内心独白代替动作;不要让对手不学习、每集都按上一世的老剧本出手;不要让记忆每次都精确命中,那会抽空阻力。
48
+
49
+ ## 证据与置信度
50
+
51
+ 本卡不来自抽样统计或任何真实作品,全部例子为合成虚构。它由本套件既有工艺文件([premise-devices.md](../premise-devices.md)、[episode-design.md](../episode-design.md)、[reveal-reversal-payoff.md](../reveal-reversal-payoff.md))和短剧写作经验归纳而成。置信度:**中**,指这些做法尚未在套件内被多处交叉印证,不指任何测量结果。与创作者已接受的事实或单集契约冲突时,以后者为准。
@@ -47,7 +47,10 @@
47
47
 
48
48
  | 题材 | 别名与匹配词 | 题材卡 | 置信度 |
49
49
  |---|---|---|---|
50
- | 复仇打脸 | 复仇 / 打脸 / 逆袭 / 权力反转 / 扮猪吃虎 / 隐藏身份归来 / 清算 | [复仇打脸](genre-cards/复仇打脸.md) | 高 |
50
+ | 复仇打脸 | 复仇 / 打脸 / 权力反转 / 扮猪吃虎 / 隐藏身份归来 / 清算 | [复仇打脸](genre-cards/复仇打脸.md) | 高 |
51
+ | 逆袭 | 逆袭 / 废柴逆袭 / 草根崛起 / 被看不起 / 一鸣惊人 / 越级 | [逆袭](genre-cards/逆袭.md) | 中 |
52
+ | 系统流 | 系统 / 金手指 / 任务奖励 / 签到 / 面板升级 / 积分兑换 | [系统流](genre-cards/系统流.md) | 中 |
53
+ | 重生穿越 | 重生 / 穿越 / 前世复仇 / 改命 / 穿书 / 未卜先知 | [重生穿越](genre-cards/重生穿越.md) | 中 |
51
54
  | 古装权谋 | 古装 / 权谋 / 朝堂 / 宅斗 / 宫廷 / 门第 / 礼制身份戏 | [古装权谋](genre-cards/古装权谋.md) | 高 |
52
55
  | 悬疑规则 | 悬疑 / 规则怪谈 / 规则恐怖 / 惊悚 / 生存 / 密室 / 灵异 | [悬疑规则](genre-cards/悬疑规则.md) | 高 |
53
56
  | 家庭关系 | 家庭 / 亲情 / 婆媳 / 姐弟 / 照护 / 伦理 / 代际冲突 | [家庭关系](genre-cards/家庭关系.md) | 高 |
@@ -72,17 +75,17 @@
72
75
  一个要公开场合与群演,另一个要封闭空间与状态连续性时,成本会叠加而不是平均。
73
76
  - 同一题材词可以由完全不同的机制驱动。"悬疑"可以是空间规则、关系谎言或技术证据;
74
77
  "婚恋"可以走互助、权力不对等或身份冲突。卡片只在机制相符时才适用。
75
- - **不要把前提装置当成题材来查表**。 "主角重来一世""主角获得一套外部规则"这类设定是
76
- 叠加在题材之上的一层,它决定主角比别人多拥有什么,不决定压力来源与情绪落点。带这类
77
- 设定的项目仍然有各自的主题材(同一个装置可以装在婚恋、复仇、宅斗或修真上)。做法是
78
- 照常取主题材那一张卡,再另读 [premise-devices.md](premise-devices.md) 校准装置那一层;
79
- 本表不为装置新增条目。
78
+ - **前提装置和题材是两层**。 "主角重来一世""主角获得一套外部规则"这类设定叠加在题材
79
+ 之上,决定主角比别人多拥有什么。装置装在婚恋、宅斗或修真上时,照常取那个主题材的卡;
80
+ 观众就是冲着装置带来的奖励与打脸来看的爽文,主题材卡取系统流或重生穿越。两种情况都
81
+ 另读 [premise-devices.md](premise-devices.md) 校准装置那一层。
80
82
 
81
83
  ## 不要把卡片写成硬规则
82
84
 
83
85
  卡片里的任何内容都不是质量门槛。以下几项尤其不能被当成评分标准或校验规则:
84
86
 
85
- - **节拍数量**:没有"每集几个转折""几秒一个钩子"的要求;节拍由因果决定。
87
+ - **节拍数量**:卡片不规定"每集几个转折""几秒一个钩子"。这些数值住在项目节奏档案里,由
88
+ 创作者接受后才生效,见 [episode-design.md](episode-design.md#10-项目节奏档案)。
86
89
  - **字数与篇幅比例**:不规定单集字数、场景数量、场均时长或分幕比例。
87
90
  - **台词比例与句式**:不规定对白占比、句长、语气词、倒装或任何句式模板。
88
91
  - **钩子类型轮换**:连续几集使用相似的收尾方式不自动构成缺陷;要看它们是否改变了不同状态。
@@ -21,8 +21,9 @@
21
21
  - **装置**回答"主角凭什么在这个世界里有别人没有的余地",决定信息与能力的分配。
22
22
 
23
23
  同一个装置可以装在完全不同的题材上:带着前世记忆去打商战、去宅斗、去修真、去修补一段
24
- 关系,是四件不同的事。所以**不要为装置单独建一张题材卡**,也不要因为出现了装置就跳过
25
- 题材卡——先按 [genre-cards.md](genre-cards.md) 取主题材那一张,再用本文校准装置那一层。
24
+ 关系,是四件不同的事。所以不要因为出现了装置就跳过题材卡——先按
25
+ [genre-cards.md](genre-cards.md) 取主题材那一张(爽文怎么取也写在那里),再用本文校准
26
+ 装置那一层。
26
27
 
27
28
  若创作者的设定里没有这类外来优势,本文整篇不适用,不要为了"更有卖点"而加装置。
28
29
 
@@ -42,8 +43,9 @@
42
43
  4. **规则通胀**:写不下去时给装置加新能力或新条款救场。每加一次,先前所有段落的紧张
43
44
  感都被追溯性地削弱。
44
45
 
45
- 对应的共同解法只有一条:**给装置装上边界,并让边界本身产生成本**。装置能做什么要写
46
- 清楚,不能做什么要同样清楚,且使用它必须付出可见代价。
46
+ 对应的共同解法是**给装置装上边界**。装置能做什么要写清楚,不能做什么要同样清楚。补回
47
+ 阻力的有两处:边界本身产生的可见代价,或对手的压迫。多数题材两样都要;爽文里阻力主要由
48
+ 对手承担,见[代价与对手压迫](#代价与对手压迫)。
47
49
 
48
50
  ### 两层必须分开:创作者契约与剧中披露
49
51
 
@@ -144,11 +146,14 @@
144
146
  规则时,要么它在契约里本就标为不可靠并已埋线索,要么按冲突处理。装置规则的对账走铺垫
145
147
  债务台账,与其他已接受事实一起被引用。
146
148
 
147
- ### 代价是唯一的张力来源
149
+ ### 代价与对手压迫
148
150
 
149
- 无代价的能力等于没有装置。代价要落在**观众看得见、且主角在意的东西**上:时间、身体
150
- 状态、关系、名声、只能用一次的机会、下一次使用的可用性。写成"消耗精神力"这类不可
151
- 见量,等于没有代价——除消耗之外还要有可见后果。
151
+ 靠代价制造张力的题材里,无代价的能力等于没有装置。代价要落在**观众看得见、且主角在意的
152
+ 东西**上:时间、身体状态、关系、名声、只能用一次的机会、下一次使用的可用性。写成"消耗
153
+ 精神力"这类不可见量,等于没有代价——除消耗之外还要有可见后果。
154
+
155
+ 系统流、重生穿越这类爽文,观众要的是奖励兑现和打脸,张力主要来自对手:奖励可以先到,代价
156
+ 可以很轻,甚至只是下一个任务更难。对手的压迫怎样写足,见对应的[题材卡](genre-cards.md)。
152
157
 
153
158
  ### 装置不替主角做决定
154
159
 
@@ -206,6 +211,7 @@
206
211
  9. 先知型:观众信息权限选了哪一档,全剧是否保持一致?
207
212
  10. 授权型:已披露的每条规则,在你还没写的高潮段里是否仍然成立?
208
213
  11. 授权型:若设计了不可靠宣告,契约里是否标明,并已埋下可回看的线索?
209
- 12. 授权型:代价是否可见、是否落在主角在意的东西上、是否有除消耗之外的后果?
214
+ 12. 授权型:张力由代价还是对手承担?靠代价的,代价是否可见、是否落在主角在意的东西上、
215
+ 是否有除消耗之外的后果;靠对手的,压迫是否具体到当众做过的事?
210
216
  13. 授权型:装置是提出选项,还是替主角做了决定?
211
217
  14. 授权型:用了屏显载体吗?可读文字义务是否已经交代,且没有与无字策略并存?