@biunow/agent-biuart 0.0.0-stage → 0.1.1

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 (377) hide show
  1. package/bin/server.mjs +575 -0
  2. package/data/styles.json +533 -0
  3. package/engine/audit_clip.py +46 -0
  4. package/engine/clip.html +24 -0
  5. package/engine/clip.js +104 -0
  6. package/engine/clip_schema.json +19 -0
  7. package/engine/clips/t1_3b1b.js +203 -0
  8. package/engine/clips/t2_keynote_ui.js +347 -0
  9. package/engine/clips/t3_finance_chart.js +206 -0
  10. package/engine/clips/y1_kurzgesagt.js +183 -0
  11. package/engine/clips/y2_vox.js +150 -0
  12. package/engine/clips/y3_whiteboard.js +209 -0
  13. package/engine/clips/y4_storytime.js +194 -0
  14. package/engine/clips/y5_kinetic_type.js +134 -0
  15. package/engine/compare.py +19 -0
  16. package/engine/demos/_shared/hero/c1_0.png +0 -0
  17. package/engine/demos/_shared/hero/c1_1.png +0 -0
  18. package/engine/demos/_shared/hero/c1_2.png +0 -0
  19. package/engine/demos/_shared/hero/c3_line.png +0 -0
  20. package/engine/demos/_shared/hero.js +96 -0
  21. package/engine/demos/long_scroll/eras.js +23 -0
  22. package/engine/demos/long_scroll/frames/8bit_act/01.png +0 -0
  23. package/engine/demos/long_scroll/frames/8bit_act/02.png +0 -0
  24. package/engine/demos/long_scroll/frames/8bit_act/03.png +0 -0
  25. package/engine/demos/long_scroll/frames/8bit_act/04.png +0 -0
  26. package/engine/demos/long_scroll/frames/8bit_act/05.png +0 -0
  27. package/engine/demos/long_scroll/frames/8bit_act/06.png +0 -0
  28. package/engine/demos/long_scroll/frames/8bit_act/07.png +0 -0
  29. package/engine/demos/long_scroll/frames/8bit_act/08.png +0 -0
  30. package/engine/demos/long_scroll/frames/8bit_act/meta.json +69 -0
  31. package/engine/demos/long_scroll/frames/8bit_walk/01.png +0 -0
  32. package/engine/demos/long_scroll/frames/8bit_walk/02.png +0 -0
  33. package/engine/demos/long_scroll/frames/8bit_walk/03.png +0 -0
  34. package/engine/demos/long_scroll/frames/8bit_walk/04.png +0 -0
  35. package/engine/demos/long_scroll/frames/8bit_walk/05.png +0 -0
  36. package/engine/demos/long_scroll/frames/8bit_walk/06.png +0 -0
  37. package/engine/demos/long_scroll/frames/8bit_walk/07.png +0 -0
  38. package/engine/demos/long_scroll/frames/8bit_walk/08.png +0 -0
  39. package/engine/demos/long_scroll/frames/8bit_walk/meta.json +69 -0
  40. package/engine/demos/long_scroll/frames/egypt_dodge/01.png +0 -0
  41. package/engine/demos/long_scroll/frames/egypt_dodge/02.png +0 -0
  42. package/engine/demos/long_scroll/frames/egypt_dodge/03.png +0 -0
  43. package/engine/demos/long_scroll/frames/egypt_dodge/04.png +0 -0
  44. package/engine/demos/long_scroll/frames/egypt_dodge/05.png +0 -0
  45. package/engine/demos/long_scroll/frames/egypt_dodge/06.png +0 -0
  46. package/engine/demos/long_scroll/frames/egypt_dodge/07.png +0 -0
  47. package/engine/demos/long_scroll/frames/egypt_dodge/08.png +0 -0
  48. package/engine/demos/long_scroll/frames/egypt_dodge/meta.json +69 -0
  49. package/engine/demos/long_scroll/frames/egypt_walk8/01.png +0 -0
  50. package/engine/demos/long_scroll/frames/egypt_walk8/02.png +0 -0
  51. package/engine/demos/long_scroll/frames/egypt_walk8/03.png +0 -0
  52. package/engine/demos/long_scroll/frames/egypt_walk8/04.png +0 -0
  53. package/engine/demos/long_scroll/frames/egypt_walk8/05.png +0 -0
  54. package/engine/demos/long_scroll/frames/egypt_walk8/06.png +0 -0
  55. package/engine/demos/long_scroll/frames/egypt_walk8/07.png +0 -0
  56. package/engine/demos/long_scroll/frames/egypt_walk8/08.png +0 -0
  57. package/engine/demos/long_scroll/frames/egypt_walk8/meta.json +69 -0
  58. package/engine/demos/long_scroll/frames/monet_throw/01.png +0 -0
  59. package/engine/demos/long_scroll/frames/monet_throw/02.png +0 -0
  60. package/engine/demos/long_scroll/frames/monet_throw/03.png +0 -0
  61. package/engine/demos/long_scroll/frames/monet_throw/04.png +0 -0
  62. package/engine/demos/long_scroll/frames/monet_throw/05.png +0 -0
  63. package/engine/demos/long_scroll/frames/monet_throw/06.png +0 -0
  64. package/engine/demos/long_scroll/frames/monet_throw/07.png +0 -0
  65. package/engine/demos/long_scroll/frames/monet_throw/08.png +0 -0
  66. package/engine/demos/long_scroll/frames/monet_throw/meta.json +71 -0
  67. package/engine/demos/long_scroll/frames/monet_walk/01.png +0 -0
  68. package/engine/demos/long_scroll/frames/monet_walk/02.png +0 -0
  69. package/engine/demos/long_scroll/frames/monet_walk/03.png +0 -0
  70. package/engine/demos/long_scroll/frames/monet_walk/04.png +0 -0
  71. package/engine/demos/long_scroll/frames/monet_walk/05.png +0 -0
  72. package/engine/demos/long_scroll/frames/monet_walk/06.png +0 -0
  73. package/engine/demos/long_scroll/frames/monet_walk/07.png +0 -0
  74. package/engine/demos/long_scroll/frames/monet_walk/08.png +0 -0
  75. package/engine/demos/long_scroll/frames/monet_walk/meta.json +71 -0
  76. package/engine/demos/long_scroll/lib/acts.js +87 -0
  77. package/engine/demos/long_scroll/lib/crossing.js +463 -0
  78. package/engine/demos/long_scroll/lib/world.js +143 -0
  79. package/engine/demos/long_scroll/lib/xing2_ding.js +42 -0
  80. package/engine/demos/long_scroll/lib/xing2_jia.js +114 -0
  81. package/engine/demos/long_scroll/lib/xing2_yi.js +133 -0
  82. package/engine/demos/long_scroll/segments/02_egypt.js +234 -0
  83. package/engine/demos/long_scroll/segments/14_8bit.js +118 -0
  84. package/engine/demos/long_scroll/segments/28_monet.js +86 -0
  85. package/engine/demos/t1_3b1b/eras.js +11 -0
  86. package/engine/demos/t1_3b1b/t1_s1.js +101 -0
  87. package/engine/demos/t1_3b1b/t1_s2.js +74 -0
  88. package/engine/demos/t1_3b1b/t1_s3.js +65 -0
  89. package/engine/demos/t2_keynote_ui/eras.js +10 -0
  90. package/engine/demos/t2_keynote_ui/t2_s1.js +57 -0
  91. package/engine/demos/t2_keynote_ui/t2_s2.js +70 -0
  92. package/engine/demos/t2_keynote_ui/t2_s3.js +61 -0
  93. package/engine/demos/t3_finance_chart/eras.js +11 -0
  94. package/engine/demos/t3_finance_chart/t3_s1.js +48 -0
  95. package/engine/demos/t3_finance_chart/t3_s2.js +42 -0
  96. package/engine/demos/t3_finance_chart/t3_s3.js +51 -0
  97. package/engine/demos/y1_kurzgesagt/eras.js +10 -0
  98. package/engine/demos/y1_kurzgesagt/kurzgesagt.js +347 -0
  99. package/engine/demos/y2_vox/eras.js +10 -0
  100. package/engine/demos/y2_vox/vox.js +240 -0
  101. package/engine/demos/y3_whiteboard/eras.js +10 -0
  102. package/engine/demos/y3_whiteboard/whiteboard.js +162 -0
  103. package/engine/demos/y4_storytime/eras.js +14 -0
  104. package/engine/demos/y4_storytime/s1_desk.js +18 -0
  105. package/engine/demos/y4_storytime/s2_screen.js +82 -0
  106. package/engine/demos/y4_storytime/s3_react.js +39 -0
  107. package/engine/demos/y4_storytime/s4_wide.js +16 -0
  108. package/engine/demos/y4_storytime/s5_close.js +18 -0
  109. package/engine/demos/y4_storytime/story.js +25 -0
  110. package/engine/demos/y4_storytime/vo_env.js +2 -0
  111. package/engine/demos/y4_storytime/world.js +73 -0
  112. package/engine/demos/y5_kinetic_type/eras.js +16 -0
  113. package/engine/demos/y5_kinetic_type/k1_title.js +38 -0
  114. package/engine/demos/y5_kinetic_type/k2_complete.js +55 -0
  115. package/engine/demos/y5_kinetic_type/k3_chat.js +47 -0
  116. package/engine/demos/y5_kinetic_type/k4_agent.js +49 -0
  117. package/engine/demos/y5_kinetic_type/kinetic.js +52 -0
  118. package/engine/engine.js +277 -0
  119. package/engine/eras.js +60 -0
  120. package/engine/eras_gallery.js +115 -0
  121. package/engine/eras_style_studies.js +20 -0
  122. package/engine/examples/assets/K/347/272/277/345/233/276_/346/250/252/345/261/217.png +0 -0
  123. package/engine/examples/assets//347/273/210/347/253/257_for/345/276/252/347/216/257/346/261/202/345/222/214.png +0 -0
  124. package/engine/examples/assets//347/273/210/347/253/257_sum/346/261/202/345/222/214.png +0 -0
  125. package/engine/examples/assets//350/220/245/346/224/266/345/233/276_/347/253/226/345/261/217.png +0 -0
  126. package/engine/examples/assets//350/264/242/347/273/217/345/233/276/350/241/250_/346/250/252/345/261/217.png +0 -0
  127. package/engine/examples/t1_3b1b.json +19 -0
  128. package/engine/examples/t2_fullbleed_pulse.json +15 -0
  129. package/engine/examples/t2_keynote_ui.json +15 -0
  130. package/engine/examples/t3_finance_chart.json +29 -0
  131. package/engine/examples/y1_kurzgesagt.json +16 -0
  132. package/engine/examples/y2_vox.json +14 -0
  133. package/engine/examples/y3_whiteboard.json +17 -0
  134. package/engine/examples/y4_storytime.json +52 -0
  135. package/engine/examples/y5_kinetic_type.json +14 -0
  136. package/engine/index.html +42 -0
  137. package/engine/lib/THREE_LICENSE.txt +21 -0
  138. package/engine/lib/brush.js +149 -0
  139. package/engine/lib/camera.js +99 -0
  140. package/engine/lib/chart.js +152 -0
  141. package/engine/lib/collage.js +97 -0
  142. package/engine/lib/diagram.js +264 -0
  143. package/engine/lib/finish.js +70 -0
  144. package/engine/lib/fonts/AlfaSlabOne-400.woff +0 -0
  145. package/engine/lib/fonts/Anton-400.woff +0 -0
  146. package/engine/lib/fonts/ArchivoBlack-400.woff +0 -0
  147. package/engine/lib/fonts/Bangers-400.woff +0 -0
  148. package/engine/lib/fonts/Caveat-600.woff +0 -0
  149. package/engine/lib/fonts/Cinzel-400.woff +0 -0
  150. package/engine/lib/fonts/Cinzel-700.woff +0 -0
  151. package/engine/lib/fonts/CormorantGaramond-500.woff +0 -0
  152. package/engine/lib/fonts/CormorantGaramond-500i.woff +0 -0
  153. package/engine/lib/fonts/CormorantGaramond-700.woff +0 -0
  154. package/engine/lib/fonts/EBGaramond-400.woff +0 -0
  155. package/engine/lib/fonts/EBGaramond-400i.woff +0 -0
  156. package/engine/lib/fonts/EBGaramond-600.woff +0 -0
  157. package/engine/lib/fonts/Exo2-800i.woff +0 -0
  158. package/engine/lib/fonts/GochiHand-400.woff +0 -0
  159. package/engine/lib/fonts/IMFellEnglish-400.woff +0 -0
  160. package/engine/lib/fonts/IMFellEnglish-400i.woff +0 -0
  161. package/engine/lib/fonts/Inter-var.woff +0 -0
  162. package/engine/lib/fonts/JosefinSans-700.woff +0 -0
  163. package/engine/lib/fonts/Kalam-700.woff +0 -0
  164. package/engine/lib/fonts/LICENSES.md +40 -0
  165. package/engine/lib/fonts/LXGWWenKai-500.woff +0 -0
  166. package/engine/lib/fonts/LibreBaskerville-400.woff +0 -0
  167. package/engine/lib/fonts/LibreBaskerville-700.woff +0 -0
  168. package/engine/lib/fonts/LilitaOne-400.woff +0 -0
  169. package/engine/lib/fonts/Marcellus-400.woff +0 -0
  170. package/engine/lib/fonts/NotoSansSC-500.woff +0 -0
  171. package/engine/lib/fonts/NotoSansSC-700.woff +0 -0
  172. package/engine/lib/fonts/NotoSansSC-800.woff +0 -0
  173. package/engine/lib/fonts/NotoSansSC-900.woff +0 -0
  174. package/engine/lib/fonts/NotoSansSC-sub.woff +0 -0
  175. package/engine/lib/fonts/NotoSerifJP-600.woff +0 -0
  176. package/engine/lib/fonts/NotoSerifSC-sub.woff +0 -0
  177. package/engine/lib/fonts/OFL.txt +94 -0
  178. package/engine/lib/fonts/PlayfairDisplay-400i.woff +0 -0
  179. package/engine/lib/fonts/PlayfairDisplay-700.woff +0 -0
  180. package/engine/lib/fonts/PlayfairDisplay-700i.woff +0 -0
  181. package/engine/lib/fonts/Poppins-600.woff +0 -0
  182. package/engine/lib/fonts/Poppins-700.woff +0 -0
  183. package/engine/lib/fonts/Poppins-800.woff +0 -0
  184. package/engine/lib/fonts/PressStart2P-400.woff +0 -0
  185. package/engine/lib/fonts/Righteous-400.woff +0 -0
  186. package/engine/lib/fonts/RobotoCondensed-var.woff +0 -0
  187. package/engine/lib/fonts/Rye-400.woff +0 -0
  188. package/engine/lib/fonts/UnifrakturMaguntia-400.woff +0 -0
  189. package/engine/lib/fonts/cmunrm.woff +0 -0
  190. package/engine/lib/fonts/cmunti.woff +0 -0
  191. package/engine/lib/fonts/index.json +1 -0
  192. package/engine/lib/fonts.js +56 -0
  193. package/engine/lib/kit.js +91 -0
  194. package/engine/lib/media.js +118 -0
  195. package/engine/lib/medium.js +258 -0
  196. package/engine/lib/motion.js +111 -0
  197. package/engine/lib/paint.js +200 -0
  198. package/engine/lib/palettes.js +57 -0
  199. package/engine/lib/post.js +108 -0
  200. package/engine/lib/render.js +189 -0
  201. package/engine/lib/rig.js +390 -0
  202. package/engine/lib/rig_huashu.js +171 -0
  203. package/engine/lib/three.min.js +7 -0
  204. package/engine/lib/toon.js +186 -0
  205. package/engine/lib/typo.js +136 -0
  206. package/engine/lib/ui.js +141 -0
  207. package/engine/lib/util.js +92 -0
  208. package/engine/render.py +157 -0
  209. package/engine/scenes/01_cave.js +364 -0
  210. package/engine/scenes/02_egypt.js +524 -0
  211. package/engine/scenes/03_greek.js +448 -0
  212. package/engine/scenes/04_roman.js +555 -0
  213. package/engine/scenes/05_gothic.js +522 -0
  214. package/engine/scenes/06_renaissance.js +338 -0
  215. package/engine/scenes/08_impressionism.js +206 -0
  216. package/engine/scenes/09_postimp.js +183 -0
  217. package/engine/scenes/10_nouveau.js +334 -0
  218. package/engine/scenes/11_cubism.js +265 -0
  219. package/engine/scenes/12_bauhaus.js +214 -0
  220. package/engine/scenes/13_pop.js +269 -0
  221. package/engine/scenes/14_8bit.js +238 -0
  222. package/engine/scenes/15_raytrace.js +300 -0
  223. package/engine/scenes/16_2026.js +565 -0
  224. package/engine/scenes/17_ink.js +273 -0
  225. package/engine/scenes/18_klimt.js +227 -0
  226. package/engine/scenes/19_munch.js +153 -0
  227. package/engine/scenes/20_dunhuang.js +215 -0
  228. package/engine/scenes/21_kusama.js +124 -0
  229. package/engine/scenes/22_constructivism.js +205 -0
  230. package/engine/scenes/23_dali.js +221 -0
  231. package/engine/scenes/24_hopper.js +150 -0
  232. package/engine/scenes/25_ghibli.js +251 -0
  233. package/engine/scenes/26_vaporwave.js +191 -0
  234. package/engine/scenes/27_kirby.js +255 -0
  235. package/engine/scenes/28_monet.js +176 -0
  236. package/engine/scenes/29_seurat.js +104 -0
  237. package/engine/scenes/30_matisse.js +151 -0
  238. package/engine/scenes/31_haring.js +109 -0
  239. package/engine/scenes/32_rembrandt.js +217 -0
  240. package/engine/scenes/33_rubberhose.js +219 -0
  241. package/engine/scenes/34_shadowpuppet.js +195 -0
  242. package/engine/scenes/35_shinkai.js +197 -0
  243. package/engine/scenes/36_picasso_blue.js +123 -0
  244. package/engine/scenes/38_giotto.js +133 -0
  245. package/engine/scenes/39_piero.js +53 -0
  246. package/engine/scenes/40_raphael.js +96 -0
  247. package/engine/scenes/41_michelangelo.js +112 -0
  248. package/engine/scenes/42_guardi.js +70 -0
  249. package/engine/scenes/43_lorenzetti.js +145 -0
  250. package/engine/scenes/44_cortona.js +86 -0
  251. package/engine/scenes/45_renoir.js +86 -0
  252. package/engine/scenes/46_pissarro.js +82 -0
  253. package/engine/scenes/47_sisley.js +94 -0
  254. package/engine/scenes/48_gauguin.js +107 -0
  255. package/engine/scenes/49_chagall.js +60 -0
  256. package/engine/scenes/50_ma_yuan.js +131 -0
  257. package/engine/scenes/51_persian_miniature.js +149 -0
  258. package/engine/scenes/52_south_park.js +105 -0
  259. package/engine/scenes/53_pixar.js +60 -0
  260. package/engine/scenes/54_ghibli_lab.js +68 -0
  261. package/engine/scenes/55_dunhuang.js +161 -0
  262. package/engine/scenes/index.js +28 -0
  263. package/engine/spec_assets.py +76 -0
  264. package/engine/transitions.js +929 -0
  265. package/engine//346/227/266/344/273/243/344/275/234/350/200/205/350/247/204/350/214/203.md +49 -0
  266. package/lib/host.mjs +754 -0
  267. package/lib/render-bridge.mjs +543 -0
  268. package/lib/render-cli.mjs +98 -0
  269. package/lib/storyboard-lint.mjs +54 -0
  270. package/manifest.json +52 -0
  271. package/package.json +8 -4
  272. package/runtime/package.json +8 -0
  273. package/skills/biuart/SKILL.md +154 -0
  274. package/skills/biuart/references/01-/346/213/206/350/247/243.md +55 -0
  275. package/skills/biuart/references/02-/346/234/272/345/210/266.md +41 -0
  276. package/skills/biuart/references/03-/344/270/200/345/270/247/345/205/210/350/241/214/345/233/233/346/235/241/350/267/257/347/272/277.md +39 -0
  277. package/skills/biuart/references/04-/347/272/257/344/273/243/347/240/201/347/273/230/345/210/266.md +92 -0
  278. package/skills/biuart/references/05-/350/212/202/345/245/217/344/270/216/351/205/215/344/271/220.md +19 -0
  279. package/skills/biuart/references/06-/345/217/243/346/222/255/351/251/261/345/212/250/347/232/204/350/211/272/346/234/257/347/237/255/347/211/207.md +31 -0
  280. package/skills/biuart/references/07-/346/255/243/351/235/242/347/273/217/351/252/214.md +196 -0
  281. package/skills/biuart/references/08-/351/243/216/346/240/274/344/275/234/350/200/205/350/247/204/350/214/203.md +61 -0
  282. package/skills/biuart/references/09-/350/247/206/351/242/221/345/212/250/347/224/273/350/257/255/346/263/225.md +382 -0
  283. package/skills/biuart/references/10-/350/247/222/350/211/262.md +34 -0
  284. package/skills/biuart/references/11-/351/225/277/345/215/267/347/251/277/350/266/212/347/211/207.md +43 -0
  285. package/skills/biuart/references/12-/345/217/243/346/222/255/346/225/264/347/211/207/344/270/216/347/273/217/351/252/214/345/233/236/346/265/201.md +25 -0
  286. package/skills/biuart/references/13-/345/217/243/346/222/255/344/270/216/350/257/255/351/237/263/345/244/215/345/210/273.md +7 -0
  287. package/skills/biuart/references/15-/350/267/250/345/234/272/346/231/257/351/243/216/346/240/274/346/217/220/347/202/274.md +48 -0
  288. package/skills/biuart/references/16-/351/243/216/346/240/274/346/274/224/347/244/27295/345/210/206/345/215/217/350/256/256.md +103 -0
  289. package/skills/biuart/references/about-author.md +99 -0
  290. package/skills/biuart/references/capabilities.md +91 -0
  291. package/skills/biuart/references/compatibility.md +34 -0
  292. package/skills/biuart/references/images.md +97 -0
  293. package/skills/biuart/references/voice-model-review.md +18 -0
  294. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/t1_3b1b.md +122 -0
  295. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/t2_keynote_ui.md +117 -0
  296. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/t3_finance_chart.md +116 -0
  297. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/y1_kurzgesagt.md +193 -0
  298. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/y2_vox.md +195 -0
  299. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/y3_whiteboard.md +190 -0
  300. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/y4_storytime.md +166 -0
  301. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/y5_kinetic_type.md +158 -0
  302. package/skills/biuart/references//345/212/250/347/224/273/350/257/255/346/263/225/y6_presenter_explainer.md +24 -0
  303. package/skills/biuart/references//345/217/243/346/222/255API.md +125 -0
  304. package/skills/biuart/references//350/211/262/346/235/277.md +38 -0
  305. package/skills/biuart/references//350/247/222/350/211/262/347/262/276/347/273/206/345/272/246.md +61 -0
  306. package/skills/biuart/references//351/225/234/345/244/264/350/241/250/346/250/241/346/235/277.md +80 -0
  307. package/skills/biuart/references//351/225/234/345/244/264/350/257/255/350/250/200.md +73 -0
  308. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/01_cave.md +46 -0
  309. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/02_egypt.md +64 -0
  310. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/03_greek.md +50 -0
  311. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/04_roman.md +99 -0
  312. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/05_gothic.md +32 -0
  313. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/06_renaissance.md +41 -0
  314. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/08_impressionism.md +34 -0
  315. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/09_postimp.md +17 -0
  316. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/10_nouveau.md +31 -0
  317. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/11_cubism.md +30 -0
  318. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/12_bauhaus.md +30 -0
  319. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/13_pop.md +29 -0
  320. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/14_8bit.md +27 -0
  321. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/15_raytrace.md +32 -0
  322. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/16_2026.md +55 -0
  323. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/17_ink.md +50 -0
  324. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/18_klimt.md +37 -0
  325. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/19_munch.md +42 -0
  326. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/20_dunhuang.md +49 -0
  327. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/21_kusama.md +32 -0
  328. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/22_constructivism.md +35 -0
  329. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/23_dali.md +29 -0
  330. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/24_hopper.md +30 -0
  331. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/25_ghibli.md +55 -0
  332. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/26_vaporwave.md +27 -0
  333. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/27_kirby.md +30 -0
  334. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/28_monet.md +39 -0
  335. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/29_seurat.md +31 -0
  336. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/30_matisse.md +26 -0
  337. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/31_haring.md +22 -0
  338. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/32_rembrandt.md +29 -0
  339. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/33_rubberhose.md +31 -0
  340. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/34_shadowpuppet.md +40 -0
  341. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/35_shinkai.md +34 -0
  342. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/36_picasso_blue.md +25 -0
  343. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/37_rick_morty.md +48 -0
  344. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/38_giotto.md +67 -0
  345. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/39_piero.md +59 -0
  346. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/40_raphael.md +65 -0
  347. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/41_michelangelo.md +65 -0
  348. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/42_guardi.md +65 -0
  349. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/43_lorenzetti.md +69 -0
  350. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/44_cortona.md +66 -0
  351. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/45_renoir.md +66 -0
  352. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/46_pissarro.md +66 -0
  353. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/47_sisley.md +67 -0
  354. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/48_gauguin.md +66 -0
  355. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/49_chagall.md +59 -0
  356. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/50_ma_yuan.md +68 -0
  357. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/51_persian_miniature.md +66 -0
  358. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/52_south_park.md +65 -0
  359. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/53_pixar.md +61 -0
  360. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/55_dunhuang.md +41 -0
  361. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/INDEX.md +89 -0
  362. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/_/350/275/254/345/234/272_/350/277/201/347/247/273/346/265/213/350/257/225.md +53 -0
  363. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/_/351/207/215/345/201/232/350/277/233/345/272/246.md +37 -0
  364. package/skills/biuart/references//351/243/216/346/240/274/351/205/215/346/226/271/_/351/237/263/350/275/250_/350/211/272/346/234/257/345/217/262/351/200/237/351/200/232.md +135 -0
  365. package/studio/app.js +380 -0
  366. package/studio/assert-panel-permit.mjs +67 -0
  367. package/studio/composer.css +465 -0
  368. package/studio/composer.js +480 -0
  369. package/studio/index.html +97 -0
  370. package/studio/optimize-prompt.mjs +84 -0
  371. package/studio/optimize-prompt.test.mjs +47 -0
  372. package/studio/recipes.mjs +87 -0
  373. package/studio/select-menu.js +450 -0
  374. package/studio/styles.css +71 -0
  375. package/studio/to-english-prompt.mjs +149 -0
  376. package/studio/to-english-prompt.test.mjs +72 -0
  377. package/README.md +0 -3
