@oh-story/dsh 0.1.12 → 0.1.14

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 (269) hide show
  1. package/README.md +18 -12
  2. package/lib/client.js +1003 -652
  3. package/lib/client.js.map +4 -4
  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 +17 -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/canvas-viewport.d.ts +31 -0
  99. package/lib/types/client/canvas-viewport.d.ts.map +1 -0
  100. package/lib/types/client/drama-production-view.d.ts +14 -2
  101. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  102. package/lib/types/client/file-activity.d.ts +1 -1
  103. package/lib/types/client/file-activity.d.ts.map +1 -1
  104. package/lib/types/client/index.d.ts.map +1 -1
  105. package/lib/types/client/production-canvas.d.ts +24 -0
  106. package/lib/types/client/production-canvas.d.ts.map +1 -0
  107. package/lib/types/client/production-prompts.d.ts +7 -1
  108. package/lib/types/client/production-prompts.d.ts.map +1 -1
  109. package/lib/types/client/production-runtime.d.ts +7 -2
  110. package/lib/types/client/production-runtime.d.ts.map +1 -1
  111. package/lib/types/drama-adapters.d.ts.map +1 -1
  112. package/lib/types/skill-provider.d.ts.map +1 -1
  113. package/lib/types/video-project.d.ts.map +1 -1
  114. package/lib/video-recap/CHANGELOG.md +123 -1
  115. package/lib/video-recap/README.en.md +20 -16
  116. package/lib/video-recap/README.md +20 -16
  117. package/lib/video-recap/manifest.json +297 -321
  118. package/lib/video-recap/skills/video-assemble/SKILL.md +18 -16
  119. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +3 -1
  120. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +5 -5
  121. package/lib/video-recap/skills/video-assemble/references/packaging.md +4 -4
  122. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +10 -10
  123. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +13 -2
  124. package/lib/video-recap/skills/video-assemble/scripts/adoption/av_clock.py +109 -0
  125. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +4 -1
  126. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +2 -9
  127. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +188 -51
  128. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +0 -1
  129. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +32 -75
  130. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +8 -15
  131. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +202 -161
  132. package/lib/video-recap/skills/video-assemble/scripts/codec_peak.py +112 -0
  133. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +10 -101
  134. package/lib/video-recap/skills/video-assemble/scripts/jianying/builders.py +44 -475
  135. package/lib/video-recap/skills/video-assemble/scripts/jianying/model.py +1 -22
  136. package/lib/video-recap/skills/video-assemble/scripts/jianying/templates.py +0 -3
  137. package/lib/video-recap/skills/video-assemble/scripts/jianying/timeline_contract.py +36 -103
  138. package/lib/video-recap/skills/video-assemble/scripts/jianying/tracks.py +0 -8
  139. package/lib/video-recap/skills/video-assemble/scripts/jianying/writer.py +28 -203
  140. package/lib/video-recap/skills/video-assemble/scripts/lib.py +20 -34
  141. package/lib/video-recap/skills/video-assemble/scripts/loudness.py +332 -0
  142. package/lib/video-recap/skills/video-assemble/scripts/media.py +158 -38
  143. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +30 -16
  144. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +49 -8
  145. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +17 -6
  146. package/lib/video-recap/skills/video-assemble/scripts/subtitles/core.py +24 -2
  147. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +2 -5
  148. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +2 -9
  149. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +12 -34
  150. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +3 -4
  151. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +28 -2
  152. package/lib/video-recap/skills/video-cut/SKILL.md +37 -11
  153. package/lib/video-recap/skills/video-cut/references/shot-review.md +1 -1
  154. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -34
  155. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +96 -124
  156. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +97 -182
  157. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +177 -166
  158. package/lib/video-recap/skills/video-cut/scripts/frame_grid.py +249 -0
  159. package/lib/video-recap/skills/video-cut/scripts/lib.py +0 -3
  160. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +173 -7
  161. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +234 -151
  162. package/lib/video-recap/skills/video-cut/scripts/sentence_gate.py +189 -0
  163. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +2 -6
  164. package/lib/video-recap/skills/video-recap/SKILL.md +28 -29
  165. package/lib/video-recap/skills/video-recap/references/audio-routing.md +8 -6
  166. package/lib/video-recap/skills/video-recap/references/config-playbook.md +10 -13
  167. package/lib/video-recap/skills/video-recap/references/data-schema.md +131 -74
  168. package/lib/video-recap/skills/video-recap/references/resource-library.md +17 -1
  169. package/lib/video-recap/skills/video-recap/scripts/doctor.py +51 -268
  170. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +89 -254
  171. package/lib/video-recap/skills/video-recap/scripts/lib.py +81 -70
  172. package/lib/video-recap/skills/video-recap/scripts/library.py +40 -4
  173. package/lib/video-recap/skills/video-recap/scripts/materials.py +13 -80
  174. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +55 -17
  175. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +1 -3
  176. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +96 -117
  177. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +87 -23
  178. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +0 -39
  179. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +37 -135
  180. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +118 -127
  181. package/lib/video-recap/skills/video-recap/scripts/resources/__init__.py +4 -0
  182. package/lib/video-recap/skills/video-recap/scripts/{resource_lock.py → resources/lock.py} +1 -1
  183. package/lib/video-recap/skills/video-recap/scripts/{project_binding.py → resources/project_binding.py} +78 -17
  184. package/lib/video-recap/skills/video-reference/SKILL.md +108 -0
  185. package/lib/video-recap/skills/video-reference/references/reference-schema.md +139 -0
  186. package/lib/video-recap/skills/video-reference/scripts/lib.py +85 -0
  187. package/lib/video-recap/skills/video-reference/scripts/reference.py +96 -0
  188. package/lib/video-recap/skills/video-reference/scripts/reference_check.py +553 -0
  189. package/lib/video-recap/skills/video-reference/scripts/reference_frames.py +122 -0
  190. package/lib/video-recap/skills/video-reference/scripts/reference_measure.py +253 -0
  191. package/lib/video-recap/skills/video-reference/scripts/reference_profile.py +271 -0
  192. package/lib/video-recap/skills/video-script/SKILL.md +53 -24
  193. package/lib/video-recap/skills/video-script/scripts/agent_text.py +18 -267
  194. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +12 -30
  195. package/lib/video-recap/skills/video-script/scripts/entry_suggestion.py +125 -0
  196. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +2 -26
  197. package/lib/video-recap/skills/video-script/scripts/lib.py +5 -15
  198. package/lib/video-recap/skills/video-script/scripts/lint_summary.py +184 -0
  199. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +120 -100
  200. package/lib/video-recap/skills/video-script/scripts/review.py +3 -34
  201. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +20 -46
  202. package/lib/video-recap/skills/video-script/scripts/review_response.py +120 -258
  203. package/lib/video-recap/skills/video-script/scripts/review_runner.py +12 -11
  204. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +89 -5
  205. package/lib/video-recap/skills/video-script/scripts/validate.py +26 -34
  206. package/lib/video-recap/skills/video-understanding/SKILL.md +29 -4
  207. package/lib/video-recap/skills/video-understanding/references/data-schema.md +5 -22
  208. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +24 -121
  209. package/lib/video-recap/skills/video-understanding/scripts/asr.py +11 -5
  210. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +15 -24
  211. package/lib/video-recap/skills/video-understanding/scripts/briefing/builder.py +59 -25
  212. package/lib/video-recap/skills/video-understanding/scripts/briefing/context.py +39 -3
  213. package/lib/video-recap/skills/video-understanding/scripts/briefing/inputs.py +15 -27
  214. package/lib/video-recap/skills/video-understanding/scripts/briefing/timeline.py +136 -37
  215. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +121 -37
  216. package/lib/video-recap/skills/video-understanding/scripts/detect.py +118 -16
  217. package/lib/video-recap/skills/video-understanding/scripts/index_normalize.py +359 -0
  218. package/lib/video-recap/skills/video-understanding/scripts/lib.py +62 -21
  219. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +181 -51
  220. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +0 -26
  221. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +37 -14
  222. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +40 -32
  223. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +100 -127
  224. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +182 -30
  225. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +30 -27
  226. package/lib/video-recap/skills/video-voiceover/SKILL.md +51 -18
  227. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +3 -3
  228. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +3 -1
  229. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +81 -135
  230. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +9 -34
  231. package/lib/video-recap/skills/video-voiceover/scripts/providers/fish_audio.py +6 -1
  232. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +64 -1
  233. package/lib/video-recap/skills/video-voiceover/scripts/tts_cache.py +99 -0
  234. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +177 -200
  235. package/package.json +45 -45
  236. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  237. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  238. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  239. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +0 -1494
  240. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +0 -147
  241. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +0 -7470
  242. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +0 -13066
  243. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +0 -32
  244. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +0 -99
  245. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +0 -152
  246. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +0 -118
  247. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +0 -84
  248. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +0 -98
  249. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +0 -204
  250. package/lib/video-recap/skills/video-assemble/references/pair-media.md +0 -74
  251. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +0 -293
  252. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +0 -216
  253. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +0 -23
  254. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +0 -33
  255. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +0 -1
  256. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_client.py +0 -13
  257. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_contract.py +0 -9
  258. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_evidence.py +0 -287
  259. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_observations.py +0 -175
  260. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_payload.py +0 -206
  261. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_report.py +0 -318
  262. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_runner.py +0 -130
  263. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -320
  264. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +0 -108
  265. package/lib/video-recap/skills/video-understanding/scripts/brief.py +0 -9
  266. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +0 -211
  267. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +0 -707
  268. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +0 -143
  269. /package/lib/video-recap/skills/video-cut/scripts/{narration_mapping.py → cut_qc.py} +0 -0
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "upstream": {
4
- "repository": "git@github.com:zenstory-ai/novel-to-game.git",
5
- "commit": "d76cdca5b54edbdb15ef5ce7618a83b281415d21",
6
- "releaseVersion": "0.4.0"
4
+ "repository": "https://github.com/zenstory-ai/novel-to-game.git",
5
+ "commit": "e2695b720591335321738039b869f418593b1985",
6
+ "releaseVersion": "0.5.0"
7
7
  },
