@oh-story/dsh 0.1.11 → 0.1.13

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 (264) hide show
  1. package/README.md +17 -11
  2. package/lib/client.js +85 -35
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +41 -36
  5. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +340 -13
  6. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +4 -2
  7. package/lib/drama/skills/short-drama-edit/SKILL.md +32 -12
  8. package/lib/drama/skills/short-drama-edit/references/still-cuts.md +90 -0
  9. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1035 -145
  10. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +48 -0
  11. package/lib/drama/skills/short-drama-produce/SKILL.md +6 -1
  12. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +12 -0
  13. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +138 -9
  14. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +6 -0
  15. package/lib/drama/skills/short-drama-storyboard/SKILL.md +2 -0
  16. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +3 -1
  17. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +7 -0
  18. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +14 -0
  19. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +19 -6
  20. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  21. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +5 -0
  22. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +4 -1
  23. package/lib/index.js +16 -7
  24. package/lib/index.js.map +2 -2
  25. package/lib/novel-to-game/README.md +98 -44
  26. package/lib/novel-to-game/README_ZH.md +100 -46
  27. package/lib/novel-to-game/VERSION +1 -1
  28. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +27 -202
  29. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +23 -115
  30. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/chamber.webp +0 -0
  31. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/court_night.webp +0 -0
  32. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/court_rain.webp +0 -0
  33. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/garden.webp +0 -0
  34. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/hall.webp +0 -0
  35. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/kitchen.webp +0 -0
  36. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/street.webp +0 -0
  37. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/street_dawn.webp +0 -0
  38. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/temple.webp +0 -0
  39. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/moon.webp +0 -0
  40. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/angry.webp +0 -0
  41. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/blush.webp +0 -0
  42. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/neutral.webp +0 -0
  43. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/sad.webp +0 -0
  44. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/smile.webp +0 -0
  45. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/surprised.webp +0 -0
  46. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/angry.webp +0 -0
  47. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/blush.webp +0 -0
  48. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/neutral.webp +0 -0
  49. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/sad.webp +0 -0
  50. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/smile.webp +0 -0
  51. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/surprised.webp +0 -0
  52. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/angry.webp +0 -0
  53. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/blush.webp +0 -0
  54. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/neutral.webp +0 -0
  55. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/sad.webp +0 -0
  56. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/smile.webp +0 -0
  57. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/surprised.webp +0 -0
  58. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/angry.webp +0 -0
  59. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/blush.webp +0 -0
  60. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/neutral.webp +0 -0
  61. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/sad.webp +0 -0
  62. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/smile.webp +0 -0
  63. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/surprised.webp +0 -0
  64. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/angry.webp +0 -0
  65. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/blush.webp +0 -0
  66. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/neutral.webp +0 -0
  67. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/sad.webp +0 -0
  68. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/smile.webp +0 -0
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/surprised.webp +0 -0
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +326 -2503
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +71 -4
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/adv.js +221 -0
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +113 -257
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +511 -3026
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/menus.js +277 -0
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/petals.js +67 -0
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/stage.js +180 -0
  78. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/store.js +70 -0
  79. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common.js +198 -0
  80. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common2.js +204 -0
  81. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common3.js +198 -0
  82. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/dates.js +186 -0
  83. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/index.js +122 -0
  84. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/meng.js +190 -0
  85. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/pan.js +212 -0
  86. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/pinger.js +198 -0
  87. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/xuee.js +199 -0
  88. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/yue.js +214 -0
  89. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -2
  90. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +182 -45
  91. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +7 -17
  92. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +9 -9
  93. package/lib/novel-to-game/manifest.json +303 -78
  94. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +7 -2
  95. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +2 -0
  96. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +2 -0
  97. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +9 -0
  98. package/lib/types/client/drama-production-view.d.ts +11 -0
  99. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  100. package/lib/types/client/file-activity.d.ts +1 -1
  101. package/lib/types/client/file-activity.d.ts.map +1 -1
  102. package/lib/types/client/production-prompts.d.ts +7 -1
  103. package/lib/types/client/production-prompts.d.ts.map +1 -1
  104. package/lib/types/client/production-runtime.d.ts +7 -2
  105. package/lib/types/client/production-runtime.d.ts.map +1 -1
  106. package/lib/types/drama-adapters.d.ts.map +1 -1
  107. package/lib/types/skill-provider.d.ts.map +1 -1
  108. package/lib/types/video-project.d.ts.map +1 -1
  109. package/lib/video-recap/CHANGELOG.md +108 -1
  110. package/lib/video-recap/README.en.md +18 -14
  111. package/lib/video-recap/README.md +18 -14
  112. package/lib/video-recap/manifest.json +297 -321
  113. package/lib/video-recap/skills/video-assemble/SKILL.md +18 -16
  114. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +3 -1
  115. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +5 -5
  116. package/lib/video-recap/skills/video-assemble/references/packaging.md +4 -4
  117. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +10 -10
  118. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +13 -2
  119. package/lib/video-recap/skills/video-assemble/scripts/adoption/av_clock.py +109 -0
  120. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +4 -1
  121. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +2 -9
  122. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +188 -51
  123. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +0 -1
  124. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +32 -75
  125. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +8 -15
  126. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +202 -161
  127. package/lib/video-recap/skills/video-assemble/scripts/codec_peak.py +112 -0
  128. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +10 -101
  129. package/lib/video-recap/skills/video-assemble/scripts/jianying/builders.py +44 -475
  130. package/lib/video-recap/skills/video-assemble/scripts/jianying/model.py +1 -22
  131. package/lib/video-recap/skills/video-assemble/scripts/jianying/templates.py +0 -3
  132. package/lib/video-recap/skills/video-assemble/scripts/jianying/timeline_contract.py +36 -103
  133. package/lib/video-recap/skills/video-assemble/scripts/jianying/tracks.py +0 -8
  134. package/lib/video-recap/skills/video-assemble/scripts/jianying/writer.py +28 -203
  135. package/lib/video-recap/skills/video-assemble/scripts/lib.py +20 -34
  136. package/lib/video-recap/skills/video-assemble/scripts/loudness.py +332 -0
  137. package/lib/video-recap/skills/video-assemble/scripts/media.py +158 -38
  138. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +30 -16
  139. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +49 -8
  140. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +17 -6
  141. package/lib/video-recap/skills/video-assemble/scripts/subtitles/core.py +24 -2
  142. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +2 -5
  143. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +2 -9
  144. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +12 -34
  145. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +3 -4
  146. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +28 -2
  147. package/lib/video-recap/skills/video-cut/SKILL.md +37 -11
  148. package/lib/video-recap/skills/video-cut/references/shot-review.md +1 -1
  149. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -34
  150. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +96 -124
  151. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +97 -182
  152. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +177 -166
  153. package/lib/video-recap/skills/video-cut/scripts/frame_grid.py +249 -0
  154. package/lib/video-recap/skills/video-cut/scripts/lib.py +0 -3
  155. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +173 -7
  156. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +234 -151
  157. package/lib/video-recap/skills/video-cut/scripts/sentence_gate.py +189 -0
  158. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +2 -6
  159. package/lib/video-recap/skills/video-recap/SKILL.md +24 -27
  160. package/lib/video-recap/skills/video-recap/references/audio-routing.md +8 -6
  161. package/lib/video-recap/skills/video-recap/references/config-playbook.md +8 -11
  162. package/lib/video-recap/skills/video-recap/references/data-schema.md +131 -74
  163. package/lib/video-recap/skills/video-recap/references/resource-library.md +17 -1
  164. package/lib/video-recap/skills/video-recap/scripts/doctor.py +51 -268
  165. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +89 -254
  166. package/lib/video-recap/skills/video-recap/scripts/lib.py +81 -70
  167. package/lib/video-recap/skills/video-recap/scripts/library.py +40 -4
  168. package/lib/video-recap/skills/video-recap/scripts/materials.py +13 -80
  169. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +49 -17
  170. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +1 -3
  171. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +86 -116
  172. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +87 -23
  173. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +0 -39
  174. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +37 -135
  175. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +118 -127
  176. package/lib/video-recap/skills/video-recap/scripts/resources/__init__.py +4 -0
  177. package/lib/video-recap/skills/video-recap/scripts/{resource_lock.py → resources/lock.py} +1 -1
  178. package/lib/video-recap/skills/video-recap/scripts/{project_binding.py → resources/project_binding.py} +78 -17
  179. package/lib/video-recap/skills/video-reference/SKILL.md +108 -0
  180. package/lib/video-recap/skills/video-reference/references/reference-schema.md +139 -0
  181. package/lib/video-recap/skills/video-reference/scripts/lib.py +85 -0
  182. package/lib/video-recap/skills/video-reference/scripts/reference.py +96 -0
  183. package/lib/video-recap/skills/video-reference/scripts/reference_check.py +553 -0
  184. package/lib/video-recap/skills/video-reference/scripts/reference_frames.py +122 -0
  185. package/lib/video-recap/skills/video-reference/scripts/reference_measure.py +253 -0
  186. package/lib/video-recap/skills/video-reference/scripts/reference_profile.py +271 -0
  187. package/lib/video-recap/skills/video-script/SKILL.md +9 -7
  188. package/lib/video-recap/skills/video-script/scripts/agent_text.py +18 -267
  189. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +12 -30
  190. package/lib/video-recap/skills/video-script/scripts/entry_suggestion.py +125 -0
  191. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +2 -26
  192. package/lib/video-recap/skills/video-script/scripts/lib.py +5 -15
  193. package/lib/video-recap/skills/video-script/scripts/lint_summary.py +184 -0
  194. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +120 -100
  195. package/lib/video-recap/skills/video-script/scripts/review.py +3 -34
  196. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +20 -46
  197. package/lib/video-recap/skills/video-script/scripts/review_response.py +120 -258
  198. package/lib/video-recap/skills/video-script/scripts/review_runner.py +2 -10
  199. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +89 -5
  200. package/lib/video-recap/skills/video-script/scripts/validate.py +26 -34
  201. package/lib/video-recap/skills/video-understanding/SKILL.md +29 -4
  202. package/lib/video-recap/skills/video-understanding/references/data-schema.md +5 -22
  203. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +24 -121
  204. package/lib/video-recap/skills/video-understanding/scripts/asr.py +11 -5
  205. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +15 -24
  206. package/lib/video-recap/skills/video-understanding/scripts/briefing/builder.py +59 -25
  207. package/lib/video-recap/skills/video-understanding/scripts/briefing/context.py +39 -3
  208. package/lib/video-recap/skills/video-understanding/scripts/briefing/inputs.py +15 -27
  209. package/lib/video-recap/skills/video-understanding/scripts/briefing/timeline.py +136 -37
  210. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +121 -37
  211. package/lib/video-recap/skills/video-understanding/scripts/detect.py +118 -16
  212. package/lib/video-recap/skills/video-understanding/scripts/index_normalize.py +359 -0
  213. package/lib/video-recap/skills/video-understanding/scripts/lib.py +62 -21
  214. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +181 -51
  215. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +0 -26
  216. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +37 -14
  217. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +40 -32
  218. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +100 -127
  219. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +182 -30
  220. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +30 -27
  221. package/lib/video-recap/skills/video-voiceover/SKILL.md +19 -12
  222. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +3 -3
  223. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +3 -1
  224. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +60 -135
  225. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +9 -34
  226. package/lib/video-recap/skills/video-voiceover/scripts/providers/fish_audio.py +6 -1
  227. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +64 -1
  228. package/lib/video-recap/skills/video-voiceover/scripts/tts_cache.py +99 -0
  229. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +177 -200
  230. package/package.json +45 -45
  231. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  232. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  233. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  234. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +0 -1494
  235. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +0 -147
  236. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +0 -7470
  237. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +0 -13066
  238. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +0 -32
  239. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +0 -99
  240. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +0 -152
  241. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +0 -118
  242. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +0 -84
  243. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +0 -98
  244. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +0 -204
  245. package/lib/video-recap/skills/video-assemble/references/pair-media.md +0 -74
  246. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +0 -293
  247. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +0 -216
  248. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +0 -23
  249. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +0 -33
  250. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +0 -1
  251. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_client.py +0 -13
  252. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_contract.py +0 -9
  253. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_evidence.py +0 -287
  254. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_observations.py +0 -175
  255. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_payload.py +0 -206
  256. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_report.py +0 -318
  257. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_runner.py +0 -130
  258. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -320
  259. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +0 -108
  260. package/lib/video-recap/skills/video-understanding/scripts/brief.py +0 -9
  261. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +0 -211
  262. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +0 -707
  263. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +0 -143
  264. /package/lib/video-recap/skills/video-cut/scripts/{narration_mapping.py → cut_qc.py} +0 -0