@@ -0,0 +1,69 @@
1
+ {
2
+ "frames": [
3
+ {
4
+ "file": "01.png",
5
+ "ax": 134.0,
6
+ "ay": 387.0,
7
+ "w": 246,
8
+ "h": 388,
9
+ "air": 0
10
+ },
11
+ {
12
+ "file": "02.png",
13
+ "ax": 128.5,
14
+ "ay": 395.0,
15
+ "w": 245,
16
+ "h": 396,
17
+ "air": 0
18
+ },
19
+ {
20
+ "file": "03.png",
21
+ "ax": 128.5,
22
+ "ay": 393.0,
23
+ "w": 244,
24
+ "h": 394,
25
+ "air": 0
26
+ },
27
+ {
28
+ "file": "04.png",
29
+ "ax": 127.5,
30
+ "ay": 395.0,
31
+ "w": 242,
32
+ "h": 396,
33
+ "air": 0
34
+ },
35
+ {
36
+ "file": "05.png",
37
+ "ax": 134.0,
38
+ "ay": 395.0,
39
+ "w": 246,
40
+ "h": 396,
41
+ "air": 0
42
+ },
43
+ {
44
+ "file": "06.png",
45
+ "ax": 128.5,
46
+ "ay": 398.0,
47
+ "w": 245,
48
+ "h": 399,
49
+ "air": 0
50
+ },
51
+ {
52
+ "file": "07.png",
53
+ "ax": 132.5,
54
+ "ay": 397.0,
55
+ "w": 244,
56
+ "h": 398,
57
+ "air": 0
58
+ },
59
+ {
60
+ "file": "08.png",
61
+ "ax": 127.5,
62
+ "ay": 398.0,
63
+ "w": 242,
64
+ "h": 399,
65
+ "air": 0
66
+ }
67
+ ],
68
+ "ref_h": 396.0
69
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "frames": [
3
+ {
4
+ "file": "01.png",
5
+ "ax": 111.0,
6
+ "ay": 424.0,
7
+ "w": 238,
8
+ "h": 425,
9
+ "air": 0
10
+ },
11
+ {
12
+ "file": "02.png",
13
+ "ax": 118.0,
14
+ "ay": 425.0,
15
+ "w": 237,
16
+ "h": 426,
17
+ "air": 0
18
+ },
19
+ {
20
+ "file": "03.png",
21
+ "ax": 157.5,
22
+ "ay": 378.0,
23
+ "w": 265,
24
+ "h": 379,
25
+ "air": 0
26
+ },
27
+ {
28
+ "file": "04.png",
29
+ "ax": 179.5,
30
+ "ay": 434.0,
31
+ "w": 341,
32
+ "h": 393,
33
+ "air": 42
34
+ },
35
+ {
36
+ "file": "05.png",
37
+ "ax": 176.5,
38
+ "ay": 435.0,
39
+ "w": 335,
40
+ "h": 368,
41
+ "air": 68
42
+ },
43
+ {
44
+ "file": "06.png",
45
+ "ax": 110.5,
46
+ "ay": 426.0,
47
+ "w": 216,
48
+ "h": 427,
49
+ "air": 0
50
+ },
51
+ {
52
+ "file": "07.png",
53
+ "ax": 106.0,
54
+ "ay": 413.0,
55
+ "w": 228,
56
+ "h": 414,
57
+ "air": 0
58
+ },
59
+ {
60
+ "file": "08.png",
61
+ "ax": 100.5,
62
+ "ay": 412.0,
63
+ "w": 219,
64
+ "h": 412,
65
+ "air": 1
66
+ }
67
+ ],
68
+ "ref_h": 413.0
69
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "frames": [
3
+ {
4
+ "file": "01.png",
5
+ "ax": 137.0,
6
+ "ay": 451.0,
7
+ "w": 263,
8
+ "h": 451,
9
+ "air": 1
10
+ },
11
+ {
12
+ "file": "02.png",
13
+ "ax": 112.5,
14
+ "ay": 442.0,
15
+ "w": 233,
16
+ "h": 442,
17
+ "air": 1
18
+ },
19
+ {
20
+ "file": "03.png",
21
+ "ax": 110.0,
22
+ "ay": 454.0,
23
+ "w": 203,
24
+ "h": 455,
25
+ "air": 0
26
+ },
27
+ {
28
+ "file": "04.png",
29
+ "ax": 134.5,
30
+ "ay": 449.0,
31
+ "w": 264,
32
+ "h": 450,
33
+ "air": 0
34
+ },
35
+ {
36
+ "file": "05.png",
37
+ "ax": 137.0,
38
+ "ay": 442.0,
39
+ "w": 269,
40
+ "h": 442,
41
+ "air": 1
42
+ },
43
+ {
44
+ "file": "06.png",
45
+ "ax": 129.0,
46
+ "ay": 442.0,
47
+ "w": 248,
48
+ "h": 442,
49
+ "air": 1
50
+ },
51
+ {
52
+ "file": "07.png",
53
+ "ax": 110.5,
54
+ "ay": 445.0,
55
+ "w": 210,
56
+ "h": 445,
57
+ "air": 1
58
+ },
59
+ {
60
+ "file": "08.png",
61
+ "ax": 133.5,
62
+ "ay": 442.0,
63
+ "w": 268,
64
+ "h": 443,
65
+ "air": 0
66
+ }
67
+ ],
68
+ "ref_h": 444.0
69
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "frames": [
3
+ {
4
+ "file": "01.png",
5
+ "ax": 145.0,
6
+ "ay": 431.0,
7
+ "w": 273,
8
+ "h": 432,
9
+ "air": 0
10
+ },
11
+ {
12
+ "file": "02.png",
13
+ "ax": 205.0,
14
+ "ay": 411.0,
15
+ "w": 338,
16
+ "h": 411,
17
+ "air": 1
18
+ },
19
+ {
20
+ "file": "03.png",
21
+ "ax": 144.5,
22
+ "ay": 424.0,
23
+ "w": 267,
24
+ "h": 424,
25
+ "air": 1
26
+ },
27
+ {
28
+ "file": "04.png",
29
+ "ax": 132.5,
30
+ "ay": 420.0,
31
+ "w": 347,
32
+ "h": 420,
33
+ "air": 1
34
+ },
35
+ {
36
+ "file": "05.png",
37
+ "ax": 211.5,
38
+ "ay": 421.0,
39
+ "w": 330,
40
+ "h": 413,
41
+ "air": 9
42
+ },
43
+ {
44
+ "file": "06.png",
45
+ "ax": 123.0,
46
+ "ay": 430.0,
47
+ "w": 258,
48
+ "h": 428,
49
+ "air": 3
50
+ },
51
+ {
52
+ "file": "07.png",
53
+ "ax": 116.5,
54
+ "ay": 423.0,
55
+ "w": 280,
56
+ "h": 419,
57
+ "air": 5
58
+ },
59
+ {
60
+ "file": "08.png",
61
+ "ax": 120.0,
62
+ "ay": 417.0,
63
+ "w": 285,
64
+ "h": 418,
65
+ "air": 0
66
+ }
67
+ ],
68
+ "ref_h": 439.0,
69
+ "ref_h_raw": 419.5,
70
+ "hat_w": 233.5
71
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "frames": [
3
+ {
4
+ "file": "01.png",
5
+ "ax": 129.0,
6
+ "ay": 447.0,
7
+ "w": 249,
8
+ "h": 448,
9
+ "air": 0
10
+ },
11
+ {
12
+ "file": "02.png",
13
+ "ax": 123.0,
14
+ "ay": 445.0,
15
+ "w": 241,
16
+ "h": 445,
17
+ "air": 1
18
+ },
19
+ {
20
+ "file": "03.png",
21
+ "ax": 121.0,
22
+ "ay": 445.0,
23
+ "w": 240,
24
+ "h": 446,
25
+ "air": 0
26
+ },
27
+ {
28
+ "file": "04.png",
29
+ "ax": 118.0,
30
+ "ay": 449.0,
31
+ "w": 236,
32
+ "h": 448,
33
+ "air": 2
34
+ },
35
+ {
36
+ "file": "05.png",
37
+ "ax": 128.5,
38
+ "ay": 448.0,
39
+ "w": 248,
40
+ "h": 448,
41
+ "air": 1
42
+ },
43
+ {
44
+ "file": "06.png",
45
+ "ax": 123.0,
46
+ "ay": 447.0,
47
+ "w": 241,
48
+ "h": 447,
49
+ "air": 1
50
+ },
51
+ {
52
+ "file": "07.png",
53
+ "ax": 121.5,
54
+ "ay": 446.0,
55
+ "w": 240,
56
+ "h": 447,
57
+ "air": 0
58
+ },
59
+ {
60
+ "file": "08.png",
61
+ "ax": 118.5,
62
+ "ay": 450.0,
63
+ "w": 236,
64
+ "h": 449,
65
+ "air": 2
66
+ }
67
+ ],
68
+ "ref_h": 440.9,
69
+ "ref_h_raw": 447.5,
70
+ "hat_w": 234.5
71
+ }
@@ -0,0 +1,87 @@
1
+ // 莫奈《日本桥》一幕:固定机位的打水漂小剧。B 方向直接用;C 方向当画框里的「活的画」用。
2
+ // ACT.monet(c, lt, sc) 画一帧并返回主角状态 {x,y,h,key,i,hat};sc = 剧本参数(见 SCRIPTS)。
3
+ (() => {
4
+ const W = 1920, H = 1080, TAU = Math.PI * 2;
5
+ const { clamp, lerp, ss } = U;
6
+ const X = window.XING, P = window.PAINT;
7
+ const ACT = window.ACT = {};
8
+ ACT.monetWorld = () => X.monetWorld({ key: 'fixed', x0: 0, w: 1920, waterTop: 520, bridge: { x0: -160, x1: 2080, yEnd: 690, lift: 210 }, pond: null, groundY: 700 });
9
+ const HERO_H = 330;
10
+
11
+ // 睡莲花(代码画+莫奈笔触,缓存)
12
+ let LILY = null;
13
+ ACT.lily = (c, x, y, s, rot = 0) => {
14
+ if (!LILY) { const cc = P.canvas(140, 100), q = cc.getContext('2d'); q.translate(70, 70);
15
+ q.fillStyle = '#7aa85a'; q.beginPath(); q.ellipse(0, 10, 58, 16, 0, 0.4, TAU - 0.4); q.lineTo(0, 10); q.fill();
16
+ for (let k = 0; k < 7; k++) { const a = -Math.PI / 2 + (k - 3) * 0.42; q.fillStyle = k % 2 ? '#f2a6bf' : '#f7c4d4'; q.save(); q.rotate(a + Math.PI / 2); q.beginPath(); q.ellipse(0, -22, 10, 24, 0, 0, TAU); q.fill(); q.restore(); }
17
+ q.fillStyle = '#f6d86a'; q.beginPath(); q.arc(0, -4, 8, 0, TAU); q.fill();
18
+ const out = P.canvas(140, 100), og = out.getContext('2d'); og.drawImage(cc, 0, 0); og.globalCompositeOperation = 'source-atop';
19
+ X.strokes(og, cc, { cell: 4, len: 8, width: 3, seed: 91, alphaMask: true, alphaMin: 100, angle: (x, y, r) => Math.atan2(y - 66, x - 70) + Math.PI / 2 + (r() - 0.5) * 0.4, jitterCol: 22 });
20
+ LILY = out; }
21
+ c.save(); c.translate(x, y); c.rotate(rot); c.scale(s, s); c.drawImage(LILY, -70, -80); c.restore();
22
+ };
23
+
24
+ // 打水漂动作分镜(相对出手动作开始 T 的秒数)——monet_throw 8 帧:0看石子 1蓄力 2甩 3出手(帧里画着石子) 4随挥 5搭凉棚看 6欢呼 7抬头惊讶
25
+ const THROW = [[0, 0], [0.22, 1], [0.48, 2], [0.56, 3], [0.66, 4], [0.9, 5]];
26
+ ACT.throwFrame = (u) => { let f = 0; for (const [tt, i] of THROW) if (u >= tt) f = i; return f; };
27
+ ACT.RELEASE = 0.66; // 帧 3 结束、代码石子接手
28
+ // 帧 3 里石子在精灵上的位置(像素,见 slice 时量的 309–346 × 186–210),换算成屏幕坐标
29
+ ACT.stoneFrom = (x, y, h) => { const s = h / 439.0; return [x + (327 - 132.5) * s, y + (198 - 420) * s]; };
30
+
31
+ // 找最接近某点的一片睡莲
32
+ const nearestPad = (M, x, y, flower) => { let best = null, bd = 1e9; for (const p of M.pads) { if (flower === true && !p.flower) continue; if (flower === false && p.flower) continue; const d = Math.hypot(p.x - x, (p.y - y) * 2); if (d < bd) { bd = d; best = p; } } return best; };
33
+
34
+ // sc: { entry:'walk'|'drop', tIn, standX, T (出手动作开始), gag:'frog'|'lily', hideAfter, hideBefore, heroH }
35
+ ACT.monet = (c, lt, sc) => {
36
+ const M = ACT.monetWorld(), h = sc.heroH || HERO_H, T = sc.T;
37
+ const pad = sc.gag === 'frog' ? nearestPad(M, 1640, 975) : nearestPad(M, 1560, 930, false);
38
+ const sx = sc.standX, sy = M.deckY(sx);
39
+ const rel = T + ACT.RELEASE, from = ACT.stoneFrom(sx, sy, h);
40
+ const hops = [{ x: 1000, y: 700, t: rel + 0.26, s: 0.45 }, { x: 1230, y: 790, t: rel + 0.5, s: 0.6, peak: 120 }, { x: 1410, y: 868, t: rel + 0.68, s: 0.74, peak: 80 }];
41
+ const last = { x: pad.x, y: pad.y, t: rel + 0.82, s: 0.85, peak: 55 };
42
+ const plan = { t0: rel, from, s0: 0.4, firstArc: 90, hops: hops.concat([last]) };
43
+ const ev = { hops: plan.hops.map((p, i) => ({ x: p.x, y: p.y, t: p.t, s: p.s, big: i === 3 })), padBump: { pad, t: last.t } };
44
+ const hitT = last.t, landT = hitT + 1.0;
45
+ c.save(); if (sc.zoom) { const z = 1 + 0.16 * ss(hitT + 0.5, landT + 0.2, lt); const zx = sx + 60, zy = sy - h * 0.7; c.translate(zx, zy); c.scale(z, z); c.translate(-zx, -zy); }
46
+ X.monetBack(c, M, 0, lt, ev);
47
+ // 青蛙或花:起(一直坐在那片叶子上)→ 被石子砸中弹起 → 落到他帽子上
48
+ // 主角
49
+ let hero = null;
50
+ const hidden = (sc.hideBefore != null && lt < sc.hideBefore) || (sc.hideAfter != null && lt >= sc.hideAfter);
51
+ if (!hidden) {
52
+ let key = 'monet_throw', i = 0, x = sx, y = sy, sq = 1;
53
+ if (sc.entry === 'walk' && lt < sc.tIn) { key = 'monet_walk'; const q = lt / sc.tIn; x = lerp(sc.walkFrom, sx, q); y = M.deckY(x); i = Math.floor((x - sc.walkFrom) / 17) % 8; }
54
+ else if (sc.entry === 'drop' && lt < sc.tIn) { key = 'monet_jump'; const q = clamp((lt - (sc.hideBefore || 0)) / (sc.tIn - (sc.hideBefore || 0))); x = lerp(sc.dropFrom[0], sx, q); y = lerp(sc.dropFrom[1], sy, q) - Math.sin(q * Math.PI) * 90; i = q < 0.7 ? 3 : 4; }
55
+ else if (sc.entry === 'drop' && lt < sc.tIn + 0.3) { key = 'monet_jump'; i = lt < sc.tIn + 0.12 ? 5 : 6; }
56
+ else if (lt < T) i = 0;
57
+ else { const u = lt - T; i = ACT.throwFrame(u); if (lt >= hitT - 0.1) i = 6; if (lt >= hitT + 0.35) i = 5; if (lt >= landT) i = 7; }
58
+ if (sc.override) ({ key, i, x, y } = Object.assign({ key, i, x, y }, sc.override(lt, { key, i, x, y })));
59
+ if (lt >= landT && lt < landT + 0.3) { const a = (lt - landT) / 0.3; y -= Math.sin(a * Math.PI) * 26; x += Math.sin(a * 40) * 4 * (1 - a); } // 落帽那一下:吓得一蹦、抖
60
+ X.actor(c, key, i, { x, y, h, mat: 'monet', t: lt, wx: x, shadow: 'rgba(60,70,120,.18)' });
61
+ if (lt >= landT && lt < landT + 0.9) { const a = (lt - landT) / 0.9, [hx0, hy0] = X.hatTop(key, i, { x, y, h }); c.save(); c.lineCap = 'round'; c.globalAlpha = 1 - a * a; // 惊吓线(莫奈色短笔)
62
+ [-0.9, -0.35, 0.25].forEach((ang, k) => { const r0 = h * 0.42 + a * 30, r1 = r0 + 34; const cx = hx0 + 30, cy = hy0 + h * 0.25; c.strokeStyle = ['#fffbe8', '#f2a6bf', '#9db5e0'][k]; c.lineWidth = 9; c.beginPath(); c.moveTo(cx + Math.cos(ang - 1.2) * r0, cy + Math.sin(ang - 1.2) * r0); c.lineTo(cx + Math.cos(ang - 1.2) * r1, cy + Math.sin(ang - 1.2) * r1); c.stroke(); }); c.restore(); }
63
+ hero = { key, i, x, y, h, hat: X.hatTop(key, i, { x, y, h }) };
64
+ }
65
+ X.monetFront(c, M, 0, lt, [90, 1830]);
66
+ X.stoneAt(c, lt, plan);
67
+ // 道具:青蛙 / 睡莲花
68
+ const hatAt = hero ? hero.hat : (sc.hatFallback || [sx, sy - h]);
69
+ const padY = pad.y - 4 * pad.s;
70
+ if (sc.gag === 'frog') {
71
+ const fs = 0.7 + 0.5 * pad.s;
72
+ if (lt < hitT) X.frog(c, pad.x, padY + Math.sin(lt * 2) * 1.5, fs, 'sit', 'monet', { croak: lt > 0.3 && lt < 0.7 ? Math.sin((lt - 0.3) / 0.4 * Math.PI) : 0, flip: true });
73
+ else if (lt < landT) { const q = (lt - hitT) / (landT - hitT), x = lerp(pad.x, hatAt[0], q), y = lerp(padY, hatAt[1] + 4, q) - Math.sin(q * Math.PI) * 360, s = lerp(fs, 0.62, q) + Math.sin(q * Math.PI) * 0.55;
74
+ X.frog(c, x, y, s, 'leap', 'monet', { rot: -q * TAU * 1.0 - 0.5, flip: true }); }
75
+ else if (!sc.hideFrogAfter || lt < sc.hideFrogAfter) { const a = lt - landT, sq = 1 - 0.3 * Math.exp(-a * 9) * Math.cos(a * 30);
76
+ X.frog(c, hatAt[0], hatAt[1] + 8, 0.62, 'sit', 'monet', { sy: sq, croak: a > 0.25 && a < 0.75 ? Math.sin((a - 0.25) / 0.5 * Math.PI) : 0, flip: true }); }
77
+ } else if (sc.gag === 'lily') {
78
+ const ls = 0.5 + 0.5 * pad.s;
79
+ if (lt < hitT) ACT.lily(c, pad.x, padY + 4, ls * 0.8, 0);
80
+ else if (lt < landT) { const q = (lt - hitT) / (landT - hitT), x = lerp(pad.x, hatAt[0], q), y = lerp(padY, hatAt[1] + 8, q) - Math.sin(q * Math.PI) * 300; ACT.lily(c, x, y, lerp(ls, 0.5, q) + Math.sin(q * Math.PI) * 0.7, q * TAU * 1.5);
81
+ if (q < 0.25) X.ripple(c, pad.x, pad.y, (lt - hitT), 0.9, true); }
82
+ else if (lt >= landT && !(sc.hideAfter != null && lt >= sc.hideAfter)) { const a = lt - landT; ACT.lily(c, hatAt[0], hatAt[1] + 10, 0.5 * (1 + 0.15 * Math.exp(-a * 8) * Math.sin(a * 30)), 0); }
83
+ }
84
+ c.restore();
85
+ return { hero, hitT, landT, pad, hatAt };
86
+ };
87
+ })();