8
- "generatedAt": "2026-09-26T03:09:39.852Z",
8
+ "generatedAt": "2026-10-03T14:32:39.565Z",
9
9
  "skills": [
10
10
  "game-art-direction",
11
11
  "game-build",
@@ -26,23 +26,23 @@
26
26
  },
27
27
  {
28
28
  "path": "README.md",
29
- "sha256": "939379f784d7ea4329383b39e38a5c7aff68da2d451e5f3faf3a5447a3925f26",
30
- "bytes": 32641
29
+ "sha256": "b8fa61a8ad38c58d8074aa40f3039107cfd13537cd551a535fc27e328da5b1ef",
30
+ "bytes": 38659
31
31
  },
32
32
  {
33
33
  "path": "README_ZH.md",
34
- "sha256": "d15c64cd77b6c4897dee29e8341784eafde14a8b14faad32a1c8a8c6cf89d66a",
35
- "bytes": 29098
34
+ "sha256": "068853d6beb986a8ae18a9bbfa91e433cdac16fd35d25e4dfab1db3e66e0dc89",
35
+ "bytes": 34757
36
36
  },
37
37
  {
38
38
  "path": "VERSION",
39
- "sha256": "40b8eb4000a913a7791090535f291d3d369874162a89ef3c9e3d4e887a1b9e79",
39
+ "sha256": "a0ad50640139a524f86591157145bf1d4674ea9c065bfea21558f0f7b04430c8",
40
40
  "bytes": 6
41
41
  },
