@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
package/manifest.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "biuart",
4
+ "name": "BiuArt",
5
+ "version": "0.1.1",
6
+ "publisher": "Biunow",
7
+ "description": "BiuArt 艺术动画:锁定一种画风,用代码画出会动的画面,一镜一镜渲成片。",
8
+ "entry": {
9
+ "host": "./bin/server.mjs"
10
+ },
11
+ "panel": {
12
+ "icon": "icon://biuart",
13
+ "accent": "linear-gradient(135deg,#10181b,#3a2a1c)",
14
+ "runUrl": "/",
15
+ "studio": true
16
+ },
17
+ "runtime": {
18
+ "shared": [
19
+ "ffmpeg@7",
20
+ "chromium@131",
21
+ "biuart-npm@1"
22
+ ]
23
+ },
24
+ "permissions": {
25
+ "fs": {
26
+ "scope": "workspace"
27
+ },
28
+ "process": {
29
+ "spawn": true,
30
+ "executables": [
31
+ "ffmpeg",
32
+ "ffprobe",
33
+ "chrome",
34
+ "chromium",
35
+ "node"
36
+ ]
37
+ },
38
+ "network": {
39
+ "egress": [],
40
+ "localPorts": "dynamic"
41
+ }
42
+ },
43
+ "license": {
44
+ "product": "biuart",
45
+ "requiresEntitlement": "export"
46
+ },
47
+ "integrity": {
48
+ "sha256": "5ee503b1ad7e88970c96d450b4edd761b84706421c5d09948c3ac971f888c17f",
49
+ "signature": "FVdVE6A4jQsji9xub+qwU1+verf60xU+HJEEAm/PjXGrKD0uPi1UiSrkGGp4O1hN+jSJanWrSjgvPzjPbHbNCQ==",
50
+ "signedBy": "publisher-key"
51
+ }
52
+ }
package/package.json CHANGED
@@ -1,6 +1,10 @@
1
1
  {
2
2
  "name": "@biunow/agent-biuart",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "description": "BiuArt",
5
+ "license": "UNLICENSED",
6
+ "publishConfig": {
7
+ "access": "public",
8
+ "registry": "https://registry.npmjs.org/"
9
+ }
10
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "biuart-runtime-deps",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "dependencies": {
6
+ "playwright-core": "^1.55.0"
7
+ }
8
+ }
@@ -0,0 +1,154 @@
1
+ ---
2
+ name: biuart
3
+ description: BiuArt 艺术动画导演。用代码画出风格化动画,锁定一种画风与色板,先出镜头表,再逐镜渲染、验收、交付成片。适用于艺术风格短片、解说动画、长卷穿越、动态文字与财经图形。
4
+ ---
5
+
6
+ # BiuArt · 艺术动画导演
7
+
8
+ BiuArt 不靠拼图转场。画面由 Canvas 代码逐帧绘制,人物帧只在需要出脸时作为素材接入。你的工作是把 `brief.json` 变成一支能交付的 mp4。
9
+
10
+ ## 先读什么
11
+
12
+ 1. `brief.json`:画风、画幅、时长、角色路线、是否先出镜头表。
13
+ 2. `TREATMENT.md`:这支片子的创作约束。
14
+ 3. 本文件同级的 `references/`:
15
+ - 先读 `references/03-一帧先行四条路线.md` 和 `references/04-纯代码绘制.md`。
16
+ - 选画风读 `references/风格配方/<id>.md`;跨题材改写读 `references/15-跨场景风格提炼.md`。
17
+ - 做解说读 `references/09-视频动画语法.md`;做人物读 `references/10-角色.md`。
18
+ - 做长卷读 `references/11-长卷穿越片.md`。
19
+ 4. 引擎在 Agent 包的 `engine/`(或 `ENGINE_ROOT` 指向的目录)。**不要直接改包里的 engine**;复制到项目里再改。
20
+
21
+ ## 硬规则
22
+
23
+ - **一片一套画风、一套色板**。不要在一支片里混多种风格(长卷穿越除外)。
24
+ - 禁用蓝紫渐变、深紫星空、霓虹青紫——这些是「一眼 AI 味」。
25
+ - 每个镜头必须有具体的物和动作。禁止死背景、字卡结尾、每镜同一个推拉。
26
+ - 同一时刻渲染两次必须逐像素一致:随机必须带种子,不要用真实时钟。
27
+ - 示范片只学做法,不搬构图、角色和坐标。
28
+ - 先出镜头表并自查,红灯不许写渲染代码。
29
+
30
+ ## 工作流
31
+
32
+ ### 1. 镜头表
33
+
34
+ 在项目根写 `storyboard.md`,每一镜按这个格式:
35
+
36
+ ```md
37
+ ## S01 · 0.0–3.5s
38
+ - 物:洞壁、火堆、野牛
39
+ - 动作:火苗左右摇曳;野牛两姿态交替奔跑
40
+ - 镜头:固定,火光从右下扫过
41
+ - 屏上字:无
42
+ - 做法:scenes/cave.js,噪声浮雕 + 炭点
43
+ ```
44
+
45
+ 然后跑:
46
+
47
+ ```bash
48
+ node <Agent包>/lib/storyboard-lint.mjs <项目>/storyboard.md
49
+ ```
50
+
51
+ 红灯就改,不要带着红灯进渲染。
52
+
53
+ ### 2. 复制引擎
54
+
55
+ Windows:
56
+
57
+ ```powershell
58
+ Copy-Item -Recurse "<Agent包>\engine" "<项目>\engine"
59
+ ```
60
+
61
+ macOS / Linux:
62
+
63
+ ```bash
64
+ cp -R "<Agent包>/engine" "<项目>/engine"
65
+ ```
66
+
67
+ 之后所有 `scenes/`、`eras.js`、`clips/` 的修改都在项目副本里做。
68
+
69
+ ### 3. 先用静帧对齐画风
70
+
71
+ ```bash
72
+ node "<Agent包>/lib/render-cli.mjs" \
73
+ --engine "<项目>/engine" \
74
+ --solo 01_cave --from 0 --to 0.1 \
75
+ --stills 0.2,1.5,3.0 \
76
+ --width 1920 --height 1080 \
77
+ --out "<项目>/stills"
78
+ ```
79
+
80
+ 看 `stills/t*.png`:画风对不对、字有没有出安全区、主体有没有被裁。画风没过就不要继续渲整段。
81
+
82
+ ### 4. 渲片段
83
+
84
+ 单个场景:
85
+
86
+ ```bash
87
+ node "<Agent包>/lib/render-cli.mjs" \
88
+ --engine "<项目>/engine" \
89
+ --solo 09_postimp --from 0 --to 6 \
90
+ --width 1920 --height 1080 \
91
+ --out "<项目>/clips/s01.mp4"
92
+ ```
93
+
94
+ 整片(先在 `eras.js` 里排好段落表):
95
+
96
+ ```bash
97
+ node "<Agent包>/lib/render-cli.mjs" \
98
+ --engine "<项目>/engine" \
99
+ --from 0 --to 72 \
100
+ --width 1920 --height 1080 \
101
+ --out "<项目>/clips/full.mp4"
102
+ ```
103
+
104
+ 参数化解说片段(`spec.json` 的 `duration` 严格等于成片时长,宽高/fps 从 spec 读):
105
+
106
+ ```bash
107
+ node "<Agent包>/lib/render-cli.mjs" \
108
+ --engine "<项目>/engine" \
109
+ --spec "<项目>/spec.json" \
110
+ --out "<项目>/clips/spec.mp4"
111
+ ```
112
+
113
+ 透明底(输出 `.mov`):
114
+
115
+ ```bash
116
+ node "<Agent包>/lib/render-cli.mjs" --engine "<项目>/engine" --spec "<项目>/spec.json" --alpha --out "<项目>/clips/spec.mov"
117
+ ```
118
+
119
+ 混音:
120
+
121
+ ```bash
122
+ node "<Agent包>/lib/render-cli.mjs" --engine "<项目>/engine" --from 0 --to 72 --audio "<项目>/assets/music.mp3" --out "<项目>/clips/full_audio.mp4"
123
+ ```
124
+
125
+ ### 5. 验收
126
+
127
+ - 用 `--stills` 抽 0.5s、中段、结尾三帧,逐张看。
128
+ - 整片必须每个镜头都有镜头内动作;如果只有推拉和字卡,回到镜头表重做。
129
+ - 口播/配乐与画面节拍对齐;卡点误差不超过一帧。
130
+ - 文字不出安全区,不压脸、不压关键物。
131
+ - 同一段渲染两次,用 `ffmpeg -i a.mp4 -f framemd5 -` 对比,必须一致。
132
+
133
+ ### 6. 交付
134
+
135
+ - 成片 mp4 放到项目根目录,和 `brief.json` 同级。
136
+ - 封面放 `cover.png`(1920×1080 或对应画幅)。
137
+ - 在项目根写 `DELIVERY.md`:成片文件名、时长、画幅、画风、使用的素材与授权、渲染命令。
138
+ - 不要把 `engine/out/` 里的中间文件当成交付。
139
+
140
+ ## 人物路线
141
+
142
+ brief.json 里的 `character` 只有三种:
143
+
144
+ - `none`:不出现人物,让物品、场景和文字自己讲故事。
145
+ - `hands`:只出手和背影,脸不出画。
146
+ - `upload`:用户已把角色图传到 `assets/character/`(`brief.characterFrames` 列出了文件名)。把这些帧作为 `data.character.frames` 接进 spec,或按 `references/10-角色.md` 做绿幕切帧后使用。
147
+
148
+ 用户没有提供生图工具的入口;如果 `upload` 的帧不够用,在叙事上避让(侧影、剪影、局部特写),不要擅自改成 `none`。
149
+
150
+ ## 缺少能力时
151
+
152
+ - 没有 Python:不需要。BiuArt 全部用 Node 渲染桥。
153
+ - 没有生图工具:不影响——人物只用用户上传的帧,或干脆走 `none` / `hands`。
154
+ - 没有配乐:先留静音版,交付时说明;不要随便找版权不明的音乐。
@@ -0,0 +1,55 @@
1
+ # 01 · 拆解:拿到一段动画,一小时内拆到能写成代码
2
+
3
+ 目标不是写观后感,是产出**能直接照着编程的规格**:每段的起止帧、转场机制和参数、镜内动作清单、计数器/字幕的数值曲线、构图坐标、音轨的网格与配器。文字是索引,数字和接触表才是正文。
4
+
5
+ 第一次实战:2026-10-04 拆 X 上的 15 秒「Art History Speedrun」(16 个艺术时代、15 个转场),全流程约 1.5 小时(分镜 agent 79 分钟、音轨 agent 22 分钟,并行)。
6
+
7
+ ## 一、先摸物理参数(5 分钟)
8
+
9
+ ```sh
10
+ ffprobe -v error -show_entries format=duration:stream=codec_type,width,height,r_frame_rate,sample_rate -of default=nw=1 src.mp4
11
+ ```
12
+ X 的视频从 syndication 接口拿最高档(`video_info.variants` 里挑最高码率),不要录屏。原片 60fps 就按 60fps 拆,帧号是之后所有规格的公共语言(秒 = 帧/60)。
13
+
14
+ ## 二、全貌三张图(10 分钟)
15
+
16
+ 1. **接触表**:4fps × 480 宽,30 帧一张,标时间戳。看一眼知道有几段、每段是什么。
17
+ 2. **关键帧总览**:每段挑一张最干净的整帧拼成 4×5。后面所有工作的地图。
18
+ 3. **频谱图**:`ffmpeg -lavfi showspectrumpic=s=1600x400:legend=1`。一眼看出音乐是否按段换配器、有没有坠落滑音、碎裂瞬态、拍点。谐波干净、16kHz 一刀切 = 代码合成+AAC。
19
+
20
+ ## 三、量出转场与节奏(15 分钟)
21
+
22
+ **逐帧灰度差**:缩到 192×108 灰度,相邻帧平均绝对差。静止段 <2,转场段 10–37。阈值 5 + 去抖 12 帧,一次找全转场起点。存成 `diff.npy` 给所有 agent 共用。
23
+
24
+ 找到起点后**拟合网格**:起点间隔如果是常数的整数倍,就有 BPM 网格(本片:起点 = 84 + 14.06·n 帧,残差 < 0.45 帧,= 128 BPM 八分音符)。网格一旦确认,画面和音乐的所有时间都写成「第几个八分音符」。
25
+
26
+ **每个转场一张 60fps 接触表**:从起点前 2 帧开始,每 2 帧取一张,取 0.5 秒,15 格。机制只能从这里看出来——「8 条竖条依次落下回弹」「20px 方块绕竖轴翻转、从猫的位置向外扩散」这种描述,粗看 4fps 图只会写成「方块转场」。
27
+
28
+ **参考帧取「转场开始前最后一帧」**,不是你觉得好看的那一帧。取早了会把上一段转场的余波(碎石块)当成画面内容(埃及第一版踩到)。
29
+
30
+ ## 四、镜内运动:每段里到底什么在动(15 分钟)
31
+
32
+ 运动热图:每段静止区间内逐像素取最大帧差,红色叠在灰度底图上,标出「运动面积占比」。
33
+
34
+ 本片的结论推翻了第一印象:以为「每段就是一张画」,实际每段都有 2.5%–34% 的面积在动——岩画动物两张姿态交替奔跑、圣甲虫推太阳球、回纹带滚动、维苏威冒烟、金箔高光扫过、扑翼机飞过、四宫格换色……**没做这一步就开工,做出来就是「图片之间的转场」,会丢掉场景内部的连续运动。**
35
+
36
+ 热图告诉你「哪里动」,再到 60fps 帧里看「怎么动」(周期、幅度、是两帧交替还是连续)。
37
+
38
+ ## 五、分工给 agent 时的写法
39
+
40
+ - 分镜 agent 和音轨 agent 并行,各给一份完整说明:素材路径、已知事实(帧率、时长、粗看的段落表)、要的产物(分镜表.md / spec.json / 接触表目录 / 音轨拆解.md / 合成脚本)、方法要求(用数据证实,不凭想象)、回复格式(摘要+最不确定的 3 处)。
41
+ - 让它们**先修正你的清单**。本片我把「1993→2026 的光圈转场」认成了一个「孟菲斯时代」,分镜 agent 第一条就纠正了。
42
+ - 全模态模型「听」音轨只当候选:乐器判断可信,BPM(报 120,实为 128)、动机音数、「每段一记嗖声」都是错的,必须用起音检测回校。
43
+
44
+ ## 六、产物清单(拆完应该有)
45
+
46
+ | 产物 | 用途 |
47
+ |---|---|
48
+ | `分镜表.md` + `spec.json` | 每段起止帧、转场机制参数、镜内动作、计数器曲线、构图坐标 |
49
+ | `转场/T*.jpg`(60fps 接触表) | 写转场代码时逐帧对照 |
50
+ | `镜内运动/运动热图.jpg` | 每段动什么、动多大 |
51
+ | `结尾动作/`(如有角色表演) | 逐帧质心、轨迹、物理参数(重力 px/帧²) |
52
+ | `音轨拆解.md` + `synth.py`(模板:`scripts/audio/synth_艺术史速通.py`) | BPM 网格、每段八分音符数、动机、配器、音效序列 |
53
+ | `关键帧总览.jpg` + `生图/ref/*.png` | 构图地图、每段参考帧 |
54
+
55
+ 脚本:`scripts/analyze/`(接触表、灰度差、转场接触表、运动热图),命令见各脚本 docstring。
@@ -0,0 +1,41 @@
1
+ # 02 · 机制:「艺术史速通」为什么好看
2
+
3
+ 这一页是「速通/穿越」类片子的机制:同一个场景,换一路风格或年代(艺术史速通、一座城市的 100 年、一个人从十八岁到八十岁)。这类题材都能照这五层搭;解说片、故事片、单一风格的短片不照它搭,构图按题材设计。
4
+
5
+ ## 五层机制
6
+
7
+ **1. 一个固定的场景骨架。** 16 个时代,窗、桌、猫、人、年份牌的位置几乎不动(±40px)。观众的眼睛有锚点,才看得清「变的是风格」。也因为位置固定,转场可以用画内物体当原点(马赛克从猫的位置扩散、光圈从杯子展开)。
8
+ → 做法(速通/穿越类专用):先定这支片子的构图坐标,所有时代对齐到它。代码里是一份常量,不是每段各画各的。别的题材不沿用这间屋的坐标。
9
+
10
+ **2. 每个时代是一幅活的画。** 停留 0.25–1.4 秒,但画里一直在动:主角一个连续动作(端杯喝茶)+ 2–4 个**取自那个时代自己视觉母题**的小循环——岩画动物用「两张姿态交替」跑(这就是岩画多腿表示奔跑的动画化)、埃及圣甲虫推太阳、希腊回纹带滚动、罗马火山冒烟、哥特金箔高光、文艺复兴扑翼机、浮世绘巨浪、梵高星空旋转、包豪斯指针、波普四宫格换色。
11
+ → 做法:每段列「这个时代最有辨识度的 3 个形式元素」,让它们动起来。动作要在停留窗口里看得出来(短段节奏要快)。
12
+
13
+ **3. 转场 = 下一个时代的签名语言。** 进埃及是石块/挂毯落下、进希腊是陶瓶滚筒转面、进罗马是马赛克砖翻面、进哥特是羊皮纸翻页、进文艺复兴是神光、进浮世绘是神奈川巨浪横扫、进印象派是笔触色点铺满、进梵高是星空漩涡、进新艺术是金边有机形生长、进立体主义是几何碎片、进包豪斯是红黄蓝几何旋转放大、进波普是闪电+网点、进 8-bit 是像素化、进光追是绿色线框→逐行渲染、进 2026 是三色同心环光圈。
14
+ → 做法:转场不从转场库里挑通用的,从「新风格最有辨识度的形式元素」里长出来。每个转场第一帧加镜头冲击(场景层放大到 1.03,约 20 帧回到 1.0,年份牌不缩放)——拍点上的那一下顿挫感来自它。
15
+
16
+ **4. 节拍网格加速。** 128 BPM 不变,每段占的八分音符数递减:6 → 4×5 → 3×4 → 2×3 → 1×3 → 结尾放长到 9+。速度没变,听感和看感越来越急;最后一段放长给笑点留位置。转场时长跟着缩(0.4s → 0.13s),年份滚动也跟着缩(0.55s → 0.07s)。
17
+ → 做法:先列每段想要的时长,四舍五入到八分音符,再整体微调成规律的递减。所有剪点、音乐起音、音效都落在网格上。
18
+
19
+ **5. 一个连续的叙事锚+结尾角色梗。** 年份计数器是全片唯一连续的东西:数值只由全局时间决定,转场时新旧两层显示同一个滚动中的数字,各用各的字体(40,000 BC 的岩画手写 → 1350 BC 的芦苇笔 → … → 2026 的几何无衬线)。结尾给角色一个梗(猫三次拍杯把杯子推下桌,少女惊呼,签名写出),用预备、挤压拉伸、跟随、二次动作把它演足——前面 11 秒是「看」,这 4 秒是「笑」,笑点让人转发。
20
+
21
+ ## 补充(2026-10-04 迁移测试 A–D)
22
+
23
+ - **主角动作跨段连续**:叙事锚不只是计数器,主角的动作也要按全片时间走;每段重做一遍动作,观众看到的是「举杯五次」而不是「同一瞬间换了五种画风」。
24
+ - **计数器用年份时段落必须按年代排**;不能重排就把角标换成序号或风格名(引擎角标可插拔)。转场中点硬切新旧角标,避免叠字。
25
+ - **第一段没有转场可借时,让画「自己画出来」**(笔触写出、套色一版版落、像素一行行点亮)。
26
+ - **签名转场越复杂,时长越长**:原片形状简单所以 0.4s 够;金箔、色带、飘带这类要 0.48–0.5s。
27
+
28
+ ## 换题材时怎么用
29
+
30
+ | 层 | 本片 | 换成「一座城市的 100 年」可以是 |
31
+ |---|---|---|
32
+ | 骨架 | 窗/桌/猫/人 | 同一个街角:路灯、店招、行人、天际线 |
33
+ | 活的画 | 时代母题小循环 | 每个年代的交通工具驶过、招牌字体闪烁、天上的东西(风筝→飞机→无人机) |
34
+ | 转场 | 下一时代的签名语言 | 下一年代的媒介:胶片烧边、电视雪花、像素、扫描线 |
35
+ | 节拍 | 128 BPM 递减 | 同 |
36
+ | 锚+梗 | 年份计数器+猫拍杯 | 年份计数器+同一只鸽子每个年代都在偷吃东西 |
37
+
38
+ ## 不要学歪的地方
39
+
40
+ - 不要把「16 个时代」当配额。速通/穿越类的机制是「风格在变、骨架不变」,3 个时代也成立;它不是所有题材的机制。
41
+ - 不要逐像素复刻原片。复刻是学机制的手段,交付物是你理解后的版本(花叔选了金发少女+橘白猫,就是在原片骨架上换角色)。
@@ -0,0 +1,39 @@
1
+ # 03 · 一帧先行,再让它动:四条路线
2
+
3
+ 涉及生图或角色图片时,先按[图片能力指南](images.md)选择当前可用工具或导入现有素材;私人角色素材和平台选择不作为所有用户的默认。
4
+
5
+ 花叔要的方法:先设计一帧有艺术感的画面,再按要求让这帧动起来。2026-10-04 一个项目里四条路都实跑过,各有适用场景。
6
+
7
+ | 路线 | 画面谁画 | 动作谁做 | 实测 | 什么时候选 |
8
+ |---|---|---|---|---|
9
+ | **A 纯代码** | Canvas 程序化绘制+风格渲染器 | 代码(编舞曲线、IK、粒子、沸腾线) | 艺术史复刻主线(花叔选定) | 要证明「模型直接用代码产出艺术动画」;要精确控制每个元素的运动;要换几十种风格(换渲染器就换风格);要和口播逐帧对齐 |
10
+ | **B AI 分层素材+代码动** | 生图模型按图层画(绿幕、保留原画面坐标) | 代码(位移、弧线、挤压、物理、特效) | 2026 结尾段 11 张素材一次合成到位 | 画质要最高、角色要复杂表演;画风是写实/插画、代码画不出来时 |
11
+ | **C 视频模型首尾帧** | 生图模型画一帧 | Seedance 首尾帧(首尾同一张) | Lovart Seedance 2.0 梵高试片:少女放杯再端起、星空转、猫甩尾,构图全程守住 | 要「整幅画都在流动」的有机感,又不要精确控制;示例/氛围镜头 |
12
+ | **D 混合** | 背景用 B/C,角色用 A,或反过来 | 代码统一编排时间轴 | — | 大片:背景要质感、角色要可控 |
13
+
14
+ ## 共同的第一步:一帧设定稿
15
+
16
+ 不管走哪条路,先有一帧「对的画面」:
17
+ - **有参考片**:把参考片该段「转场开始前最后一帧」当参考图喂给 gpt-image,prompt 写「完全保持参考图的构图、镜头、每件物品的位置和大小、配色和笔触,只改两处:……」。实测与原片 50% 叠加几乎逐像素重合,构图锁定靠参考图,不靠文字写坐标。
18
+ - **没有参考片**:先按题材设计构图(主体是什么、在画面哪里、镜头往哪走),出白模截图当参考图。只有速通/穿越类片子才先定一份固定的场景骨架(标准构图坐标),所有段对齐到它。
19
+ - **三方向硬门**:角色诠释(本片:时代女装 / 同一人穿越 / 原装换头)在同一帧上出三张给人挑。选原片是男性角色的那一帧,差别最拉得开。
20
+
21
+ 设定稿的坑(都踩过):
22
+ - 写未成年角色(17 岁)+任何「短裙」字样会被审核判 sexual 整张拒绝。服装一律写长款,加「服装端庄」。
23
+ - 毛色写到部位:「橘白猫(头顶、背部和尾巴橘色虎斑,口鼻、胸口、肚子、四爪白色)」。只写「橘猫」会画成全身橘。
24
+ - 描述里写动作(「端杯喝茶」)会压过参考图的姿势。要保持原姿势就只写「保持参考图里的手势」。
25
+ - 要动的文字(年份、标题)让模型「去掉,留成干净背景」,交给代码画;画内装饰文字逐字写进 prompt。
26
+ - 批量生图串行跑;生成来源以实际工具调用记录、输入/输出关联和人工视觉核对为依据;PNG元数据不能证明是哪一个模型生成。素材接入见[图片能力指南](images.md)。
27
+
28
+ ## 路线 B 的关键:绿幕素材保留原画面坐标
29
+
30
+ 用设定帧当参考图,prompt:「只画参考图里的 XX……其余全部是纯平涂 #00FF00,没有阴影地面文字。位置、大小、朝向与参考图完全一致。」生成出来的角色已经站在原画面坐标上。抠图时**不要裁到主体边框就丢坐标**——`scripts/key_green.py` 裁边同时把左上角写进 sprites.json,合成时按原坐标贴回,一次对齐。
31
+
32
+ ## 路线 C 的关键:首尾同帧
33
+
34
+ Seedance 2.5/2.0 支持 frames2video。首帧和尾帧给同一张设定稿 → 画里的东西动起来又回到原构图,片段首尾能无缝接转场。prompt 结构:①镜头完全固定(不推拉摇变焦晃)②全程保持构图/画风/配色,不写实化、不增删物体、不出新文字 ③逐条列「画里什么动、怎么动」(来自拆解的运动清单)。生成 5 秒取最好的 1 秒左右、按节奏变速。
35
+ 通道:任何支持首尾帧(frames2video)的 Seedance 接入都行,要点在 prompt 本身;视频生成按次计费,先用短时长试一条。
36
+
37
+ ## 路线 A 的关键
38
+
39
+ 见 `04-纯代码绘制.md`。一句话(速通/穿越类):同一场景骨架 × 共享编舞 × 每个风格一个渲染器 × 角色单独一层后画 × 最后补线。其它题材把前两项换成按题材设计的构图和动作。
@@ -0,0 +1,92 @@
1
+ # 04 · 纯代码绘制:用 Canvas 把一幅有艺术感的画画出来并让它活
2
+
3
+ 本页以纯代码绘制为主线:场景和物件通过程序与风格渲染器实现;人、拟人角色和机器人不用代码画进成片,生成帧方案见10号,交付线见`角色精细度.md`。本页是第一次做完 16 种风格后的方法总结;每种风格的具体参数在 `风格配方/<id>.md`。
4
+
5
+ ## 一、工程骨架(`scripts/engine/`,复制一份就能开新片)
6
+
7
+ ```
8
+ index.html 加载顺序:lib/fonts → lib/util → lib/paint → lib/rig → eras → transitions → scenes/index → engine
9
+ eras.js 段落表:id、占几个八分音符(eighths)、转场{type,dur,delay,cx,cy}、年份牌样式
10
+ scenes/<id>.js 每段一个文件:SCENES['<id>'] = { draw(c, lt, t) } ← 主要工作量在这里
11
+ transitions.js 转场库:(c, A旧, B新, p, o) → 画一帧
12
+ engine.js 节拍网格→各段 t0/t1;转场时新旧两段各画进离屏再交给转场;拍点镜头冲击;年份计数器(值只由全局 t 决定)
13
+ lib/paint.js 噪声、纹理、手绘沸腾线、风格渲染器、区域色板 swatch、共享编舞 choreo、热气、粒子
14
+ lib/rig.js 角色骨架:RIG.girl / RIG.cat → 各部位 Path2D + 锚点;drawGirl/drawCat(mode: fill/line);ik2、smooth、taper
15
+ render.py 无头 Chromium 逐帧调 renderFrame(t) → PNG 管道 → ffmpeg 60fps,可混音轨;--solo <id> 单段预览、--stills 出静帧
16
+ compare.py 原片|复刻 同时刻并排拼图
17
+ ```
18
+
19
+ 渲染速度:15 秒 60fps 整片约 90 秒(M 系列 Mac)。单段每帧大多 5–40ms,最重的梵高 110ms。
20
+
21
+ ## 二、一个风格怎么画(五层,标杆 `scenes/09_postimp.js`)
22
+
23
+ > 五层是油画/版画类的默认顺序,不是万能的:**水墨**倒过来(纸是底,墨只往上加,大面积留白,不先铺满);**图案类**(草间、包豪斯)是「平涂上撒图案」,图案本身就是渲染器;**明暗法**是「先画亮版再乘光照图」。
24
+
25
+ 1. **平涂底稿**:大面积(墙、地、天、窗外)先用纯色/渐变画对位置和明暗。这一层决定构图,风格还没出来。
26
+ 2. **风格渲染器重画**:用底稿当取色源,按该风格的笔法整幅重画——梵高流场长笔触、印象派短点、马赛克石块、浮世绘套色错位+纹样、立体主义切面、波普网点、8-bit 低分辨率逐像素、光追逐像素反射……渲染器决定「这是谁的画」。
27
+ 3. **小物件单独一层**:桌椅、花瓶、画框这类小东西如果混在大面积里一起过渲染器,会被打碎成一团。单独画、单独用更细的参数,`source-atop` 只画在自身上。
28
+ 4. **角色**:速通/穿越类片子用同一副骨架(RIG)、同一套编舞,换画法(其余题材按题材设计角色)——平涂后叠该风格的细肌理,最后补清晰的轮廓和五官。角色是观众视线的落点,必须读得出是谁。
29
+ 5. **会动的高光**:时代母题的小循环(见 02 号)。连续运动用连续时间;手绘线条用 8–12fps 换种子「沸腾」,给手工感。
30
+
31
+ ## 三、风格渲染器速查(都在 `lib/paint.js` 或各 scene 里自写)
32
+
33
+ | 渲染器 | 适合 | 关键 |
34
+ |---|---|---|
35
+ | `strokes` 流场笔触 | 梵高、表现主义、油画 | 方向场按区域写(墙竖、地板沿透视、星空沿漩涡);**区域色板**比颜色抖动重要;每笔带深色描边才厚 |
36
+ | `dabs` 色点 | 印象派 | 冷暖偏移的椭圆短笔;**不是点彩**(没有纯色板、点不等大,画出来是印象派) |
37
+ | 视觉混色点彩(29_seurat) | 修拉、新印象派 | 纯色板按比例并置、点等大、补色点、明暗交界光渗 |
38
+ | 镶嵌(04_roman 自写) | 马赛克、彩色玻璃 | 布局只算一次、颜色每帧流过石块;石块沿轮廓排(距离场等值线);石块比半间距大 8–28% 让平分线切出缝 |
39
+ | 套色+纹样(07_ukiyoe) | 浮世绘、木刻、丝网 | 填色相对墨线错位 (3,2)px;纹样做 CanvasPattern;横向刷痕晕染 |
40
+ | `facets` 切面 | 立体主义、低多边形 | 半透明渐变面叠出空间;三角不裁剪让轮廓变直边 |
41
+ | `halftone` 网点 | 波普、旧印刷 | 小 tile `createPattern` 比逐点画快 10 倍;45° 网格 |
42
+ | 低分辨率逐像素(14_8bit) | 像素、复古游戏 | 240×135 画完最近邻放大;限 14 色板;每部件描 1px 黑边 |
43
+ | 逐像素着色(15_raytrace) | 早期 CGI、塑料、金属 | 统一塑料着色(底色+径向暗边+环境反光+硬高光);地面倒影镜像 |
44
+ | 金箔(05_gothic) | 泥金、圣像、装饰 | 逐像素打磨纹+压花暗线错 1px 亮线;高光只落在「金色度」遮罩上 |
45
+ | 晕涂(06_renaissance) | 古典油画 | 整层轻模糊+半透明清晰层;龟裂纹+画布纹+暗角+黄釉 |
46
+ | 可变线宽路径(10_nouveau) | 新艺术、书法线、版画 | 沿点列两侧按宽度偏移成多边形;剪影染深色错位垫底=外粗内细 |
47
+ | 颗粒点彩(16_2026) | 当代扁平插画 | 形状内撒点,密度是位置函数;静态全进缓存 |
48
+ | 毛笔飞白+墨晕(17_ink) | 水墨、书法、东方写意 | 笔锋起收、沿弧长等距采样做飞白;`filter='blur()'` 洇开(Chromium 下确定);纸是底、墨只往上加 |
49
+ | 长弯流线笔+按行 warp(19_munch) | 表现主义、流动感 | 沿流场走 20–30 步的长笔;整幅按行正弦位移(margin ≥ 最大位移防露缝) |
50
+ | 水彩洗染(25_ghibli) | 吉卜力背景、水彩 | 透明叠色+水痕边;水痕描边 α 随扩张淡出 |
51
+ | 灰度照片网点(22_constructivism) | 构成主义、旧报纸、照片拼贴 | 按亮度定点径、45° 网格、批成一条 path 一次 fill |
52
+ | 双版本光影裁切+剪切长影子(24_hopper、23_dali) | 霍珀、超现实、强光场景 | 亮版暗版各画一遍,按光块 clip;影子用剪切仿射 |
53
+ | VHS 通道分离后期(26_vaporwave) | 蒸汽波、复古视频 | RGB 错位、扫描线、跟踪噪声带,作为后期叠层 |
54
+ | 光照图整幅相乘(32_rembrandt) | 明暗法、夜景、烛光 | 先画亮版,再乘一张光照图(窗光+烛光径向) |
55
+ | 赛璐珞硬阴影带(35_shinkai) | 日本动画、新海诚 | 部件减去平移后的自己 = 硬阴影带;受光亮边 |
56
+ | 步进帧率 `stepTime(t,fps)`(33_rubberhose、34_shadowpuppet) | 老动画、皮影、定格 | 12fps/10fps 一顿一顿是风格的一半,不是卡顿 |
57
+
58
+ ## 四、角色:同一副骨架,十几种画法
59
+
60
+ - 骨架坐标别拍脑袋写:拿一张 AI 设定稿(或任何参考图)叠 20px 网格,逐部位读关键点,Catmull-Rom 平滑成 Path2D(`RIG.smooth`)。第一版手写坐标的少女像男孩,量点之后一轮就读得出 17 岁金发少女。
61
+ - 坐姿把腿藏进长裙最自然;端杯用两骨 IK(上臂 165 / 前臂 122),肘向固定朝下。
62
+ - 锚点 `G.A`(头顶、额、颈、胸、腰、膝、手…)给各风格加服饰:埃及宽领、哥特光环、浮世绘岛田髻、包豪斯关节盘、波普大波浪。
63
+ - 各风格可以对骨架做程式化变形(埃及侧脸正面眼、黑绘剪影、立体主义半边蓝脸、像素化),但站位、动作节奏要和骨架一致——这是「同一对角色在穿越」的来源。
64
+ - 结尾表演这种大幅度动作(跳、趴、伸爪、惊呼)不必硬塞进通用骨架:16_2026 自建姿势库(每个姿势一组局部关键点,逐数值插值),挤压拉伸以脚底为轴,压到最扁那一帧翻面。
65
+
66
+ ## 五、让画「活」:动作清单与量法
67
+
68
+ - 每段至少:主角一个连续动作(choreo.cup 端杯)+ 2–4 个母题小循环。短段(<0.5s)节奏要快到 15–30fps 步进。
69
+ - 自检运动量:渲两帧(**避开转场后 0.35s 的镜头冲击**,否则全屏都算在动)做帧差。第一次做下来的数(缩放结束后 0.45↔0.9s):洞穴 2.8%、埃及 3.4%、罗马 6.4%、希腊 9.9%;原片同段热图 6.9%、6.2%、17.3%、11.6%。偏静就加母题动作。
70
+ - 动的东西要在视线焦点上(速通示范里是人、猫、窗;新题材按你的构图定焦点)。
71
+
72
+ ## 六、踩过的坑
73
+
74
+ - **合成模式**:逐个纹样 `source-in` 会互相清空(克里姆特金袍整件消失)——先把纹样画满一张 scratch,再按剪影 source-in 一次;在段画布上 `destination-out` 会挖出透明洞,进视频是黑的——在离屏里挖好再贴;往角色上叠纸纹/颗粒不能用 `source-atop`(纸色盖上去人物发白)——纹理层 `destination-in` 剪影后 `multiply` 叠回。
75
+ - 自画字形:同一条 path 里两条反向绕行的笔画按 nonzero 规则会抵消出洞,每个部件单独 fill。
76
+ - 「融化」类转场:让新画面带圆头液滴从上往下流(剖面 `(1-u²)^0.3`),旧画往下拖出来的是尖刺,不像液滴。
77
+ - 转场时长按「看得见的部分」定:inOut 缓动两头几乎看不出变化,复杂的签名转场 0.34s 只读得到 0.2s,会被读成普通擦除,给到 0.48–0.5s。
78
+ - 皮影/剪纸这类半透明叠片,重叠处相乘会发黑,叠片顺序和透明度要按材料调。
79
+
80
+ - `putImageData` 直接写到目标 canvas 会绕过引擎的镜头冲击缩放和转场裁剪——先写进离屏再 `drawImage`。
81
+ - 读像素的离屏 context 用 `{willReadFrequently:true}`;每帧用 `g.reset()`,不然上一帧的 lineJoin/状态会残留,第一帧和之后不一致。
82
+ - `drawGirl(mode:'line')` 叠在最上层会把被遮住的部件轮廓画穿(远侧袖子穿过躯干、帽檐后半圈穿过头发)。用 `RIG.visibleLines(key, (g, lineColor) => 完整画一遍, 真线色, box)`:同一画法画两遍、线色换成白色当哨兵,两遍不同的像素就是没被遮住的线(含五官线)。按「填色→风格肌理→visibleLines 补线」走。
83
+ - **镜头冲击要作用在新旧两层**:只冲新层时,转场刚开始新层还没露出来,拍点那一帧画面不动,听感上「声音先到画面后到」(v1 审片量到拖拍 0.1–0.17s)。
84
+ - **整屏笔触按 8fps 换种子 = 闪,不是活**:审片量到整屏跳变帧差 18–20,比转场还大。笔触位置固定,让方向场随时间连续变化(火苗般摇曳),沸腾只留给线稿。
85
+ - 动态区不要单独换参数(石块尺寸、笔触密度)——静止时就是一块补丁。
86
+ - 马赛克/像素这类粗颗粒风格里,字要用等宽粗笔画(每笔 ≥2 个颗粒宽),细字体会断。
87
+ - 小东西做得比你觉得的大:浮世绘浪爪 22–50px 读不出来,44–74px 才是「神奈川冲浪里」。
88
+ - 确定性:所有随机用种子;同一个 t 渲两次必须逐像素一致,否则渲染时会闪。
89
+
90
+ ## 七、分工(多 agent 并行画)
91
+
92
+ 先写好 `时代作者规范.md`(接口、可用库、标杆、硬要求、参考文件、自检命令、交付 notes),再按 4 个时代一组派 agent。规范里写清「不改 lib/ 和别人的文件」。每组 30–35 分钟交回,notes 直接沉淀成 `风格配方/`。第一次 16 段全部一次通过,主要靠规范+标杆实现。
@@ -0,0 +1,19 @@
1
+ # 05 · 节奏与配乐
2
+
3
+ 拆解方法与可复用规律:`风格配方/_音轨_艺术史速通.md`(第 5 节「可复用规律」可以直接照抄);合成脚本模板(原创示例乐谱):`scripts/audio/synth_艺术史速通.py`。
4
+
5
+ ## 要点
6
+
7
+ 1. **先定 BPM 网格,画面和音乐都落在网格上。** 128 BPM、八分音符 0.234s 适合速通/蒙太奇。`eras.js` 的 `eighths` 就是每段占几个八分。
8
+ 2. **加速靠每段变短,不靠提速。** 6 → 4×5 → 3×4 → 2×3 → 1×3 → 结尾放长。
9
+ 3. **一个三音动机,每段换该风格的代表乐器、随和弦移调。** 和声一个四和弦循环就够。
10
+ 4. **段间硬起音,不交叉淡化,不加嗖声。**
11
+ 5. **结尾音效:停—悬—砸—反应—收**(叮 → 滑哨坠落 → 碎裂 → 猫叫 → 低音拨弦),时间点对齐画面事件帧。
12
+ 6. **响度**:对齐参考片的积分 LUFS 与真峰;逐段比相对差值。
13
+ 7. 全模态模型听音只当候选:乐器可信,BPM、动机音数、音效时间都要用起音检测回校。
14
+
15
+ ## 和画面的对位
16
+
17
+ - 转场起点 = 网格点;镜头冲击(场景层 1.03 → 1.0,20 帧)落在同一点,听感上的「咔」和视觉上的顿挫是同一下。
18
+ - 结尾表演的动作帧(拍杯 3、杯子落地)对齐音频 onset,误差 3 帧以内。
19
+ - 没有参考片时:先写段落表(每段多少八分),再同时生成画面时间轴和配乐;之后改节奏只改 `eighths` 一处。
@@ -0,0 +1,31 @@
1
+ # 06 · 口播驱动的艺术短片(方法草案,待第一支实片验证)
2
+
3
+ 目标:根据口播表达,使用选定的时代或艺术家画风,制作镜头与画面连贯的动画。最新整片方法见`12-口播整片与经验回流.md`。
4
+
5
+ > ⚠️ 本页是从艺术史速通的引擎推出来的方案,**还没在真实口播上跑过**。第一支做完把这行删掉,把实测写回来。
6
+
7
+ ## 和速通片的区别
8
+
9
+ | | 速通片 | 口播短片 |
10
+ |---|---|---|
11
+ | 时间轴 | BPM 网格 | 口播词级时间戳(来自你的转录工具,如 Whisper 一类的词级时间戳) |
12
+ | 风格 | 每段换风格 | **一个风格贯穿**(一位艺术家/一个时代) |
13
+ | 镜头 | 固定机位 | 要有镜头语言:推拉、摇移、切景别、跟随 |
14
+ | 叙事 | 骨架不变、风格变 | 风格不变、内容随口播变 |
15
+
16
+ ## 流程
17
+
18
+ 1. **口播 → 镜头表**:按句切,每句定「这句话画面上是什么」(具象物/隐喻/人物动作/文字),标镜头类型(全景/近景/特写/推/摇)和时长(来自词级时间戳)。先给花叔看 5–10 行镜头表再动手。
19
+ 2. **定风格=定渲染器+色板+线条**:从 `风格配方/` 选最接近的一张卡做起点;没有的风格按 04 号第三节新写一个渲染器。先出一帧(三方向硬门:同一句口播的同一帧,三种风格诠释给花叔挑)。
20
+ 3. **世界而不是画面**:口播片要切镜头,所以把场景建成一个比画面大的「世界画布」(如 5760×3240),各元素有世界坐标;镜头 = 视口(中心、缩放、旋转)。渲染器作用在视口画出来的那一帧上,笔触大小按屏幕像素定,推镜头时笔触不会变粗——这是「画在动」而不是「图片在放大」的关键。
21
+ 4. **镜头间的流动**:
22
+ - 同场景内:视口插值(推拉摇),配缓入缓出。
23
+ - 换场景:用该风格自己的语言做转场(梵高就是笔触漩涡卷走、浮世绘就是浪、水墨就是晕开)——02 号第 3 层机制。
24
+ - 匹配剪辑:上一镜的形状对下一镜的形状(杯口 → 月亮)。
25
+ 5. **字与口播**:关键词可以用该风格的字体/笔法写进画里(马赛克字、书法、霓虹),不做通用字幕条;字幕交给剪辑工程另轨。
26
+ 6. **音乐**:05 号的网格法照用,只是网格让位于口播节奏(句间留白处放转场与音乐重音)。
27
+ 7. **验收**:和口播并排看,每句话画面是否在讲同一件事;每镜是否在动;风格是否一眼可辨。
28
+
29
+ ## 与视频管线的分工
30
+
31
+ 口播的转录、时间轴、混音、交付走你的视频管线;本 skill 只负责「艺术动画画面」这一轨,产出一条无声 MP4 或 ProRes,给剪辑工程当画面轨。