@oh-story/dsh 0.1.10 → 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 (444) hide show
  1. package/README.md +7 -7
  2. package/lib/client.js +7 -3
  3. package/lib/client.js.map +2 -2
  4. package/lib/drama/manifest.json +212 -142
  5. package/lib/drama/skills/short-drama/SKILL.md +14 -2
  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/project_tool.py +131 -0
  10. package/lib/drama/skills/short-drama-assets/SKILL.md +2 -1
  11. package/lib/drama/skills/short-drama-assets/references/asset-review-checklist.md +2 -0
  12. package/lib/drama/skills/short-drama-assets/references/era-anchors.md +37 -0
  13. package/lib/drama/skills/short-drama-assets/references/stage-contract.md +2 -0
  14. package/lib/drama/skills/short-drama-develop/SKILL.md +10 -4
  15. package/lib/drama/skills/short-drama-develop/assets/adaptation-map.example.jsonl +1 -1
  16. package/lib/drama/skills/short-drama-develop/assets/creative-brief.md +8 -0
  17. package/lib/drama/skills/short-drama-develop/references/adaptation-craft.md +80 -13
  18. package/lib/drama/skills/short-drama-develop/references/episode-design.md +95 -12
  19. package/lib/drama/skills/short-drama-develop/references/genre-and-hook-playbook.md +9 -5
  20. 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
  21. package/lib/drama/skills/short-drama-develop/references/genre-cards//347/263/273/347/273/237/346/265/201.md +51 -0
  22. package/lib/drama/skills/short-drama-develop/references/genre-cards//351/200/206/350/242/255.md +51 -0
  23. 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
  24. package/lib/drama/skills/short-drama-develop/references/genre-cards.md +10 -7
  25. package/lib/drama/skills/short-drama-develop/references/premise-devices.md +15 -9
  26. package/lib/drama/skills/short-drama-develop/references/serial-character-and-memory.md +3 -2
  27. package/lib/drama/skills/short-drama-develop/references/stage-contract.md +14 -7
  28. package/lib/drama/skills/short-drama-develop/references/story-craft.md +7 -3
  29. package/lib/drama/skills/short-drama-edit/SKILL.md +43 -20
  30. package/lib/drama/skills/short-drama-edit/assets/remotion/README.md +49 -13
  31. package/lib/drama/skills/short-drama-edit/assets/remotion/package.json +4 -2
  32. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Overlay.tsx +31 -0
  33. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Root.tsx +5 -5
  34. package/lib/drama/skills/short-drama-edit/assets/remotion/src/Subtitles.tsx +68 -69
  35. package/lib/drama/skills/short-drama-edit/assets/remotion/src/font.ts +39 -29
  36. package/lib/drama/skills/short-drama-edit/assets/remotion/src/rules.mjs +188 -0
  37. package/lib/drama/skills/short-drama-edit/assets/remotion/src/schema.ts +26 -13
  38. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/Card.tsx +72 -0
  39. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/CornerChip.tsx +39 -0
  40. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/ScreenText.tsx +36 -0
  41. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/SystemPanel.tsx +44 -0
  42. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/TaskPanel.tsx +100 -0
  43. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/chrome.tsx +197 -0
  44. package/lib/drama/skills/short-drama-edit/assets/remotion/src/screen/tokens.ts +62 -0
  45. package/lib/drama/skills/short-drama-edit/assets/remotion/tsconfig.json +1 -0
  46. package/lib/drama/skills/short-drama-edit/assets//345/211/252/350/276/221/345/215/225.md +4 -2
  47. package/lib/drama/skills/short-drama-edit/references/cut-craft.md +3 -1
  48. package/lib/drama/skills/short-drama-edit/references/delivery-verify.md +6 -2
  49. package/lib/drama/skills/short-drama-edit/references/generated-footage.md +12 -6
  50. package/lib/drama/skills/short-drama-edit/references/sound-and-subtitles.md +13 -8
  51. package/lib/drama/skills/short-drama-edit/references/stage-contract.md +2 -0
  52. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1153 -121
  53. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +49 -9
  54. package/lib/drama/skills/short-drama-novel-analyze/SKILL.md +3 -3
  55. package/lib/drama/skills/short-drama-novel-analyze/assets/episode-candidate.example.jsonl +2 -2
  56. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-triage.md +8 -4
  57. package/lib/drama/skills/short-drama-novel-analyze/references/adaptation-value.md +10 -3
  58. package/lib/drama/skills/short-drama-novel-analyze/references/aggregation-and-entities.md +25 -1
  59. package/lib/drama/skills/short-drama-novel-analyze/references/stage-contract.md +1 -0
  60. package/lib/drama/skills/short-drama-review/SKILL.md +2 -2
  61. package/lib/drama/skills/short-drama-review/references/review-method.md +6 -1
  62. package/lib/drama/skills/short-drama-review/references/rubric-assets-prompts.md +11 -0
  63. package/lib/drama/skills/short-drama-review/references/rubric-story-script.md +77 -3
  64. package/lib/drama/skills/short-drama-review/references/rubric-visual-motion.md +15 -0
  65. package/lib/drama/skills/short-drama-review/references/stage-contract.md +3 -0
  66. package/lib/drama/skills/short-drama-storyboard/SKILL.md +13 -5
  67. package/lib/drama/skills/short-drama-storyboard/references/blocking-playbooks.md +1 -1
  68. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +2 -2
  69. package/lib/drama/skills/short-drama-storyboard/references/shot-craft.md +82 -14
  70. package/lib/drama/skills/short-drama-storyboard/references/stage-contract.md +4 -2
  71. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +5 -3
  72. package/lib/drama/skills/short-drama-video-prompts/references/camera-audio-continuity.md +12 -0
  73. package/lib/drama/skills/short-drama-video-prompts/references/delivery-profile.md +4 -5
  74. package/lib/drama/skills/short-drama-video-prompts/references/generability.md +4 -2
  75. package/lib/drama/skills/short-drama-video-prompts/references/minimax-h3.md +40 -1
  76. package/lib/drama/skills/short-drama-video-prompts/references/motion-recipe.md +20 -14
  77. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +1 -1
  78. package/lib/drama/skills/short-drama-video-prompts/references/production-prompt-grammar.md +8 -7
  79. package/lib/drama/skills/short-drama-video-prompts/references/review-and-fixtures.md +1 -1
  80. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  81. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +8 -1
  82. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +103 -0
  83. package/lib/drama/skills/short-drama-video-prompts/scripts/motion_timing_check.py +8 -7
  84. package/lib/drama/skills/short-drama-write/SKILL.md +8 -3
  85. package/lib/drama/skills/short-drama-write/references/dialogue-craft.md +1 -1
  86. package/lib/drama/skills/short-drama-write/references/script-craft.md +56 -3
  87. package/lib/drama/skills/short-drama-write/references/stage-contract.md +4 -0
  88. package/lib/drama/skills/short-drama-write/scripts/duration_estimate.py +48 -2
  89. package/lib/index.js +71 -21
  90. package/lib/index.js.map +3 -3
  91. package/lib/oh-story/manifest.json +545 -310
  92. package/lib/oh-story/roles/chapter-extractor.md +11 -11
  93. package/lib/oh-story/roles/character-designer.md +1 -2
  94. package/lib/oh-story/roles/consistency-checker.md +11 -9
  95. package/lib/oh-story/roles/narrative-writer.md +24 -25
  96. package/lib/oh-story/roles/story-architect.md +9 -61
  97. package/lib/oh-story/roles/story-explorer.md +20 -125
  98. package/lib/oh-story/roles/story-researcher.md +0 -1
  99. package/lib/oh-story/skills/story/SKILL.md +6 -6
  100. package/lib/oh-story/skills/story/VERSION +1 -1
  101. package/lib/oh-story/skills/story/references/author-memory-maintenance.md +75 -0
  102. package/lib/oh-story/skills/story/references/author-memory.md +40 -118
  103. package/lib/oh-story/skills/story/scripts/author_memory_commit.py +3 -3
  104. package/lib/oh-story/skills/story-deslop/SKILL.md +24 -25
  105. package/lib/oh-story/skills/story-deslop/references/agent-calls.md +5 -0
  106. package/lib/oh-story/skills/story-deslop/references/anti-ai-writing.md +1 -1
  107. package/lib/oh-story/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  108. package/lib/oh-story/skills/story-deslop/references/author-memory.md +40 -118
  109. package/lib/oh-story/skills/story-deslop/references/banned-words.md +2 -2
  110. package/lib/oh-story/skills/story-deslop/references/deslop-gates.md +21 -4
  111. package/lib/oh-story/skills/story-deslop/references/style-resolution.md +4 -4
  112. package/lib/oh-story/skills/story-deslop/scripts/author_memory_commit.py +3 -3
  113. package/lib/oh-story/skills/story-deslop/scripts/check-ai-patterns.js +155 -8
  114. package/lib/oh-story/skills/story-import/SKILL.md +63 -579
  115. package/lib/oh-story/skills/story-import/references/deep-analysis.md +47 -0
  116. package/lib/oh-story/skills/story-import/references/format-and-structure.md +1 -1
  117. package/lib/oh-story/skills/story-import/references/import-report.md +64 -0
  118. package/lib/oh-story/skills/story-import/references/import-special-cases.md +34 -0
  119. package/lib/oh-story/skills/story-import/references/import-tracking.md +95 -0
  120. package/lib/oh-story/skills/story-import/references/length-routing.md +1 -1
  121. package/lib/oh-story/skills/story-import/references/outline-reverse-rules.md +79 -0
  122. package/lib/oh-story/skills/story-import/references/outline-reverse.md +24 -0
  123. package/lib/oh-story/skills/story-import/references/structure-mapping-long.md +95 -91
  124. package/lib/oh-story/skills/story-import/references/structure-mapping-short.md +24 -12
  125. package/lib/oh-story/skills/story-import/references/tracking-initialization.md +1 -1
  126. package/lib/oh-story/skills/story-import/references/tracking-transaction.md +11 -9
  127. package/lib/oh-story/skills/story-import/scripts/build_outline_brief.py +332 -0
  128. package/lib/oh-story/skills/story-import/scripts/check-outline-contract.js +101 -14
  129. package/lib/oh-story/skills/story-import/scripts/tracking_commit.py +278 -23
  130. package/lib/oh-story/skills/story-import/scripts/wordcount_core.py +179 -23
  131. package/lib/oh-story/skills/story-long-analyze/SKILL.md +28 -50
  132. package/lib/oh-story/skills/story-long-analyze/references/author-facing.md +12 -5
  133. package/lib/oh-story/skills/story-long-analyze/references/deconstruction-notes.md +1 -1
  134. package/lib/oh-story/skills/story-long-analyze/references/final-checks.md +19 -0
  135. package/lib/oh-story/skills/story-long-analyze/references/index-rebuild.md +11 -0
  136. package/lib/oh-story/skills/story-long-analyze/references/pipeline-ops.md +21 -55
  137. package/lib/oh-story/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  138. package/lib/oh-story/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  139. package/lib/oh-story/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  140. package/lib/oh-story/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  141. package/lib/oh-story/skills/story-long-analyze/references/stage5-report.md +33 -0
  142. package/lib/oh-story/skills/story-long-analyze/references/style-profile-generator.md +17 -0
  143. package/lib/oh-story/skills/story-long-analyze/references/style-profile-protocol.md +1 -1
  144. package/lib/oh-story/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  145. package/lib/oh-story/skills/story-long-analyze/scripts/manage_analysis_run.py +47 -8
  146. package/lib/oh-story/skills/story-long-scan/SKILL.md +41 -193
  147. package/lib/oh-story/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  148. package/lib/oh-story/skills/story-long-scan/references/platform-fanqie.md +45 -0
  149. package/lib/oh-story/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  150. package/lib/oh-story/skills/story-long-scan/references/platform-qidian.md +35 -0
  151. package/lib/oh-story/skills/story-long-scan/references/platform-qimao.md +27 -0
  152. package/lib/oh-story/skills/story-long-scan/references/topic-decision.md +6 -2
  153. package/lib/oh-story/skills/story-long-write/SKILL.md +32 -73
  154. package/lib/oh-story/skills/story-long-write/references/agent-calls.md +47 -0
  155. package/lib/oh-story/skills/story-long-write/references/anti-ai-writing.md +1 -1
  156. package/lib/oh-story/skills/story-long-write/references/artifact-protocols.md +18 -201
  157. package/lib/oh-story/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  158. package/lib/oh-story/skills/story-long-write/references/author-memory.md +40 -118
  159. package/lib/oh-story/skills/story-long-write/references/banned-words.md +2 -2
  160. package/lib/oh-story/skills/story-long-write/references/benchmark-recall.md +6 -10
  161. package/lib/oh-story/skills/story-long-write/references/character-relations.md +49 -1
  162. package/lib/oh-story/skills/story-long-write/references/deslop-gates.md +171 -0
  163. package/lib/oh-story/skills/story-long-write/references/emotion-on-page.md +116 -0
  164. package/lib/oh-story/skills/story-long-write/references/emotional-arc-design.md +1 -114
  165. package/lib/oh-story/skills/story-long-write/references/genre-prose-cards.md +1 -1
  166. package/lib/oh-story/skills/story-long-write/references/long-chapter-quality.md +3 -2
  167. package/lib/oh-story/skills/story-long-write/references/long-format.md +0 -8
  168. package/lib/oh-story/skills/story-long-write/references/long-genre-catalog.md +1 -1
  169. package/lib/oh-story/skills/story-long-write/references/long-genre-mechanics.md +3 -3
  170. package/lib/oh-story/skills/story-long-write/references/opening-design.md +2 -2
  171. package/lib/oh-story/skills/story-long-write/references/outline-conflict.md +4 -4
  172. package/lib/oh-story/skills/story-long-write/references/outline-methods.md +7 -7
  173. package/lib/oh-story/skills/story-long-write/references/outline-rhythm.md +3 -3
  174. package/lib/oh-story/skills/story-long-write/references/outline-structure-theory.md +14 -69
  175. package/lib/oh-story/skills/story-long-write/references/plot-frameworks.md +1 -1
  176. package/lib/oh-story/skills/story-long-write/references/plot-special-topics.md +2 -2
  177. package/lib/oh-story/skills/story-long-write/references/project-files.md +10 -6
  178. package/lib/oh-story/skills/story-long-write/references/reader-contract-and-progression.md +1 -1
  179. package/lib/oh-story/skills/story-long-write/references/reference-index.md +4 -4
  180. package/lib/oh-story/skills/story-long-write/references/stop-and-fix.md +9 -0
  181. package/lib/oh-story/skills/story-long-write/references/style-combat-face.md +1 -58
  182. package/lib/oh-story/skills/story-long-write/references/style-genre-modules.md +1 -1
  183. package/lib/oh-story/skills/story-long-write/references/style-resolution.md +4 -4
  184. package/lib/oh-story/skills/story-long-write/references/tracking-initialization.md +1 -1
  185. package/lib/oh-story/skills/story-long-write/references/tracking-transaction.md +11 -9
  186. package/lib/oh-story/skills/story-long-write/references/workflow-chapter.md +33 -44
  187. package/lib/oh-story/skills/story-long-write/references/workflow-daily.md +18 -51
  188. package/lib/oh-story/skills/story-long-write/references/workflow-outline.md +157 -0
  189. package/lib/oh-story/skills/story-long-write/references/workflow-revision.md +53 -67
  190. package/lib/oh-story/skills/story-long-write/references/workflow-setup.md +112 -251
  191. package/lib/oh-story/skills/story-long-write/references/workflow-volume.md +142 -0
  192. package/lib/oh-story/skills/story-long-write/references/writer-prompt-fallback.md +5 -3
  193. package/lib/oh-story/skills/story-long-write/references/writing-craft.md +18 -56
  194. package/lib/oh-story/skills/story-long-write/scripts/author_memory_commit.py +3 -3
  195. package/lib/oh-story/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  196. package/lib/oh-story/skills/story-long-write/scripts/build_writer_prompt.py +96 -16
  197. package/lib/oh-story/skills/story-long-write/scripts/check-ai-patterns.js +155 -8
  198. package/lib/oh-story/skills/story-long-write/scripts/check-outline-contract.js +101 -14
  199. package/lib/oh-story/skills/story-long-write/scripts/check-outline-copy.js +7 -2
  200. package/lib/oh-story/skills/story-long-write/scripts/outline_view.py +2 -1
  201. package/lib/oh-story/skills/story-long-write/scripts/storyctl.py +250 -50
  202. package/lib/oh-story/skills/story-long-write/scripts/tracking_commit.py +278 -23
  203. package/lib/oh-story/skills/story-long-write/scripts/wordcount_core.py +179 -23
  204. package/lib/oh-story/skills/story-review/SKILL.md +19 -273
  205. package/lib/oh-story/skills/story-review/references/agent-prompts.md +184 -0
  206. package/lib/oh-story/skills/story-review/references/anti-ai-writing.md +1 -1
  207. package/lib/oh-story/skills/story-review/references/author-memory-maintenance.md +75 -0
  208. package/lib/oh-story/skills/story-review/references/author-memory.md +40 -118
  209. package/lib/oh-story/skills/story-review/references/banned-words.md +2 -2
  210. package/lib/oh-story/skills/story-review/references/batch-review.md +19 -0
  211. package/lib/oh-story/skills/story-review/references/character-relations.md +49 -1
  212. package/lib/oh-story/skills/story-review/references/review-quality.md +2 -1
  213. package/lib/oh-story/skills/story-review/references/review-tracking.md +10 -0
  214. package/lib/oh-story/skills/story-review/references/solo.md +52 -0
  215. package/lib/oh-story/skills/story-review/references/style-resolution.md +4 -4
  216. package/lib/oh-story/skills/story-review/references/tracking-initialization.md +1 -1
  217. package/lib/oh-story/skills/story-review/references/tracking-transaction.md +11 -9
  218. package/lib/oh-story/skills/story-review/scripts/author_memory_commit.py +3 -3
  219. package/lib/oh-story/skills/story-review/scripts/check-ai-patterns.js +155 -8
  220. package/lib/oh-story/skills/story-review/scripts/tracking_commit.py +278 -23
  221. package/lib/oh-story/skills/story-review/scripts/wordcount_core.py +179 -23
  222. package/lib/oh-story/skills/story-setup/SKILL.md +69 -458
  223. package/lib/oh-story/skills/story-setup/references/agent-references/agent-quality.md +4 -4
  224. package/lib/oh-story/skills/story-setup/references/agent-references/anti-ai-writing.md +1 -1
  225. package/lib/oh-story/skills/story-setup/references/agent-references/banned-words.md +2 -2
  226. package/lib/oh-story/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  227. package/lib/oh-story/skills/story-setup/references/agent-references/character-relations.md +49 -1
  228. package/lib/oh-story/skills/story-setup/references/agent-references/deslop-gates.md +21 -4
  229. package/lib/oh-story/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  230. package/lib/oh-story/skills/story-setup/references/agent-references/emotional-arc-design.md +1 -114
  231. package/lib/oh-story/skills/story-setup/references/agent-references/format-and-structure.md +1 -1
  232. package/lib/oh-story/skills/story-setup/references/agent-references/genre-prose-cards.md +1 -1
  233. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-catalog.md +1 -1
  234. package/lib/oh-story/skills/story-setup/references/agent-references/long-genre-mechanics.md +3 -3
  235. package/lib/oh-story/skills/story-setup/references/agent-references/long-quality.md +7 -5
  236. package/lib/oh-story/skills/story-setup/references/agent-references/opening-design.md +2 -2
  237. package/lib/oh-story/skills/story-setup/references/agent-references/outline-conflict.md +4 -4
  238. package/lib/oh-story/skills/story-setup/references/agent-references/outline-methods.md +7 -7
  239. package/lib/oh-story/skills/story-setup/references/agent-references/outline-rhythm.md +3 -3
  240. package/lib/oh-story/skills/story-setup/references/agent-references/short-emotional-methods.md +1 -1
  241. package/lib/oh-story/skills/story-setup/references/agent-references/short-genre-formulas.md +0 -15
  242. package/lib/oh-story/skills/story-setup/references/agent-references/short-reversal.md +1 -1
  243. package/lib/oh-story/skills/story-setup/references/agent-references/style-combat-face.md +1 -58
  244. package/lib/oh-story/skills/story-setup/references/agent-references/style-genre-modules.md +1 -1
  245. package/lib/oh-story/skills/story-setup/references/agent-references/style-resolution.md +4 -4
  246. package/lib/oh-story/skills/story-setup/references/agent-references/writing-craft.md +18 -56
  247. package/lib/oh-story/skills/story-setup/references/diagnostics.md +3 -3
  248. package/lib/oh-story/skills/story-short-analyze/SKILL.md +37 -110
  249. package/lib/oh-story/skills/story-short-analyze/references/analysis-character-relations.md +1 -1
  250. package/lib/oh-story/skills/story-short-analyze/references/analysis-method.md +42 -0
  251. package/lib/oh-story/skills/story-short-analyze/references/optional-modules.md +97 -0
  252. package/lib/oh-story/skills/story-short-analyze/references/output-contract.md +9 -47
  253. package/lib/oh-story/skills/story-short-analyze/references/quality-checklist.md +80 -0
  254. package/lib/oh-story/skills/story-short-analyze/references/source-story-quality.md +4 -4
  255. package/lib/oh-story/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  256. package/lib/oh-story/skills/story-short-analyze/references/{material-decomposition.md → stage4-6-reversal-summary.md} +303 -374
  257. package/lib/oh-story/skills/story-short-scan/SKILL.md +30 -64
  258. package/lib/oh-story/skills/story-short-scan/references/manual-rank-input.md +36 -0
  259. package/lib/oh-story/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  260. package/lib/oh-story/skills/story-short-scan/references/platform-heiyan.md +21 -0
  261. package/lib/oh-story/skills/story-short-scan/references/topic-match.md +38 -0
  262. package/lib/oh-story/skills/story-short-write/SKILL.md +23 -34
  263. package/lib/oh-story/skills/story-short-write/references/agent-calls.md +13 -0
  264. package/lib/oh-story/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  265. package/lib/oh-story/skills/story-short-write/references/author-memory.md +40 -118
  266. package/lib/oh-story/skills/story-short-write/references/banned-words.md +2 -2
  267. package/lib/oh-story/skills/story-short-write/references/benchmark-recall.md +1 -21
  268. package/lib/oh-story/skills/story-short-write/references/emotional-methods.md +1 -1
  269. package/lib/oh-story/skills/story-short-write/references/genre-writing-formulas.md +0 -15
  270. package/lib/oh-story/skills/story-short-write/references/output-contract.md +9 -47
  271. package/lib/oh-story/skills/story-short-write/references/reference-index.md +17 -49
  272. package/lib/oh-story/skills/story-short-write/references/scene-craft.md +40 -0
  273. package/lib/oh-story/skills/story-short-write/references/short-craft.md +7 -43
  274. package/lib/oh-story/skills/story-short-write/references/short-format.md +3 -3
  275. package/lib/oh-story/skills/story-short-write/references/short-prose-quality.md +2 -1
  276. package/lib/oh-story/skills/story-short-write/references/short-reversal.md +1 -1
  277. package/lib/oh-story/skills/story-short-write/references/style-resolution.md +4 -4
  278. package/lib/oh-story/skills/story-short-write/references/submission-craft.md +1 -1
  279. package/lib/oh-story/skills/story-short-write/references/villain-and-reveal.md +5 -10
  280. package/lib/oh-story/skills/story-short-write/references/workflow-design.md +19 -12
  281. package/lib/oh-story/skills/story-short-write/references/workflow-draft.md +22 -32
  282. package/lib/oh-story/skills/story-short-write/references/workflow-revision.md +84 -17
  283. package/lib/oh-story/skills/story-short-write/references/writing-workflow.md +7 -119
  284. package/lib/oh-story/skills/story-short-write/scripts/author_memory_commit.py +3 -3
  285. package/lib/oh-story/skills/story-short-write/scripts/check-ai-patterns.js +155 -8
  286. package/lib/oh-story/skills/story-short-write/scripts/check-outline-copy.js +7 -2
  287. package/lib/types/client/video-studio.d.ts.map +1 -1
  288. package/lib/types/native-hooks.d.ts +2 -2
  289. package/lib/types/native-hooks.d.ts.map +1 -1
  290. package/lib/types/role-tool.d.ts.map +1 -1
  291. package/lib/types/skill-provider.d.ts.map +1 -1
  292. package/lib/types/video-project.d.ts.map +1 -1
  293. package/lib/types/workspace-route.d.ts.map +1 -1
  294. package/lib/video-recap/CHANGELOG.md +60 -1
  295. package/lib/video-recap/README.en.md +348 -137
  296. package/lib/video-recap/README.md +340 -136
  297. package/lib/video-recap/manifest.json +406 -251
  298. package/lib/video-recap/skills/video-assemble/SKILL.md +30 -15
  299. package/lib/video-recap/skills/video-assemble/references/audio-modes.md +63 -0
  300. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  301. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +118 -0
  302. package/lib/video-recap/skills/video-assemble/references/narration-adoption.md +103 -0
  303. package/lib/video-recap/skills/video-assemble/references/packaging.md +45 -0
  304. package/lib/video-recap/skills/video-assemble/references/pair-media.md +74 -0
  305. package/lib/video-recap/skills/video-assemble/references/source-score.md +147 -0
  306. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +202 -0
  307. package/lib/video-recap/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  308. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  309. package/lib/video-recap/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  310. package/lib/video-recap/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  311. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  312. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  313. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +10 -46
  314. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +378 -119
  315. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +29 -12
  316. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +95 -44
  317. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +75 -32
  318. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +11 -11
  319. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +293 -0
  320. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +71 -78
  321. package/lib/video-recap/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  322. package/lib/video-recap/skills/video-assemble/scripts/{jianying_builders.py → jianying/builders.py} +39 -67
  323. package/lib/video-recap/skills/video-assemble/scripts/{jianying_model.py → jianying/model.py} +3 -11
  324. package/lib/video-recap/skills/video-assemble/scripts/{jianying_optional.py → jianying/optional.py} +1 -1
  325. package/lib/video-recap/skills/video-assemble/scripts/jianying/schema.py +53 -0
  326. package/lib/video-recap/skills/video-assemble/scripts/{jianying_templates.py → jianying/templates.py} +1 -1
  327. package/lib/video-recap/skills/video-assemble/scripts/{jianying_timeline_contract.py → jianying/timeline_contract.py} +34 -13
  328. package/lib/video-recap/skills/video-assemble/scripts/{jianying_writer.py → jianying/writer.py} +7 -17
  329. package/lib/video-recap/skills/video-assemble/scripts/lib.py +37 -4
  330. package/lib/video-recap/skills/video-assemble/scripts/media.py +12 -21
  331. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +64 -34
  332. package/lib/video-recap/skills/video-assemble/scripts/packaging.py +122 -0
  333. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +216 -0
  334. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +1 -3
  335. package/lib/video-recap/skills/video-assemble/scripts/source_score.py +469 -0
  336. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +25 -9
  337. package/lib/video-recap/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  338. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_core.py → subtitles/core.py} +13 -6
  339. package/lib/video-recap/skills/video-assemble/scripts/{subtitle_render.py → subtitles/render.py} +5 -4
  340. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +324 -0
  341. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  342. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +30 -46
  343. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +91 -7
  344. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +22 -8
  345. package/lib/video-recap/skills/video-cut/SKILL.md +34 -16
  346. package/lib/video-recap/skills/video-cut/references/shot-review.md +50 -0
  347. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -28
  348. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +58 -62
  349. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +21 -106
  350. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +14 -9
  351. package/lib/video-recap/skills/video-cut/scripts/lib.py +39 -0
  352. package/lib/video-recap/skills/video-cut/scripts/narration_mapping.py +2 -155
  353. package/lib/video-recap/skills/video-cut/scripts/narrative_selection.py +244 -0
  354. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +357 -0
  355. package/lib/video-recap/skills/video-recap/SKILL.md +86 -42
  356. package/lib/video-recap/skills/video-recap/references/audio-routing.md +126 -0
  357. package/lib/video-recap/skills/video-recap/references/config-playbook.md +12 -8
  358. package/lib/video-recap/skills/video-recap/references/data-schema.md +44 -33
  359. package/lib/video-recap/skills/video-recap/references/resource-library.md +151 -0
  360. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +1 -1
  361. package/lib/video-recap/skills/video-recap/scripts/doctor.py +123 -30
  362. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +22 -75
  363. package/lib/video-recap/skills/video-recap/scripts/lib.py +3 -3
  364. package/lib/video-recap/skills/video-recap/scripts/library.py +509 -0
  365. package/lib/video-recap/skills/video-recap/scripts/materials.py +63 -91
  366. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +8 -70
  367. package/lib/video-recap/skills/video-recap/scripts/project_binding.py +286 -0
  368. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +1 -0
  369. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_client.py → qc/mimo_client.py} +1 -1
  370. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_evidence.py → qc/mimo_evidence.py} +33 -66
  371. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_observations.py → qc/mimo_observations.py} +3 -11
  372. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_payload.py → qc/mimo_payload.py} +4 -7
  373. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_report.py → qc/mimo_report.py} +17 -28
  374. package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_runner.py → qc/mimo_runner.py} +2 -2
  375. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -19
  376. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +119 -50
  377. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +32 -114
  378. package/lib/video-recap/skills/video-recap/scripts/recap_review.py +9 -23
  379. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +387 -334
  380. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +23 -23
  381. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +278 -0
  382. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +25 -12
  383. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +59 -52
  384. package/lib/video-recap/skills/video-recap/scripts/resource_lock.py +162 -0
  385. package/lib/video-recap/skills/video-script/SKILL.md +16 -13
  386. package/lib/video-recap/skills/video-script/references/creative-editing-playbook.md +9 -5
  387. package/lib/video-recap/skills/video-script/references/promotional-copy.md +68 -0
  388. package/lib/video-recap/skills/video-script/references/research-guide.md +1 -1
  389. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +24 -76
  390. package/lib/video-recap/skills/video-script/scripts/lib.py +10 -87
  391. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +63 -39
  392. package/lib/video-recap/skills/video-script/scripts/review.py +0 -2
  393. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +35 -59
  394. package/lib/video-recap/skills/video-script/scripts/review_response.py +66 -128
  395. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -20
  396. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +4 -4
  397. package/lib/video-recap/skills/video-script/scripts/validate.py +53 -42
  398. package/lib/video-recap/skills/video-understanding/SKILL.md +6 -4
  399. package/lib/video-recap/skills/video-understanding/references/data-schema.md +50 -156
  400. package/lib/video-recap/skills/video-understanding/references/research-guide.md +4 -4
  401. package/lib/video-recap/skills/video-understanding/scripts/asr.py +85 -65
  402. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  403. package/lib/video-recap/skills/video-understanding/scripts/brief.py +2 -5
  404. package/lib/video-recap/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  405. package/lib/video-recap/skills/video-understanding/scripts/{agent_brief.py → briefing/builder.py} +38 -35
  406. package/lib/video-recap/skills/{video-script/scripts/brief_context.py → video-understanding/scripts/briefing/context.py} +4 -35
  407. package/lib/video-recap/skills/{video-script/scripts/brief_inputs.py → video-understanding/scripts/briefing/inputs.py} +9 -31
  408. package/lib/video-recap/skills/video-understanding/scripts/{brief_timeline.py → briefing/timeline.py} +5 -6
  409. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +65 -116
  410. package/lib/video-recap/skills/video-understanding/scripts/detect.py +31 -40
  411. package/lib/video-recap/skills/video-understanding/scripts/lib.py +30 -86
  412. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +63 -39
  413. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +4 -4
  414. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +17 -79
  415. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +14 -40
  416. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +64 -46
  417. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +31 -11
  418. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +19 -14
  419. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +80 -108
  420. package/lib/video-recap/skills/video-voiceover/SKILL.md +29 -19
  421. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +31 -0
  422. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  423. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +51 -59
  424. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +8 -44
  425. package/lib/video-recap/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  426. package/lib/video-recap/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  427. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +212 -134
  428. package/package.json +1 -1
  429. package/lib/oh-story/skills/story-long-analyze/references/material-decomposition.md +0 -538
  430. package/lib/oh-story/skills/story-long-analyze/references/output-templates.md +0 -603
  431. package/lib/oh-story/skills/story-long-scan/references/scan-output-format.md +0 -207
  432. package/lib/oh-story/skills/story-short-analyze/references/output-templates.md +0 -561
  433. package/lib/video-recap/skills/video-assemble/scripts/jianying_schema.py +0 -98
  434. package/lib/video-recap/skills/video-recap/references/creative-editing-playbook.md +0 -225
  435. package/lib/video-recap/skills/video-recap/references/research-guide.md +0 -74
  436. package/lib/video-recap/skills/video-recap/references/timeline-and-jianying.md +0 -250
  437. package/lib/video-recap/skills/video-script/scripts/agent_brief.py +0 -399
  438. package/lib/video-recap/skills/video-script/scripts/brief_timeline.py +0 -327
  439. package/lib/video-recap/skills/video-script/scripts/narration.py +0 -12
  440. package/lib/video-recap/skills/video-understanding/scripts/brief_context.py +0 -348
  441. package/lib/video-recap/skills/video-understanding/scripts/brief_inputs.py +0 -290
  442. /package/lib/video-recap/skills/video-assemble/scripts/{jianying_tracks.py → jianying/tracks.py} +0 -0
  443. /package/lib/video-recap/skills/video-recap/scripts/{mimo_qc_contract.py → qc/mimo_contract.py} +0 -0
  444. /package/lib/video-recap/skills/video-voiceover/scripts/{fish_audio.py → providers/fish_audio.py} +0 -0