42
42
  {
43
43
  "path": "examples/jin-ping-mei/build/BUILD_BRIEF.md",
44
- "sha256": "9afc9482c71a23b31740d1cf3b79b5803317e1d6374e5f4c6f179edeea87b10f",
45
- "bytes": 69720
44
+ "sha256": "ae93c757143d37375018ae2ab5d437fd431c7eb23a1f4626a2814b96bbc2e339",
45
+ "bytes": 2403
46
46
  },
47
47
  {
48
48
  "path": "examples/jin-ping-mei/build/app/.gitignore",
@@ -56,14 +56,59 @@
56
56
  },
57
57
  {
58
58
  "path": "examples/jin-ping-mei/build/app/RUN.md",
59
- "sha256": "9d659095dea9a1797d914452bc18cee31e166247378c9c9c3d1725aaa2c99be6",
60
- "bytes": 27936
59
+ "sha256": "991d4208a67d05594c37286575f90109abfa29870ab47f1fac27963560c876ce",
60
+ "bytes": 2102
61
+ },
62
+ {
63
+ "path": "examples/jin-ping-mei/build/app/assets/bg/chamber.webp",
64
+ "sha256": "35a721772a2511c68b6b22faf35c3fae9bafc87f257751a1b0c05b20373d376e",
65
+ "bytes": 159850
61
66
  },
62
67
  {
63
68
  "path": "examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp",
64
69
  "sha256": "e7d2cc8c4478184480a141e5e4ebfd16a134e219f6aa82a9166b6262fcaeec55",
65
70
  "bytes": 443276
66
71
  },
72
+ {
73
+ "path": "examples/jin-ping-mei/build/app/assets/bg/court_night.webp",
74
+ "sha256": "cf17e668ab1f7855ed73fd3242a383fdad58eb7d4ae442b651de783b24cfe6bf",
75
+ "bytes": 323002
76
+ },
77
+ {
78
+ "path": "examples/jin-ping-mei/build/app/assets/bg/court_rain.webp",
79
+ "sha256": "e38047f3e81e4c535e182da1e5cb5ada9869b50002cacc11e50c36ea2d84cd1b",
80
+ "bytes": 354574
81
+ },
82
+ {
83
+ "path": "examples/jin-ping-mei/build/app/assets/bg/garden.webp",
84
+ "sha256": "0f69555edead74fffb962bd815ebaa3aa0a8919f5f396676a80e1c09f5c75695",
85
+ "bytes": 359918
86
+ },
87
+ {
88
+ "path": "examples/jin-ping-mei/build/app/assets/bg/hall.webp",
89
+ "sha256": "43943ad228cbb76f7530a2fd8a58f6f174dc7e1d8ed69b00b2ecbd52075fea6e",
90
+ "bytes": 214124
91
+ },
92
+ {
93
+ "path": "examples/jin-ping-mei/build/app/assets/bg/kitchen.webp",
94
+ "sha256": "fc88a67c331ad810e9076a5d39a28ecd3fbf5fa7de905d557167aed014899805",
95
+ "bytes": 180332
96
+ },
97
+ {
98
+ "path": "examples/jin-ping-mei/build/app/assets/bg/street.webp",
99
+ "sha256": "fb8040561e5f5a55360045cbe08f8fdc8aada9b6609352c4bc18e5deffc9a01b",
100
+ "bytes": 324252
101
+ },
102
+ {
103
+ "path": "examples/jin-ping-mei/build/app/assets/bg/street_dawn.webp",
104
+ "sha256": "fe3d05596a76bc6e619dfb3dd957509dbf2fd3aaa9a95109a69f44e880c21677",
105
+ "bytes": 352794
106
+ },
107
+ {
108
+ "path": "examples/jin-ping-mei/build/app/assets/bg/temple.webp",
109
+ "sha256": "642c9288a85abaaed97276ba9563e7fff9376d8e96039ccf12ef028b5a2e3848",
110
+ "bytes": 393698
111
+ },
67
112
  {
68
113
  "path": "examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp",
69
114
  "sha256": "6691f9bee9125e4686a17347ebe45ba2f06ca6abf4cf7bcb204f453969a39176",
@@ -94,11 +139,6 @@
94
139
  "sha256": "e815bbc4a60e46e9d75abddbb29ff7fe42cf8ca92e95e6978cf4c6383e5129f8",
95
140
  "bytes": 234878
96
141
  },
97
- {
98
- "path": "examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp",
99
- "sha256": "bc3964da2ebfda942027b2f1b9d0e2090f0b3b3f32683f7376cab3ce4d4e131d",
100
- "bytes": 259688
101
- },
102
142
  {
103
143
  "path": "examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp",
104
144
  "sha256": "75fef2b554d0c59cd01eb8e7bfbd82c004d7b8f80a94c1f39ffc3f32285fae2a",
@@ -114,11 +154,6 @@
114
154
  "sha256": "b110170996d407651e91fe76a31a93bf555fb9bd659e8b62c40165cdbf653ead",
115
155
  "bytes": 347128
116
156
  },
117
- {
118
- "path": "examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp",
119
- "sha256": "2cb9ca04caf924bfdebc6c7d3805c93e36b0d09e2a90ac3c3856dff977dee4d0",
120
- "bytes": 320852
121
- },
122
157
  {
123
158
  "path": "examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp",
124
159
  "sha256": "93b166c839e9c25398b0790f3d5821d8b85878395d5f1881aeff269a0bac523e",
@@ -224,6 +259,11 @@
224
259
  "sha256": "3b8b34b954a4c47b0990584ef94110e23b26880ed62e3503110195a10868e718",
225
260
  "bytes": 252370
226
261
  },
262
+ {
263
+ "path": "examples/jin-ping-mei/build/app/assets/cg/yue/moon.webp",
264
+ "sha256": "0db74a97526e0917d3f1e62ab298864373451a76bab1aded2f21467fd9a32d81",
265
+ "bytes": 222758
266
+ },
227
267
  {
228
268
  "path": "examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp",
229
269
  "sha256": "9ec61854e37169ba2b4e7176b47819c206032d89b665c22fe1a0a6d2467932c8",
@@ -254,65 +294,260 @@
254
294
  "sha256": "5f9dd4ad1e7bf7c91643d0f519bdbf90b158d06c7ea6b3db6bb1d10032d44803",
255
295
  "bytes": 213484
256
296
  },