@@ -0,0 +1,198 @@
1
+ // 共通线:序章到清明席散,按好感开放五扇院门。
2
+ export default String.raw`
3
+ # start
4
+ @bg street fade
5
+ @bgm daily
6
+ @chapter 序章|春深西门宅
7
+ 清河县的春天来得迟,一来就是满街柳絮。
8
+ 县门前那间生药铺,是你西门庆起家的地方。银子、药材、官面上的人情,都从这道柜台过。
9
+ 玳安:爹!爹——大娘差我来请,说清明的席面要商量,叫您今日务必早些回去。
10
+ 西门庆:她亲口说的“务必”?
11
+ 玳安:亲口说的。还说……若是又被应二叔拉去院里吃酒,就不必回了。
12
+ 你笑了一声。月娘向来如此:话不重,分量却一两不少。
13
+ 自从你不顾她的劝,把隔壁的李瓶儿娶进门,她已经有些日子没好好同你说过话了。
14
+ 玳安:还有一桩。花家又来人了,在门房坐了半日,说瓶儿娘带过来的箱笼,有他家一份。
15
+ 西门庆:……知道了。
16
+ 你把账簿合上。今日铺子里的银子好算,家里那五扇门,却一扇比一扇难算。
17
+ @choice
18
+ - 立刻回家 -> home {yue+1}
19
+ - 先绕去花园角门,看看五房金莲 -> home {pan+1 f:late}
20
+
21
+ # home
22
+ @bg compound fade
23
+ @bgm garden
24
+ 暮色落下来的时候,宅子里各处都点了灯。
25
+ 正院、花园角门、瓶儿新收拾的东院、西厢、灶上——五盏灯,五个人。
26
+ @if f:late -> home_late
27
+ @jump dinner
28
+
29
+ # home_late
30
+ @bg garden fade
31
+ @show pan 中 笑
32
+ 金莲(笑):哟,稀客。全宅都在正堂等你开饭,你倒先摸到我这角门来了。
33
+ 金莲:怎么,怕进了正堂挨大娘的冷脸,先来我这儿讨口热乎的?
34
+ 西门庆:路过。
35
+ 金莲(笑):路过?从县前到正堂,可不路过我这儿。
36
+ 她把团扇往你胸口轻轻一点,又收回去。
37
+ 金莲:快去吧。我晚些到,省得叫人说,又是我把你勾住了。
38
+ @hide pan
39
+ @jump dinner
40
+
41
+ # dinner
42
+ @bg hall fade
43
+ @chapter 第一章|五扇门
44
+ @cg dinner
45
+ 正堂里摆了一桌家常菜。五个女人,五种坐法。二房李娇儿推说头疼,没来入席。
46
+ @cg intro_yue
47
+ 吴月娘,正头娘子。坐在上首,背挺得很直,账本压在手边,像压着一屋子的规矩。
48
+ @cg intro_pan
49
+ 潘金莲,第五房。一身朱红,团扇半掩着脸,眼睛却一刻没闲。没有嫁妆,没有娘家,只有一张谁也说不过的嘴。
50
+ @cg intro_pinger
51
+ 李瓶儿,第六房。坐得最远,手里攥着一把小铜钥匙,膝上搁着一只漆匣。她进门还不满一月,那三夜空房的事,宅里人人知道,却没人提。
52
+ @cg intro_meng
53
+ 孟玉楼,第三房。寡居再嫁,带着自己的家资进门,手里还拈着一张名帖。谁的话掉在地上,她都能笑着替人捡起来。
54
+ @cg intro_xuee
55
+ 孙雪娥,第四房。丫头出身,掌着全宅的灶和米仓,腰上挂着仓房的绳钥。她没有坐,端着汤从灶上过来,袖子还卷着。
56
+ @cg off
57
+ @show yue 中 平
58
+ 月娘:官人回来了。坐吧,清明的事,大家都等着。
59
+ @if f:late -> dinner_late
60
+ 月娘(笑):……难得,天没黑透就进了门。
61
+ 她亲手给你盛了一碗饭,搁在你面前。
62
+ @jump dinner_talk
63
+
64
+ # dinner_late
65
+ 月娘:……从县前回来,走了这许久。
66
+ 她没有看你,只把一只空碗推到你面前。正堂里静了一瞬。
67
+ @do yue-1
68
+ @jump dinner_talk
69
+
70
+ # dinner_talk
71
+ 月娘:七日后清明,后花园荷亭摆席,请几家亲戚,也是给瓶儿妹妹一个正经的场面——叫外头人知道,她进的是西门家的正门。
72
+ 月娘:席散那一夜,各房掌不掌灯,由各房自己定。还为官人亮着灯的门,官人才进得去。
73
+ @show pinger 右 羞
74
+ 瓶儿(羞):大姐姐费心了……
75
+ @show pan 左 笑
76
+ 金莲(笑):正门是正门,就怕有人进了正门,心还留在隔壁。
77
+ 瓶儿(哀):……
78
+ @show meng 右 笑
79
+ @hide pinger
80
+ 玉楼(笑):五妹妹这张嘴,清明不唱曲儿可惜了。到时候你弹琵琶,我拨月琴,叫亲戚们听听咱们宅里的热闹。
81
+ 金莲(笑):三姐姐会打圆场。
82
+ 玉楼:圆场打得好,戏才唱得下去嘛。
83
+ 就在这时,雪娥把汤放上桌。
84
+ @hide meng
85
+ @show xuee 右 平
86
+ 雪娥:鸡汤,炖了两个时辰。
87
+ 金莲舀了一勺,眉毛一挑。
88
+ 金莲(怒):凉的。四姐姐炖了两个时辰,就炖出一碗凉汤来?
89
+ 雪娥(怒):从灶上到正堂,要穿两道院子。等的是人,不是汤。
90
+ 金莲(笑):哦——是怪我们来晚了?还是怪官人来晚了?
91
+ 满桌的眼睛,都落到了你身上。
92
+ @choice
93
+ - “汤凉了再热就是。四娘炖了一下午,谁也别挑。” -> d_xuee {xuee+1 pan-1}
94
+ - “五娘舌头尖,凉一分都尝得出来。”顺着金莲笑 -> d_pan {pan+1 xuee-1}
95
+ - 看向月娘:“家里的事,大姐说了算。” -> d_yue {yue+1}
96
+
97
+ # d_xuee
98
+ 雪娥愣了一下,像是没料到这句话会落到她头上。
99
+ 雪娥(羞):……我再去热。
100
+ 她端起汤走了,脚步比来时快。
101
+ 金莲(怒):好,好。官人心疼人,我们都看见了。
102
+ @jump dinner_end
103
+
104
+ # d_pan
105
+ 金莲(笑):还是官人懂我。
106
+ 雪娥没说话。她把汤端回去,碗底碰在托盘上,“当”的一声。
107
+ @hide xuee
108
+ 月娘(平):……雪娥,汤热了再端上来。都别站着了。
109
+ @jump dinner_end
110
+
111
+ # d_yue
112
+ 月娘看了你一眼。那一眼很短,却像是许久以来,你第一次把一件事交回到她手里。
113
+ 月娘(平):雪娥,汤拿去热,不必急。金莲,菜还多着,先吃别的。
114
+ 月娘:清明那日的席,雪娥管灶,玉楼管请客,金莲和瓶儿……一同管花园的布置。
115
+ 金莲(惊):我和她?
116
+ 瓶儿(惊):……
117
+ 月娘(笑):一家人,总要学着一处做事。
118
+ @jump dinner_end
119
+
120
+ # dinner_end
121
+ @hide all
122
+ @bg court_night fade
123
+ @bgm night
124
+ 晚饭散得不算愉快,也不算难堪。宅子大,灯一盏盏熄下去,人心里的事却没熄。
125
+ 你在回廊下站了一会儿。春夜的风里有花香,也有不知哪一处院子没关紧的窗。
126
+ 今夜,你想去看看谁?
127
+ @choice
128
+ - 正院 · 月娘还在灯下看账 -> n1_yue {yue+2}
129
+ - 花园角门 · 有人在弹琵琶 -> n1_pan {pan+2}
130
+ - 东院 · 瓶儿的窗还亮着 -> n1_pinger {pinger+2}
131
+ - 西厢 · 隐约有月琴声 -> n1_meng {meng+2}
132
+ - 灶上 · 那里还有火光 -> n1_xuee {xuee+2 f:xuee_morning}
133
+
134
+ # n1_yue
135
+ @bg hall fade
136
+ @show yue 中 平
137
+ 月娘果然还在看账。灯芯剪得很短,光却稳。
138
+ 月娘:官人走错门了吧。东院在那边。
139
+ 西门庆:我没走错。
140
+ 她的笔停了一下,又写下去。
141
+ 月娘:清明席面,花费我都列好了。你明日看一眼,若觉得多,就从我的月钱里扣。
142
+ 西门庆:你从来不肯说一句软话。
143
+ 月娘(哀):软话说了,官人也未必听。……夜深了,回去歇着吧。
144
+ 她低下头去。可你走出门时,身后的灯过了很久才熄。
145
+ @jump day2
146
+
147
+ # n1_pan
148
+ @bg garden fade
149
+ @show pan 中 平
150
+ 角门半掩。金莲坐在石凳上,抱着琵琶,弹的是一支没有调子的曲子。
151
+ 金莲(笑):哟,今夜不去东院?
152
+ 西门庆:你弹的什么?
153
+ 金莲:不知道。随手拨的。弹给月亮听,月亮又不嫌我没嫁妆。
154
+ 她手指一停,弦还在颤。
155
+ 金莲(羞):……你要是来笑我的,就站远些。要是来陪我的——那儿还有半张凳子。
156
+ 你坐下了。她没再说话,只是那支曲子,渐渐有了调子。
157
+ @jump day2
158
+
159
+ # n1_pinger
160
+ @bg chamber fade
161
+ @show pinger 中 惊
162
+ 瓶儿开门的时候,手里还攥着帕子,像是刚擦过眼睛。
163
+ 瓶儿(惊):官、官人?这么晚……
164
+ 西门庆:路过,看你窗还亮着。
165
+ 瓶儿(羞):我……睡不着。新屋子,床太大了。
166
+ 她让你进来,倒了一杯茶,茶是凉的,她却像没发觉。
167
+ 瓶儿(哀):官人,今日五姐姐说的话……我不往心里去。我只是想,我进这个门,是不是真进对了。
168
+ 西门庆:进都进了,还问对不对?
169
+ 瓶儿(笑):……也是。
170
+ 她笑得很轻,像怕把什么惊走了。
171
+ @jump day2
172
+
173
+ # n1_meng
174
+ @bg court_night fade
175
+ @show meng 中 笑
176
+ 西厢门口,玉楼披着外衫,月琴搁在膝上,像是专门等人经过。
177
+ 玉楼(笑):官人好耳力。我弹得这样小声,都叫你寻来了。
178
+ 西门庆:你在等我?
179
+ 玉楼:我在等月亮。官人来了也好,月亮总不能陪我说话。
180
+ 她拨了两下弦,侧头看你。
181
+ 玉楼:今晚饭桌上那碗汤,官人怎么想的,我不问。我只说一句——宅里的人,都在看你这碗水端得平不平。
182
+ 西门庆:那你呢?
183
+ 玉楼(羞):我?我是自己挑的这扇门。挑了,就不后悔。
184
+ @jump day2
185
+
186
+ # n1_xuee
187
+ @bg kitchen fade
188
+ @show xuee 中 怒
189
+ 灶上还有火。雪娥一个人在刷锅,背对着门。
190
+ 雪娥(怒):谁?……官人?这儿脏,别脏了你的鞋。
191
+ 西门庆:汤后来热了没有?
192
+ 雪娥:热了。没人喝。
193
+ 她把锅刷得很响。你在门槛上站着,她终于停了手。
194
+ 雪娥(哀):一屋子人吃的饭,总得有人起早。我不图谁谢,只别在饭桌上,当着人说我。
195
+ 西门庆:知道了。
196
+ 雪娥(羞):……知道就好。明早有粥,别来晚。
197
+ @jump day2
198
+ `;
@@ -0,0 +1,204 @@
1
+ // 共通线(续):晨省、花园、门前来人。
2
+ export default String.raw`
3
+ # day2
4
+ @hide all
5
+ @bg kitchen fade
6
+ @bgm daily
7
+ @chapter 第二章|晨省
8
+ 天刚亮,灶上已经蒸气腾腾。
9
+ @if f:xuee_morning -> d2_xuee
10
+ 你去灶上看早饭。可还没走到门口,就听见里头吵起来了。
11
+ @jump d2_quarrel
12
+
13
+ # d2_xuee
14
+ 你按雪娥说的,没有来晚。可还没走到门口,就听见里头吵起来了。
15
+ @jump d2_quarrel
16
+
17
+ # d2_quarrel
18
+ 春梅:我们娘要荷花饼,昨儿就说了!四娘偏做这粗粥,是给谁脸色看?
19
+ 雪娥:荷花饼?一屋子二十几张嘴,就她一张嘴金贵?要吃,叫她自己来灶上和面!
20
+ 春梅:你——你敢这样说我们娘!
21
+ 春梅一跺脚,哭着跑了。不消半盏茶,花园那边的脚步声就到了。
22
+ @cg kitchen_quarrel
23
+ @bgm tension
24
+ 金莲是披着衣裳来的,头发都没梳齐,扇子却拿着。
25
+ 金莲(怒):好大的灶上娘子。我叫丫头来要一口饼,倒被你骂回来了?
26
+ 雪娥(怒):我骂的是丫头,不是你。你要心虚,我也没法子。
27
+ @fx shake
28
+ 金莲(怒):官人,你听听!她连你的人都敢骂——你今日不说句话,往后这宅里,灶上比正堂还大了!
29
+ @cg off
30
+ @show pan 左 怒
31
+ @show xuee 右 怒
32
+ 两个人都看着你。春梅躲在金莲身后,眼睛红着,嘴角却没那么委屈。
33
+ @choice
34
+ - “雪娥管灶,灶上的规矩她定。春梅,先去给四娘赔个不是。” -> k_xuee {xuee+2 pan-1}
35
+ - “金莲要什么,做给她就是。一张饼,值得吵?” -> k_pan {pan+2 xuee-1}
36
+ - “先别吵。春梅,你从头说,一个字都别添。” -> k_fair {xuee+1 yue+1}
37
+
38
+ # k_xuee
39
+ 春梅的脸一下子白了。金莲看着你,像是头一回认不得你。
40
+ 金莲(怒):……好。好得很。春梅,走。
41
+ 她转身就走,扇子“啪”地合上。走到门口,又回头剜了雪娥一眼。
42
+ @hide pan
43
+ 雪娥(惊):官人……
44
+ 她手上全是面粉,攥着围裙,半天才说出一句。
45
+ 雪娥(羞):……粥在锅里,我给你盛。多放了一把枣。
46
+ @jump k_after
47
+
48
+ # k_pan
49
+ 金莲(笑):这才像话。春梅,等着,四娘给你做饼呢。
50
+ 雪娥一句话也没说。她回身去和面,手底下揉得很重,案板“咚咚”地响。
51
+ @hide pan
52
+ 雪娥(哀):……官人的粥,在锅里,自己盛吧。
53
+ 你走的时候,听见她在身后把一只碗磕出了缺口。
54
+ @jump k_after
55
+
56
+ # k_fair
57
+ 春梅抽抽搭搭说了一遍。说到一半,自己先卡住了——原来是她先说了句“四娘也配管我们娘吃什么”。
58
+ 金莲(惊):春梅!
59
+ 金莲的脸红了一阵,扇子在手里转了两圈。
60
+ 金莲(哀):……是丫头嘴贱,我没管好。四姐,这事算我的。
61
+ 雪娥(惊):……
62
+ 雪娥大约从没听金莲认过一个错,愣得忘了接话。
63
+ @hide pan
64
+ @show yue 左 平
65
+ 月娘不知什么时候站在门口,听完了全程。
66
+ 月娘(笑):说清楚了就好。各人回各人的屋,早饭照常。
67
+ 她经过你身边时,低声说了一句:
68
+ 月娘(羞):……官人今日,像个当家的。
69
+ @jump k_after
70
+
71
+ # k_after
72
+ @hide all
73
+ @bg hall fade
74
+ @bgm daily
75
+ 早饭过后,宅里的人各忙各的。
76
+ @show meng 中 笑
77
+ 玉楼(笑):听说灶上一早就唱了一出好戏,我起晚了,没赶上。
78
+ 玉楼:不过官人也别太当回事。女人家吵架,吵的从来不是一张饼。
79
+ 西门庆:那是什么?
80
+ 玉楼(笑):是“你心里有没有我”。……这话我只说一遍,官人自己记着。
81
+ @jump day3
82
+
83
+ # day3
84
+ @hide all
85
+ @bg garden fade
86
+ @bgm garden
87
+ @weather petals
88
+ @chapter 第三章|花园里的箱子
89
+ 午后,花园。桃花开到最盛,风一过就落一地。
90
+ 月娘吩咐的布置,落在金莲和瓶儿两个人身上。你远远就看见,两个人一个站东、一个站西,谁也不先开口。
91
+ @cg garden_chest
92
+ 走近了,才看见瓶儿身边放着一只描金黑漆箱——她从花家带过来的那一只。
93
+ 金莲(笑):六妹妹,布置花园还带着箱子,怕谁偷了去?
94
+ 瓶儿(哀):……是要拿几样旧摆件出来,给荷亭添个样子。
95
+ 金莲(笑):也是。六妹妹有的是东西。人进来了,箱子也进来了,满宅子都替你开眼。
96
+ @cg off
97
+ @show pan 左 笑
98
+ @show pinger 右 哀
99
+ 瓶儿的手按在箱盖上,没有说话。她抬起头,看见了你。
100
+ 瓶儿(哀):官人。……我问你一句话,你别笑我。
101
+ 瓶儿:花家的人天天来要这箱子。宅里的人天天在看这箱子。连我自己,有时候都分不清了——
102
+ 瓶儿(哀):你娶我进门,是为了我,还是为了它?
103
+ 金莲的扇子停住了。花瓣落在箱盖上,没人去拂。
104
+ @choice
105
+ - “箱子是你的,钥匙你自己收着。我娶的是你。” -> g_key {pinger+2 f:gave_key_back}
106
+ - “箱子我替你守着,花家那边,我去打发。” -> g_guard {pinger+1 yue+1}
107
+ - 笑着对金莲:“你也想要个箱子?明日给你打一只更大的。” -> g_pan {pan+2 pinger-1}
108
+
109
+ # g_key
110
+ 瓶儿怔怔地看着你,像是这句话她等了很久,等到不敢等了。
111
+ 瓶儿(羞):……嗯。
112
+ 她把钥匙攥进手心,攥得很紧,眼圈却红了。
113
+ 金莲(怒):啧,这花园里的花,都要被酸掉了。
114
+ 金莲把扇子一合,自去指挥小厮挂灯笼了。走了几步,又停下来,背对着你们说了一句:
115
+ 金莲(哀):……我连只箱子都没有。
116
+ 声音很轻,轻得像不是说给谁听的。
117
+ @jump day4
118
+
119
+ # g_guard
120
+ 瓶儿(笑):……有官人这句话,我就不怕了。
121
+ 她松了口气,把钥匙从腰间解下来,像是要递给你,手伸到一半,又迟疑了。
122
+ 瓶儿(哀):钥匙……我还是先自己收着,好不好?
123
+ 西门庆:随你。
124
+ 金莲在一旁“嗤”地笑了一声,没说话。
125
+ @jump day4
126
+
127
+ # g_pan
128
+ 金莲(笑):这话我可记下了!要比她那只大,还要描金的。
129
+ 瓶儿低下头,把箱子往身边拢了拢。
130
+ 瓶儿(哀):……五姐姐喜欢,是该有一只。
131
+ 她说得很平静。可那天下午,荷亭的布置,她一句话也没再出。
132
+ @jump day4
133
+
134
+ # day4
135
+ @hide all
136
+ @weather none
137
+ @bg street fade
138
+ @bgm tension
139
+ @chapter 第四章|门前来人
140
+ 第二天一早,花家的人堵到了门口。
141
+ @cg gate
142
+ 为首的是花家老大,手里攥着一张旧契,嗓门大得半条街都听得见。
143
+ 花家老大:那箱沉香、那几包胡椒,都是我们花家的货!李氏改嫁,人可以走,货得留下!
144
+ @fx shake
145
+ 花家老大:清明不给个说法,我们就上荷亭,当着你家亲戚的面讨!
146
+ 玳安:爹,他们说的那批货,确是六娘从花家带出来的。沉香几百斤,胡椒几十包,放久了,要潮。
147
+ 清明只剩三天。这件事若不了结,荷亭那桌席,就是给全县人看笑话。
148
+ @cg off
149
+ @bg hall fade
150
+ 你回到正堂,月娘、玉楼都在。李娇儿也被请了来——宅里银钱出入,向来过她的手。
151
+ @cg goods
152
+ 月娘把那张旧契摊开,玉楼凑过去看,两个人的手指一前一后点在同一行上。
153
+ @cg off
154
+ @show yue 左 平
155
+ @show meng 右 平
156
+ 月娘:这是瓶儿妹妹的私产,按理说,当着中人的面,把契书一条条对清楚。是谁的归谁,不是谁的,一两也不给。
157
+ 玉楼:对契要日子。清明前未必来得及。我倒认得几个南边来的客商,胡椒正缺。先把胡椒照市价卖了,分花家一份体面钱,沉香留给瓶儿妹妹——人家闹不起来,瓶儿也不吃亏。
158
+ 李娇儿:何必这么麻烦。公中先拿一百两出来,打发他们走。货嘛,往后让六娘慢慢还给公中就是。
159
+ 三条路,三种人情。你看了看门外——瓶儿站在廊下,没敢进来。
160
+ @choice
161
+ - 听月娘的:请中人,当堂对契。 -> s_yue {yue+2 pinger+1}
162
+ - 听玉楼的:卖胡椒、留沉香,体面了结。 -> s_meng {meng+2 pinger+1}
163
+ - 听娇儿的:公中先垫银子,快刀斩乱麻。 -> s_jiaoer {pinger-1}
164
+ - 都不用。叫县里的差人来,看谁还敢闹。 -> s_force {pan+1 yue-1 f:used_force}
165
+
166
+ # s_yue
167
+ 月娘(惊):……官人肯听我的?
168
+ 西门庆:你说得在理。
169
+ 月娘把契书一张张摊在桌上,请了街坊两位老人作中。花家老大起先还嚷,对到第三张,自己先没了声——那批胡椒,早在花子虚生前就折了账,没他家的份。
170
+ 月娘(笑):规矩摆在明处,就不用吵了。
171
+ @cg rain_hall
172
+ 那天傍晚,月娘亲自去了一趟东院。你不知道她们说了什么,只看见瓶儿送她出门时,行了一个很深的礼。
173
+ @cg off
174
+ @jump day5
175
+
176
+ # s_meng
177
+ 玉楼(笑):那我就去了。官人只管安坐,等着收银子。
178
+ 不到两日,胡椒卖了个好价钱。玉楼当着花家老大的面,把银子一封封点给他,说是“替花大哥收了旧账”,话说得滴水不漏。花家拿了体面钱,再不好闹。
179
+ 沉香原封不动,抬回了东院。
180
+ @hide yue
181
+ @show pinger 左 羞
182
+ 瓶儿(羞):三姐姐……这份情,我怎么还?
183
+ 玉楼(笑):还什么。往后荷亭上,你多敬我一杯就是。
184
+ @jump day5
185
+
186
+ # s_jiaoer
187
+ 银子是快的。花家拿了一百两,当天就散了。
188
+ 可当晚,公中的账上多了一行:“垫花家事,一百两。六房应还。”
189
+ 瓶儿看到这行字,什么也没说,只把箱子又往床里推了推。
190
+ @hide all
191
+ @show meng 中 哀
192
+ 玉楼(哀):官人,事是了了。可六妹妹这一笔,往后在宅里,要被人记多久?
193
+ @jump day5
194
+
195
+ # s_force
196
+ 差人来了,铁链一抖,花家的人一哄而散。
197
+ 金莲听说了,在花园里笑得前仰后合,说官人就该这样,看谁还敢欺负到门上。
198
+ 月娘却沉了脸。
199
+ 月娘(怒):县里的人情,是拿来压亲戚的?今日压了花家,明日全县都知道,西门家的事,是靠差人办的。
200
+ @hide meng
201
+ @show pinger 右 哀
202
+ 瓶儿(哀):……他们终归是花家的人。我不想,因为我,叫官人落个仗势的名声。
203
+ @jump day5
204
+ `;
@@ -0,0 +1,198 @@
1
+ // 共通线(终):夜雨、清明荷亭、院门分岔与独夜结局。
2
+ export default String.raw`
3
+ # day5
4
+ @hide all
5
+ @bg court_rain fade
6
+ @bgm night
7
+ @weather rain
8
+ @chapter 第五章|夜雨
9
+ 清明前一夜,下起了雨。
10
+ 雨不大,却密,把整座宅子罩在一层水声里。廊下的灯笼一盏盏晃。有的门还亮着,有的门里,灯已经捻小了。
11
+ 明日荷亭上,满县的亲戚都要来看。今夜,你想在谁那里,把这场雨听完?
12
+ @choice
13
+ - 正院 · 月娘 -> r_yue {yue+2}
14
+ - 花园角门 · 金莲 -> r_pan {pan+2}
15
+ - 东院 · 瓶儿 -> r_pinger {pinger+2}
16
+ - 西厢 · 玉楼 -> r_meng {meng+2}
17
+ - 灶上 · 雪娥 -> r_xuee {xuee+2}
18
+
19
+ # r_yue
20
+ @weather none
21
+ @bg hall fade
22
+ @show yue 中 惊
23
+ 月娘正在给明日的席面点灯油,见你进来,手里的灯盏晃了一下。
24
+ 月娘(惊):……这么大的雨,官人怎么来了。
25
+ 西门庆:来看看你。
26
+ 月娘(平):看我做什么。我又不会跑。
27
+ 她把灯盏放下,替你解了湿透的外衣,搭在炭盆边。动作很熟,像是做过许多回,只是这些日子没做。
28
+ 月娘(哀):官人,有句话,我憋了一个月了。
29
+ 月娘:瓶儿进门的事,我拦过你。不是我容不下她——是你连问都没问我一声,就定了。我是这个家的正头娘子,可在你心里,我是不是只是一把管账的锁?
30
+ 雨声很响。她说完这句,就把脸转过去了。
31
+ 西门庆:你不是锁。
32
+ 月娘(羞):……那是什么?
33
+ 你没有回答。她也没有再问,只把炭盆往你那边推了推。
34
+ @jump day6
35
+
36
+ # r_pan
37
+ @bg garden fade
38
+ @show pan 中 哀
39
+ 角门开着。金莲没打伞,就站在门里,头发湿了一半。
40
+ 金莲(惊):……你怎么来了?我以为你今夜,准在东院。
41
+ 西门庆:你站在这儿做什么?
42
+ 金莲(笑):等雨停。不行么?
43
+ 她嘴硬,手却冻得冰凉。你把她拉进屋里,她挣了一下,没挣开。
44
+ 金莲(哀):我跟你说实话。我什么都没有。没有娘家,没有嫁妆,没有孩子。六妹妹有箱子,大姐有名分,三姐有银子,连四姐都有一口灶。
45
+ 金莲(哀):我只有你看我的那一眼。你哪天不看了,我就什么都不是。
46
+ 西门庆:所以你才那么凶?
47
+ 金莲(笑):……凶一点,你才记得住呀。
48
+ 她把湿头发拨到耳后,眼睛亮亮的,不知是雨还是别的。
49
+ @jump day6
50
+
51
+ # r_pinger
52
+ @weather none
53
+ @bg chamber fade
54
+ @show pinger 中 惊
55
+ 一声雷炸下来的时候,你刚好推开东院的门。瓶儿缩在床角,手里攥着那把钥匙。
56
+ 瓶儿(惊):官人……!
57
+ 她几乎是扑过来的,又在离你一步的地方停住,不好意思地往后退。
58
+ 瓶儿(羞):我……我从小就怕打雷。以前在花家,打雷的夜里,从来没人来。
59
+ 西门庆:今夜有人来了。
60
+ 瓶儿(哀):嗯。
61
+ 她小声说,那年冬天你叫她在新房里等了三夜,她心里有过一个很坏的念头。
62
+ 瓶儿(哀):后来我想,我是自己愿意进这扇门的。愿意了,就不怨。只求官人……往后别再让我一个人等那么久。
63
+ 雷声又滚过去了。她没再发抖。
64
+ @jump day6
65
+
66
+ # r_meng
67
+ @bg court_night fade
68
+ @show meng 中 笑
69
+ 玉楼在廊下煮茶,雨打在檐上,茶炉的火映着她半边脸。
70
+ 玉楼(笑):官人来得巧,第一泡刚好。
71
+ 她给你斟了一杯,自己也端起来,慢慢说起了从前。
72
+ 玉楼:我头一个丈夫,是贩布的杨家。他死在外头,铺子、银子、布匹,一夜之间就有一群亲戚来分。
73
+ 玉楼(平):那时候我就想明白了:女人手里的东西,若不自己攥着,转眼就成了别人的。所以再嫁的时候,我挑了又挑——是我挑的你,官人记得吗?
74
+ 西门庆:记得。
75
+ 玉楼(羞):那就好。被人挑,和自己挑,到底是不一样的。
76
+ 雨渐渐小了。她把茶杯放下,指尖在你手背上停了一下,又若无其事地收回去。
77
+ @jump day6
78
+
79
+ # r_xuee
80
+ @weather none
81
+ @bg kitchen fade
82
+ @show xuee 中 惊
83
+ 雨夜里,灶上的火是整座宅子最暖的地方。雪娥在烫明日要用的碗,一只只码得整整齐齐。
84
+ 雪娥(惊):官人?……这儿没好椅子。
85
+ 她搬了张小板凳给你,自己接着干活。你看见她手背上有一片红,是新烫的。
86
+ 西门庆:手怎么了?
87
+ 雪娥(平):烫的。灶上的人,哪个手上没几块疤。
88
+ 雪娥(哀):官人,我是丫头出身,宅里人都记得。金莲骂我,我能回嘴;春梅骂我,我也能回。可你要是也那么看我——我就真只是个烧火的了。
89
+ 你把她的手拉过来,看了看那片红。她想抽回去,到底没抽。
90
+ 雪娥(羞):……看什么。明日席上那道蹄子,我炖了一夜。你多吃两块,就算谢我了。
91
+ @jump day6
92
+
93
+ # day6
94
+ @hide all
95
+ @weather petals
96
+ @bg garden fade
97
+ @bgm garden
98
+ @chapter 第六章|清明荷亭
99
+ 清明,天晴了。
100
+ 荷亭上铺了新席,花家的事已经了了,亲戚们来得很齐。应伯爵也来了——他是你结拜的兄弟,哪里有酒,哪里就有他。
101
+ @cg qingming
102
+ 酒过三巡,玉楼抱出月琴,金莲接过琵琶,两个人一唱一和,满座叫好。
103
+ 月娘坐在主位,难得地笑出了声。雪娥那道蹄子,被抢得只剩一只空盘。
104
+ 瓶儿还是坐得最远。可今日她穿了新衣,鬓边插着一朵新摘的桃花。
105
+ 应伯爵:哥!哥你好福气!五位嫂子,一个赛一个——
106
+ 应伯爵端着酒杯,摇摇晃晃地凑到瓶儿面前。
107
+ 应伯爵:六嫂子,听说你从花家过来,带了满满一箱好东西?哈哈,哥这门亲,结得划算哪!
108
+ 席上一下子静了。瓶儿手里的杯子,晃出了几滴酒。
109
+ @cg off
110
+ @show pinger 中 哀
111
+ @choice
112
+ - 沉下脸:“伯爵,你喝多了。六娘是我娶进门的人,不是箱子。” -> q_defend {pinger+1 yue+1 meng+1}
113
+ - 打个哈哈:“你小子眼红了?罚酒三杯!” -> q_laugh {pan+1 pinger-1}
114
+
115
+ # q_defend
116
+ 应伯爵的酒一下子醒了一半,连声赔罪,自罚了三杯。
117
+ 瓶儿低着头,可你看见她的耳朵红透了。
118
+ @show yue 左 笑
119
+ @show pinger 右 哀
120
+ 月娘(笑):……好了,接着唱吧。
121
+ @jump q_prize
122
+
123
+ # q_laugh
124
+ 满座哄笑。应伯爵连喝三杯,话头就岔开了。
125
+ 瓶儿也跟着笑了笑。笑得很周全,像在花家时学会的那样。
126
+ @jump q_prize
127
+
128
+ # q_prize
129
+ @hide all
130
+ @bgm tender
131
+ @cg moon_five
132
+ 日头偏西时,月娘照规矩取出一支金簪,说是今日的头彩。
133
+ 月娘:今日席面,人人都出了力。这支簪子,官人赏给谁,大家都服。
134
+ 她说“都服”,可五个人的眼睛,都悄悄落在了你手上。
135
+ @cg off
136
+ @choice
137
+ - 给月娘:“这一席,是你撑起来的。” -> p_yue {yue+2}
138
+ - 给金莲:“曲子唱得最好的人,该戴最亮的簪。” -> p_pan {pan+2}
139
+ - 给瓶儿:“今日委屈了你。” -> p_pinger {pinger+2}
140
+ - 给玉楼:“没有你,花家的事了不了。” -> p_meng {meng+2}
141
+ - 给雪娥:“满桌的菜,都是从你手里出来的。” -> p_xuee {xuee+2}
142
+
143
+ # p_yue
144
+ @show yue 中 惊
145
+ 月娘(惊):我?……我是主家,哪有主家拿头彩的道理。
146
+ 她推了两回,第三回,到底低头让你替她插上了。满座都在起哄,她的脸红到了耳根。
147
+ @jump q_end
148
+
149
+ # p_pan
150
+ @show pan 中 笑
151
+ 金莲(笑):这才叫识货!
152
+ 她自己拔下旧簪,把头一偏,等你给她插。插好了,还特意转过脸去,冲着瓶儿的方向,笑得像只偷了腥的猫。
153
+ @jump q_end
154
+
155
+ # p_pinger
156
+ @show pinger 中 惊
157
+ 瓶儿(惊):官人……
158
+ 她不敢接,是玉楼在背后推了她一把。簪子插上的时候,她的眼泪终于掉下来了一颗,又赶紧用帕子按住。
159
+ @jump q_end
160
+
161
+ # p_meng
162
+ @show meng 中 笑
163
+ 玉楼(笑):官人这是赏功,不是赏人。那我就收下了——功劳簿上,记我一笔。
164
+ 她接得大大方方,可你替她插簪时,她偏过头,很轻地说了一句“多谢”。
165
+ @jump q_end
166
+
167
+ # p_xuee
168
+ @show xuee 中 惊
169
+ 雪娥(惊):……给我?
170
+ 她手上还沾着油,在围裙上擦了又擦,才敢伸手。满座都静了一下——灶上的人拿头彩,宅里还是头一回。
171
+ 雪娥(羞):我……我明日给大家做荷花饼。春梅那份,也做。
172
+ @jump q_end
173
+
174
+ # q_end
175
+ @hide all
176
+ @bg court_night fade
177
+ @bgm night
178
+ @weather none
179
+ @cg qingming_night
180
+ 席散了。亲戚们的轿子一顶顶抬出门,宅里重新安静下来。
181
+ 五个人各自回房。走到岔路口时,谁也没有回头——可谁也没有走快。
182
+ @cg off
183
+ 这几日的事,一桩一桩在你心里过:一碗凉汤,一张饼,一只箱子,一场雨,一支簪。
184
+ 你说过的话,她们都记得。
185
+ @branch
186
+
187
+ # lonely
188
+ @hide all
189
+ @bg court_night fade
190
+ @bgm sad
191
+ 你在岔路口站了很久。
192
+ 五扇门,一扇一扇地熄了灯。没有一扇,是为你留的。
193
+ 这几日,你对谁都客气,对谁都没有多走一步。客气是够了,可客气暖不了一扇门。
194
+ 你一个人回了书房。案上的账本摊着,银子一两不少。
195
+ @ending lonely
196
+ @fate lonely
197
+ @end
198
+ `;