@@ -0,0 +1,197 @@
1
+ import React from "react";
2
+ import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
3
+ import { typedLength } from "../rules.mjs";
4
+ import { COLOURS, RARITY, SANS, entrance, rarityOf, unit } from "./tokens";
5
+ import { Rarity } from "../schema";
6
+
7
+ /** Pieces the system-style panels share: frame, header, typewriter, reward rows. */
8
+
9
+ const useU = (): number => unit(useVideoConfig().height);
10
+
11
+ const Corners: React.FC<{ colour: string }> = ({ colour }) => {
12
+ const u = useU();
13
+ const length = u * 2.2;
14
+ const weight = Math.max(3, u * 0.28);
15
+ const edge = `${weight}px solid ${colour}`;
16
+ const corner = (style: React.CSSProperties) => (
17
+ <div style={{ position: "absolute", width: length, height: length, ...style }} />
18
+ );
19
+ return (
20
+ <>
21
+ {corner({ top: -weight, left: -weight, borderTop: edge, borderLeft: edge })}
22
+ {corner({ top: -weight, right: -weight, borderTop: edge, borderRight: edge })}
23
+ {corner({ bottom: -weight, left: -weight, borderBottom: edge, borderLeft: edge })}
24
+ {corner({ bottom: -weight, right: -weight, borderBottom: edge, borderRight: edge })}
25
+ </>
26
+ );
27
+ };
28
+
29
+ /** Dark-navy glass with a glowing border, L-shaped corner brackets and moving scanlines. */
30
+ export const Frame: React.FC<{
31
+ colour: string;
32
+ width: number;
33
+ children: React.ReactNode;
34
+ style?: React.CSSProperties;
35
+ }> = ({ colour, width, children, style }) => {
36
+ const u = useU();
37
+ const frame = useCurrentFrame();
38
+ return (
39
+ <div
40
+ style={{
41
+ position: "relative",
42
+ width,
43
+ padding: `${u * 2.2}px ${u * 2.6}px`,
44
+ background: "linear-gradient(170deg, rgba(10,30,60,0.80), rgba(6,16,36,0.86))",
45
+ border: `${Math.max(2, u * 0.12)}px solid ${colour}aa`,
46
+ boxShadow: `0 0 ${u * 1.6}px ${colour}88, inset 0 0 ${u * 3}px ${colour}22`,
47
+ fontFamily: SANS,
48
+ color: COLOURS.panelInk,
49
+ ...style,
50
+ }}
51
+ >
52
+ <Corners colour={colour} />
53
+ <div
54
+ style={{
55
+ position: "absolute",
56
+ inset: 0,
57
+ pointerEvents: "none",
58
+ backgroundImage: `repeating-linear-gradient(0deg, ${colour}14 0px, ${colour}14 2px, transparent 2px, transparent 5px)`,
59
+ backgroundPositionY: `${frame * 1.5}px`,
60
+ }}
61
+ />
62
+ {children}
63
+ </div>
64
+ );
65
+ };
66
+
67
+ /** 【系统提示】-style header: a diamond, the label, and a rule fading out to the right. */
68
+ export const Header: React.FC<{ text: string; colour: string }> = ({ text, colour }) => {
69
+ const u = useU();
70
+ return (
71
+ <div
72
+ style={{
73
+ display: "flex",
74
+ alignItems: "center",
75
+ gap: u * 0.8,
76
+ fontSize: u * 1.9,
77
+ fontWeight: 700,
78
+ color: colour,
79
+ letterSpacing: u * 0.35,
80
+ marginBottom: u * 0.8,
81
+ }}
82
+ >
83
+ <span
84
+ style={{
85
+ width: u * 0.9,
86
+ height: u * 0.9,
87
+ background: colour,
88
+ transform: "rotate(45deg)",
89
+ boxShadow: `0 0 ${u}px ${colour}`,
90
+ }}
91
+ />
92
+ {text}
93
+ <span style={{ flex: 1, height: 1, background: `linear-gradient(90deg, ${colour}aa, transparent)` }} />
94
+ </div>
95
+ );
96
+ };
97
+
98
+ /** Typewriter at 35 ms a character from `delay`, with a blinking bar while it types. */
99
+ export const Typed: React.FC<{ text: string; delay?: number; style?: React.CSSProperties }> = ({
100
+ text,
101
+ delay = 0,
102
+ style,
103
+ }) => {
104
+ const frame = useCurrentFrame();
105
+ const { fps } = useVideoConfig();
106
+ const chars = Array.from(text);
107
+ const shown = typedLength(frame / fps, delay);
108
+ const typing = shown < chars.length;
109
+ return (
110
+ <div style={style}>
111
+ {chars.slice(0, shown).join("")}
112
+ <span
113
+ style={{
114
+ display: "inline-block",
115
+ width: "0.12em",
116
+ height: "0.9em",
117
+ marginLeft: "0.08em",
118
+ background: "currentColor",
119
+ opacity: typing && Math.floor(frame / 6) % 2 === 0 ? 1 : 0,
120
+ }}
121
+ />
122
+ </div>
123
+ );
124
+ };
125
+
126
+ /** A reward row: rarity chip and name in the rarity's colour, flashing as it arrives. */
127
+ export const Reward: React.FC<{ name: string; rarity: Rarity | null; delay: number }> = ({
128
+ name,
129
+ rarity,
130
+ delay,
131
+ }) => {
132
+ const u = useU();
133
+ const frame = useCurrentFrame();
134
+ const { fps } = useVideoConfig();
135
+ const arrived = entrance(frame, fps, delay, 12);
136
+ const label = rarityOf(rarity);
137
+ const colour = RARITY[label];
138
+ const flash = interpolate(frame / fps - delay, [0, 0.12, 0.4], [0, 1, 0], {
139
+ extrapolateLeft: "clamp",
140
+ extrapolateRight: "clamp",
141
+ });
142
+ return (
143
+ <div
144
+ style={{
145
+ display: "flex",
146
+ alignItems: "center",
147
+ gap: u * 1.2,
148
+ margin: `${u * 0.7}px 0`,
149
+ opacity: arrived,
150
+ transform: `translateX(${(1 - arrived) * u * 5}px)`,
151
+ }}
152
+ >
153
+ <span
154
+ style={{
155
+ fontSize: u * 1.5,
156
+ fontWeight: 700,
157
+ color: COLOURS.ink,
158
+ background: colour,
159
+ padding: `${u * 0.15}px ${u * 0.7}px`,
160
+ boxShadow: `0 0 ${u * (0.6 + flash)}px ${colour}`,
161
+ }}
162
+ >
163
+ {label}
164
+ </span>
165
+ <span style={{ fontSize: u * 2.7, fontWeight: 900, color: colour, textShadow: `0 0 ${u * (0.5 + 1.5 * flash)}px ${colour}` }}>
166
+ {name}
167
+ </span>
168
+ </div>
169
+ );
170
+ };
171
+
172
+ /** A compact reward tag for the task panel. */
173
+ export const RewardTag: React.FC<{ name: string; rarity: Rarity | null; delay: number }> = ({
174
+ name,
175
+ rarity,
176
+ delay,
177
+ }) => {
178
+ const u = useU();
179
+ const frame = useCurrentFrame();
180
+ const { fps } = useVideoConfig();
181
+ const colour = RARITY[rarityOf(rarity)];
182
+ return (
183
+ <span
184
+ style={{
185
+ fontSize: u * 1.9,
186
+ fontWeight: 700,
187
+ color: colour,
188
+ opacity: entrance(frame, fps, delay),
189
+ border: `1px solid ${colour}88`,
190
+ padding: `${u * 0.2}px ${u * 0.7}px`,
191
+ background: `${colour}14`,
192
+ }}
193
+ >
194
+ {name}
195
+ </span>
196
+ );
197
+ };
@@ -0,0 +1,62 @@
1
+ import { interpolate, spring } from "remotion";
2
+ import { CueKind, Rarity, ScreenText } from "../schema";
3
+
4
+ /**
5
+ * Shared look for subtitles and every screen-text style. Sizes are in `u`, one
6
+ * hundredth of frame height, so the same numbers hold for 720×1280 and 1080×1920.
7
+ */
8
+ export const unit = (height: number): number => height / 100;
9
+
10
+ /** Every style component takes exactly this, so one can replace another. */
11
+ export type StyleProps = { text: ScreenText };
12
+
13
+ export const SANS = '"Noto Sans SC", sans-serif';
14
+ export const MONO = '"JetBrains Mono", "Noto Sans SC", monospace';
15
+
16
+ export const COLOURS = {
17
+ system: "#3FE0FF",
18
+ task: "#FF8A5B",
19
+ taskTitle: "#FFE3D6",
20
+ alarm: "#FF5A4E",
21
+ chipLabel: "#FFB39E",
22
+ panelInk: "#EAF7FF",
23
+ muted: "#9FB7CC",
24
+ ink: "#0B1020",
25
+ cardSurface: "rgba(255,255,255,0.97)",
26
+ cardName: "#1C2230",
27
+ cardUnit: "#9AA3B2",
28
+ cardRule: "#EEF0F4",
29
+ cardValue: "#E5322D",
30
+ cardDots: ["#FF4D4F", "#1FA2FF", "#111111", "#2BB673"],
31
+ };
32
+
33
+ /** Subtitle fill by who speaks; the same values are in edit_tool.py for the ASS route. */
34
+ export const SUBTITLE: { fill: Record<CueKind, string>; keyword: string; rim: string } = {
35
+ fill: { line: "#FFFFFF", vo: "#9FE8FF", system: "#3FE0FF" },
36
+ keyword: "#FFD400",
37
+ rim: "#0B0D12",
38
+ };
39
+
40
+ /** Unmarked items read as 稀有. */
41
+ export const RARITY: Record<Rarity, string> = { 传说: "#FFC940", 史诗: "#B26BFF", 稀有: "#3FA9FF" };
42
+ export const rarityOf = (rarity: Rarity | null): Rarity => rarity ?? "稀有";
43
+
44
+ /** Where each style sits, in `u` from the top. */
45
+ export const TOP_U = { card: 16, system: 10, task: 9, corner: 5.5 };
46
+
47
+ /** 0→1 entry, `delay` seconds after the piece's first frame. A pure function of the frame. */
48
+ export const entrance = (frame: number, fps: number, delay = 0, damping = 14): number =>
49
+ spring({ frame: frame - delay * fps, fps, config: { damping, stiffness: 200, mass: 0.6 } });
50
+
51
+ /** 1→0 over the piece's last `seconds`; the caller also lifts by (1 − value). */
52
+ export const exit = (frame: number, fps: number, text: ScreenText, seconds = 0.22): number => {
53
+ const length = (text.end - text.start) * fps;
54
+ return interpolate(frame, [length - seconds * fps, length], [1, 0], {
55
+ extrapolateLeft: "clamp",
56
+ extrapolateRight: "clamp",
57
+ });
58
+ };
59
+
60
+ /** Two or three frames of glitch before a panel settles. */
61
+ export const glitch = (frame: number): { opacity: number; dx: number } =>
62
+ frame > 3 ? { opacity: 1, dx: 0 } : { opacity: frame % 2 ? 0.35 : 1, dx: frame % 2 ? 6 : -4 };
@@ -5,6 +5,7 @@
5
5
  "jsx": "react-jsx",