257
- {
258
- "path": "examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp",
259
- "sha256": "80bd68bd177d60a551d847d16923a24757275a74d689b1dcf4cf269372c2a652",
260
- "bytes": 207098
261
- },
262
297
  {
263
298
  "path": "examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp",
264
299
  "sha256": "e2724ced045e73a4b5621468333593a146c95e5b0e93d776abf458923e2f0fc2",
265
300
  "bytes": 215828
266
301
  },
267
302
  {
268
- "path": "examples/jin-ping-mei/build/app/css/new-guofeng.css",
269
- "sha256": "dca6d501d0570f0ddbb8f61a8010b5f21ed921878ae6b62db66c1636baa821fe",
270
- "bytes": 45891
303
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/meng/angry.webp",
304
+ "sha256": "39fb0651db7cbe7d8544014d9e11e850f57a57db74ece75c47de534c7520ff2a",
305
+ "bytes": 154386
306
+ },
307
+ {
308
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/meng/blush.webp",
309
+ "sha256": "93a7b854b98d1ff8d09efe66d1f46cf6bc4f572df11d86f310076bc766a94839",
310
+ "bytes": 156732
311
+ },
312
+ {
313
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/meng/neutral.webp",
314
+ "sha256": "26fda51b90aa702b9ab5ba3d69d1013f7a5c9854a663713a27b43dcb72977683",
315
+ "bytes": 215404
316
+ },
317
+ {
318
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/meng/sad.webp",
319
+ "sha256": "7849a1bef7b4fa3ad31358a635cfd35d8d06d2f789eb46516995485fd90baef6",
320
+ "bytes": 166160
321
+ },
322
+ {
323
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/meng/smile.webp",
324
+ "sha256": "97ab4b28ef62e0502d24de5d2535640a02f54bf496481dfc408c52a12e4cd196",
325
+ "bytes": 163834
326
+ },
327
+ {
328
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/meng/surprised.webp",
329
+ "sha256": "52431574e9dbb31c66d85003f6a01d347cf6b74b5df31366a35c2a3d43ef266f",
330
+ "bytes": 222760
331
+ },
332
+ {
333
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pan/angry.webp",
334
+ "sha256": "f1258f582dcf4ed26cfaad2d7dbce61fce13667435d2add533844e8de69fd111",
335
+ "bytes": 192586
336
+ },
337
+ {
338
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pan/blush.webp",
339
+ "sha256": "4395d0bdb55a8a4a923cd31deb087904f7af7d89a04b29beb0785d08c1c64f85",
340
+ "bytes": 196028
341
+ },
342
+ {
343
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pan/neutral.webp",
344
+ "sha256": "99a62c38520cbdc0d5a14ae2d770df3b78a99010e75f2aacd860e7f303117bab",
345
+ "bytes": 248174
346
+ },
347
+ {
348
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pan/sad.webp",
349
+ "sha256": "f4e876a515b18b79a310ca389b6e574be23f79a9399c7725e904bffc8c44b550",
350
+ "bytes": 203850
351
+ },
352
+ {
353
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pan/smile.webp",
354
+ "sha256": "5e9beb59b8bafd99419a583b0550118fb62c27d693df251b20c8ecae78540b86",
355
+ "bytes": 200958
356
+ },
357
+ {
358
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pan/surprised.webp",
359
+ "sha256": "4b68e48750da9b0f8ab28000ce238822ea9ea9979aae449bcbcc2b90ebe1c943",
360
+ "bytes": 256756
361
+ },
362
+ {
363
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pinger/angry.webp",
364
+ "sha256": "92cf6fd81855514848021d870892107036f31e0aa9ead48c5114225aa52e3163",
365
+ "bytes": 176962
366
+ },
367
+ {
368
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pinger/blush.webp",
369
+ "sha256": "fd167afd2c9cd222b48dff843e3c8ffbaba74a004405bad9b5dee9b517ec5fcb",
370
+ "bytes": 175918
371
+ },
372
+ {
373
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pinger/neutral.webp",
374
+ "sha256": "75b8da1811726f228367b68fa0d4f60df471af38f9ce11fad2f4552530f929dc",
375
+ "bytes": 223598
376
+ },
377
+ {
378
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pinger/sad.webp",
379
+ "sha256": "2fdea46a3548d0e0f6f4361d933aaa515a4bcb1ede96912b5c47d9950a8df24e",
380
+ "bytes": 168476
381
+ },
382
+ {
383
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pinger/smile.webp",
384
+ "sha256": "9867fb8999e7832ba12bdf6ee1767bf7848bd06a955b55099b21ce3e5b79881a",
385
+ "bytes": 177980
386
+ },
387
+ {
388
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/pinger/surprised.webp",
389
+ "sha256": "cd92b8d754eb260747b252864c1bac988f95cc9d47a7a2dee30b69b322eb656d",
390
+ "bytes": 230860
391
+ },
392
+ {
393
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/xuee/angry.webp",
394
+ "sha256": "9880fd5a45842e7562330ce13380f6b3a33a534dd3fa7b37127186065d460142",
395
+ "bytes": 157304
396
+ },
397
+ {
398
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/xuee/blush.webp",
399
+ "sha256": "82fa9b3ab93e1d51cd9ac1e65b49d91520087ad239c6437602d7cbef52b92280",
400
+ "bytes": 156526
401
+ },
402
+ {
403
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/xuee/neutral.webp",
404
+ "sha256": "b1a6cade2bb4f2e7b58efd88d091c99a5552520687492e5d63416a67c89a2b1f",
405
+ "bytes": 175434
406
+ },
407
+ {
408
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/xuee/sad.webp",
409
+ "sha256": "d4a70e4e77c9991238ab81abfeaba4d57d52178f4019eb1bd3689764eeed5c23",
410
+ "bytes": 154540
411
+ },
412
+ {
413
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/xuee/smile.webp",
414
+ "sha256": "d13acb857e42658aa8336df90f796c0c459250b5e6f6f60507cf99999bb08e17",
415
+ "bytes": 170578
416
+ },
417
+ {
418
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/xuee/surprised.webp",
419
+ "sha256": "0ddbbd62703055957691cc9801185123c94ce48c2be1cb55333d729f4f71f653",
420
+ "bytes": 180702
421
+ },
422
+ {
423
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/yue/angry.webp",
424
+ "sha256": "ce006abc870cc60ba92b173c71c5b849439bfd10b6d8c0c0770f07918c6d9b27",
425
+ "bytes": 177228
426
+ },
427
+ {
428
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/yue/blush.webp",
429
+ "sha256": "113709ab39a6017e3471cb8e0d01b0bb3f002aa0fab492bbabaca8c282ad905a",
430
+ "bytes": 177378
431
+ },
432
+ {
433
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/yue/neutral.webp",
434
+ "sha256": "2629426fd42281c52caf02b43690a2e13faa19e7b48a37663c7dde7cf84cf7a5",
435
+ "bytes": 220652
436
+ },
437
+ {
438
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/yue/sad.webp",
439
+ "sha256": "ab5c17b672157930635227f35541d3296d73403bd48932c655abe5d49c1d6687",
440
+ "bytes": 175314
441
+ },
442
+ {
443
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/yue/smile.webp",
444
+ "sha256": "4f72060c924e334e30dde44307b3c7de34bd1ac8bb66955205a5cdf2a1c5c174",
445
+ "bytes": 173120
446
+ },
447
+ {
448
+ "path": "examples/jin-ping-mei/build/app/assets/sprite/yue/surprised.webp",
449
+ "sha256": "a0a15b97b30820ef5a9aae6c23ac0d947048db0e44b892217efd68300f008862",
450
+ "bytes": 228056
271
451
  },