6
6
  "module": "ESNext",
7
7
  "moduleResolution": "bundler",
8
+ "allowJs": true,
8
9
  "strict": true,
9
10
  "skipLibCheck": true,
10
11
  "noEmit": true
@@ -22,9 +22,11 @@
22
22
  - 入点:0.90
23
23
  - 出点:3.40
24
24
  - 时长:2.50
25
- - 取舍:入点=弹窗动画已经展开过半,起势的静止两帧删掉;出点=弹窗完全展开且文字可读的最后一帧,之后画面开始整体提亮
25
+ - 取舍:入点=弹窗动画已经展开过半,起势的静止两帧删掉;出点=弹窗完全展开、面板区仍是留白的最后一帧,之后画面开始整体提亮
26
26
  - 声音:保留原声;回听确认与上一段衔接
27
27
  - 字幕:无
28
+ - 画面文字:0.40-2.50 系统面板 认证通过|创作者认证(史诗)|全站创作者榜 第 1 位(传说)
29
+ - 音效:0.40-1.00 制作成果/音效/提示音.wav(增益:-10)
28
30
 
29
31
  ## CUT-EP001-003 · 他念出那句话
30
32
 
@@ -34,7 +36,7 @@
34
36
  - 时长:5.00
35
37
  - 取舍:入点=按发声区间前推 0.3 秒余量,开头 1.5 秒的凝视与上一段蓄势重复,整段去掉;出点=句尾收音之后 0.4 秒,人物姿态尚未回弹
36
38
  - 声音:保留原声
37
- - 字幕:这条路我自己走
39
+ - 字幕:这条路我自己走(重点:自己走)
38
40
 
39
41
  ---
40
42
 
@@ -6,7 +6,9 @@
6
6
  动作镜可以从动作已经开始的位置进入;反应、等待、揭示前停顿可以保留静止。
7
7
  出点要让观众读到本镜的结果,并避开后续漂移或无意重复。
8
8
 
9
- 对白先确定实际发声区间,保留完整的字音与需要的停顿。
9
+ 对白先确定实际发声区间,保留完整的字音与需要的停顿。生成的对白镜常晚开口、句后拖尾:
10
+ 入点落在开口前约 0.25 秒,出点落在台词结束后留约 0.4 秒反应,整段不短于约 1.2 秒;
11
+ 只按属于本句台词的发声定位,不被杂音拖长。
10
12
  画面切换可以发生在一句台词中间,前提是音轨连续、说话人和叙事关系清楚。
11
13
  不要为了换画面把原台词改成两句。内置 render 只做同步切段;分离画面和声音的剪法
12
14
  需要先用外部剪辑工具完成,记录所用素材、声音区间和处理方式。
@@ -7,18 +7,22 @@
7
7
  | 时长与切点 | 对照实际渲染区间、帧边界和用户时长要求 |