272
452
  {
273
453
  "path": "examples/jin-ping-mei/build/app/css/style.css",
274
- "sha256": "ee7f6096c3170aa2cbaf3559abf6819a3eba1cb64eabb22408872b615937e0d6",
275
- "bytes": 238249
454
+ "sha256": "865cf898814a3149fc1f755a52c08acf21349a4e01dd34b76ede5e86a403acf4",
455
+ "bytes": 28611
276
456
  },
277
457
  {
278
458
  "path": "examples/jin-ping-mei/build/app/index.html",
279
- "sha256": "d21adc14ed1f3f46a30113fa6a23a1f15ec1b1a4e622bd9e2f1670b09f62a572",
280
- "bytes": 726
459
+ "sha256": "6f66f2d7e36d6e4ef1862efd2464da3f6a8b841aac5824d727bed2fb9df4ca07",
460
+ "bytes": 3439
281
461
  },
282
462
  {
283
- "path": "examples/jin-ping-mei/build/app/js/assets.js",
284
- "sha256": "81f07ea4bfbc70aa6bb795b33fc17de80a158a536d3ba28d7e7c5cb0803aae90",
285
- "bytes": 7780
463
+ "path": "examples/jin-ping-mei/build/app/js/adv.js",
464
+ "sha256": "3c67762b5d665add85bcf2b8f8a5a8b4d01a0fc18b7c46021ed6e005a6acf90c",
465
+ "bytes": 10443
286
466
  },
287
467
  {
288
468
  "path": "examples/jin-ping-mei/build/app/js/audio.js",
289
- "sha256": "68bf052a442b4ce5c6339b2aa50512036dd37578053a4c712bf213fdb8b32234",
290
- "bytes": 12119
469
+ "sha256": "80be0ddde3e810c25bbfb6b418cdf8dc84c1d558c355b10d92d235e3753253b6",
470
+ "bytes": 8930
291
471
  },
292
472
  {
293
- "path": "examples/jin-ping-mei/build/app/js/data.js",
294
- "sha256": "15a063058268eaa7432f6fe89e602a896e908b93a2f58bd7f0b4d186419d7789",
295
- "bytes": 1108708
473
+ "path": "examples/jin-ping-mei/build/app/js/main.js",
474
+ "sha256": "1a971f5e244f7f03aef96c119707ad0f5bc9354a806924656332f5089d547071",
475
+ "bytes": 20664
296
476
  },
297
477
  {
298
- "path": "examples/jin-ping-mei/build/app/js/engine.js",
299
- "sha256": "083eba7af0db65e17ab675f717fe3d39f08b64f1707e6105ba57cb104042e747",
300
- "bytes": 706502
478
+ "path": "examples/jin-ping-mei/build/app/js/menus.js",
479
+ "sha256": "9f07d2bc25cedec554c7bf3fb31ecab0810c115964429e65d501d01c4ef4a80e",
480
+ "bytes": 15976
301
481
  },