8
8
  | 内容覆盖 | 对照分镜和视频提示词,必要内容有承载,未采用镜头有原因 |
9
9
  | 台词 | 在成片上回听,必要时转写辅助,逐句对照剧本 |
10
- | 边界帧 | 查看剪辑点前后,检查意外黑白帧、画面断裂和漂移 |
10
+ | 边界帧 | 查看剪辑点前后,检查意外黑白帧、画面断裂和漂移;逐帧查看 `verify` 列出的疑似坏帧 |
11
11
  | 声音 | 回听接缝、对白清晰度与已声明静默;测量整片响度 |
12
12
  | 字幕 | 检查逐字内容、发声时间、字号、折行和画内文字避让 |
13
13
  | 画内文字 | 按剧本与视觉设定的文字政策检查载体、可读性和指定文字 |
14
14
  | 画幅与帧率 | 探测输出文件,对照交付规格 |
15
- | 接镜色彩 | 在同场景、同光态下比较可比区域,确认校正没有过冲 |
15
+ | 接镜色彩 | 在同场景、同光态下比较可比区域,确认校正没有过冲;先看 `verify` 点名的切点 |
16
16
 
17
17
  `verify` 只提供部分技术测量,不能替代回听与画面检查。
18
18
  分段色彩观测按当前剪辑单读取中间分段,报告平均亮度和蓝减红像素值;它不代表成片局部区域的
19
19
  接镜残差,也不要求各场景接近同一均值。改动剪辑单后先重新渲染,再测量并查看实际切点。
20
20
  发现有意黑场、静默或光态变化时按创作意图判断,不因数值异常直接判错。
21
21
 
22
+ `verify` 还逐帧读成片:「切点亮度变化」是每个切点前后两帧的平均亮度差(0–255),超过 20 的
23
+ 列进「请逐帧查看」;「疑似坏帧」是与前后两帧都明显不同、而前后两帧彼此相近的单帧,常见于解码
24
+ 错位,画面文字入场的一两帧故障效果也会被列出并标明。两项都只指出该看哪里,不阻断交付。
25
+
22
26
  ## 交付
23
27
 
24
28
  给出成片、剪辑单、可继续编辑的中间文件,以及外部混音或字幕工程(如使用)。
@@ -26,11 +26,17 @@
26
26
 
27
27
  ## 接镜与色彩一致性
28
28
 
29
- 先按同一场景、同一光态分组,再选择可比较的脸、衣物或中性表面作基准。
30
- 全画面平均 RGB 会受景别、服装面积和背景影响,只用于筛查,不能单独决定校正量。
31
- 夜景、日景和有意的冷暖对比不需要拉到全片同一均值。
29
+ 逐段生成的素材曝光各不相同,同一场景里切过去会像闪了一下。`render` 默认在同一场景内自动接镜:
30
+ 剪辑单里相邻、并经《视频提示词.md》的「分镜」与《分镜.md》的「来源」追到同一场景 ID 的几段为一组,
31
+ 测量每段的逐通道均值与离散度,各向组内中位数拉近 70%,每个通道只用一个增益和偏移。
32
+ 它只让切点不再跳,不把各段拉成同一均值;换场、插叙和追不到场景的段不动。
33
+ 实际用到的数值列在 render 输出的「自动接镜」里。
32
34
 