302
482
  {
303
- "path": "examples/jin-ping-mei/build/app/js/main.js",
304
- "sha256": "afec7737bccd315bb1776d7c09376be1c35cf8072048a07754b41ab85493d6ed",
305
- "bytes": 276884
483
+ "path": "examples/jin-ping-mei/build/app/js/petals.js",
484
+ "sha256": "7f511dfd363cf8cbb9eba71467361d661cb263b3e3c42b3ca68c2f27ed3f0792",
485
+ "bytes": 2349
486
+ },
487
+ {
488
+ "path": "examples/jin-ping-mei/build/app/js/stage.js",
489
+ "sha256": "5b75cb0584b8f852f2cbfaebe613727e6d16d6d1349bfd1dcb51ee56059647ec",
490
+ "bytes": 6580
491
+ },
492
+ {
493
+ "path": "examples/jin-ping-mei/build/app/js/store.js",
494
+ "sha256": "668e00e27ae0a1e3126e2a2c48d6c1e803c020b3071da6f3852a7cdc9e96212e",
495
+ "bytes": 2602
496
+ },
497
+ {
498
+ "path": "examples/jin-ping-mei/build/app/js/story/common.js",
499
+ "sha256": "bc2948c3348b9a299fc041840f18790d7c0addf6f669a1667770b2750326927a",
500
+ "bytes": 9105
501
+ },
502
+ {
503
+ "path": "examples/jin-ping-mei/build/app/js/story/common2.js",
504
+ "sha256": "37dc47d66f6deb8b297815f9f3c12881749c70c78a0d0cfbb013dd69bc7fa3c1",
505
+ "bytes": 9897
506
+ },
507
+ {
508
+ "path": "examples/jin-ping-mei/build/app/js/story/common3.js",
509
+ "sha256": "9ceab05b4ab927b8a91eca93f39582cdd1b3b75ab3e4b4a9084d592d8ce4ce5f",
510
+ "bytes": 9028
511
+ },
512
+ {
513
+ "path": "examples/jin-ping-mei/build/app/js/story/dates.js",
514
+ "sha256": "a4d86145ca913e31f0f87a5bd272a57634641f7ec822d7a20f79e928fecf14f3",
515
+ "bytes": 8230
306
516
  },
307
517
  {
308
- "path": "examples/jin-ping-mei/build/app/js/text.js",
309
- "sha256": "0ef4bc93902eb85b682d1a2b7989ccf57153ffe3a8451b90b4d0e41e8aa82440",
310
- "bytes": 1952
518
+ "path": "examples/jin-ping-mei/build/app/js/story/index.js",
519
+ "sha256": "0d1e1659d5e8505f0a6e34b86932ba4dba2640b7ee1af88734b8fc97b802e78e",
520
+ "bytes": 8641
521
+ },
522
+ {
523
+ "path": "examples/jin-ping-mei/build/app/js/story/meng.js",
524
+ "sha256": "3f957d0c33fbb8b638902985d07f1f172f0c5eb34bc41c2bd99ffea83ca9e6e3",
525
+ "bytes": 8134
526
+ },
527
+ {
528
+ "path": "examples/jin-ping-mei/build/app/js/story/pan.js",
529
+ "sha256": "ff324f992613a7e602818cd9250a6b0f0bae05893d8725a76c891783f223f1ee",
530
+ "bytes": 9193
531
+ },
532
+ {
533
+ "path": "examples/jin-ping-mei/build/app/js/story/pinger.js",
534
+ "sha256": "b148bfcffbb5c5822be5daea4903e520041d76c99836c271c0f97bbe3a0a9254",
535
+ "bytes": 8785
536
+ },
537
+ {
538
+ "path": "examples/jin-ping-mei/build/app/js/story/xuee.js",
539
+ "sha256": "679517e9bf12a5fe92d239a28564be8f93cf0f2d8d20bf9b12bb081018937cd3",
540
+ "bytes": 8283
541
+ },
542
+ {
543
+ "path": "examples/jin-ping-mei/build/app/js/story/yue.js",
544
+ "sha256": "bf85fb55ed7525f2e77e3add40b88ad963423ccaaecd5b6fac9c1033647cca87",
545
+ "bytes": 9312
311
546
  },
312
547
  {
313
548
  "path": "examples/jin-ping-mei/build/app/package.json",
314
- "sha256": "cc3a2769e36395739ab29a6ef5f9320e73dcc448d2e9746aebbe2385bc92589c",
315
- "bytes": 435
549
+ "sha256": "ee976a411123cc462bf7bf891ff9365550d2acfbcb82a2d2225b06ce53c1a12a",
550
+ "bytes": 400
316
551
  },
317
552
  {
318
553
  "path": "examples/jin-ping-mei/build/app/vercel.json",
@@ -321,8 +556,8 @@
321
556
  },
322
557
  {
323
558
  "path": "examples/jin-ping-mei/build/art/generated-art.json",
324
- "sha256": "95e6cf990ed6c4ca87364e984918e2b92c4f81fc3bd9eeac207ede4b458c8ea8",
325
- "bytes": 9792
559
+ "sha256": "ca767e079cf22c89c46d4db7ef5c8a98aa1ac279b602054df8c3cd805d61f327",
560
+ "bytes": 13025
326
561
  },
327
562
  {
328
563
  "path": "examples/jin-ping-mei/example.json",
@@ -331,23 +566,13 @@
331
566
  },
332
567
  {
333
568
  "path": "examples/jin-ping-mei/qa/README.md",
334
- "sha256": "e9e970762f0d6a43d946e803e2d3f6e28d61879e464b655f94aff900952f2e90",
335
- "bytes": 1421
336
- },
337
- {
338
- "path": "examples/jin-ping-mei/qa/playable-model.json",
339
- "sha256": "f65c270a11f5821b1d61ca86c776d6daa01d0aaef4291b755481d936bd772012",
340
- "bytes": 2480
569
+ "sha256": "866e798b79f05bf3eee81fc96e5fe9723e548b139494a4f7d08adb81abe04694",
570
+ "bytes": 956
341
571
  },
342
572
  {
343
573
  "path": "examples/jin-ping-mei/qa/verification.json",
344
- "sha256": "8167ca00857cdc47bde8aecb8a7823495ccbeb6d5134f3b75a1ee93c08264793",
345
- "bytes": 1368
346
- },
347
- {
348
- "path": "examples/jin-ping-mei/qa/verify_playable_model.mjs",
349
- "sha256": "f59f7eb0767db58a610275a7ec2c3ede59863ec0306f34f0ac26664d69a0abf9",
350
- "bytes": 7603
574
+ "sha256": "ad646eaf618cd3e2896b56eb0429ec7526769c2f940c846e20259c2200dee826",
575
+ "bytes": 1277
351
576
  },
352
577
  {
353
578
  "path": "skills/game-art-direction/SKILL.md",
@@ -361,8 +586,8 @@
361
586
  },