33
- 相邻镜头有可见的曝光或白平衡偏差时,在对应 CUT 写:
35
+ 自动接镜看的是全画面统计,会受景别、服装面积和背景影响,以下情况在对应 CUT 处理:
36
+
37
+ - 段内有意的光态变化(关灯、闪回、冷暖对比)写 `- 画面:不校`:这一段不校正,也不计入组内中位数。
38
+ - 自动接镜后仍有可见偏差,先按同一光态选脸、衣物或中性表面作基准比较,再写校正。
39
+ 写了校正的段只用这里的值,不再自动接镜,也不计入中位数:
34
40
 
35
41
  ```text
36
42
  - 画面:亮度 +0.06;色温 -6
@@ -41,8 +47,8 @@
41
47
  - `色温`:工具的冷暖校正量,支持 −30…+30,正数提红压蓝;不是开尔文值。
42
48
 
43
49
  这些范围是内置工具的处理范围,不是画面质量标准。需要更大或更精细的校正时使用调色工具。
44
- 先试小幅校正,再看渲染结果和相同区域的测量;不要用固定系数把整片均值差直接换算成校正量。
45
- 人物身份漂移、错误光源或缺失动作应交回上游。
50
+ 先试小幅校正,再看渲染结果和相同区域的测量。人物身份漂移、错误光源或缺失动作应交回上游。
51
+ 整集都不要自动接镜时,在交付规格写 `- 接镜匹配:无`。
46
52
 
47
53
  生成阶段仍应保持已接受的光线和色调;已有素材只差可校正的曝光或白平衡时,优先评估后期修正。
48
54
 
@@ -6,7 +6,8 @@
6
6
  可按需要采用音轨交叉淡入、连续环境底、对白与画面分离或补充音乐。
7
7
  保留有叙事作用的静默、音效和相对响度。
8
8
 
9
- **内置工具范围**:`edit_tool.py render` 保留素材原声并可做整片响度标准化;
9
+ **内置工具范围**:`edit_tool.py render` 保留素材原声,按 `音效` 行把单个声音文件混进指定时刻,
10
+ 并可做整片响度标准化;混音不压低原声,响度在混入音效之后测量。
10
11
  CUT 的 `声音` 行是剪辑说明,工具不解析它,不执行静音、交叉淡入、配乐进入或 ducking。
11
12
  需要这些处理时用 ffmpeg 或剪辑软件另行完成,记录命令或工程及实际输出;完成后再验收。
12
13
  不能把写下声音方案或 render 成功当成已经混音。
@@ -29,26 +30,30 @@ CUT 的 `声音` 行是剪辑说明,工具不解析它,不执行静音、交
29
30
  ## 字幕
30
31
 
31
32
  竖屏短剧默认硬字幕,服从用户的字幕选择。
32
- 字幕文字逐字取自《剧本.md》,标点可按字幕惯例调整。转写仅辅助定位,不覆盖原文。
33
+ 字幕文字逐字取自《剧本.md》,剪辑单照抄剧本标点。转写仅辅助定位,不覆盖原文。
34
+ render 烧录时按 GY/T 288 与短剧惯例改写显示形式:去掉句末标点,保留 `?` `!`,
35
+ 句中的 `,。、;:` 换成全角空格;`字幕.srt` 用的也是这一形式,`check` 仍按剧本原文核对。
33
36
 
34
- - 一句过长时可拆成多个先后显示的字幕条。
37
+ - 字幕一行显示。超过 12 个字的句子,render 在句中停顿处拆成先后显示的几条,
38
+ 按字数分配这句的时间;没有停顿的长短语按字数均分。重点词不会被拆到两条里。
35
39
  - 一镜有多句时使用 `字幕 1`、`字幕 2` 等编号,每句给出时间。
36
40
  - 字幕时间相对本 CUT 的入点,不相对源素材起点;落在该段使用区间内。
37
41
  - 累计成片位置使用渲染后各段的实际时长,避免帧边界取整产生漂移。
38
42
  - 抽帧检查字号、折行、安全区和画内文字遮挡。
39
43
 
40
- 内置 ffmpeg 路线用实际画幅作为 ASS PlayRes,字号按该画幅像素计算。
41
- 它采用全片统一样式,CUT 的字幕行不支持位置指令;需要逐镜避让或更复杂排版时,
44
+ 两条路线用同一套尺寸:字高为画面高度的 4.3%,深色描边 0.42%,基线在距底边约 24% 处,
45
+ 避开平台自己的底部界面;字色按来源区分,重点词标黄。内置 ffmpeg 路线用实际画幅作为 ASS PlayRes,
46
+ 字号按该画幅像素计算;它采用全片统一样式,CUT 的字幕行不支持位置指令。需要逐镜避让或更复杂排版时,
42
47
  用外部字幕编辑器或修改 Remotion 字幕层,并对输出抽帧检查。
43
48
 
44
49
  ### 渲染路线
45
50
 
46
51
  | 路线 | 适用范围 | 开销 |
47
52
  |---|---|---|
48
- | `ffmpeg`(默认) | 统一的白字黑描边样式 | 需要带 libass 的 ffmpeg |
49
- | `remotion` | 需要修改 CSS、字重、折行或入场动画 | Node 依赖,逐帧浏览器渲染;并发默认 2 |
53
+ | `ffmpeg`(默认) | 本机的思源黑体粗体,描边与颜色同上 | 需要带 libass 的 ffmpeg |
54
+ | `remotion` | 思源黑体 Heavy(随叠层安装),描边压在字下、入场弹出、重点词 120 ms 放大 | Node 依赖,逐帧浏览器渲染;并发默认 2 |
50
55
 
51
- Remotion 安装与样式调整见 [字幕叠层](../assets/remotion/README.md)。
56
+ Remotion 安装与样式调整见 [Remotion 叠层](../assets/remotion/README.md)。
52
57
  两条路线都要在实际成片上检查字幕。
53
58
 
54
59
  ## 响度与时间线音乐
@@ -31,6 +31,8 @@
31
31
  | EDT-16 | reviewed_invariant | Compare shots within the same scene and lighting state using comparable image regions. Record corrections, then inspect the output. Whole-frame averages alone do not establish a mismatch; intentional lighting changes are valid. |
32
32
  | EDT-17 | structural_invariant | After material is regenerated, re-measure the spoken spans and update its subtitle windows before rendering. The material-mtime warning is a prompt to check, not proof of alignment. |
33
33
  | EDT-18 | taste_option | Optional grain is declared once in the delivery spec and applied dynamically after assembly by the built-in renderer. Its supported range is a tool limit, not a quality standard; other treatments may use external grading tools. |
34
+ | EDT-19 | craft_default | A dialogue cut enters about 0.25 s before the line's speech onset and leaves about 0.4 s after the line ends, and lasts at least about 1.2 s. Locate these from the sounds that belong to the scripted line, so noise never stretches the cut. |
35
+ | EDT-20 | craft_default | Within one scene, the built-in renderer pulls each cut partway toward the scene's median exposure and colour and reports the values it applied. A cut's stated correction or 「不校」 replaces the automatic match, and the delivery spec can turn it off. |
34
36
 
35
37
  规则分级由高到低:`structural_invariant`(结构缺陷,阻断)、
36
38
  `reviewed_invariant`(需证据判断)、`craft_default`(常用做法,可覆盖)、