362
587
  {
363
588
  "path": "skills/game-art-direction/references/art-direction-method.md",
364
- "sha256": "7f90baf826dda2c94b3622c5419515e348c5efe1abdc802c5a25346bb6c073eb",
365
- "bytes": 2469
589
+ "sha256": "8e9879bae6cedc01047792d305154e6bd9419ec9c455c541162b372be7395bdd",
590
+ "bytes": 2811
366
591
  },
367
592
  {
368
593
  "path": "skills/game-build/SKILL.md",
@@ -411,8 +636,8 @@
411
636
  },
412
637
  {
413
638
  "path": "skills/game-concept/references/concept-method.md",
414
- "sha256": "39bc9cda22f5394e8e8fe05ef9cb8cba109b2dcbe1794d149fab2f40fd456fd2",
415
- "bytes": 2646
639
+ "sha256": "ae45e4ffafe6c253e66ea06636d836f81485bf0b705fc3e6fbb4be8f94a0c859",
640
+ "bytes": 2939
416
641
  },
417
642
  {
418
643
  "path": "skills/game-qa/SKILL.md",
@@ -446,8 +671,8 @@
446
671
  },
447
672
  {
448
673
  "path": "skills/game-world-design/references/narrative-design-method.md",
449
- "sha256": "ad5279a02bb3495b37b7087fc31d981a4258e059cbbf5648f463fec605fd9a42",
450
- "bytes": 2204
674
+ "sha256": "7e11b018e3b9d59bbd7102b4329aecc7c1e1c7c13616475129a8028f0313071d",
675
+ "bytes": 2446
451
676
  },
452
677
  {
453
678
  "path": "skills/game-world-design/references/numeric-design-method.md",
@@ -456,8 +681,8 @@
456
681
  },
457
682
  {
458
683
  "path": "skills/game-world-design/references/world-design-method.md",
459
- "sha256": "543f9f60e0c4130862e4833ba6dff71e49cb2d32b7d15fef74e354114b9b73bf",
460
- "bytes": 3614
684
+ "sha256": "ecbb27b68ff8cf11996c7d4220579437e69fa31c7fa8eb939dee263fd1ce07ff",
685
+ "bytes": 4356
461
686
  },
462
687
  {
463
688
  "path": "skills/novel-game-analyze/SKILL.md",
@@ -8,6 +8,12 @@
8
8
  “古风”不等于古画旧化,“现代审美”不等于现代服饰;反馈只应改变被指出的轴,
9
9
  不能连带改写原作身份。人物、器物与地理的识别锚点在多状态资产间保持连续。
10
10
 
11
+ ## 品类成色
12
+
13
+ 除 `targetFinish: graybox` 外,成色以同品类当下主流作品的实机截图为标尺:随手一张截图应像该品类的一款游戏,而不是技术演示。
14
+ 三维作品的质感先来自光照层次(主光、天光、环境遮蔽、雾与空气透视)与色调,其次是材质分层与地表变化,
15
+ 最后才是几何细节;提高面数补不了平光与单色材质。
16
+
11
17
  ## 功能与可读边界
12
18
 
13
19
  颜色、光、材质、运动和声音必须表达已经裁决的状态,不由表现代码另算一次效果;界面不能承诺规则未实现的机制。
@@ -36,5 +42,4 @@
36
42
 
37
43
  动态媒体额外锁定触发状态、不可变化的身份/地理/道具事实、开始与结束边界、跳过结果。
38
44
  需要玩家改变视角、位置或空间关系时,不用固定视频伪装交互。
39
- 语音仅在确有独特价值时采用;方向规定声口与节奏,始终保留字幕和静音路径,
40
- 逐句生产与服务调用交给构建。
45
+ 语音方向规定声口与节奏,逐句生产与服务调用交给构建。
@@ -4,6 +4,8 @@
4
4
 
5
5
  类型由玩家反复做什么决定,不由原作战斗、恋爱或对白的篇幅决定。先例按设计问题选择,
6
6
  记录借用与拒绝之处;原作必须改变动作对象、顺序、代价或世界回应,而不只是替换专有名词。
7
+ 借用成熟品类时,玩家据以认出“这是一款该类游戏”的外壳(进入世界与移动、目标指引、成长与回访理由、阅读与操作便利)
8
+ 随类型一并继承;拒绝项只排除商业化、社交、长线数值或受保护素材,不排除这层外壳。
7
9
 
8
10
  ## 硬否决
9
11
 
@@ -23,6 +23,8 @@
23
23
  ## 分支与持久回响
24
24
 
25
25
  关键选择记录实际言行、即时反应、持久事实及其读取点,不用隐藏总分替代具体历史。
26
+ 人物路线的关键选择针对该人物自己的心结或议程,而不是对谁都成立的“最讨好回答”;关系进展优先由人物反应、
27
+ 称呼、可进入的场所与可托付的事呈现,而不是屏幕上的数值。
26
28
  共享场景允许汇流,但对白、物件、关系和可用行动必须遵守所选路径,不能把未选行动当成已发生。
27
29
 
28
30
  只保留会被后续读取的状态;承诺、证词、物件去向和公开立场应在相关人物或后续决策中兑现,
@@ -8,6 +8,15 @@
8
8
  每个系统必须改变核心决策;删除或自动处理后体验不变的系统应删减。不要用统一时长、系统数量、
9
9
  角色层级或关卡五拍替代项目范围判断。
10
10
 
11
+ ## 品类外壳与第一分钟
12
+
13
+ 仅用于 `system-led` 或 `hybrid`;`narrative-led` 跳过本节。选定成熟品类时,该品类玩家默认存在、缺了就被
14
+ 当成 demo 的外壳(进入世界与移动、目标指引、成长与回访理由)在体验合同里用一张短表标“实现 / 降级 / 不做与
15
+ 理由”;切片缩小内容量,不砍外壳,外壳也不按“改变核心决策”裁剪。外壳不另写规则,只把完整路径会经过的外壳
16
+ 操作写进可执行切片合同。例如回合制网游的场景行走与 NPC、任务追踪、明雷遇敌、可重复日常环。
17
+
18
+ 第一分钟内玩家看到该品类的招牌画面,用该品类熟悉的指引知道自己是谁、下一步点哪里。
19
+
11
20
  ## 可执行因果
12
21
 
13
22
  只写运行时真正需要的规则:
@@ -0,0 +1,31 @@
1
+ import type { CanvasPoint } from "./production-runtime.js";
2
+ /**
3
+ * Screen = world * zoom + pan. The canvas has no edges: nodes and the pan offset take any
4
+ * finite coordinate, so nothing can be pushed out of reach.
5
+ */
6
+ export interface CanvasViewport {
7
+ readonly x: number;
8
+ readonly y: number;
9
+ readonly zoom: number;
10
+ }
11
+ export interface CanvasSize {
12
+ readonly width: number;
13
+ readonly height: number;
14
+ }
15
+ export declare const CANVAS_NODE_WIDTH = 180;
16
+ export declare const CANVAS_NODE_HEIGHT = 76;
17
+ export declare const MIN_CANVAS_ZOOM = 0.1;
18
+ export declare const MAX_CANVAS_ZOOM = 3;
19
+ export declare const DEFAULT_CANVAS_VIEWPORT: CanvasViewport;
20
+ export declare function clampZoom(zoom: number): number;
21
+ /** Scales by `factor` while the world point under `anchor` (viewport pixels) stays put. */
22
+ export declare function zoomAt(viewport: CanvasViewport, factor: number, anchor: CanvasPoint): CanvasViewport;
23
+ /** Wheel deltas arrive in pixels, lines or pages depending on device; one notch is ~10%. */
24
+ export declare function wheelZoomFactor(deltaY: number, deltaMode: number): number;
25
+ export declare function screenToWorld(viewport: CanvasViewport, point: CanvasPoint): CanvasPoint;
26
+ /** Pans so the node's centre sits in the middle of the viewport, keeping the zoom. */
27
+ export declare function centerOn(viewport: CanvasViewport, node: CanvasPoint, size: CanvasSize): CanvasViewport;
28
+ export declare function nodeVisible(viewport: CanvasViewport, node: CanvasPoint, size: CanvasSize): boolean;
29
+ /** Frames every node; a single tall column fits its width rather than shrinking to dots. */
30
+ export declare function fitNodes(nodes: readonly CanvasPoint[], size: CanvasSize, fallback?: CanvasViewport): CanvasViewport;
31
+ //# sourceMappingURL=canvas-viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-viewport.d.ts","sourceRoot":"","sources":["../../../src/client/canvas-viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,eAAe,MAAK,CAAC;AAClC,eAAO,MAAM,eAAe,IAAI,CAAC;AACjC,eAAO,MAAM,uBAAuB,EAAE,cAA0C,CAAC;AAGjF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,2FAA2F;AAC3F,wBAAgB,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,cAAc,CAIpG;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,GAAG,WAAW,CAEvF;AAED,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,cAAc,CAMtG;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAIlG;AAED,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,GAAE,cAAwC,GAAG,cAAc,CAe5I"}
@@ -1,4 +1,5 @@
1
1
  import { type DramaDocumentTarget, type DramaEpisodeProduction, type DramaProductionSection } from "./drama-production.js";
2
+ import type { CanvasViewport } from "./canvas-viewport.js";
2
3
  import { type CanvasPoint, type ProductionJob, type ProductionMediaVersion, type ProductionQueueEntry, type ProductionSequenceItem } from "./production-runtime.js";
3
4
  interface Props {
4
5
  readonly sessionId: string;
@@ -14,7 +15,7 @@ interface Props {
14
15
  readonly manualReferences: Readonly<Record<string, readonly string[]>>;
15
16
  readonly sequence: readonly ProductionSequenceItem[];
16
17
  readonly canvas: Readonly<Record<string, CanvasPoint>>;
17
- readonly zoom: number;
18
+ readonly viewport: CanvasViewport | undefined;
18
19
  readonly onSectionChange: (section: DramaProductionSection) => void;
19
20
  readonly onSelect: (id: string | undefined) => void;
20
21
  readonly onNavigate: (target: DramaDocumentTarget) => void;
@@ -24,12 +25,23 @@ interface Props {
24
25
  readonly onOpenMedia: (path: string) => void;
25
26
  readonly onSequenceChange: (sequence: ProductionSequenceItem[]) => void;
26
27
  readonly onCanvasChange: (canvas: Record<string, CanvasPoint>) => void;
27
- readonly onZoomChange: (zoom: number) => void;
28
+ readonly onViewportChange: (viewport: CanvasViewport) => void;
28
29
  readonly onDispatchPrompt: (prompt: string) => Promise<void>;
29
30
  readonly onCancelTurn: () => Promise<void>;
30
31
  readonly onRemoveQueued: (itemId: string) => Promise<void>;
31
32
  readonly onRefresh: () => void;
32
33
  }
34
+ export declare function compositionSources(production: DramaEpisodeProduction, sequence: readonly ProductionSequenceItem[], versions: readonly ProductionMediaVersion[]): {
35
+ shotId: string;
36
+ sourceId: string;
37
+ kind: "image" | "video";
38
+ path: string;
39
+ durationSeconds: number | undefined;
40
+ }[];
33
41
  export declare function DramaProductionView(props: Props): import("react/jsx-runtime").JSX.Element;
42
+ export declare function SequenceBoard(props: Pick<Props, "jobs" | "sequence" | "versions" | "onSequenceChange"> & {
43
+ readonly episodeDirectory?: string;
44
+ readonly onCompose: () => void;
45
+ }): import("react/jsx-runtime").JSX.Element;
34
46
  export {};
35
47
  //# sourceMappingURL=drama-production-view.d.ts.map