@biunow/agent-biuvibe 0.0.0-stage → 1.0.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 (784) hide show
  1. package/bin/server.js +340 -0
  2. package/data/columns.json +230 -0
  3. package/engine/.claude/skills/weilanx-creator-blackgold-video/SKILL.md +116 -0
  4. package/engine/.claude/skills/weilanx-creator-blackgold-video/references//345/215/241/347/202/271/344/270/216/351/237/263/346/225/210.md +56 -0
  5. package/engine/.claude/skills/weilanx-creator-blackgold-video/references//345/260/201/351/235/242/344/270/216/345/217/221/345/270/203.md +68 -0
  6. package/engine/.claude/skills/weilanx-creator-blackgold-video/references//347/224/273/351/235/242/344/270/216/351/225/234/345/244/264.md +56 -0
  7. package/engine/.claude/skills/weilanx-creator-blackgold-video/references//351/200/211/351/242/230/344/270/216/350/204/232/346/234/254.md +59 -0
  8. package/engine/.claude/skills/weilanx-creator-blackgold-video/scripts/qa.mjs +98 -0
  9. package/engine/.claude/skills/weilanx-creator-blackgold-video/scripts/subtitles.mjs +53 -0
  10. package/engine/.claude/skills/weilanx-creator-desk-video/SKILL.md +124 -0
  11. package/engine/.claude/skills/weilanx-creator-desk-video/references//345/267/245/347/250/213/346/250/241/346/235/277.md +278 -0
  12. package/engine/.claude/skills/weilanx-creator-desk-video/references//347/224/273/351/235/242/351/205/215/346/226/271.md +94 -0
  13. package/engine/.claude/skills/weilanx-creator-distill-video/SKILL.md +98 -0
  14. package/engine/.claude/skills/weilanx-creator-distill-video/references//346/213/206/350/247/243/346/226/271/346/263/225.md +42 -0
  15. package/engine/.claude/skills/weilanx-creator-distill-video/references//351/205/215/346/226/271/345/215/241/346/250/241/346/235/277.md +66 -0
  16. package/engine/.claude/skills/weilanx-creator-distill-video/scripts/analyze.py +211 -0
  17. package/engine/.claude/skills/weilanx-creator-distill-video/scripts/strip.py +52 -0
  18. package/engine/.claude/skills/weilanx-creator-fps-video/SKILL.md +155 -0
  19. package/engine/.claude/skills/weilanx-creator-fps-video/references//345/215/241/347/202/271/344/270/216/351/237/263/346/225/210.md +82 -0
  20. package/engine/.claude/skills/weilanx-creator-fps-video/references//345/260/201/351/235/242/344/270/216/345/217/221/345/270/203.md +89 -0
  21. package/engine/.claude/skills/weilanx-creator-fps-video/references//346/225/260/346/215/256/345/244/215/347/233/230.md +36 -0
  22. package/engine/.claude/skills/weilanx-creator-fps-video/references//347/224/273/351/235/242/344/270/216/351/225/234/345/244/264.md +60 -0
  23. package/engine/.claude/skills/weilanx-creator-fps-video/references//351/200/211/351/242/230/344/270/216/345/217/231/344/272/213.md +61 -0
  24. package/engine/.claude/skills/weilanx-creator-fps-video/scripts/qa.mjs +94 -0
  25. package/engine/.claude/skills/weilanx-creator-fps-video/scripts/stats.py +57 -0
  26. package/engine/.claude/skills/weilanx-creator-fps-video/scripts/subtitle-doc.mjs +37 -0
  27. package/engine/.claude/skills/weilanx-creator-gilded-video/SKILL.md +102 -0
  28. package/engine/.claude/skills/weilanx-creator-gilded-video/references//345/217/231/344/272/213/344/270/216/345/255/227/345/271/225.md +64 -0
  29. package/engine/.claude/skills/weilanx-creator-gilded-video/references//347/224/273/351/235/242/344/270/216/350/275/254/345/234/272.md +80 -0
  30. package/engine/.claude/skills/weilanx-creator-gilded-video/references//351/205/215/344/271/220/344/270/216/345/215/241/347/202/271.md +56 -0
  31. package/engine/.claude/skills/weilanx-creator-gilded-video/scripts/beats.py +99 -0
  32. package/engine/.claude/skills/weilanx-creator-lamplight-video/SKILL.md +124 -0
  33. package/engine/.claude/skills/weilanx-creator-lamplight-video/references//345/217/231/344/272/213/344/270/216/345/215/241/347/202/271.md +90 -0
  34. package/engine/.claude/skills/weilanx-creator-lamplight-video/references//345/260/201/351/235/242/344/270/216/345/217/221/345/270/203.md +67 -0
  35. package/engine/.claude/skills/weilanx-creator-lamplight-video/references//347/224/273/351/235/242/344/270/216/351/225/234/345/244/264.md +57 -0
  36. package/engine/.claude/skills/weilanx-creator-lamplight-video/references//351/200/211/351/242/230/344/270/216/345/217/262/346/226/231.md +76 -0
  37. package/engine/.claude/skills/weilanx-creator-lamplight-video/scripts/beat_accents.py +45 -0
  38. package/engine/.claude/skills/weilanx-creator-lamplight-video/scripts/shot_frames.py +17 -0
  39. package/engine/.claude/skills/weilanx-creator-lamplight-video/scripts/subtitle_doc.py +29 -0
  40. package/engine/.claude/skills/weilanx-creator-lamplight-video/scripts/timeline_lib.py +57 -0
  41. package/engine/.claude/skills/weilanx-creator-pixel-video/SKILL.md +132 -0
  42. package/engine/.claude/skills/weilanx-creator-vox-video/SKILL.md +124 -0
  43. package/engine/.claude/skills/weilanx-creator-vox-video/references//347/224/273/351/235/242.md +63 -0
  44. package/engine/.claude/skills/weilanx-creator-vox-video/references//347/264/240/346/235/220.md +35 -0
  45. package/engine/.claude/skills/weilanx-creator-vox-video/references//350/257/255/346/260/224/344/270/216/345/206/231/347/250/277.md +43 -0
  46. package/engine/.claude/skills/weilanx-creator-vox-video/references//351/205/215/344/271/220.md +37 -0
  47. package/engine/.claude/skills/weilanx-creator-vox-video/scripts/commons.py +67 -0
  48. package/engine/.claude/skills/weilanx-creator-vox-video/scripts/tts_expressive.py +71 -0
  49. package/engine/.claude/skills/weilanx-creator-vox-video/scripts/voice_stats.py +54 -0
  50. package/engine/AGENTS.md +118 -0
  51. package/engine/CLAUDE.md +1 -0
  52. package/engine/LICENSE +21 -0
  53. package/engine/README.md +282 -0
  54. package/engine/README.zh-CN.md +282 -0
  55. package/engine/audio/bgm.mjs +191 -0
  56. package/engine/audio/episodes/ep00-demo.mjs +10 -0
  57. package/engine/audio/episodes/ep01-agent.mjs +22 -0
  58. package/engine/audio/episodes/ep02-llm.mjs +20 -0
  59. package/engine/audio/episodes/ep03-cc.mjs +19 -0
  60. package/engine/audio/episodes/ep04-opus55.mjs +15 -0
  61. package/engine/audio/episodes/ep05-token.mjs +18 -0
  62. package/engine/audio/episodes/ep06-context.mjs +16 -0
  63. package/engine/audio/episodes/ep07-agent.mjs +16 -0
  64. package/engine/audio/episodes/ep08-hallucination.mjs +15 -0
  65. package/engine/audio/episodes/ep09-prompt.mjs +16 -0
  66. package/engine/audio/episodes/ep10-multimodal.mjs +16 -0
  67. package/engine/audio/episodes/ep11-mcp.mjs +17 -0
  68. package/engine/audio/episodes/ep12-skill.mjs +16 -0
  69. package/engine/audio/episodes/ep13-subagent.mjs +17 -0
  70. package/engine/audio/episodes/ep14-agent-permission.mjs +16 -0
  71. package/engine/audio/episodes/ep15-prompt-injection.mjs +17 -0
  72. package/engine/audio/episodes/ep16-agent-done.mjs +16 -0
  73. package/engine/audio/episodes/ep17-sycophancy.mjs +16 -0
  74. package/engine/audio/episodes/ep18-ai-history.mjs +323 -0
  75. package/engine/audio/episodes/ep19-apple-history.mjs +311 -0
  76. package/engine/audio/episodes/ep20-nvidia-history.mjs +276 -0
  77. package/engine/audio/episodes/ep21-nobel-physics.mjs +151 -0
  78. package/engine/audio/episodes/ep22-nobel-chemistry.mjs +143 -0
  79. package/engine/audio/episodes/ep23-wheat-chessboard.mjs +23 -0
  80. package/engine/audio/episodes/ep24-birthday-paradox.mjs +25 -0
  81. package/engine/audio/episodes/ep25-behind-cover.mjs +11 -0
  82. package/engine/audio/episodes/ep26-opus-video.mjs +14 -0
  83. package/engine/audio/episodes/ep27-opus-video-full.mjs +17 -0
  84. package/engine/audio/episodes/ep28-express-relay.mjs +16 -0
  85. package/engine/audio/episodes/ep29-footsteps.mjs +14 -0
  86. package/engine/audio/episodes/ep30-tang-divorce.mjs +16 -0
  87. package/engine/audio/episodes/ep31-rigged.mjs +11 -0
  88. package/engine/audio/episodes/ep32-love-lasts.mjs +36 -0
  89. package/engine/audio/episodes/ep33-teammates.mjs +11 -0
  90. package/engine/audio/episodes/ep34-song-takeout.mjs +16 -0
  91. package/engine/audio/episodes/ep35-choke.mjs +11 -0
  92. package/engine/audio/episodes/ep36-boxed-pigs.mjs +43 -0
  93. package/engine/audio/episodes/ep37-bhop.mjs +11 -0
  94. package/engine/audio/episodes/ep38-butterfly.mjs +43 -0
  95. package/engine/audio/episodes/ep39-latency.mjs +11 -0
  96. package/engine/audio/episodes/ep40-counter-strafe.mjs +11 -0
  97. package/engine/audio/episodes/ep41-flying-money.mjs +16 -0
  98. package/engine/audio/episodes/ep42-tap-fire.mjs +11 -0
  99. package/engine/audio/episodes/ep43-one-more-game.mjs +11 -0
  100. package/engine/audio/episodes/ep45-callouts.mjs +11 -0
  101. package/engine/audio/episodes/ep46-song-ice.mjs +16 -0
  102. package/engine/audio/episodes/ep47-spotlight.mjs +11 -0
  103. package/engine/audio/episodes/ep48-jiggle-peek.mjs +11 -0
  104. package/engine/audio/episodes/ep49-ad-strafe.mjs +11 -0
  105. package/engine/audio/episodes/ep50-late-night.mjs +11 -0
  106. package/engine/audio/episodes/ep51-practice.mjs +11 -0
  107. package/engine/audio/episodes/library-halftone.mjs +32 -0
  108. package/engine/audio/music.mjs +45 -0
  109. package/engine/audio/score.mjs +209 -0
  110. package/engine/audio/sfx-lamplight.mjs +54 -0
  111. package/engine/audio/sfx-tactical.mjs +76 -0
  112. package/engine/audio/synth.mjs +510 -0
  113. package/engine/package-lock.json +5177 -0
  114. package/engine/package.json +26 -0
  115. package/engine/public/fonts/LICENSES.md +12 -0
  116. package/engine/public/fonts/ZCOOLKuaiLe-Regular.ttf +0 -0
  117. package/engine/public/fonts/vox/Anton-400.woff +0 -0
  118. package/engine/public/fonts/vox/Caveat-600.woff +0 -0
  119. package/engine/public/fonts/vox/EBGaramond-400.woff +0 -0
  120. package/engine/public/fonts/vox/EBGaramond-600.woff +0 -0
  121. package/engine/public/fonts/vox/LICENSES.md +10 -0
  122. package/engine/public/fonts/vox/NotoSansSC-900.woff +0 -0
  123. package/engine/public/fonts/vox/OFL.txt +94 -0
  124. package/engine/public/fonts/vox/PlayfairDisplay-700.woff +0 -0
  125. package/engine/public/fonts/vox/PlayfairDisplay-700i.woff +0 -0
  126. package/engine/public/music/README.md +16 -0
  127. package/engine/remotion.config.ts +5 -0
  128. package/engine/scripts/ep-dir.sh +49 -0
  129. package/engine/scripts/export.sh +28 -0
  130. package/engine/scripts/mix-stems.sh +17 -0
  131. package/engine/scripts/srt2json.mjs +29 -0
  132. package/engine/src/Root.tsx +244 -0
  133. package/engine/src/episodes/ep00-demo/Ep00Demo.tsx +97 -0
  134. package/engine/src/episodes/ep00-demo/components/AdjustPanel.tsx +68 -0
  135. package/engine/src/episodes/ep00-demo/components/Buddy.tsx +58 -0
  136. package/engine/src/episodes/ep00-demo/components/EditorUI.tsx +39 -0
  137. package/engine/src/episodes/ep00-demo/components/Icons.tsx +50 -0
  138. package/engine/src/episodes/ep00-demo/components/MediaPanel.tsx +129 -0
  139. package/engine/src/episodes/ep00-demo/components/Outro.tsx +123 -0
  140. package/engine/src/episodes/ep00-demo/components/Phone.tsx +88 -0
  141. package/engine/src/episodes/ep00-demo/components/SceneArt.tsx +196 -0
  142. package/engine/src/episodes/ep00-demo/components/Timeline.tsx +206 -0
  143. package/engine/src/episodes/ep00-demo/lib/buddy.ts +147 -0
  144. package/engine/src/episodes/ep00-demo/lib/camera.ts +55 -0
  145. package/engine/src/episodes/ep00-demo/lib/state.ts +231 -0
  146. package/engine/src/episodes/ep00-demo/lib/timeline.ts +98 -0
  147. package/engine/src/episodes/ep01-agent/Ep01Agent.tsx +16 -0
  148. package/engine/src/episodes/ep01-agent/cues.json +530 -0
  149. package/engine/src/episodes/ep01-agent/cues.ts +8 -0
  150. package/engine/src/episodes/ep01-agent/scenes/finale.tsx +174 -0
  151. package/engine/src/episodes/ep01-agent/scenes/index.ts +28 -0
  152. package/engine/src/episodes/ep01-agent/scenes/intro.tsx +235 -0
  153. package/engine/src/episodes/ep01-agent/scenes/loop.tsx +284 -0
  154. package/engine/src/episodes/ep01-agent/scenes/safety.tsx +249 -0
  155. package/engine/src/episodes/ep01-agent/scenes/setup.tsx +250 -0
  156. package/engine/src/episodes/ep02-llm/Ep02Llm.tsx +17 -0
  157. package/engine/src/episodes/ep02-llm/cues.json +254 -0
  158. package/engine/src/episodes/ep02-llm/cues.ts +5 -0
  159. package/engine/src/episodes/ep02-llm/scenes/index.ts +21 -0
  160. package/engine/src/episodes/ep02-llm/scenes/part1.tsx +444 -0
  161. package/engine/src/episodes/ep02-llm/scenes/part2.tsx +303 -0
  162. package/engine/src/episodes/ep03-cc/Ep03Cc.tsx +30 -0
  163. package/engine/src/episodes/ep03-cc/cues.json +692 -0
  164. package/engine/src/episodes/ep03-cc/cues.ts +5 -0
  165. package/engine/src/episodes/ep03-cc/scenes/aroll.tsx +265 -0
  166. package/engine/src/episodes/ep03-cc/scenes/broll1.tsx +343 -0
  167. package/engine/src/episodes/ep03-cc/scenes/broll2.tsx +571 -0
  168. package/engine/src/episodes/ep03-cc/scenes/index.ts +30 -0
  169. package/engine/src/episodes/ep04-opus55/Ep04Opus55.tsx +30 -0
  170. package/engine/src/episodes/ep04-opus55/cues.json +368 -0
  171. package/engine/src/episodes/ep04-opus55/cues.ts +5 -0
  172. package/engine/src/episodes/ep04-opus55/scenes/index.ts +25 -0
  173. package/engine/src/episodes/ep04-opus55/scenes/part1.tsx +487 -0
  174. package/engine/src/episodes/ep04-opus55/scenes/part2.tsx +282 -0
  175. package/engine/src/episodes/ep05-token/Ep05Token.tsx +32 -0
  176. package/engine/src/episodes/ep05-token/cues.json +314 -0
  177. package/engine/src/episodes/ep05-token/cues.ts +5 -0
  178. package/engine/src/episodes/ep05-token/scenes/index.ts +22 -0
  179. package/engine/src/episodes/ep05-token/scenes/part1.tsx +355 -0
  180. package/engine/src/episodes/ep05-token/scenes/part2.tsx +385 -0
  181. package/engine/src/episodes/ep06-context/Ep06Context.tsx +32 -0
  182. package/engine/src/episodes/ep06-context/Ep06ContextTall.tsx +35 -0
  183. package/engine/src/episodes/ep06-context/cues.json +332 -0
  184. package/engine/src/episodes/ep06-context/cues.ts +5 -0
  185. package/engine/src/episodes/ep06-context/scenes/index.ts +20 -0
  186. package/engine/src/episodes/ep06-context/scenes/part1.tsx +360 -0
  187. package/engine/src/episodes/ep06-context/scenes/part2.tsx +256 -0
  188. package/engine/src/episodes/ep06-context/tall/Cover.tsx +69 -0
  189. package/engine/src/episodes/ep06-context/tall/index.ts +20 -0
  190. package/engine/src/episodes/ep06-context/tall/part1.tsx +374 -0
  191. package/engine/src/episodes/ep06-context/tall/part2.tsx +272 -0
  192. package/engine/src/episodes/ep07-agent/Ep07Agent.tsx +32 -0
  193. package/engine/src/episodes/ep07-agent/Ep07AgentTall.tsx +35 -0
  194. package/engine/src/episodes/ep07-agent/cues.json +302 -0
  195. package/engine/src/episodes/ep07-agent/cues.ts +5 -0
  196. package/engine/src/episodes/ep07-agent/scenes/index.ts +18 -0
  197. package/engine/src/episodes/ep07-agent/scenes/part1.tsx +307 -0
  198. package/engine/src/episodes/ep07-agent/scenes/part2.tsx +188 -0
  199. package/engine/src/episodes/ep07-agent/tall/Cover.tsx +59 -0
  200. package/engine/src/episodes/ep07-agent/tall/index.ts +18 -0
  201. package/engine/src/episodes/ep07-agent/tall/part1.tsx +306 -0
  202. package/engine/src/episodes/ep07-agent/tall/part2.tsx +187 -0
  203. package/engine/src/episodes/ep08-hallucination/Ep08Hallucination.tsx +32 -0
  204. package/engine/src/episodes/ep08-hallucination/Ep08HallucinationTall.tsx +35 -0
  205. package/engine/src/episodes/ep08-hallucination/cues.json +314 -0
  206. package/engine/src/episodes/ep08-hallucination/cues.ts +5 -0
  207. package/engine/src/episodes/ep08-hallucination/scenes/index.ts +19 -0
  208. package/engine/src/episodes/ep08-hallucination/scenes/part1.tsx +282 -0
  209. package/engine/src/episodes/ep08-hallucination/scenes/part2.tsx +246 -0
  210. package/engine/src/episodes/ep08-hallucination/tall/Cover.tsx +63 -0
  211. package/engine/src/episodes/ep08-hallucination/tall/index.ts +19 -0
  212. package/engine/src/episodes/ep08-hallucination/tall/part1.tsx +273 -0
  213. package/engine/src/episodes/ep08-hallucination/tall/part2.tsx +247 -0
  214. package/engine/src/episodes/ep09-prompt/Ep09Prompt.tsx +35 -0
  215. package/engine/src/episodes/ep09-prompt/cues.json +308 -0
  216. package/engine/src/episodes/ep09-prompt/cues.ts +5 -0
  217. package/engine/src/episodes/ep09-prompt/scenes/Cover.tsx +65 -0
  218. package/engine/src/episodes/ep09-prompt/scenes/index.ts +21 -0
  219. package/engine/src/episodes/ep09-prompt/scenes/part1.tsx +315 -0
  220. package/engine/src/episodes/ep09-prompt/scenes/part2.tsx +320 -0
  221. package/engine/src/episodes/ep10-multimodal/Ep10Multimodal.tsx +35 -0
  222. package/engine/src/episodes/ep10-multimodal/cues.json +308 -0
  223. package/engine/src/episodes/ep10-multimodal/cues.ts +5 -0
  224. package/engine/src/episodes/ep10-multimodal/scenes/Cover.tsx +53 -0
  225. package/engine/src/episodes/ep10-multimodal/scenes/index.ts +21 -0
  226. package/engine/src/episodes/ep10-multimodal/scenes/part1.tsx +343 -0
  227. package/engine/src/episodes/ep10-multimodal/scenes/part2.tsx +437 -0
  228. package/engine/src/episodes/ep11-mcp/Ep11Mcp.tsx +35 -0
  229. package/engine/src/episodes/ep11-mcp/cues.json +332 -0
  230. package/engine/src/episodes/ep11-mcp/cues.ts +5 -0
  231. package/engine/src/episodes/ep11-mcp/scenes/Cover.tsx +67 -0
  232. package/engine/src/episodes/ep11-mcp/scenes/index.ts +21 -0
  233. package/engine/src/episodes/ep11-mcp/scenes/part1.tsx +336 -0
  234. package/engine/src/episodes/ep11-mcp/scenes/part2.tsx +327 -0
  235. package/engine/src/episodes/ep12-skill/Ep12Skill.tsx +35 -0
  236. package/engine/src/episodes/ep12-skill/cues.json +332 -0
  237. package/engine/src/episodes/ep12-skill/cues.ts +5 -0
  238. package/engine/src/episodes/ep12-skill/scenes/Cover.tsx +55 -0
  239. package/engine/src/episodes/ep12-skill/scenes/index.ts +21 -0
  240. package/engine/src/episodes/ep12-skill/scenes/part1.tsx +368 -0
  241. package/engine/src/episodes/ep12-skill/scenes/part2.tsx +274 -0
  242. package/engine/src/episodes/ep13-subagent/Ep13Subagent.tsx +35 -0
  243. package/engine/src/episodes/ep13-subagent/cues.json +344 -0
  244. package/engine/src/episodes/ep13-subagent/cues.ts +5 -0
  245. package/engine/src/episodes/ep13-subagent/scenes/Cover.tsx +61 -0
  246. package/engine/src/episodes/ep13-subagent/scenes/index.ts +21 -0
  247. package/engine/src/episodes/ep13-subagent/scenes/part1.tsx +383 -0
  248. package/engine/src/episodes/ep13-subagent/scenes/part2.tsx +317 -0
  249. package/engine/src/episodes/ep14-agent-permission/Ep14AgentPermission.tsx +35 -0
  250. package/engine/src/episodes/ep14-agent-permission/cues.json +326 -0
  251. package/engine/src/episodes/ep14-agent-permission/cues.ts +5 -0
  252. package/engine/src/episodes/ep14-agent-permission/scenes/Cover.tsx +62 -0
  253. package/engine/src/episodes/ep14-agent-permission/scenes/index.ts +20 -0
  254. package/engine/src/episodes/ep14-agent-permission/scenes/part1.tsx +302 -0
  255. package/engine/src/episodes/ep14-agent-permission/scenes/part2.tsx +309 -0
  256. package/engine/src/episodes/ep15-prompt-injection/Ep15PromptInjection.tsx +35 -0
  257. package/engine/src/episodes/ep15-prompt-injection/cues.json +302 -0
  258. package/engine/src/episodes/ep15-prompt-injection/cues.ts +5 -0
  259. package/engine/src/episodes/ep15-prompt-injection/scenes/Cover.tsx +60 -0
  260. package/engine/src/episodes/ep15-prompt-injection/scenes/index.ts +20 -0
  261. package/engine/src/episodes/ep15-prompt-injection/scenes/part1.tsx +307 -0
  262. package/engine/src/episodes/ep15-prompt-injection/scenes/part2.tsx +253 -0
  263. package/engine/src/episodes/ep16-agent-done/Ep16AgentDone.tsx +35 -0
  264. package/engine/src/episodes/ep16-agent-done/cues.json +320 -0
  265. package/engine/src/episodes/ep16-agent-done/cues.ts +5 -0
  266. package/engine/src/episodes/ep16-agent-done/scenes/Cover.tsx +66 -0
  267. package/engine/src/episodes/ep16-agent-done/scenes/index.ts +19 -0
  268. package/engine/src/episodes/ep16-agent-done/scenes/part1.tsx +271 -0
  269. package/engine/src/episodes/ep16-agent-done/scenes/part2.tsx +253 -0
  270. package/engine/src/episodes/ep17-sycophancy/Ep17Sycophancy.tsx +35 -0
  271. package/engine/src/episodes/ep17-sycophancy/cues.json +320 -0
  272. package/engine/src/episodes/ep17-sycophancy/cues.ts +5 -0
  273. package/engine/src/episodes/ep17-sycophancy/scenes/Cover.tsx +60 -0
  274. package/engine/src/episodes/ep17-sycophancy/scenes/index.ts +19 -0
  275. package/engine/src/episodes/ep17-sycophancy/scenes/part1.tsx +236 -0
  276. package/engine/src/episodes/ep17-sycophancy/scenes/part2.tsx +250 -0
  277. package/engine/src/episodes/ep18-ai-history/Cover.tsx +60 -0
  278. package/engine/src/episodes/ep18-ai-history/CoverTall.tsx +29 -0
  279. package/engine/src/episodes/ep18-ai-history/Ep18AiHistory.tsx +27 -0
  280. package/engine/src/episodes/ep18-ai-history/art.tsx +141 -0
  281. package/engine/src/episodes/ep18-ai-history/cues.json +626 -0
  282. package/engine/src/episodes/ep18-ai-history/cues.ts +5 -0
  283. package/engine/src/episodes/ep18-ai-history/film.tsx +910 -0
  284. package/engine/src/episodes/ep18-ai-history/scrapbook.tsx +762 -0
  285. package/engine/src/episodes/ep18-ai-history/timeline.ts +63 -0
  286. package/engine/src/episodes/ep19-apple-history/Cover.tsx +45 -0
  287. package/engine/src/episodes/ep19-apple-history/CoverTall.tsx +29 -0
  288. package/engine/src/episodes/ep19-apple-history/Ep19AppleHistory.tsx +27 -0
  289. package/engine/src/episodes/ep19-apple-history/art.tsx +302 -0
  290. package/engine/src/episodes/ep19-apple-history/cues.json +470 -0
  291. package/engine/src/episodes/ep19-apple-history/cues.ts +5 -0
  292. package/engine/src/episodes/ep19-apple-history/film.tsx +1245 -0
  293. package/engine/src/episodes/ep19-apple-history/timeline.ts +82 -0
  294. package/engine/src/episodes/ep20-nvidia-history/Cover.tsx +46 -0
  295. package/engine/src/episodes/ep20-nvidia-history/CoverTall.tsx +30 -0
  296. package/engine/src/episodes/ep20-nvidia-history/Ep20NvidiaHistory.tsx +27 -0
  297. package/engine/src/episodes/ep20-nvidia-history/art.tsx +244 -0
  298. package/engine/src/episodes/ep20-nvidia-history/cues.json +482 -0
  299. package/engine/src/episodes/ep20-nvidia-history/cues.ts +5 -0
  300. package/engine/src/episodes/ep20-nvidia-history/film.tsx +1088 -0
  301. package/engine/src/episodes/ep20-nvidia-history/timeline.ts +78 -0
  302. package/engine/src/episodes/ep21-nobel-physics/Cover.tsx +75 -0
  303. package/engine/src/episodes/ep21-nobel-physics/Ep21NobelPhysics.tsx +27 -0
  304. package/engine/src/episodes/ep21-nobel-physics/cues.json +218 -0
  305. package/engine/src/episodes/ep21-nobel-physics/cues.ts +5 -0
  306. package/engine/src/episodes/ep21-nobel-physics/film.tsx +627 -0
  307. package/engine/src/episodes/ep22-nobel-chemistry/Cover.tsx +64 -0
  308. package/engine/src/episodes/ep22-nobel-chemistry/Ep22NobelChemistry.tsx +27 -0
  309. package/engine/src/episodes/ep22-nobel-chemistry/cues.json +212 -0
  310. package/engine/src/episodes/ep22-nobel-chemistry/cues.ts +5 -0
  311. package/engine/src/episodes/ep22-nobel-chemistry/film.tsx +563 -0
  312. package/engine/src/episodes/ep23-wheat-chessboard/Ep23Wheat.tsx +322 -0
  313. package/engine/src/episodes/ep23-wheat-chessboard/timeline.ts +89 -0
  314. package/engine/src/episodes/ep24-birthday-paradox/Cover.tsx +53 -0
  315. package/engine/src/episodes/ep24-birthday-paradox/Ep24Birthday.tsx +233 -0
  316. package/engine/src/episodes/ep24-birthday-paradox/ring.tsx +164 -0
  317. package/engine/src/episodes/ep24-birthday-paradox/scenes.tsx +460 -0
  318. package/engine/src/episodes/ep24-birthday-paradox/timeline.ts +216 -0
  319. package/engine/src/episodes/ep25-behind-cover/Ep25Cover.tsx +306 -0
  320. package/engine/src/episodes/ep25-behind-cover/scenes.tsx +416 -0
  321. package/engine/src/episodes/ep25-behind-cover/timeline.ts +209 -0
  322. package/engine/src/episodes/ep26-opus-video/Cover.tsx +18 -0
  323. package/engine/src/episodes/ep26-opus-video/Ep26OpusVideo.tsx +53 -0
  324. package/engine/src/episodes/ep26-opus-video/cues.json +140 -0
  325. package/engine/src/episodes/ep26-opus-video/cues.ts +6 -0
  326. package/engine/src/episodes/ep26-opus-video/scenes.tsx +301 -0
  327. package/engine/src/episodes/ep27-opus-video-full/Cover.tsx +18 -0
  328. package/engine/src/episodes/ep27-opus-video-full/Ep27OpusVideoFull.tsx +65 -0
  329. package/engine/src/episodes/ep27-opus-video-full/assets.ts +36 -0
  330. package/engine/src/episodes/ep27-opus-video-full/cues.json +860 -0
  331. package/engine/src/episodes/ep27-opus-video-full/cues.ts +6 -0
  332. package/engine/src/episodes/ep27-opus-video-full/scenes/index.tsx +730 -0
  333. package/engine/src/episodes/ep27-opus-video-full/scenes/kit.tsx +334 -0
  334. package/engine/src/episodes/ep28-express-relay/CoverTall.tsx +98 -0
  335. package/engine/src/episodes/ep28-express-relay/Ep28Relay.tsx +453 -0
  336. package/engine/src/episodes/ep28-express-relay/scenes.tsx +2 -0
  337. package/engine/src/episodes/ep28-express-relay/timeline.ts +261 -0
  338. package/engine/src/episodes/ep29-footsteps/Ep29Footsteps.tsx +328 -0
  339. package/engine/src/episodes/ep29-footsteps/scenes.tsx +418 -0
  340. package/engine/src/episodes/ep29-footsteps/timeline.ts +250 -0
  341. package/engine/src/episodes/ep30-tang-divorce/CoverTall.tsx +85 -0
  342. package/engine/src/episodes/ep30-tang-divorce/Ep30Divorce.tsx +453 -0
  343. package/engine/src/episodes/ep30-tang-divorce/timeline.ts +235 -0
  344. package/engine/src/episodes/ep31-rigged/Ep31Rigged.tsx +334 -0
  345. package/engine/src/episodes/ep31-rigged/scenes.tsx +175 -0
  346. package/engine/src/episodes/ep31-rigged/timeline.ts +273 -0
  347. package/engine/src/episodes/ep32-love-lasts/Ep32Love.tsx +228 -0
  348. package/engine/src/episodes/ep32-love-lasts/scenes.tsx +219 -0
  349. package/engine/src/episodes/ep32-love-lasts/timeline.ts +165 -0
  350. package/engine/src/episodes/ep33-teammates/Ep33Teammates.tsx +304 -0
  351. package/engine/src/episodes/ep33-teammates/scenes.tsx +395 -0
  352. package/engine/src/episodes/ep33-teammates/timeline.ts +239 -0
  353. package/engine/src/episodes/ep34-song-takeout/CoverTall.tsx +70 -0
  354. package/engine/src/episodes/ep34-song-takeout/Ep34Takeout.tsx +362 -0
  355. package/engine/src/episodes/ep34-song-takeout/timeline.ts +219 -0
  356. package/engine/src/episodes/ep35-choke/Ep35Choke.tsx +318 -0
  357. package/engine/src/episodes/ep35-choke/scenes.tsx +252 -0
  358. package/engine/src/episodes/ep35-choke/timeline.ts +230 -0
  359. package/engine/src/episodes/ep36-boxed-pigs/CoverTall.tsx +65 -0
  360. package/engine/src/episodes/ep36-boxed-pigs/Ep36Pigs.tsx +519 -0
  361. package/engine/src/episodes/ep36-boxed-pigs/scenes.tsx +18 -0
  362. package/engine/src/episodes/ep36-boxed-pigs/timeline.ts +192 -0
  363. package/engine/src/episodes/ep37-bhop/Ep37Bhop.tsx +379 -0
  364. package/engine/src/episodes/ep37-bhop/scenes.tsx +166 -0
  365. package/engine/src/episodes/ep37-bhop/timeline.ts +232 -0
  366. package/engine/src/episodes/ep38-butterfly/CoverTall.tsx +55 -0
  367. package/engine/src/episodes/ep38-butterfly/Ep38Butterfly.tsx +434 -0
  368. package/engine/src/episodes/ep38-butterfly/timeline.ts +218 -0
  369. package/engine/src/episodes/ep39-latency/Ep39Latency.tsx +461 -0
  370. package/engine/src/episodes/ep39-latency/scenes.tsx +194 -0
  371. package/engine/src/episodes/ep39-latency/timeline.ts +248 -0
  372. package/engine/src/episodes/ep40-counter-strafe/Ep40CounterStrafe.tsx +410 -0
  373. package/engine/src/episodes/ep40-counter-strafe/scenes.tsx +124 -0
  374. package/engine/src/episodes/ep40-counter-strafe/timeline.ts +277 -0
  375. package/engine/src/episodes/ep41-flying-money/CoverTall.tsx +50 -0
  376. package/engine/src/episodes/ep41-flying-money/Ep41FlyingMoney.tsx +447 -0
  377. package/engine/src/episodes/ep41-flying-money/timeline.ts +239 -0
  378. package/engine/src/episodes/ep42-tap-fire/Ep42TapFire.tsx +376 -0
  379. package/engine/src/episodes/ep42-tap-fire/scenes.tsx +174 -0
  380. package/engine/src/episodes/ep42-tap-fire/timeline.ts +262 -0
  381. package/engine/src/episodes/ep43-one-more-game/Ep43OneMoreGame.tsx +376 -0
  382. package/engine/src/episodes/ep43-one-more-game/scenes.tsx +202 -0
  383. package/engine/src/episodes/ep43-one-more-game/timeline.ts +241 -0
  384. package/engine/src/episodes/ep45-callouts/Ep45Callouts.tsx +435 -0
  385. package/engine/src/episodes/ep45-callouts/scenes.tsx +170 -0
  386. package/engine/src/episodes/ep45-callouts/timeline.ts +260 -0
  387. package/engine/src/episodes/ep46-song-ice/CoverTall.tsx +51 -0
  388. package/engine/src/episodes/ep46-song-ice/Ep46SongIce.tsx +414 -0
  389. package/engine/src/episodes/ep46-song-ice/scenes.tsx +172 -0
  390. package/engine/src/episodes/ep46-song-ice/timeline.ts +257 -0
  391. package/engine/src/episodes/ep47-spotlight/Ep47Spotlight.tsx +416 -0
  392. package/engine/src/episodes/ep47-spotlight/scenes.tsx +146 -0
  393. package/engine/src/episodes/ep47-spotlight/timeline.ts +272 -0
  394. package/engine/src/episodes/ep48-jiggle-peek/Ep48JigglePeek.tsx +468 -0
  395. package/engine/src/episodes/ep48-jiggle-peek/scenes.tsx +86 -0
  396. package/engine/src/episodes/ep48-jiggle-peek/timeline.ts +264 -0
  397. package/engine/src/episodes/ep49-ad-strafe/Ep49AdStrafe.tsx +392 -0
  398. package/engine/src/episodes/ep49-ad-strafe/scenes.tsx +89 -0
  399. package/engine/src/episodes/ep49-ad-strafe/timeline.ts +266 -0
  400. package/engine/src/episodes/ep50-late-night/Ep50LateNight.tsx +380 -0
  401. package/engine/src/episodes/ep50-late-night/scenes.tsx +161 -0
  402. package/engine/src/episodes/ep50-late-night/timeline.ts +253 -0
  403. package/engine/src/episodes/ep51-practice/Ep51Practice.tsx +402 -0
  404. package/engine/src/episodes/ep51-practice/scenes.tsx +122 -0
  405. package/engine/src/episodes/ep51-practice/timeline.ts +241 -0
  406. package/engine/src/index.ts +4 -0
  407. package/engine/src/library/README.md +205 -0
  408. package/engine/src/library/Show.tsx +107 -0
  409. package/engine/src/library/Subtitles.tsx +105 -0
  410. package/engine/src/library/anim.ts +49 -0
  411. package/engine/src/library/blackgold/chaos.tsx +203 -0
  412. package/engine/src/library/blackgold/charts.tsx +578 -0
  413. package/engine/src/library/blackgold/pen.tsx +331 -0
  414. package/engine/src/library/blackgold/props.tsx +176 -0
  415. package/engine/src/library/blackgold/stage.tsx +262 -0
  416. package/engine/src/library/blackgold/theme.ts +62 -0
  417. package/engine/src/library/character/Accessories.tsx +172 -0
  418. package/engine/src/library/character/Arm.tsx +16 -0
  419. package/engine/src/library/character/BuddyFigure.tsx +127 -0
  420. package/engine/src/library/character/Char.tsx +71 -0
  421. package/engine/src/library/character/PixelBuddy.tsx +150 -0
  422. package/engine/src/library/character/types.ts +2 -0
  423. package/engine/src/library/cues.ts +49 -0
  424. package/engine/src/library/editor-room/canvas.tsx +264 -0
  425. package/engine/src/library/editor-room/mascots.tsx +92 -0
  426. package/engine/src/library/editor-room/stage.tsx +400 -0
  427. package/engine/src/library/editor-room/theme.ts +66 -0
  428. package/engine/src/library/fonts.ts +24 -0
  429. package/engine/src/library/fx.tsx +233 -0
  430. package/engine/src/library/gilded/charts.tsx +283 -0
  431. package/engine/src/library/gilded/props.tsx +245 -0
  432. package/engine/src/library/gilded/stage.tsx +312 -0
  433. package/engine/src/library/gilded/theme.ts +62 -0
  434. package/engine/src/library/halftone/props.tsx +332 -0
  435. package/engine/src/library/halftone/stage.tsx +435 -0
  436. package/engine/src/library/halftone/suspect.tsx +86 -0
  437. package/engine/src/library/halftone/theme.ts +71 -0
  438. package/engine/src/library/icons.tsx +318 -0
  439. package/engine/src/library/items/apps.tsx +161 -0
  440. package/engine/src/library/items/media.tsx +80 -0
  441. package/engine/src/library/items/objects.tsx +252 -0
  442. package/engine/src/library/lamplight/charts.tsx +530 -0
  443. package/engine/src/library/lamplight/ice.tsx +401 -0
  444. package/engine/src/library/lamplight/props.tsx +1072 -0
  445. package/engine/src/library/lamplight/scenes.tsx +187 -0
  446. package/engine/src/library/lamplight/stage.tsx +451 -0
  447. package/engine/src/library/lamplight/theme.ts +81 -0
  448. package/engine/src/library/previews/BlackGoldDemo.tsx +195 -0
  449. package/engine/src/library/previews/EditorRoomDemo.tsx +190 -0
  450. package/engine/src/library/previews/GildedDemo.tsx +185 -0
  451. package/engine/src/library/previews/HalftoneDemo.tsx +426 -0
  452. package/engine/src/library/previews/LamplightDemo.tsx +202 -0
  453. package/engine/src/library/previews/PixelWardrobe.tsx +39 -0
  454. package/engine/src/library/previews/TacticalDemo.tsx +280 -0
  455. package/engine/src/library/previews/Wardrobe.tsx +49 -0
  456. package/engine/src/library/previews/WarmDeskDemo.tsx +291 -0
  457. package/engine/src/library/previews/WarmDeskShowDemo.tsx +79 -0
  458. package/engine/src/library/sets/Studio.tsx +164 -0
  459. package/engine/src/library/tactical/attention.tsx +340 -0
  460. package/engine/src/library/tactical/charts.tsx +373 -0
  461. package/engine/src/library/tactical/hearing.tsx +189 -0
  462. package/engine/src/library/tactical/movement.tsx +163 -0
  463. package/engine/src/library/tactical/pipeline.tsx +236 -0
  464. package/engine/src/library/tactical/practice.tsx +84 -0
  465. package/engine/src/library/tactical/range.tsx +338 -0
  466. package/engine/src/library/tactical/ranked.tsx +267 -0
  467. package/engine/src/library/tactical/reward.tsx +204 -0
  468. package/engine/src/library/tactical/sleep.tsx +90 -0
  469. package/engine/src/library/tactical/spread.tsx +200 -0
  470. package/engine/src/library/tactical/stage.tsx +379 -0
  471. package/engine/src/library/tactical/theme.ts +48 -0
  472. package/engine/src/library/tactical/tracking.tsx +146 -0
  473. package/engine/src/library/tactical/vectors.tsx +161 -0
  474. package/engine/src/library/tactical/window.tsx +93 -0
  475. package/engine/src/library/theme.ts +55 -0
  476. package/engine/src/library/types.ts +11 -0
  477. package/engine/src/library/ui.tsx +137 -0
  478. package/engine/src/library/vox/CoverTall.tsx +92 -0
  479. package/engine/src/library/vox/VoxShow.tsx +136 -0
  480. package/engine/src/library/vox/desk.tsx +31 -0
  481. package/engine/src/library/vox/footage.tsx +74 -0
  482. package/engine/src/library/vox/hud.tsx +51 -0
  483. package/engine/src/library/vox/portrait.tsx +80 -0
  484. package/engine/src/library/vox/props.tsx +256 -0
  485. package/engine/src/library/vox/shots.tsx +66 -0
  486. package/engine/src/library/vox/stickers.tsx +132 -0
  487. package/engine/src/library/vox/theme.ts +77 -0
  488. package/engine/src/library/warm-desk/CoverTall.tsx +111 -0
  489. package/engine/src/library/warm-desk/DeskShow.tsx +127 -0
  490. package/engine/src/library/warm-desk/HostCam.tsx +30 -0
  491. package/engine/src/library/warm-desk/Slot.tsx +67 -0
  492. package/engine/src/library/warm-desk/immersive.tsx +105 -0
  493. package/engine/src/library/warm-desk/mascot.tsx +48 -0
  494. package/engine/src/library/warm-desk/motifs.tsx +277 -0
  495. package/engine/src/library/warm-desk/props.tsx +318 -0
  496. package/engine/src/library/warm-desk/stage.tsx +268 -0
  497. package/engine/src/library/warm-desk/theme.ts +83 -0
  498. package/engine/styles/LICENSE-huashu-art-motion +21 -0
  499. package/engine/styles/README.md +143 -0
  500. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//345/203/217/347/264/240/346/211/213/347/273/230/351/243/216/README.md +18 -0
  501. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//345/203/217/347/264/240/346/211/213/347/273/230/351/243/216//351/242/204/350/247/210.jpg +0 -0
  502. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//345/203/217/347/264/240/350/264/264/347/272/270/351/243/216/README.md +37 -0
  503. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//345/203/217/347/264/240/350/264/264/347/272/270/351/243/216//351/242/204/350/247/210.jpg +0 -0
  504. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//345/215/217/344/275/234/345/211/252/350/276/221/345/217/260/351/243/216/README.md +59 -0
  505. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//345/215/217/344/275/234/345/211/252/350/276/221/345/217/260/351/243/216//351/242/204/350/247/210.jpg +0 -0
  506. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/210/230/346/234/257/345/261/217/347/247/221/346/231/256/351/243/216/README.md +64 -0
  507. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/210/230/346/234/257/345/261/217/347/247/221/346/231/256/351/243/216//347/210/206/346/254/276/350/247/243/346/236/220.md +62 -0
  508. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/210/230/346/234/257/345/261/217/347/247/221/346/231/256/351/243/216//351/242/204/350/247/210.jpg +0 -0
  509. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/232/226/347/272/270/345/267/245/344/275/234/345/217/260/351/243/216/README.md +54 -0
  510. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/232/226/347/272/270/345/267/245/344/275/234/345/217/260/351/243/216//351/242/204/350/247/210.jpg +0 -0
  511. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/232/227/351/207/221/346/226/207/347/214/256/351/243/216/README.md +30 -0
  512. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//346/232/227/351/207/221/346/226/207/347/214/256/351/243/216//351/242/204/350/247/210.jpg +0 -0
  513. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//347/201/257/347/201/253/345/217/262/350/257/235/351/243/216/README.md +55 -0
  514. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//347/201/257/347/201/253/345/217/262/350/257/235/351/243/216//351/242/204/350/247/210.jpg +0 -0
  515. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//347/237/242/351/207/217/346/211/213/347/273/230/351/243/216/README.md +19 -0
  516. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//347/237/242/351/207/217/346/211/213/347/273/230/351/243/216//351/242/204/350/247/210.jpg +0 -0
  517. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//347/275/221/347/202/271/346/241/243/346/241/210/351/243/216/README.md +50 -0
  518. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//347/275/221/347/202/271/346/241/243/346/241/210/351/243/216//351/242/204/350/247/210.jpg +0 -0
  519. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//351/273/221/351/207/221/345/205/211/345/275/261/351/243/216/README.md +70 -0
  520. package/engine/styles//346/210/221/347/232/204/351/243/216/346/240/274//351/273/221/351/207/221/345/205/211/345/275/261/351/243/216//351/242/204/350/247/210.jpg +0 -0
  521. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/01_cave_/346/264/236/347/251/264/345/262/251/347/224/273//345/234/272/346/231/257/344/273/243/347/240/201.js +364 -0
  522. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/01_cave_/346/264/236/347/251/264/345/262/251/347/224/273//351/205/215/346/226/271/345/215/241.md +46 -0
  523. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/01_cave_/346/264/236/347/251/264/345/262/251/347/224/273//351/242/204/350/247/210.jpg +0 -0
  524. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/02_egypt_/345/237/203/345/217/212/345/243/201/347/224/273//345/234/272/346/231/257/344/273/243/347/240/201.js +524 -0
  525. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/02_egypt_/345/237/203/345/217/212/345/243/201/347/224/273//351/205/215/346/226/271/345/215/241.md +64 -0
  526. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/02_egypt_/345/237/203/345/217/212/345/243/201/347/224/273//351/242/204/350/247/210.jpg +0 -0
  527. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/03_greek_/345/217/244/345/270/214/350/205/212/351/273/221/347/273/230//345/234/272/346/231/257/344/273/243/347/240/201.js +448 -0
  528. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/03_greek_/345/217/244/345/270/214/350/205/212/351/273/221/347/273/230//351/205/215/346/226/271/345/215/241.md +50 -0
  529. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/03_greek_/345/217/244/345/270/214/350/205/212/351/273/221/347/273/230//351/242/204/350/247/210.jpg +0 -0
  530. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/04_roman_/347/275/227/351/251/254/351/251/254/350/265/233/345/205/213//345/234/272/346/231/257/344/273/243/347/240/201.js +555 -0
  531. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/04_roman_/347/275/227/351/251/254/351/251/254/350/265/233/345/205/213//351/205/215/346/226/271/345/215/241.md +99 -0
  532. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/04_roman_/347/275/227/351/251/254/351/251/254/350/265/233/345/205/213//351/242/204/350/247/210.jpg +0 -0
  533. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/05_gothic_/345/223/245/347/211/271/346/211/213/346/212/204/346/234/254//345/234/272/346/231/257/344/273/243/347/240/201.js +522 -0
  534. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/05_gothic_/345/223/245/347/211/271/346/211/213/346/212/204/346/234/254//351/205/215/346/226/271/345/215/241.md +32 -0
  535. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/05_gothic_/345/223/245/347/211/271/346/211/213/346/212/204/346/234/254//351/242/204/350/247/210.jpg +0 -0
  536. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/17_ink_/346/260/264/345/242/250/345/206/231/346/204/217//345/234/272/346/231/257/344/273/243/347/240/201.js +273 -0
  537. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/17_ink_/346/260/264/345/242/250/345/206/231/346/204/217//351/205/215/346/226/271/345/215/241.md +50 -0
  538. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/17_ink_/346/260/264/345/242/250/345/206/231/346/204/217//351/242/204/350/247/210.jpg +0 -0
  539. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/20_dunhuang_/346/225/246/347/205/214/345/243/201/347/224/273//345/234/272/346/231/257/344/273/243/347/240/201.js +215 -0
  540. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/20_dunhuang_/346/225/246/347/205/214/345/243/201/347/224/273//351/205/215/346/226/271/345/215/241.md +49 -0
  541. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/20_dunhuang_/346/225/246/347/205/214/345/243/201/347/224/273//351/242/204/350/247/210.jpg +0 -0
  542. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/34_shadowpuppet_/347/232/256/345/275/261//345/234/272/346/231/257/344/273/243/347/240/201.js +195 -0
  543. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/34_shadowpuppet_/347/232/256/345/275/261//351/205/215/346/226/271/345/215/241.md +40 -0
  544. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/01_/345/217/244/344/273/243/344/270/216/344/274/240/347/273/237/34_shadowpuppet_/347/232/256/345/275/261//351/242/204/350/247/210.jpg +0 -0
  545. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/02_/345/217/244/345/205/270/346/262/271/347/224/273/06_renaissance_/346/226/207/350/211/272/345/244/215/345/205/264//345/234/272/346/231/257/344/273/243/347/240/201.js +338 -0
  546. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/02_/345/217/244/345/205/270/346/262/271/347/224/273/06_renaissance_/346/226/207/350/211/272/345/244/215/345/205/264//351/205/215/346/226/271/345/215/241.md +41 -0
  547. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/02_/345/217/244/345/205/270/346/262/271/347/224/273/06_renaissance_/346/226/207/350/211/272/345/244/215/345/205/264//351/242/204/350/247/210.jpg +0 -0
  548. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/02_/345/217/244/345/205/270/346/262/271/347/224/273/32_rembrandt_/344/274/246/345/213/203/346/234/227/346/230/216/346/232/227//345/234/272/346/231/257/344/273/243/347/240/201.js +217 -0
  549. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/02_/345/217/244/345/205/270/346/262/271/347/224/273/32_rembrandt_/344/274/246/345/213/203/346/234/227/346/230/216/346/232/227//351/205/215/346/226/271/345/215/241.md +29 -0
  550. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/02_/345/217/244/345/205/270/346/262/271/347/224/273/32_rembrandt_/344/274/246/345/213/203/346/234/227/346/230/216/346/232/227//351/242/204/350/247/210.jpg +0 -0
  551. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/08_impressionism_/345/215/260/350/261/241/346/264/276//345/234/272/346/231/257/344/273/243/347/240/201.js +206 -0
  552. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/08_impressionism_/345/215/260/350/261/241/346/264/276//351/205/215/346/226/271/345/215/241.md +34 -0
  553. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/08_impressionism_/345/215/260/350/261/241/346/264/276//351/242/204/350/247/210.jpg +0 -0
  554. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/09_postimp_/346/242/265/351/253/230//345/234/272/346/231/257/344/273/243/347/240/201.js +183 -0
  555. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/09_postimp_/346/242/265/351/253/230//351/205/215/346/226/271/345/215/241.md +17 -0
  556. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/09_postimp_/346/242/265/351/253/230//351/242/204/350/247/210.jpg +0 -0
  557. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/28_monet_/350/216/253/345/245/210//345/234/272/346/231/257/344/273/243/347/240/201.js +176 -0
  558. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/28_monet_/350/216/253/345/245/210//351/205/215/346/226/271/345/215/241.md +39 -0
  559. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/28_monet_/350/216/253/345/245/210//351/242/204/350/247/210.jpg +0 -0
  560. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/29_seurat_/344/277/256/346/213/211/347/202/271/345/275/251//345/234/272/346/231/257/344/273/243/347/240/201.js +104 -0
  561. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/29_seurat_/344/277/256/346/213/211/347/202/271/345/275/251//351/205/215/346/226/271/345/215/241.md +31 -0
  562. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/03_/345/215/260/350/261/241/346/264/276/344/270/216/345/220/216/345/215/260/350/261/241/29_seurat_/344/277/256/346/213/211/347/202/271/345/275/251//351/242/204/350/247/210.jpg +0 -0
  563. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/10_nouveau_/346/205/225/345/244/217/346/226/260/350/211/272/346/234/257//345/234/272/346/231/257/344/273/243/347/240/201.js +334 -0
  564. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/10_nouveau_/346/205/225/345/244/217/346/226/260/350/211/272/346/234/257//351/205/215/346/226/271/345/215/241.md +31 -0
  565. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/10_nouveau_/346/205/225/345/244/217/346/226/260/350/211/272/346/234/257//351/242/204/350/247/210.jpg +0 -0
  566. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/11_cubism_/347/253/213/344/275/223/344/270/273/344/271/211//345/234/272/346/231/257/344/273/243/347/240/201.js +265 -0
  567. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/11_cubism_/347/253/213/344/275/223/344/270/273/344/271/211//351/205/215/346/226/271/345/215/241.md +30 -0
  568. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/11_cubism_/347/253/213/344/275/223/344/270/273/344/271/211//351/242/204/350/247/210.jpg +0 -0
  569. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/12_bauhaus_/345/214/205/350/261/252/346/226/257//345/234/272/346/231/257/344/273/243/347/240/201.js +214 -0
  570. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/12_bauhaus_/345/214/205/350/261/252/346/226/257//351/205/215/346/226/271/345/215/241.md +30 -0
  571. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/12_bauhaus_/345/214/205/350/261/252/346/226/257//351/242/204/350/247/210.jpg +0 -0
  572. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/18_klimt_/345/205/213/351/207/214/345/247/206/347/211/271//345/234/272/346/231/257/344/273/243/347/240/201.js +227 -0
  573. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/18_klimt_/345/205/213/351/207/214/345/247/206/347/211/271//351/205/215/346/226/271/345/215/241.md +37 -0
  574. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/18_klimt_/345/205/213/351/207/214/345/247/206/347/211/271//351/242/204/350/247/210.jpg +0 -0
  575. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/19_munch_/350/222/231/345/205/213//345/234/272/346/231/257/344/273/243/347/240/201.js +153 -0
  576. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/19_munch_/350/222/231/345/205/213//351/205/215/346/226/271/345/215/241.md +42 -0
  577. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/19_munch_/350/222/231/345/205/213//351/242/204/350/247/210.jpg +0 -0
  578. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/22_constructivism_/346/236/204/346/210/220/344/270/273/344/271/211//345/234/272/346/231/257/344/273/243/347/240/201.js +205 -0
  579. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/22_constructivism_/346/236/204/346/210/220/344/270/273/344/271/211//351/205/215/346/226/271/345/215/241.md +35 -0
  580. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/22_constructivism_/346/236/204/346/210/220/344/270/273/344/271/211//351/242/204/350/247/210.jpg +0 -0
  581. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/23_dali_/350/276/276/345/210/251/350/266/205/347/216/260/345/256/236//345/234/272/346/231/257/344/273/243/347/240/201.js +221 -0
  582. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/23_dali_/350/276/276/345/210/251/350/266/205/347/216/260/345/256/236//351/205/215/346/226/271/345/215/241.md +29 -0
  583. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/23_dali_/350/276/276/345/210/251/350/266/205/347/216/260/345/256/236//351/242/204/350/247/210.jpg +0 -0
  584. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/24_hopper_/351/234/215/347/217/200//345/234/272/346/231/257/344/273/243/347/240/201.js +150 -0
  585. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/24_hopper_/351/234/215/347/217/200//351/205/215/346/226/271/345/215/241.md +30 -0
  586. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/24_hopper_/351/234/215/347/217/200//351/242/204/350/247/210.jpg +0 -0
  587. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/30_matisse_/351/251/254/350/222/202/346/226/257/345/211/252/347/272/270//345/234/272/346/231/257/344/273/243/347/240/201.js +151 -0
  588. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/30_matisse_/351/251/254/350/222/202/346/226/257/345/211/252/347/272/270//351/205/215/346/226/271/345/215/241.md +26 -0
  589. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/30_matisse_/351/251/254/350/222/202/346/226/257/345/211/252/347/272/270//351/242/204/350/247/210.jpg +0 -0
  590. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/36_picasso_blue_/346/257/225/345/212/240/347/264/242/350/223/235/350/211/262/346/227/266/346/234/237//345/234/272/346/231/257/344/273/243/347/240/201.js +123 -0
  591. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/36_picasso_blue_/346/257/225/345/212/240/347/264/242/350/223/235/350/211/262/346/227/266/346/234/237//351/205/215/346/226/271/345/215/241.md +25 -0
  592. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/04_/347/216/260/344/273/243/344/270/273/344/271/211/36_picasso_blue_/346/257/225/345/212/240/347/264/242/350/223/235/350/211/262/346/227/266/346/234/237//351/242/204/350/247/210.jpg +0 -0
  593. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/13_pop_/346/263/242/346/231/256/350/211/272/346/234/257//345/234/272/346/231/257/344/273/243/347/240/201.js +269 -0
  594. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/13_pop_/346/263/242/346/231/256/350/211/272/346/234/257//351/205/215/346/226/271/345/215/241.md +29 -0
  595. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/13_pop_/346/263/242/346/231/256/350/211/272/346/234/257//351/242/204/350/247/210.jpg +0 -0
  596. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/21_kusama_/350/215/211/351/227/264/345/274/245/347/224/237/346/263/242/347/202/271//345/234/272/346/231/257/344/273/243/347/240/201.js +124 -0
  597. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/21_kusama_/350/215/211/351/227/264/345/274/245/347/224/237/346/263/242/347/202/271//351/205/215/346/226/271/345/215/241.md +32 -0
  598. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/21_kusama_/350/215/211/351/227/264/345/274/245/347/224/237/346/263/242/347/202/271//351/242/204/350/247/210.jpg +0 -0
  599. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/27_kirby_/346/274/253/345/250/201Kirby//345/234/272/346/231/257/344/273/243/347/240/201.js +255 -0
  600. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/27_kirby_/346/274/253/345/250/201Kirby//351/205/215/346/226/271/345/215/241.md +30 -0
  601. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/27_kirby_/346/274/253/345/250/201Kirby//351/242/204/350/247/210.jpg +0 -0
  602. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/31_haring_/345/223/210/346/236/227/346/266/202/351/270/246//345/234/272/346/231/257/344/273/243/347/240/201.js +109 -0
  603. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/31_haring_/345/223/210/346/236/227/346/266/202/351/270/246//351/205/215/346/226/271/345/215/241.md +22 -0
  604. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/05_/346/263/242/346/231/256/344/270/216/350/241/227/345/244/264/31_haring_/345/223/210/346/236/227/346/266/202/351/270/246//351/242/204/350/247/210.jpg +0 -0
  605. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/16_2026_/345/275/223/344/273/243/346/211/201/345/271/263/346/217/222/347/224/273//345/234/272/346/231/257/344/273/243/347/240/201.js +565 -0
  606. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/16_2026_/345/275/223/344/273/243/346/211/201/345/271/263/346/217/222/347/224/273//351/205/215/346/226/271/345/215/241.md +55 -0
  607. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/16_2026_/345/275/223/344/273/243/346/211/201/345/271/263/346/217/222/347/224/273//351/242/204/350/247/210.jpg +0 -0
  608. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/25_ghibli_/345/220/211/345/215/234/345/212/233/346/260/264/345/275/251//345/234/272/346/231/257/344/273/243/347/240/201.js +251 -0
  609. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/25_ghibli_/345/220/211/345/215/234/345/212/233/346/260/264/345/275/251//351/205/215/346/226/271/345/215/241.md +31 -0
  610. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/25_ghibli_/345/220/211/345/215/234/345/212/233/346/260/264/345/275/251//351/242/204/350/247/210.jpg +0 -0
  611. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/33_rubberhose_/346/251/241/347/232/256/347/256/241/345/215/241/351/200/232//345/234/272/346/231/257/344/273/243/347/240/201.js +219 -0
  612. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/33_rubberhose_/346/251/241/347/232/256/347/256/241/345/215/241/351/200/232//351/205/215/346/226/271/345/215/241.md +31 -0
  613. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/33_rubberhose_/346/251/241/347/232/256/347/256/241/345/215/241/351/200/232//351/242/204/350/247/210.jpg +0 -0
  614. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/35_shinkai_/346/226/260/346/265/267/350/257/232/345/205/211/345/275/261//345/234/272/346/231/257/344/273/243/347/240/201.js +197 -0
  615. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/35_shinkai_/346/226/260/346/265/267/350/257/232/345/205/211/345/275/261//351/205/215/346/226/271/345/215/241.md +34 -0
  616. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/06_/345/215/241/351/200/232/344/270/216/345/212/250/347/224/273/35_shinkai_/346/226/260/346/265/267/350/257/232/345/205/211/345/275/261//351/242/204/350/247/210.jpg +0 -0
  617. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/14_8bit_8-bit/345/203/217/347/264/240//345/234/272/346/231/257/344/273/243/347/240/201.js +238 -0
  618. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/14_8bit_8-bit/345/203/217/347/264/240//351/205/215/346/226/271/345/215/241.md +27 -0
  619. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/14_8bit_8-bit/345/203/217/347/264/240//351/242/204/350/247/210.jpg +0 -0
  620. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/15_raytrace_/346/227/251/346/234/237/345/205/211/350/277/275CGI//345/234/272/346/231/257/344/273/243/347/240/201.js +300 -0
  621. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/15_raytrace_/346/227/251/346/234/237/345/205/211/350/277/275CGI//351/205/215/346/226/271/345/215/241.md +32 -0
  622. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/15_raytrace_/346/227/251/346/234/237/345/205/211/350/277/275CGI//351/242/204/350/247/210.jpg +0 -0
  623. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/26_vaporwave_/350/222/270/346/261/275/346/263/242//345/234/272/346/231/257/344/273/243/347/240/201.js +191 -0
  624. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/26_vaporwave_/350/222/270/346/261/275/346/263/242//351/205/215/346/226/271/345/215/241.md +27 -0
  625. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274/07_/346/225/260/345/255/227/344/270/216/345/203/217/347/264/240/26_vaporwave_/350/222/270/346/261/275/346/263/242//351/242/204/350/247/210.jpg +0 -0
  626. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274//345/216/237/347/211/210/346/200/273/347/264/242/345/274/225.md +47 -0
  627. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274//350/275/254/345/234/272_/350/277/201/347/247/273/346/265/213/350/257/225.md +53 -0
  628. package/engine/styles//350/211/272/346/234/257/351/243/216/346/240/274//351/237/263/350/275/250_/350/211/272/346/234/257/345/217/262/351/200/237/351/200/232.md +135 -0
  629. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//345/217/202/346/225/260/347/244/272/344/276/213.json +20 -0
  630. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//347/211/207/346/256/265/344/273/243/347/240/201.js +197 -0
  631. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +11 -0
  632. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//347/244/272/350/214/203/345/267/245/347/250/213/t1_s1.js +101 -0
  633. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//347/244/272/350/214/203/345/267/245/347/250/213/t1_s2.js +74 -0
  634. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//347/244/272/350/214/203/345/267/245/347/250/213/t1_s3.js +65 -0
  635. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//350/257/255/346/263/225/345/215/241.md +114 -0
  636. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/t1_3b1b_3Blue1Brown//351/242/204/350/247/210.jpg +0 -0
  637. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y1_kurzgesagt_Kurzgesagt//345/217/202/346/225/260/347/244/272/344/276/213.json +18 -0
  638. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y1_kurzgesagt_Kurzgesagt//347/211/207/346/256/265/344/273/243/347/240/201.js +143 -0
  639. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y1_kurzgesagt_Kurzgesagt//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +10 -0
  640. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y1_kurzgesagt_Kurzgesagt//347/244/272/350/214/203/345/267/245/347/250/213/kurzgesagt.js +347 -0
  641. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y1_kurzgesagt_Kurzgesagt//350/257/255/346/263/225/345/215/241.md +183 -0
  642. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y1_kurzgesagt_Kurzgesagt//351/242/204/350/247/210.jpg +0 -0
  643. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y3_whiteboard_/347/231/275/346/235/277//345/217/202/346/225/260/347/244/272/344/276/213.json +17 -0
  644. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y3_whiteboard_/347/231/275/346/235/277//347/211/207/346/256/265/344/273/243/347/240/201.js +206 -0
  645. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y3_whiteboard_/347/231/275/346/235/277//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +10 -0
  646. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y3_whiteboard_/347/231/275/346/235/277//347/244/272/350/214/203/345/267/245/347/250/213/whiteboard.js +162 -0
  647. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y3_whiteboard_/347/231/275/346/235/277//350/257/255/346/263/225/345/215/241.md +182 -0
  648. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/01_/347/247/221/346/231/256/345/233/276/350/247/243/y3_whiteboard_/347/231/275/346/235/277//351/242/204/350/247/210.jpg +0 -0
  649. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//345/217/202/346/225/260/347/244/272/344/276/213.json +17 -0
  650. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//347/211/207/346/256/265/344/273/243/347/240/201.js +243 -0
  651. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +10 -0
  652. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//347/244/272/350/214/203/345/267/245/347/250/213/t2_s1.js +57 -0
  653. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//347/244/272/350/214/203/345/267/245/347/250/213/t2_s2.js +70 -0
  654. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//347/244/272/350/214/203/345/267/245/347/250/213/t2_s3.js +61 -0
  655. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//350/257/255/346/263/225/345/215/241.md +109 -0
  656. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t2_keynote_ui_/345/217/221/345/270/203/344/274/232//351/242/204/350/247/210.jpg +0 -0
  657. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//345/217/202/346/225/260/347/244/272/344/276/213.json +27 -0
  658. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//347/211/207/346/256/265/344/273/243/347/240/201.js +174 -0
  659. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +11 -0
  660. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//347/244/272/350/214/203/345/267/245/347/250/213/t3_s1.js +48 -0
  661. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//347/244/272/350/214/203/345/267/245/347/250/213/t3_s2.js +42 -0
  662. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//347/244/272/350/214/203/345/267/245/347/250/213/t3_s3.js +51 -0
  663. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//350/257/255/346/263/225/345/215/241.md +107 -0
  664. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/t3_finance_chart_/350/264/242/347/273/217/345/233/276/350/241/250//351/242/204/350/247/210.jpg +0 -0
  665. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/y2_vox_Vox//345/217/202/346/225/260/347/244/272/344/276/213.json +14 -0
  666. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/y2_vox_Vox//347/211/207/346/256/265/344/273/243/347/240/201.js +141 -0
  667. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/y2_vox_Vox//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +10 -0
  668. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/y2_vox_Vox//347/244/272/350/214/203/345/267/245/347/250/213/vox.js +240 -0
  669. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/y2_vox_Vox//350/257/255/346/263/225/345/215/241.md +185 -0
  670. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/02_/346/226/260/351/227/273/344/270/216/346/225/260/346/215/256/y2_vox_Vox//351/242/204/350/247/210.jpg +0 -0
  671. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//345/217/202/346/225/260/347/244/272/344/276/213.json +14 -0
  672. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/211/207/346/256/265/344/273/243/347/240/201.js +168 -0
  673. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +14 -0
  674. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/s1_desk.js +18 -0
  675. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/s2_screen.js +82 -0
  676. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/s3_react.js +39 -0
  677. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/s4_wide.js +16 -0
  678. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/s5_close.js +18 -0
  679. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/story.js +25 -0
  680. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/vo_env.js +2 -0
  681. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//347/244/272/350/214/203/345/267/245/347/250/213/world.js +73 -0
  682. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//350/257/255/346/263/225/345/215/241.md +166 -0
  683. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y4_storytime_Storytime//351/242/204/350/247/210.jpg +0 -0
  684. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//345/217/202/346/225/260/347/244/272/344/276/213.json +14 -0
  685. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/211/207/346/256/265/344/273/243/347/240/201.js +126 -0
  686. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/244/272/350/214/203/345/267/245/347/250/213/eras.js +16 -0
  687. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/244/272/350/214/203/345/267/245/347/250/213/k1_title.js +38 -0
  688. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/244/272/350/214/203/345/267/245/347/250/213/k2_complete.js +55 -0
  689. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/244/272/350/214/203/345/267/245/347/250/213/k3_chat.js +47 -0
  690. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/244/272/350/214/203/345/267/245/347/250/213/k4_agent.js +49 -0
  691. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//347/244/272/350/214/203/345/267/245/347/250/213/kinetic.js +52 -0
  692. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//350/257/255/346/263/225/345/215/241.md +150 -0
  693. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y5_kinetic_type_/345/212/250/346/200/201/346/226/207/345/255/227//351/242/204/350/247/210.jpg +0 -0
  694. package/engine/styles//350/247/243/350/257/264/350/257/255/346/263/225/03_/350/212/202/345/245/217/344/270/216/344/272/272/347/211/251/y6_presenter_explainer_/350/256/262/350/247/243/345/221/230//350/257/255/346/263/225/345/215/241.md +24 -0
  695. package/engine/tests/episodes/ep00-demo.test.ts +69 -0
  696. package/engine/tests/episodes/ep01-agent-cues.test.ts +25 -0
  697. package/engine/tests/episodes/ep01-agent-scenes.test.ts +25 -0
  698. package/engine/tests/episodes/ep02-llm.test.ts +31 -0
  699. package/engine/tests/episodes/ep03-cc.test.ts +24 -0
  700. package/engine/tests/episodes/ep04-opus55.test.ts +24 -0
  701. package/engine/tests/episodes/ep05-token.test.ts +24 -0
  702. package/engine/tests/episodes/ep06-context.test.ts +24 -0
  703. package/engine/tests/episodes/ep07-agent.test.ts +24 -0
  704. package/engine/tests/episodes/ep08-hallucination.test.ts +24 -0
  705. package/engine/tests/episodes/ep09-prompt.test.ts +24 -0
  706. package/engine/tests/episodes/ep10-multimodal.test.ts +24 -0
  707. package/engine/tests/episodes/ep11-mcp.test.ts +24 -0
  708. package/engine/tests/episodes/ep12-skill.test.ts +24 -0
  709. package/engine/tests/episodes/ep13-subagent.test.ts +24 -0
  710. package/engine/tests/episodes/ep14-agent-permission.test.ts +24 -0
  711. package/engine/tests/episodes/ep15-prompt-injection.test.ts +24 -0
  712. package/engine/tests/episodes/ep16-agent-done.test.ts +24 -0
  713. package/engine/tests/episodes/ep17-sycophancy.test.ts +24 -0
  714. package/engine/tests/episodes/ep18-ai-history.test.ts +19 -0
  715. package/engine/tests/episodes/ep19-apple-history.test.ts +19 -0
  716. package/engine/tests/episodes/ep20-nvidia-history.test.ts +19 -0
  717. package/engine/tests/episodes/ep21-nobel-physics.test.ts +19 -0
  718. package/engine/tests/episodes/ep22-nobel-chemistry.test.ts +19 -0
  719. package/engine/tests/episodes/ep23-wheat-chessboard.test.ts +55 -0
  720. package/engine/tests/episodes/ep24-birthday-paradox.test.ts +140 -0
  721. package/engine/tests/episodes/ep25-behind-cover.test.ts +83 -0
  722. package/engine/tests/episodes/ep26-opus-video.test.ts +39 -0
  723. package/engine/tests/episodes/ep27-opus-video-full.test.ts +51 -0
  724. package/engine/tests/episodes/ep28-express-relay.test.ts +107 -0
  725. package/engine/tests/episodes/ep29-footsteps.test.ts +101 -0
  726. package/engine/tests/episodes/ep30-tang-divorce.test.ts +101 -0
  727. package/engine/tests/episodes/ep31-rigged.test.ts +108 -0
  728. package/engine/tests/episodes/ep32-love-lasts.test.ts +104 -0
  729. package/engine/tests/episodes/ep33-teammates.test.ts +113 -0
  730. package/engine/tests/episodes/ep34-song-takeout.test.ts +98 -0
  731. package/engine/tests/episodes/ep35-choke.test.ts +109 -0
  732. package/engine/tests/episodes/ep36-boxed-pigs.test.ts +98 -0
  733. package/engine/tests/episodes/ep37-bhop.test.ts +114 -0
  734. package/engine/tests/episodes/ep38-butterfly.test.ts +118 -0
  735. package/engine/tests/episodes/ep39-latency.test.ts +150 -0
  736. package/engine/tests/episodes/ep40-counter-strafe.test.ts +145 -0
  737. package/engine/tests/episodes/ep41-flying-money.test.ts +97 -0
  738. package/engine/tests/episodes/ep42-tap-fire.test.ts +137 -0
  739. package/engine/tests/episodes/ep43-one-more-game.test.ts +129 -0
  740. package/engine/tests/episodes/ep45-callouts.test.ts +150 -0
  741. package/engine/tests/episodes/ep46-song-ice.test.ts +117 -0
  742. package/engine/tests/episodes/ep47-spotlight.test.ts +159 -0
  743. package/engine/tests/episodes/ep48-jiggle-peek.test.ts +154 -0
  744. package/engine/tests/episodes/ep49-ad-strafe.test.ts +139 -0
  745. package/engine/tests/episodes/ep50-late-night.test.ts +156 -0
  746. package/engine/tests/episodes/ep51-practice.test.ts +117 -0
  747. package/engine/tests/library/anim.test.ts +37 -0
  748. package/engine/tests/library/bgm.test.ts +29 -0
  749. package/engine/tests/library/blackgold.test.ts +37 -0
  750. package/engine/tests/library/halftone.test.ts +40 -0
  751. package/engine/tests/library/lamplight.test.ts +60 -0
  752. package/engine/tests/library/srt.test.ts +13 -0
  753. package/engine/tests/library/subtitles.test.ts +12 -0
  754. package/engine/tests/library/synth.test.ts +29 -0
  755. package/engine/tests/library/tactical.test.ts +37 -0
  756. package/engine/tests/library/warm-desk.test.ts +25 -0
  757. package/engine/tsconfig.json +15 -0
  758. package/engine/vitest.config.ts +3 -0
  759. package/lib/host.mjs +736 -0
  760. package/manifest.json +51 -0
  761. package/package.json +8 -4
  762. package/skills/biuvibe/SKILL.md +28 -0
  763. package/studio/app.js +264 -0
  764. package/studio/assert-panel-permit.mjs +67 -0
  765. package/studio/composer.css +445 -0
  766. package/studio/composer.js +349 -0
  767. package/studio/index.html +82 -0
  768. package/studio/recipes.mjs +86 -0
  769. package/studio/select-menu.js +450 -0
  770. package/studio/styles.css +2 -0
  771. package/studio/thumbs/blackgold.jpg +0 -0
  772. package/studio/thumbs/desk.jpg +0 -0
  773. package/studio/thumbs/editor.jpg +0 -0
  774. package/studio/thumbs/fps.jpg +0 -0
  775. package/studio/thumbs/gilded.jpg +0 -0
  776. package/studio/thumbs/halftone.jpg +0 -0
  777. package/studio/thumbs/lamplight.jpg +0 -0
  778. package/studio/thumbs/pixel-hand.jpg +0 -0
  779. package/studio/thumbs/pixel-sticker.jpg +0 -0
  780. package/studio/thumbs/vector.jpg +0 -0
  781. package/studio/thumbs/vox-cut.jpg +0 -0
  782. package/studio/thumbs/vox-timeline.jpg +0 -0
  783. package//351/243/216/346/240/274/346/217/220/347/244/272/350/257/215.md +105 -0
  784. package/README.md +0 -3
@@ -0,0 +1,206 @@
1
+ // 片段 · 白板手绘(y3,RSA 型):说一句写一句、讲到东西就画出来。一支马克笔在白板上写字、画图标、画箭头、圈重点,相机跟着往下走,最后拉远看全图。
2
+ // cues:title(标题,7.5 字/秒起,赶不上下一个 cue 会自动提速)· point(要点:先画一个小圈当项目符号再写,16 字/秒起)
3
+ // draw(画一个手绘图标:data.icon 见下方 ICONS,text = 图标下的手写说明;和刚写的那条字并排;连续的 draw 用橙箭头连起来,像示范片「一摞图 → 网络」;data.arrow:false 不画箭头)
4
+ // image(截图/草图:笔走之字形把它「揭开」,再描一圈手绘框;等比放,不裁)
5
+ // highlight(橙圈圈住一条:data.index = 第几个要点(只数 point,从 0 起,和 t1/y1 同一口径);
6
+ // data.target = 'title' | 'draw' | 'image' 改圈那一类(配 index 数那一类,默认最新);不写 = 最新写出的那一条;data.style:'underline' 改成划线)
7
+ // 版式:横屏有 draw/image 时左文右图,竖屏有 draw 时图标在右侧窄栏;图标和刚写的那条字并排,连续的图标之间画往下的橙箭头。
8
+ // 横屏纯文字、要点 ≥5 条时分左右两栏。字号随内容多少在 0.72–1.2 倍之间取,尽量一屏放下并撑满;放不下才让相机往下走。
9
+ // 每一笔都在 at 这一帧落下第一点;写字速度=max(基准速度, 字数 / 到下一个 cue 的间隔),说到下一句时这句已写完。
10
+ // 笔:两笔之间空档 <0.6s 沿弧线滑过去;更长就 0.35s 退出右下屏外,下一笔前 0.3s 再进来;最后一笔画完一定退场,不留在字上。
11
+ // safe(spec.safe):内容只排在 top..H−bottom 之间,收尾拉远也只拉进这一带。alpha:墨色外面描一圈白边,叠在深色画面上也看得见。
12
+ CLIPS.y3_whiteboard = (() => {
13
+ const { clamp, lerp } = U;
14
+ const INK = '#0A0503', ORANGE = '#EF7226', WASH = 'rgba(239,114,38,.22)', BOARD = '#FBFBFB';
15
+ const FONT = 'LXGWWenKai-500';
16
+ // ---------- 手绘图标:单位框 [-0.5,0.5]²(y 朝下)里的笔画;o:1 = 橙色强调,seg:1 = 快速直线(网络连线),fill = 铺浅橙 ----------
17
+ const A = (cx, cy, rx, ry, a0, a1, n = 22) => DG.arcPts(cx, cy, rx, ry, a0, a1, n);
18
+ const box = (x0, y0, x1, y1) => [[x0, y0], [x1, y0], [x1, y1], [x0, y1], [x0, y0 + 0.01]];
19
+ const ICONS = {
20
+ person: () => [{ p: A(0, -0.3, 0.13, 0.13, -Math.PI / 2, Math.PI * 1.55) }, { p: [[0, -0.17], [0, 0.14]] }, { p: [[-0.24, -0.04], [0, -0.1], [0.24, -0.04]] }, { p: [[-0.17, 0.44], [0, 0.14], [0.17, 0.44]] }],
21
+ cat: () => { const k = 1 / 380, T = pts => pts.map(([x, y]) => [x * k, y * k + 0.44]);
22
+ return [{ p: T([[-60, -250], [-92, -330], [-30, -300], [30, -300], [92, -330], [60, -250]]) }, { p: T(A(0, -230, 100, 82, -0.55, Math.PI + 0.55, 26).reverse()) },
23
+ { p: T([[-80, -170], [-120, -60], [-110, 0], [110, 0], [120, -60], [80, -170]]), fill: T([[-80, -170], [-120, -60], [-110, 0], [110, 0], [120, -60], [80, -170], [0, -150]]) },
24
+ { p: T([[110, -20], [190, -40], [210, -130], [170, -190]]) }, { p: T(A(-38, -240, 12, 16, 0, Math.PI * 2, 14)), w: 0.8 }, { p: T(A(38, -240, 12, 16, 0, Math.PI * 2, 14)), w: 0.8 },
25
+ { p: T([[-30, -196], [-110, -206]]), w: 0.6 }, { p: T([[30, -196], [110, -206]]), w: 0.6 }]; },
26
+ network: () => { const C = [[-0.38, [-0.28, 0, 0.28]], [0, [-0.33, -0.11, 0.11, 0.33]], [0.38, [-0.14, 0.14]]], r = 0.06, out = [];
27
+ for (const [x, ys] of C) for (const y of ys) out.push({ p: A(x, y, r, r, -Math.PI / 2, Math.PI * 1.55, 14), fast: 1 });
28
+ for (let a = 0; a < 2; a++) for (const y0 of C[a][1]) for (const y1 of C[a + 1][1]) out.push({ seg: [[C[a][0] + r, y0], [C[a + 1][0] - r, y1]] });
29
+ return out; },
30
+ doc: () => [{ p: [[0.14, -0.42], [-0.3, -0.42], [-0.3, 0.42], [0.3, 0.42], [0.3, -0.26], [0.14, -0.42], [0.14, -0.26], [0.3, -0.26]] },
31
+ { p: [[-0.18, -0.12], [0.18, -0.12]], w: 0.7 }, { p: [[-0.18, 0.04], [0.18, 0.04]], w: 0.7 }, { p: [[-0.18, 0.2], [0.06, 0.2]], w: 0.7 }],
32
+ chat: () => [{ p: [[-0.3, -0.36], [0.3, -0.36], [0.42, -0.24], [0.42, 0.1], [0.3, 0.22], [-0.06, 0.22], [-0.24, 0.4], [-0.2, 0.22], [-0.3, 0.22], [-0.42, 0.1], [-0.42, -0.24], [-0.3, -0.36]] },
33
+ ...[-0.18, 0, 0.18].map(x => ({ p: A(x, -0.07, 0.035, 0.035, 0, Math.PI * 2, 10), w: 0.9, fast: 1 }))],
34
+ bulb: () => [{ p: A(0, -0.12, 0.26, 0.26, Math.PI * 0.72, Math.PI * 2.28, 30), fill: A(0, -0.12, 0.26, 0.26, 0, Math.PI * 2, 30) }, { p: [[-0.11, 0.12], [-0.11, 0.27], [0.11, 0.27], [0.11, 0.12]] },
35
+ { p: [[-0.08, 0.36], [0.08, 0.36]] }, ...[-2.4, -1.57, -0.74].map(a => ({ p: [[Math.cos(a) * 0.34, -0.12 + Math.sin(a) * 0.34], [Math.cos(a) * 0.46, -0.12 + Math.sin(a) * 0.46]], o: 1, fast: 1 }))],
36
+ check: () => [{ p: [[-0.32, 0.0], [-0.08, 0.26], [0.36, -0.32]], o: 1, w: 1.5 }],
37
+ cross: () => [{ p: [[-0.28, -0.28], [0.28, 0.28]], o: 1, w: 1.5 }, { p: [[0.28, -0.28], [-0.28, 0.28]], o: 1, w: 1.5 }],
38
+ screen: () => [{ p: box(-0.44, -0.36, 0.44, 0.2) }, { p: [[0, 0.2], [0, 0.34]] }, { p: [[-0.2, 0.36], [0.2, 0.36]] },
39
+ { p: [[-0.32, -0.22], [0.06, -0.22]], w: 0.6, fast: 1 }, { p: [[-0.24, -0.1], [0.24, -0.1]], w: 0.6, fast: 1 }, { p: [[-0.24, 0.02], [0.12, 0.02]], w: 0.6, fast: 1 }],
40
+ stack: () => [2, 1, 0].map(i => ({ p: box(-0.4 + i * 0.09, -0.22 - i * 0.09, 0.2 + i * 0.09, 0.3 - i * 0.09), paper: 1 })).concat([{ p: [[-0.3, 0.2], [-0.14, 0.02], [0, 0.14], [0.1, 0.06], [0.2, 0.2]], w: 0.7 }]),
41
+ gear: () => { const pts = []; for (let i = 0; i <= 64; i++) { const a = i / 64 * Math.PI * 2, r = (Math.floor(i / 4) % 2) ? 0.3 : 0.4; pts.push([Math.cos(a) * r, Math.sin(a) * r]); }
42
+ return [{ p: pts }, { p: A(0, 0, 0.12, 0.12, 0, Math.PI * 2.1, 16) }]; },
43
+ target: () => [{ p: A(0, 0.04, 0.4, 0.4, -Math.PI / 2, Math.PI * 1.55, 32) }, { p: A(0, 0.04, 0.25, 0.25, -Math.PI / 2, Math.PI * 1.55, 24) }, { p: A(0, 0.04, 0.09, 0.09, 0, Math.PI * 2, 12), fill: A(0, 0.04, 0.09, 0.09, 0, Math.PI * 2, 12) },
44
+ { p: [[0.46, -0.42], [0.02, 0.02]], o: 1 }, { p: [[0.3, -0.42], [0.46, -0.42], [0.46, -0.26]], o: 1 }],
45
+ clock: () => [{ p: A(0, 0, 0.4, 0.4, -Math.PI / 2, Math.PI * 1.55, 32) }, { p: [[0, -0.26], [0, 0], [0.18, 0.1]] }],
46
+ chart: () => [{ p: [[-0.42, -0.42], [-0.42, 0.38], [0.44, 0.38]] }, { p: [[-0.32, 0.22], [-0.12, 0.04], [0.06, 0.12], [0.34, -0.26]], o: 1 }, { p: [[0.18, -0.26], [0.34, -0.26], [0.34, -0.1]], o: 1 }],
47
+ };
48
+ let B, keys, items, OFF, lastEnd, band;
49
+ const halo = (c, src, W, H, col, r) => { // 透明底:墨色外描一圈白边(8 个方向各压一次剪影)
50
+ const s2 = UI.scratch('clip_y3halo', W, H), g = s2.getContext('2d'); g.globalCompositeOperation = 'source-over'; g.clearRect(0, 0, W, H);
51
+ g.drawImage(src, 0, 0); g.globalCompositeOperation = 'source-in'; g.fillStyle = col; g.fillRect(0, 0, W, H); g.globalCompositeOperation = 'source-over';
52
+ for (let i = 0; i < 8; i++) { const a = i / 8 * Math.PI * 2; c.drawImage(s2, Math.cos(a) * r, Math.sin(a) * r); }
53
+ c.drawImage(src, 0, 0);
54
+ };
55
+ // 折行但各行等长:先按栏宽折出 n 行,再找「仍是 n 行」的最窄宽度重折(不留一个字孤零零挂在第二行)
56
+ const balance = (g, text, maxW, font) => { const n = TY.wrap(g, text, maxW, font).length; if (n < 2) return [text];
57
+ let lo = maxW * 0.4, hi = maxW; for (let k = 0; k < 14; k++) { const m = (lo + hi) / 2; if (TY.wrap(g, text, m, font).length > n) lo = m; else hi = m; } return TY.wrap(g, text, hi, font); };
58
+ // 手绘矩形:先把四条边各加密成多点,再加抖动,角还是角(直接对 4 个角点做 Catmull-Rom 会画成一个圆团)
59
+ const rectPts = (x, y, w, h) => { const P = [[x, y], [x + w, y], [x + w, y + h], [x, y + h], [x, y + 3]], out = [];
60
+ for (let i = 0; i < 4; i++) for (let k = 0; k < 12; k++) out.push([lerp(P[i][0], P[i + 1][0], k / 12), lerp(P[i][1], P[i + 1][1], k / 12)]); out.push(P[4]); return out; };
61
+ function layout(ctx, f) {
62
+ const { W, H, u, FPS, safe } = ctx, pad = (ctx.portrait ? 80 : 150) * u, lw = 6.5 * u, g = document.createElement('canvas').getContext('2d');
63
+ const cues = ctx.cues, next = q => { const i = cues.indexOf(q); const n = cues.slice(i + 1).find(z => z.at > q.at + 1e-6); return n ? n.at : ctx.dur; };
64
+ const hasDraw = cues.some(q => q.kind === 'draw'), hasImg = cues.some(q => q.kind === 'image' && ctx.IMG[q.image]);
65
+ // 栏:横屏有图就左文右图;竖屏有 draw 时图标排在右侧窄栏、和它说的那条字并排(截图仍整宽)
66
+ const S = (ctx.portrait ? 250 : 210) * u * f, gap = 70 * u * f;
67
+ const two = ctx.portrait ? hasDraw : (hasDraw || hasImg);
68
+ const colP = !two ? null : ctx.portrait ? { x: W - pad - S, w: S } : { x: W * 0.55, w: W * 0.45 - pad };
69
+ const nPt = cues.filter(q => q.kind === 'point').length, split = !ctx.portrait && !two && nPt >= 5 ? Math.ceil(nPt / 2) : 0; // 横屏纯文字、要点 ≥5 条:分左右两栏写
70
+ const colT = { x: pad, w: split ? W / 2 - pad - 40 * u : !two ? W - 2 * pad : ctx.portrait ? colP.x - gap - pad : W * 0.5 - pad };
71
+ let kPt = 0, col0 = null;
72
+ // 同一份清单的要点用同一个字号:取「放进一行」要缩到的最小那个(最小 0.72),还放不下的那条再折行
73
+ const pSize = Math.min(74 * u * f, ...cues.filter(q => q.kind === 'point').map(q => { const r = TY.fit(g, q.text || '', colT.w - 80 * u, 74 * u * f, FONT, { maxLines: 1, min: 0.72, soft: true }); return r.ok ? r.size : 74 * u * f * 0.72; }));
74
+ const B = DG.board({ ink: INK, lw, speed: 2600 * u, font: `"${FONT}"` }), items = [];
75
+ const top = (ctx.portrait ? 240 : 130) * u + safe.top;
76
+ let yT = top, yP = top, lastText = null, lastDraw = null; // 文字流 / 图流的当前 y
77
+ const start = q => B.at(Math.max(0, q.at - 1 / FPS)); // 第一笔在 at 这一帧可见
78
+ const capSz = (ctx.portrait ? 52 : 50) * u * Math.max(0.85, Math.min(1.1, f)), capRight = !ctx.portrait; // 横屏说明写在图标右边,竖屏写在下面
79
+ for (const q of cues) {
80
+ if (q.kind === 'title' || q.kind === 'point') {
81
+ const title = q.kind === 'title', indent = title ? 0 : 80 * u, colW = title ? W - 2 * pad : colT.w;
82
+ const ft = title ? TY.fit(g, q.text || '', colW - indent, 112 * u * f, FONT, { maxLines: 1, min: 0.72, soft: true }) : { size: pSize, lines: TY.wrap(g, q.text || '', colW - indent, `${pSize}px "${FONT}"`) }; // 标题先缩字号放一行,放不下再折行
83
+ const size = ft.size, lines = ft.lines.length > 1 ? balance(g, q.text || '', colW - indent, `${size}px "${FONT}"`) : ft.lines;
84
+ const n = [...(q.text || '')].length, room = Math.max(0.35, next(q) - q.at - 0.15 - (title ? 0 : 0.15)), rate = Math.max(title ? 7.5 : 16, n / room);
85
+ if (title) yT = Math.max(yT, yP);
86
+ else { if (col0 == null) col0 = yT; if (split && kPt === split) { colT.x = W / 2 + 40 * u; yT = col0; } kPt++; }
87
+ let y = yT + size * (title ? 1.1 : 1.0);
88
+ start(q);
89
+ if (!title) B.line(DG.ellipsePts(colT.x + 26 * u, y - size * 0.32, 15 * u, 15 * u, -1.6, 1.05, 18), { w: lw * 0.9, col: ORANGE, speed: 9000 * u, min: 0.08, gap: 0.02 });
90
+ const x = (title ? pad : colT.x) + indent, it = { q, kind: q.kind, x, y0: y - size, lines, size };
91
+ lines.forEach((ln, k) => B.text(ln, x, y + k * size * 1.3, size, { col: INK, rate }));
92
+ g.font = `${size}px "${FONT}"`; it.w = Math.max(...lines.map(l => g.measureText(l).width)); it.y1 = y + (lines.length - 1) * size * 1.3 + size * 0.25;
93
+ yT = it.y1 + (title ? 60 : 44) * u * f; items.push(it);
94
+ if (title) yP = Math.max(yP, yT); else lastText = it;
95
+ } else if (q.kind === 'draw') {
96
+ const icon = (q.data && q.data.icon) || '', mk = ICONS[icon];
97
+ if (!mk && icon) console.warn(`y3 draw:没有图标「${icon}」,可用:${Object.keys(ICONS).join(' ')}(只写说明字)`);
98
+ // 和刚写的那条字并排(那条字还没配图、且在图流下面);否则接在图流下面
99
+ const pair = lastText && !lastText.pic && lastText.y0 >= yP - 1;
100
+ const y0 = two ? (pair ? lastText.y0 + (lastText.y1 - lastText.y0) / 2 - S / 2 : yP) : yT;
101
+ const x0 = two ? colP.x : pad, cx = x0 + S / 2, cy = Math.max(y0, two ? yP : y0) + S / 2;
102
+ if (pair) lastText.pic = true;
103
+ const prev = lastDraw && !(q.data && q.data.arrow === false) ? lastDraw : null;
104
+ start(q);
105
+ const room = Math.max(0.5, next(q) - q.at - 0.15), strokes = mk ? mk() : [];
106
+ const P = pts => pts.map(([x, y]) => [cx + x * S, cy + y * S]);
107
+ const capN = [...(q.text || '')].length, arrowL = prev ? Math.max(0, cy - S / 2 - prev.y1) : 0;
108
+ const len = strokes.reduce((s, k) => s + (k.p ? DG.len(P(k.p)) : 0), 0) + arrowL;
109
+ const budget = clamp(room - (capN ? Math.max(0.3, capN / 16) : 0) - 0.1, 0.4, 1.4), sp = Math.max(2600 * u, len / budget);
110
+ if (prev && arrowL > 30 * u) { const ax = prev.cx, ay0 = prev.y1 + 8 * u, ay1 = cy - S / 2 - 8 * u; // 箭头:上一个图标 → 这一个(往下)
111
+ B.line([[ax, ay0], [ax + 6 * u, lerp(ay0, ay1, 0.5)], [ax, ay1]], { col: ORANGE, w: lw, speed: sp });
112
+ const h = Math.min(20 * u, (ay1 - ay0) * 0.4); B.line([[ax - h, ay1 - h], [ax, ay1], [ax + h, ay1 - h]], { col: ORANGE, w: lw, speed: sp, smooth: false }); }
113
+ for (const k of strokes) {
114
+ if (k.seg) { B.segment(P([k.seg[0]])[0], P([k.seg[1]])[0], { w: 2.5 * u, dur: 0.05, gap: 0.008 }); continue; }
115
+ const pts = P(k.p);
116
+ if (k.paper) B.fill(U.poly(pts), BOARD, 0.01);
117
+ B.line(pts, { col: k.o ? ORANGE : INK, w: lw * (k.w || 1), speed: sp * (k.fast ? 2 : 1), gap: 0.015 });
118
+ if (k.fill) B.fill(U.poly(P(k.fill)), WASH);
119
+ }
120
+ B.at(B.cur + 0.02);
121
+ const capMax = capRight ? W - pad - (x0 + S + 24 * u) : W - 2 * pad, cs = q.text ? TY.fit(g, q.text, capMax, capSz, FONT, { maxLines: 1 }).size : capSz; // 说明字放不下先缩字号
122
+ g.font = `${cs}px "${FONT}"`; const cw = q.text ? g.measureText(q.text).width : 0, crate = Math.max(16, capN / Math.max(0.3, room - (B.cur - q.at)));
123
+ const capX = capRight ? x0 + S + 24 * u : clamp(cx, pad + cw / 2, W - pad - cw / 2), capY = capRight ? cy + cs * 0.35 : cy + S / 2 + cs * 1.05; // 竖屏图标在右侧窄栏:居中的说明字夹回画内
124
+ if (q.text) B.text(q.text, capX, capY, cs, { col: INK, align: capRight ? 'left' : 'center', rate: crate });
125
+ const it = { q, kind: 'draw', x: x0, w: S, cx, y0: cy - S / 2, y1: cy + S / 2 + (capRight ? 0 : cs * 1.3),
126
+ hx: capRight ? x0 : Math.min(x0, capX - cw / 2), hw: capRight ? S + 24 * u + cw : Math.max(x0 + S, capX + cw / 2) - Math.min(x0, capX - cw / 2) };
127
+ items.push(it); lastDraw = it;
128
+ if (two) { yP = it.y1 + gap; if (!ctx.portrait) yT = Math.max(yT, pair ? it.y1 + gap * 0.5 : yT); else yT = Math.max(yT, it.y1 + gap * 0.6); }
129
+ else yT = it.y1 + gap;
130
+ } else if (q.kind === 'image') {
131
+ const im = ctx.IMG[q.image]; if (!im) continue;
132
+ // 右栏的图只用剩下的高度,不让相机为右栏往下走、把左栏的字推出画
133
+ const inCol = two && !ctx.portrait, y = (inCol ? yP : Math.max(yT, yP)) + 30 * u, box = inCol ? colP : { x: pad, w: W - 2 * pad };
134
+ const f2 = CLIP.fit(im.width, im.height, box.x, y, box.w, inCol ? Math.max(H * 0.2, Math.min(H * 0.5 * Math.max(0.8, f), H - safe.bottom - 80 * u - y)) : H * (ctx.portrait ? 0.32 : 0.45) * Math.max(0.8, f)), it = { q, kind: 'image', x: f2.x, y0: f2.y, w: f2.w, y1: f2.y + f2.h };
135
+ const zz = DG.zigzag(f2.x - 20 * u, f2.y - 10 * u, f2.w + 40 * u, f2.h + 20 * u, 7), cum = DG.cum(zz), rowH = (f2.h + 20 * u) / 7;
136
+ start(q);
137
+ const s = B.push({ kind: 'custom', t0: B.cur, t1: B.cur + Math.min(1.0, Math.max(0.4, next(q) - q.at - 0.5)), col: INK,
138
+ draw(gg, p) { gg.save(); if (p < 1) gg.clip(DG.revealMask(zz, cum, cum[cum.length - 1] * p, rowH * 2.6)); gg.drawImage(im, f2.x, f2.y, f2.w, f2.h); gg.restore(); return p < 1 ? DG.pointAt(zz, cum, cum[cum.length - 1] * p) : null; },
139
+ start() { return zz[0]; }, end() { return zz[zz.length - 1]; } });
140
+ B.at(s.t1 + 0.02);
141
+ B.line(rectPts(f2.x - 10 * u, f2.y - 10 * u, f2.w + 20 * u, f2.h + 20 * u), { w: lw * 0.8, speed: 9000 * u, amp: 1.0 * u });
142
+ yP = f2.y + f2.h + 60 * u; if (!inCol) yT = yP; items.push(it); lastDraw = null;
143
+ } else if (q.kind === 'highlight') {
144
+ const d = q.data || {}, written = items.filter(z => z.q.at <= q.at), kind = d.target || (d.index != null ? 'point' : null);
145
+ const pool = kind ? written.filter(z => z.kind === kind) : written, all = kind ? items.filter(z => z.kind === kind) : items;
146
+ const it = d.index != null ? all[d.index] : pool[pool.length - 1];
147
+ if (!it) { console.warn(`y3 highlight at=${q.at}:找不到要圈的条目(index=${d.index} target=${d.target || 'point'})`); continue; }
148
+ start(q);
149
+ const hx = it.hx ?? it.x, hw = it.hw ?? it.w;
150
+ if (d.style === 'underline') B.line([[hx - 10 * u, it.y1 + 12 * u], [hx + hw / 2, it.y1 + 18 * u], [hx + hw + 10 * u, it.y1 + 10 * u]], { col: ORANGE, w: lw * 1.3, speed: 3000 * u });
151
+ else B.line(DG.ellipsePts(hx + hw / 2, (it.y0 + it.y1) / 2, hw * 0.56 + 30 * u, (it.y1 - it.y0) * 0.62 + 24 * u, -2.9, 1.08, 44), { col: ORANGE, w: lw, speed: 3600 * u, amp: 1.6 * u });
152
+ }
153
+ }
154
+ const bottom = Math.max(...items.map(z => z.y1), top);
155
+ return { B, items, bottom, top, pad };
156
+ }
157
+ return {
158
+ fonts: [FONT],
159
+ safe: true,
160
+ init(ctx) {
161
+ const { W, H, u, safe } = ctx;
162
+ band = { y0: safe.top, y1: H - safe.bottom }; band.h = band.y1 - band.y0;
163
+ // 字号系数 f 从 1.2 往下试:内容少就放大撑满版面,内容多就缩(最小 0.72),还放不下才让相机往下走
164
+ let L; for (let f = 1.2; f >= 0.7; f -= 0.04) { L = layout(ctx, f); if (L.bottom + 70 * u <= band.y1) break; } // 内容少就放大(最大 1.2)把版面撑满
165
+ ({ B, items } = L);
166
+ OFF = [W + 140 * u, H + 280 * u];
167
+ lastEnd = Math.max(0, ...B.S.map(s => s.t1));
168
+ // 相机:内容超出可用带就在下一条开写前平移过去(sineInOut);最后有空就拉远看全图(只拉进 safe 带)
169
+ keys = [{ t: 0, x: W / 2, y: H / 2, z: 1 }]; let cy = H / 2, panned = false;
170
+ for (const it of items) {
171
+ const need = it.y1 + 70 * u - (cy + band.y1 - H / 2); if (need <= 0) continue;
172
+ panned = true; cy += need + band.h * 0.12; const t1 = Math.max(keys[keys.length - 1].t + 0.2, it.q.at), t0 = Math.max(keys[keys.length - 1].t + 0.01, t1 - 0.6);
173
+ keys.push({ t: t0, x: W / 2, y: keys[keys.length - 1].y, z: 1 }); keys.push({ t: t1, x: W / 2, y: cy, z: 1, ease: MO.sineInOut });
174
+ }
175
+ const y0c = Math.min(L.top, ...items.map(z => z.y0)) - 50 * u, y1c = L.bottom + 40 * u, total = y1c - y0c;
176
+ const zEnd = Math.min(0.94, band.h / total * 0.96);
177
+ // 收尾拉远:最后一笔后有 ≥0.6s 才拉;相机走过了的话,就算时间紧也在最后 0.8s 拉(不然末帧标题被切在顶上)
178
+ const tz0 = Math.max(keys[keys.length - 1].t + 0.01, panned ? Math.min(lastEnd + 0.1, ctx.dur - 0.8) : lastEnd + 0.1);
179
+ if (ctx.dur - tz0 >= 0.6) {
180
+ const prev = keys[keys.length - 1]; keys.push({ ...prev, t: tz0, ease: undefined });
181
+ const midW = (y0c + y1c) / 2, ty = midW - ((band.y0 + band.y1) / 2 - H / 2) / zEnd; // 全图中心落在 safe 带中心
182
+ keys.push({ t: Math.min(ctx.dur - 0.15, tz0 + 0.8), x: W / 2, y: ty, z: zEnd, ease: MO.sineInOut });
183
+ }
184
+ },
185
+ draw(c, t, ctx) {
186
+ const { W, H, u } = ctx, cam = CAM.at(keys, t);
187
+ const g = ctx.alpha ? (() => { const b = UI.scratch('clip_y3buf', W, H), x = b.getContext('2d'); x.setTransform(1, 0, 0, 1, 0, 0); x.clearRect(0, 0, W, H); return x; })() : c;
188
+ if (!ctx.alpha) { c.fillStyle = BOARD; c.fillRect(0, 0, W, H); }
189
+ g.save(); CAM.apply(g, cam); const { tip, col } = B.draw(g, t); g.restore();
190
+ const pen = penAt(t, cam, tip, ctx);
191
+ if (pen) DG.pen(g, pen[0], pen[1], col || B.penColor(t), Math.sin(t * 7) * 0.03);
192
+ if (ctx.alpha) halo(c, g.canvas, W, H, 'rgba(255,255,255,0.92)', 4 * u);
193
+ },
194
+ };
195
+ // 笔的位置(屏幕):在画 → 笔尖;空档短 → 沿弧线滑;空档长 → 退出右下再进来;画完最后一笔 → 0.35s 退场(返回 null = 不画)
196
+ function penAt(t, cam, tip, ctx) {
197
+ if (tip) return CAM.toScreen(cam, tip[0], tip[1]);
198
+ const hs = B.S.filter(s => s.kind !== 'pop' && s.kind !== 'fill' && (s.kind !== 'custom' || s.handed !== false));
199
+ let prev = null, next = null; for (const s of hs) { if (s.t1 <= t) prev = s; else if (s.t0 > t && !next) next = s; }
200
+ if (prev && next && next.t0 - prev.t1 <= 0.6) return B.penAt(t, cam, null);
201
+ const end = s => B.penAt(s.t1, cam, null); // 上一笔终点(屏幕)
202
+ if (next && next.t0 - t <= 0.3) { const b = CAM.toScreen(cam, ...(next.kind === 'custom' ? next.start() : next.kind === 'line' ? next.pts[0] : [next.x, next.y - next.size * 0.3])), q = MO.cubicOut(1 - (next.t0 - t) / 0.3); return [lerp(OFF[0], b[0], q), lerp(OFF[1], b[1], q)]; }
203
+ if (prev && t - prev.t1 < 0.35) { const a = end(prev), q = MO.cubicIn((t - prev.t1) / 0.35); return [lerp(a[0], OFF[0], q), lerp(a[1], OFF[1], q)]; }
204
+ return null;
205
+ }
206
+ })();
@@ -0,0 +1,10 @@
1
+ // 示范 · 白板手绘解说(RSA Animate 型)「AI 是怎么学会认猫的」(8 秒三镜)。语法卡:references/动画语法/y3_whiteboard.md
2
+ // 预览 index.html?film=demos/y3_whiteboard 渲染 render.py --film demos/y3_whiteboard --out y3.mp4
3
+ // 一整块大白板=世界,相机在板上移动;三段是同一个画面函数(DG.board 的笔画时间线),段只是为了 qa 分镜。
4
+ window.PUNCH = 0;
5
+ window.SCENE_LIBS = ['demos/_shared/hero.js', 'demos/y3_whiteboard/whiteboard.js'];
6
+ window.ERAS = [
7
+ { id: 'y3_s1', dur: 2.5 }, // 画猫、写「猫?」、写问题
8
+ { id: 'y3_s2', dur: 2.25, transition: { type: 'same', dur: 0.8 } }, // 甩镜(0.8s 带运动模糊,笔不离板)
9
+ { id: 'y3_s3', dur: 3.25, transition: { type: 'same', dur: 0.85 } }, // 板上平滑移动 → 画花叔、「是猫!」→ 拉远看全图
10
+ ];
@@ -0,0 +1,162 @@
1
+ // Y3 · 白板手绘解说(RSA Animate 型:一整块大白板+相机移动):「AI 是怎么学会认猫的」
2
+ // 依据:语法卡 y3_whiteboard.md(RSA 实测:黑 #0A0503+唯一强调色橙 #EB701F;写字≈16 字/秒、比口播晚 0.5s;
3
+ // 平滑移动 easeInOutSine 中位 1.8s;远跳用 0.8s 带运动模糊的甩镜;手从右下入画、画完出画;结尾拉远看全图)
4
+ // ①画一只猫、写「猫?」、写问题 → 转场 A「甩镜」:笔不离板,相机 0.8s 甩到板上远处,带运动模糊
5
+ // ②画 1000 万张图的一摞(橙色数字直接弹出、不带手)、箭头、神经网络、「自己找规律」
6
+ // → 转场 B「板上平滑移动」:相机 sine 缓入缓出 0.95s 斜移到旁边空白处,手在相机落定前就开始画
7
+ // ③画花叔指着猫、打勾,橙色「是猫!」弹出 → 收尾「拉远看全图」(RSA / VideoScribe 默认的 Zoom at end),整板铺一层灰
8
+ // 用到的库:DG.board(笔画时间线+跟随的笔)、DG.pen、DG.revealMask/zigzag(人物 Reveal)、CAM(关键帧相机、运动模糊)。
9
+ (() => {
10
+ const W = 1920, H = 1080;
11
+ const { clamp, lerp, rng } = U;
12
+ const seg = MO.seg;
13
+ const Y3 = window.Y3 = {};
14
+ const F0 = 0; Y3.F0 = F0;
15
+ Y3.SHOTS = { s1: [0, 2.5], s2: [2.5, 4.75], s3: [4.75, 8.0] };
16
+ const INK = '#0A0503', ORANGE = '#EF7226', WASH = 'rgba(239,114,38,.22)', BOARD = '#FBFBFB';
17
+ const LW = 6.5; // RSA 实测笔画约画高 0.6–0.7%(1080p≈6–7px)
18
+ const R1 = [960, 540], R2 = [3000, 540], R3 = [3700, 1360], K3 = 0.8;
19
+ const L3 = (x, y) => [R3[0] + (x - 960) * K3, R3[1] + (y - 540) * K3];
20
+ const SPEED = 2600; // 线条笔速:世界像素/秒(演示片比 RSA 实拍快约 2 倍,见卡片)
21
+
22
+ // ---------- 笔画时间线:按顺序排,时长 = 长度 / 笔速 ----------
23
+ const B = DG.board({ ink: INK, lw: LW, speed: SPEED, font: '"LXGWWenKai-500"' });
24
+ const tr = DG.xform, arc = DG.arcPts, pathOf = pts => U.poly(pts);
25
+
26
+ // 猫的笔画(本地坐标,原点 = 坐姿底部中心,约 400 高)
27
+ const catStrokes = (ox, oy, s, sp, w, whiskers = true) => {
28
+ const P = (pts) => tr(pts, ox, oy, s);
29
+ B.line(P([[-60, -250], [-92, -330], [-30, -300], [30, -300], [92, -330], [60, -250]]), { w, speed: sp });
30
+ B.line(P(arc(0, -230, 100, 82, -0.55, Math.PI + 0.55, 26).reverse()), { w, speed: sp });
31
+ B.line(P([[-80, -170], [-120, -60], [-110, 0], [110, 0], [120, -60], [80, -170]]), { w, speed: sp });
32
+ B.line(P([[110, -20], [190, -40], [210, -130], [170, -190]]), { w, speed: sp });
33
+ B.line(P(arc(-38, -240, 12, 16, 0, Math.PI * 2, 14)), { w: w * 0.8, speed: sp * 1.6 });
34
+ B.line(P(arc(38, -240, 12, 16, 0, Math.PI * 2, 14)), { w: w * 0.8, speed: sp * 1.6 });
35
+ B.line(P([[-10, -205], [10, -205], [0, -194], [-10, -205]]), { w: w * 0.8, speed: sp * 1.6, smooth: false });
36
+ if (whiskers) for (const k of [-1, 1]) B.line(P([[k * 30, -196], [k * 110, -206]]), { w: w * 0.6, speed: sp * 2 });
37
+ };
38
+ const catBody = (ox, oy, s) => pathOf(tr([[-80, -170], [-120, -60], [-110, 0], [110, 0], [120, -60], [80, -170], [60, -160], [0, -150], [-60, -160]], ox, oy, s));
39
+
40
+ // ===== 第一块 =====
41
+ B.at(0.12);
42
+ catStrokes(760, 820, 1.0, SPEED * 0.75, LW + 1);
43
+ B.fill(catBody(760, 820, 1.0), WASH);
44
+ B.text('猫?', 1060, 560, 150, { col: ORANGE, rate: 7.5 }); // 标题级:7.5 字/秒
45
+ B.line([[1080, 610], [1020, 660], [930, 690]], { col: ORANGE });
46
+ B.line([[960, 668], [928, 690], [966, 704]], { col: ORANGE, smooth: false });
47
+ B.text('AI 怎么认出它?', 960, 960, 84, { align: 'center' }); // 正文:16 字/秒
48
+ B.line([[1290, 590], [1500, 560], [1760, 540]], { col: ORANGE, speed: SPEED * 1.6 }); // 指向下一块的橙箭头:甩镜有了方向
49
+ B.line([[1725, 512], [1764, 540], [1728, 572]], { col: ORANGE, smooth: false });
50
+ const END1 = B.cur;
51
+ // 甩镜时笔不离板:笔尖在屏幕上从第一块的箭头头滑向第二块的起笔点,板在笔下飞过,留下一条橙色连线(笔一直在画,视线一直被它领着)。
52
+ // 轨迹 = 屏幕上的笔位置按当时的相机反算成世界点(第一次画时算好)。
53
+ const trail = { kind: 'custom', from: [1764, 540], to: [2382, 278], t0: B.cur + 0.01, t1: 3.3, col: ORANGE, w: LW, wob: 14,
54
+ draw(g, q) {
55
+ const s = this;
56
+ if (!s.pts) { const N = 72, a = CAM.toScreen(camAt(s.t0), ...s.from), b = CAM.toScreen(camAt(s.t1), ...s.to); s.pts = [];
57
+ for (let i = 0; i <= N; i++) { const u = i / N, cm = camAt(lerp(s.t0, s.t1, u)), e = MO.sineInOut(u), sx = lerp(a[0], b[0], e), sy = lerp(a[1], b[1], e) + Math.sin(u * Math.PI * 3) * s.wob * Math.sin(u * Math.PI);
58
+ s.pts.push(CAM.toWorld(cm, sx, sy)); }
59
+ s.cum = DG.cum(s.pts); }
60
+ const k = q * (s.pts.length - 1), i = Math.floor(k), f = k - i, d = s.cum[i] + (i < s.pts.length - 1 ? (s.cum[i + 1] - s.cum[i]) * f : 0);
61
+ g.strokeStyle = s.col; g.lineWidth = s.w; return DG.drawPartial(g, s.pts, s.cum, d);
62
+ },
63
+ start() { return this.from; }, end() { return this.pts ? this.pts[this.pts.length - 1] : this.to; } };
64
+ B.push(trail);
65
+
66
+ // ===== 第二块(相机 2.5→3.3 甩过来) =====
67
+ B.at(3.31);
68
+ for (let i = 2; i >= 0; i--) { const x = 2330 + i * 26, y = 330 - i * 26; B.fill(pathOf([[x, y], [x + 260, y], [x + 260, y + 190], [x, y + 190]]), BOARD, 0.01); B.line([[x, y], [x + 260, y], [x + 260, y + 190], [x, y + 190], [x, y + 3]], { w: 6, speed: SPEED * 4.5, smooth: false, amp: 0 }); }
69
+ B.line(tr([[-60, -250], [-92, -330], [-30, -300], [30, -300], [92, -330], [60, -250], ...arc(0, -230, 100, 82, -0.55, Math.PI + 0.55, 20).reverse(), [-60, -250]], 2460, 560, 0.4), { w: 5, speed: SPEED * 3, gap: 0 });
70
+ B.line(tr([[-38, -240], [-38, -236], [38, -236], [38, -240]], 2460, 560, 0.4), { w: 6, speed: SPEED, smooth: false, gap: 0.01 });
71
+ B.pop('×1000万张', 2470, 690, 74, { col: ORANGE });
72
+ B.line([[2680, 450], [2800, 452], [2860, 450]]);
73
+ B.line([[2830, 425], [2864, 450], [2830, 476]], { smooth: false });
74
+ const NET = [[2960, [330, 450, 570]], [3090, [300, 450, 600]], [3220, [400, 500]]];
75
+ for (const [x, ys] of NET) for (const y of ys) B.line(arc(x, y, 26, 26, -Math.PI / 2, Math.PI * 1.55, 16), { w: 6, speed: SPEED * 5, amp: 0.8, min: 0.03, gap: 0.01 });
76
+ for (let a = 0; a < 2; a++) for (const y0 of NET[a][1]) for (const y1 of NET[a + 1][1]) B.segment([NET[a][0] + 26, y0], [NET[a + 1][0] - 26, y1], { w: 3 });
77
+ B.at(B.cur + 0.05);
78
+ B.text('自己找规律', 3090, 780, 64, { align: 'center' });
79
+ // 橙色连线:从网络引向下一块(相机开始移动时画,手领着相机走)
80
+ B.at(4.62); B.line([[3250, 470], [3420, 560], [3480, 760], [3420, 900]], { col: ORANGE, speed: SPEED * 1.4 }); B.line([[3392, 868], [3420, 902], [3452, 872]], { col: ORANGE, smooth: false });
81
+ const END2 = B.cur;
82
+
83
+ // ===== 第三块(相机 5.1→6.05 平滑斜移;手在 5.8 就入画开画) =====
84
+ B.at(5.35);
85
+ // VideoScribe 的 Reveal 画法——完整线稿藏在下面,笔尖从上往下走 8 行之字形,笔过之处揭开(笔尖永远在揭开的前沿上)
86
+ const huashu = () => { const [x, y] = L3(500, 1010); return HUASHU.build({ x, y, s: 0.95 * K3, face: 1, pose: HUASHU.pose('point', 0, { ua1: 1.25, mouth: 0.8 }) }); };
87
+ const rigZig = (HSb) => { if (rigZig.c) return rigZig.c; const js = Object.values(HSb.J).filter(v => Array.isArray(v)); const xs = js.map(v => v[0]), ys = js.map(v => v[1]);
88
+ const x0 = Math.min(...xs) - 70, x1 = Math.max(...xs) + 50, y0 = Math.min(...ys) - 20, y1 = Math.max(...ys) + 40, rows = 8;
89
+ rigZig.rowH = (y1 - y0) / rows; const zz = DG.zigzag(x0, y0, x1 - x0, y1 - y0, rows); return (rigZig.c = { zz, cum: DG.cum(zz) }); };
90
+ const RIG3 = { t0: B.cur, t1: B.cur + 0.7 };
91
+ B.push({ kind: 'custom', t0: RIG3.t0, t1: RIG3.t1,
92
+ draw(g, q, ft) {
93
+ const HSb = huashu(), { zz, cum } = rigZig(HSb), d = cum[cum.length - 1] * q;
94
+ g.save(); if (q < 1) g.clip(DG.revealMask(zz, cum, d, rigZig.rowH * 2.2)); g.lineJoin = 'round'; g.lineCap = 'round'; // 揭完就不再裁:之字形拐角处的三角会漏掉
95
+ const [fx, fy] = L3(500, 1010);
96
+ if (!HERO.y3(g, fx, fy, 0.95 * K3 * 740, ft)) {
97
+ for (const p of HSb.parts) { g.fillStyle = p.role === 'hair' ? INK : BOARD; g.fill(p.path); g.strokeStyle = INK; g.lineWidth = LW * 0.9; g.stroke(p.path); }
98
+ HUASHU.details(g, HSb, { line: INK, lw: 4.5, glass: INK, cheek: null, earLine: 'rgba(0,0,0,.5)', shoeHole: INK });
99
+ }
100
+ g.restore();
101
+ return q < 1 ? DG.pointAt(zz, cum, d) : null;
102
+ },
103
+ start() { return rigZig(huashu()).zz[0]; }, end() { const z = rigZig(huashu()).zz; return z[z.length - 1]; } });
104
+ B.at(RIG3.t1 + 0.03);
105
+ catStrokes(...L3(1150, 900), K3 * 0.95, SPEED * 1.6, LW, false);
106
+ B.line([L3(1000, 330), L3(1070, 400), L3(1240, 200)], { col: ORANGE, w: LW + 2, speed: SPEED * 1.5, smooth: false });
107
+ B.pop('是猫!', ...L3(1500, 410), 150 * K3, { col: ORANGE, align: 'left' });
108
+ // 收尾:拉远的同时圈住「是猫!」,全景停住时回到第一块,在问题下面划一道——问题和答案连上,笔停在最后一笔上
109
+ B.at(Math.max(B.cur + 0.02, 6.95));
110
+ B.line(DG.ellipsePts(...L3(1720, 360), 300 * K3, 120 * K3, -2.9, 1.08, 40), { col: ORANGE, w: LW, speed: SPEED * 1.1 });
111
+ B.at(Math.max(B.cur + 0.06, 7.52));
112
+ B.line([[640, 1000], [960, 1006], [1290, 998]], { col: ORANGE, w: LW + 2, speed: SPEED * 0.9 });
113
+ const END3 = B.cur;
114
+ Y3.timeline = { END1, END2, END3, RIG3 };
115
+ Y3.board = B;
116
+
117
+ // ---------- 相机 ----------
118
+ const OVER = { x: 2400, y: 930, z: 0.45 };
119
+ const camAt = ft => CAM.at([
120
+ { t: 0, x: R1[0], y: R1[1], z: 1.0 },
121
+ { t: 2.5, x: R1[0] + 12, y: R1[1] + 6, z: 1.02, ease: MO.sineInOut },
122
+ // 甩镜:0.8s(RSA 实测远跳约 0.8s,带运动模糊)
123
+ { t: 3.3, x: R2[0], y: R2[1], z: 1.0, ease: MO.cubicInOut },
124
+ { t: 4.7, x: R2[0] + 16, y: R2[1] + 6, z: 1.02, ease: MO.sineInOut },
125
+ // 板上平滑移动:easeInOutSine 0.9s(实测中位 1.8s,演示片压缩)
126
+ { t: 5.6, x: R3[0], y: R3[1] - 20, z: 1.12, ease: MO.sineInOut },
127
+ { t: 6.85, x: R3[0] + 10, y: R3[1] - 14, z: 1.14, ease: MO.sineInOut },
128
+ // 拉远看全图,停 0.5s
129
+ { t: 7.5, ...OVER, ease: MO.sineInOut },
130
+ { t: 8.0, ...OVER, z: OVER.z * 0.985, ease: MO.sineInOut },
131
+ ], ft);
132
+ Y3.camAt = camAt;
133
+
134
+ // ---------- 画 ----------
135
+ const drawBoard = (c, cam, ft) => {
136
+ // 结尾整板铺一层灰(RSA 实测),在拉远时 0.5s 淡入
137
+ const gray = MO.sineInOut(seg(ft, 6.9, 7.4));
138
+ c.fillStyle = gray > 0 ? PAINT.rgb(PAINT.mix(PAINT.hex(BOARD), [238, 238, 236], gray)) : BOARD; c.fillRect(0, 0, W, H);
139
+ // 极淡的擦痕:屏幕空间平铺、跟着相机平移走(不随缩放放大)
140
+ const sm = PAINT.cached('y3smudge', 1024, 1024, g => { const r = rng(5); for (let i = 0; i < 22; i++) { g.fillStyle = `rgba(120,120,130,${0.003 + r() * 0.005})`; g.beginPath(); g.ellipse(r() * 1024, r() * 1024, 80 + r() * 200, 14 + r() * 40, r() * 3, 0, 7); g.fill(); } });
141
+ c.save(); const ox = -(((cam.x * cam.z) % 1024) + 1024) % 1024, oy = -(((cam.y * cam.z) % 1024) + 1024) % 1024; c.translate(ox, oy); c.fillStyle = c.createPattern(sm, 'repeat'); c.fillRect(0, 0, W + 1024, H + 1024); c.restore();
142
+ c.save(); CAM.apply(c, cam);
143
+ const r = B.draw(c, ft);
144
+ c.restore();
145
+ return r;
146
+ };
147
+ const shot = (c, lt, t) => {
148
+ const ft = t - F0, cam = camAt(ft);
149
+ const buf = PAINT.scratch('yt_y3board'), g = buf.getContext('2d'); g.reset();
150
+ const { tip, col } = drawBoard(g, cam, ft);
151
+ const [vx, vy] = CAM.velocity(camAt, ft);
152
+ c.fillStyle = BOARD; c.fillRect(0, 0, W, H);
153
+ const whip = ft > 2.5 && ft < 3.3; // 只有甩镜带模糊;板上平滑移动和结尾拉远都是清楚的(RSA 实测)
154
+ CAM.motionBlur(c, buf, whip ? vx * 0.8 : 0, whip ? vy * 0.8 : 0, 9);
155
+ const [hx, hy] = B.penAt(ft, cam, tip);
156
+ DG.pen(c, hx, hy, col || B.penColor(ft), Math.sin(ft * 7) * 0.03); // 只有一支马克笔,笔尾帽 = 墨色
157
+ };
158
+ Y3.shot1 = shot; Y3.shot2 = shot; Y3.shot3 = shot;
159
+ SCENES['y3_s1'] = { draw: shot };
160
+ SCENES['y3_s2'] = { draw: shot };
161
+ SCENES['y3_s3'] = { draw: shot };
162
+ })();
@@ -0,0 +1,182 @@
1
+ # Y3 · 白板手绘解说(RSA Animate 型):视频动画语法卡
2
+
3
+ 一句话:讲者说一句,手就在一张大白板上写一句、画一个图;相机跟着论证在板上移动,最后拉远,观众看到整场论证是一张图。
4
+
5
+ 示范片:`scripts/engine/demos/y3_whiteboard/`(渲染 `render.py --film demos/y3_whiteboard`)(8s,3 镜,转场 2 种+收尾拉远),总览:`assets/动画语法/y3_whiteboard_总览.jpg`
6
+ 依据:本风格的调研(调研原文与逐帧数据留在实验归档、没收进 skill,用到的数字已摘进本卡)。实测了 RSA Animate《Changing Education Paradigms》和 Minute Physics《Why is it Dark at Night?》,还查了 VideoScribe、Doodly 的官方文档和 Andrew Park、Henry Reich 的一手说法。
7
+
8
+ **先选一种语法,不能混**:
9
+ - RSA 型:一整块大白板,相机在板上移动,每分钟 5.3 次。
10
+ - Minute Physics 型:一页一张纸,硬切换纸,每分钟 8.1 次,相机不动。
11
+ - 本卡和示范片走 RSA 型。Minute Physics 型的要点写在 ④ 和 ⑧ 里。
12
+
13
+ ---
14
+
15
+ ## ① 适用场景
16
+
17
+ **用它:**
18
+ - 论证型内容:演讲、观点、因果链、历史脉络。概念之间有关系、能画成一张地图的内容最合适。Andrew Park 的原话是「把信息摆在空间里,让人看见事物之间的关系」【一手】。
19
+ - 一条推理链的短科普,走 Minute Physics 型。
20
+ - 口播语速平稳,关键词清楚。RSA 的写字速度大约等于语速,像「字幕被手写出来」【实测】。
21
+
22
+ **别用它:**
23
+ - 需要精确数据图表的内容,手绘误差大。
24
+ - 动作和空间关系复杂的内容,白板没有景深。
25
+ - 需要情绪强度的内容,单色线稿表达弱。
26
+ - 想靠它「提升理解」:Türkay 2016 的实验没发现白板动画比其他形式学得更好。它的价值在吸引注意和陪伴感【二手】。
27
+
28
+ ## ② 画面构成
29
+
30
+ - **配色**(RSA 实测):
31
+ - 底:纯白 `#FBFBFB`
32
+ - 线:黑 `#0A0503`
33
+ - 唯一强调色:橙,文字 `#EB701F`,填色 `#F3742D`;斜线排出的浅橙面约 `#E9A67C`
34
+ - 橙色约占全部笔迹像素的 22%,只用在关键词和斜线填色上。
35
+ - Minute Physics 则是偏粉的米白纸 `#E7DBE1`,加彩铅浅黄 `#EDE6A2` 和浅蓝 `#B5CBE8`。
36
+ - **【本片】**:底 `#FBFBFB`,线 `#0A0503`,强调 `#EF7226`。猫身用 22% 透明度的橙色铺一层。
37
+ - **线宽**:RSA 笔画约为画高的 0.6–0.7%,1080p 下约 6–7px;阴影斜线约 0.3%;标题字高约为画高的 5.5%。Minute Physics 的线更粗,约 0.8%【实测】。【本片】线宽 6.5px。
38
+ - **构图**:
39
+ - RSA 是「先规划好最终全图,再倒着画」【一手】。
40
+ - 每块画面里有 3–6 个图文组块,画满再移走。
41
+ - 平滑移动一次只移 0.23 个画宽,所以新旧两块大面积重叠,观众始终看得到上一块的边【实测】。
42
+ - 收尾露出的全图是一条很长的横向长卷。
43
+ - **字**:RSA 是全大写的手写印刷体(漫画对白体)。【本片】中文用霞鹜文楷(LXGW WenKai),子集化成 woff。
44
+ - **手**:
45
+ - 真人右手握黑马克笔,从**右下方**入画,前臂斜向右下,遮住 15–25% 的画面。
46
+ - 不画的时候整只手出画。手在画面里的时间:RSA 49%,Minute Physics 40%【实测】。
47
+ - 【本片】代码画的手:裸前臂带暗面和汗毛,食指压黑马克笔,缩放 0.82,按 7 rad/s 轻轻晃。
48
+
49
+ ## ③ 运动轨迹
50
+
51
+ - **写字速度**【实测,9 例】:
52
+ - 正文中位约 16 字符/秒。
53
+ - 片头标题慢一半,约 7.5 字符/秒,用来「立题」。
54
+ - 口播约 13 字符/秒,所以写字速度大致等于语速。
55
+ - 【本片】正文 16 字/秒;「猫?」按标题 7.5 字/秒写。
56
+ - **画图速度**【实测+归纳】:
57
+ - 小图标 0.5–1s,人物头像约 2s。
58
+ - RSA 新增墨迹的面积中位是每秒 0.25% 画面。
59
+ - 复杂插画不当着镜头画:要么预先画好,相机移过去时露出来;要么整张硬切进来,手只补色。
60
+ - **【本片】**:
61
+ - 线条笔速 2600 世界像素/秒,约为 RSA 实拍的 2 倍。8 秒演示片必须压缩,真片请放慢。
62
+ - 笔画时长按长度除以笔速算,每笔至少 0.04s,抬笔间隔 0.02s。
63
+ - 每笔内部用 sineInOut,起笔、收笔慢。
64
+ - 花叔用 0.7s「Reveal」揭开:笔尖在他的关节包围盒里走 8 行之字形,`DG.revealMask` 把走过的地方变成 clip,线稿只在 clip 里露出。
65
+ - 第一版是按部件 `setLineDash` 同时描、笔尖沿关节走,审片判「笔不领线」,所以换了。
66
+ - 汉字没有笔顺数据,每个字用 3 行之字形揭开,笔尖跟着来回,看起来就是在写。
67
+ - **加速倍率**:Henry Reich 每秒拍 1 张照片,画画时每张停 2 帧,等效约 12 倍速。RSA 推断 5–8 倍【一手+推断】。
68
+ - **「不带手」的弹出**:RSA 有一部分橙色关键词是后期整词弹出的,没有手画(ANAESTHETIC、CREATIVITY)【实测】。【本片】「×1000万张」「是猫!」用 0.3s backOut(2.2) 弹出,手不过去。
69
+ - **笔尖路径**:
70
+ - 两笔之间间隔 <0.25s 时,笔尖从上一笔终点沿弧线滑到下一笔起点(sineInOut,抬高 30px)。
71
+ - 间隔更长时,抬手出画:0.35s cubicIn 退到右下屏外。
72
+ - 下一笔开始前 0.3s,从右下 cubicOut 进来。
73
+ - **持续运动**:白板片的「活」来自手一直在画。RSA 的画线活动量和说话词密度之间几乎不相关(|r|<0.07):说话停顿时,手也不停【实测】。
74
+
75
+ ## ④ 转场(常用 5 种)
76
+
77
+ 1. **板上平滑移动或推拉**(RSA 主力,41 次)。
78
+ - 1.2–2.4s,**easeInOutSine**:实测速度峰值/均值 1.49,理论 sine 是 1.57。
79
+ - 一次平移约 0.23 画宽,与上一块重叠约 75%。
80
+ - 【本片】转场 B:0.9s sineInOut(4.7→5.6s),斜移约 0.5 画宽,同时推到 1.12 倍。移动开始时手正在画一支橙色连线引向新区域,手领着相机走。
81
+ 2. **甩镜**:快速摇加运动模糊,约 0.8s,一次移 0.5–1.2 画宽,用来跳到板上很远的区域(RSA 15 次)。
82
+ - 【本片】转场 A:0.8s cubicInOut 横移约一整屏。只在这 0.8s 里沿速度方向叠 9 次做模糊;平滑移动和拉远都保持清楚。
83
+ 3. **拉远揭示全图**(收尾)。
84
+ - RSA 片尾:灰色铺满 → 0.6s 快速拉远 → 约 9s 横摇扫过长卷 → 再拉远看全图。
85
+ - VideoScribe 默认就勾着「Zoom at end?」【一手】。
86
+ - 【本片】6.85→7.5s sineInOut 拉到 0.45 倍,停 0.5s,同时整板在 0.5s 里铺一层很浅的灰 `#EEEEEC`。
87
+ 4. **云团或爆炸擦除**:卡通烟团铺满再散开,约 1s(RSA 1 次)。
88
+ 5. **硬切**:硬切到预先画好的图(RSA 少量);Minute Physics 型的换纸硬切(主力,每分钟 8.1 次);Minute Physics 讲黑夜时整帧反相。
89
+
90
+ **注意**:「推进到画框或泡泡里」「翻页」在样片里都没出现。本片第一版做了「推进思考泡泡」,看过调研后换成甩镜加平滑移动。
91
+
92
+ ## ⑤ 节奏与文字
93
+
94
+ - **每块停留**:RSA 两次相机移动之间中位 6.6s(四分位 4.0–13.8s);Minute Physics 每个镜头中位 7.1s【实测】。示范片 8s 放了 3 块,约为真片密度的 2.5 倍。
95
+ - **和口播对齐(核心)**【实测】:
96
+ - 开写比对应短语开说晚 0.2–0.8s,中位 +0.5s。
97
+ - 短语说完后 1s 内写完:边说边写,稍微落后,**不抢先**。
98
+ - 例外是视觉铺垫(药瓶、箭头)会提前几秒画好,等台词说到。
99
+ - Minute Physics 是名词一说出来图就落下,中位 +0.3s。
100
+ - **转场卡话题,不卡停顿**:新的一块板对应一个新论点【实测+归纳】。
101
+ - **音乐**:RSA 在讲话下面**没有音乐**。Minute Physics 全程有音乐垫底,约比人声低 9dB【实测】。
102
+ - **工具默认值**:
103
+ - VideoScribe 画完停留默认 0.5s【一手】,相机移动默认 1s【二手】。
104
+ - Doodly 每个素材默认画 3s【一手】。
105
+
106
+ ## ⑥ 代码实现要点
107
+
108
+ > 收进 skill 后(2026-10-04 v0.4):本卡「新写」里的通用函数已统一进 `scripts/engine/lib/`(名字已换成统一后的 MO / CAM / DG / TY / CH / UI / CL / TOON),示范片自己的代码在 `scripts/engine/demos/y3_whiteboard/`。库速查和「怎么为一段口播选语法」见 `references/09-视频动画语法.md`。
109
+
110
+ - 复用 skill:
111
+ - `KIT.densify / KIT.resample`:Catmull-Rom 加密后按弧长等距重采样,`DG.hand` 在这之上加低频噪声
112
+ - `PAINT.noise`、`PAINT.cached`
113
+ - `HUASHU.build/pose/details`:花叔线稿
114
+ - 引擎转场接口
115
+ - 新写、现已统一进库(`lib/diagram.js` / `camera.js`):
116
+ - `DG.cum / DG.pointAt / DG.drawPartial`:折线按长度描出,返回笔尖位置。
117
+ - `CAM.at`:关键帧相机。
118
+ - `CAM.motionBlur`:运动模糊。
119
+ - `DG.revealMask / DG.zigzag`:之字形揭开遮罩(审片后新加)。
120
+ - 示范片自己的(`demos/y3_whiteboard/whiteboard.js`;笔画时间线、笔间滑移、马克笔已进库为 `DG.board` / `B.penAt` / `DG.pen`):
121
+ - **笔画时间线**:`addLine / addText / addPop / addFill` 按顺序排,时长由长度和速度自动算,交付时打印 `Y3.timeline` 核对每块的结束时间。第一版第二块排到了 7.9s,比相机移动晚了 2.5s,靠这个数才发现。
122
+ - `drawStroke`:线、字、弹出、填色、角色五种。字和角色都用之字形遮罩揭开,笔尖坐标直接取遮罩的前沿。
123
+ - `penAt`:笔尖与手的路径,包括笔间滑移、抬手出画、入画。
124
+ - `drawHand`:手和马克笔。
125
+ - 擦痕纹理放在屏幕空间,只跟相机平移、不跟缩放,否则推近 5 倍时会变成大灰斑。
126
+ - **关键架构**:三镜画的是同一块白板、同一台相机,转场全是 `same`。「转场」本身就是相机运动,所以白板上的东西在转场里绝不会跳。
127
+
128
+ ## ⑦ 代表作品与一手参考
129
+
130
+ - 样片:
131
+ - RSA ANIMATE: Changing Education Paradigms https://www.youtube.com/watch?v=zDZFcDGpL4U
132
+ - MinutePhysics: Why is it Dark at Night? https://www.youtube.com/watch?v=gxJ4M7tyLRE
133
+ - Andrew Park 访谈(Sketchnote Army 2025)https://sketchnotearmy.com/blog/2025/11/18/andrew-park
134
+ - Cognitive Media「毛手」https://www.hairyhand.co/about
135
+ - VideoScribe 官方文档:
136
+ - 相机与 Zoom at end https://help.videoscribe.co/knowledge/use-zoom-and-set-the-camera
137
+ - Draw 入场 https://help.videoscribe.co/knowledge/draw
138
+ - 入场动画 https://help.videoscribe.co/knowledge/entrance-animations
139
+ - Doodly 默认值 https://support.voomly.com/en/articles/12735753-doodly-how-do-i-customize-video-settings
140
+ - 学习效果研究(转引)https://en.wikipedia.org/wiki/Whiteboard_animation
141
+
142
+ ## ⑧ 最容易做错的 3 件事
143
+
144
+ 1. **一块画满才说话,或者说完才画**。白板片的魔力是「说一句写一句」:写字速度等于语速,比口播晚约 0.5s。先画后说会让观众等,先说后画会让画变成多余的复述。复杂插画不要现场画,预先画好,相机移过去露出来。
145
+ 2. **每次都整屏切到下一块空白**。RSA 的平滑移动只移 0.23 画宽,新旧区域大面积重叠,观众一直知道自己在一张大图的哪里。只在跳到远处时才用 0.8s 甩镜加模糊。收尾一定要拉远看全图,这是这个类型的落点。
146
+ 3. **颜色多、线太细或太均匀、手一直挂在画面上**。只用黑加一个强调色,线宽约为画高的 0.65%。手只在画的时候入画,画完就从右下退出;强调词可以不带手直接弹出。另外别把 RSA 和 Minute Physics 混用:要么一张大白板加相机移动,要么一页一张纸加硬切。
147
+
148
+ ---
149
+
150
+ ## 审片与修订(独立 agent 只看成片,6/10,三片里最低)
151
+
152
+ 审片意见和这一轮的处理:
153
+ - 「笔尖不领着线走,花叔好几笔同时冒出来;字是遮罩擦出来的」:
154
+ - 花叔改成 VideoScribe 的 Reveal 画法:完整线稿藏在下面,笔尖走 8 行之字形,笔过之处揭开,笔尖永远在前沿上。
155
+ - 字改成逐字写:每个字一段时间,笔尖在字框里 3 行之字形来回,遮罩跟着揭开。
156
+ - 新写 `DG.revealMask`(同向绕行的方条并集,nonzero 下重叠不抵消)和 `DG.zigzag`。
157
+ - 「甩镜后 0.4s 死区」:第二块提前到 3.12s 开画,手在甩镜收尾时就入画。
158
+ - 「截图框线穿过猫头」:每个框先填一层白板色再描边,前框盖住后框的线。
159
+ - 「『自己找规律』被上缘切一半」:第三块整体下移 60px。
160
+ - 「拉远后灰底和擦痕像脏墙」:灰底减淡到 `#EEEEEC`,擦痕透明度减半。
161
+ - 「全景只停 0.15s、三组画没连起来」:
162
+ - 第一块结尾加一支橙箭头指向右边,甩镜有了方向。
163
+ - 第二块结尾画一支橙色连线引向第三块,手领着相机走。
164
+ - 拉远提前到 6.85–7.5s,全景停 0.5s。
165
+ - 「手是蓝袖子卡通手」:改成裸前臂,带暗面和汗毛,更接近 RSA 的真人手。仍是代码画的。
166
+
167
+ ## QA(skill `scripts/qa.py`,修订后终版)
168
+
169
+ | 镜 | 量的窗口(镜内秒) | 运动面积% 均/峰 | 静止帧对% | 跳变帧 | 每帧耗时 均/峰 ms | 确定性 |
170
+ |---|---|---|---|---|---|---|
171
+ | y3_s1 | 0.35–2.48 | 3.1 / 5.31 | 0.0 | 0 | 6.5 / 6.9 | ✓ 逐像素一致 |
172
+ | y3_s2 | 0.8–2.23 | 4.65 / 9.57 | 0.0 | 0 | 6.5 / 7.3 | ✓ 逐像素一致 |
173
+ | y3_s3 | 0.85–3.23 | 4.45 / 10.94 | 0.0 | 0 | 8.3 / 9.0 | ✓ 逐像素一致 |
174
+
175
+ 转场冒烟(每个转场渲一遍,最慢一帧):y3_s2(same)46.9ms;y3_s3(same)14ms
176
+
177
+ 读法:
178
+ - 白板片三镜都没有跳变:所有「转场」都是同一块板上的相机运动,板上的东西不会跳。
179
+ - 运动面积 3–4.7% 主要来自手和正在画的线,相机移动时会更高。
180
+ - 每帧不到 10ms,因为全是矢量线条,没有像素级处理。
181
+
182
+ 复跑:`uv run scripts/qa.py --project scripts/engine --film demos/y3_whiteboard --out <目录>`(上表是实验时的数字;收进 skill 后的复跑见 09 号的回归表)。
@@ -0,0 +1,17 @@
1
+ {
2
+ "grammar": "t2_keynote_ui",
3
+ "duration": 10,
4
+ "fps": 30,
5
+ "width": 1920,
6
+ "height": 1080,
7
+ "data": { "eyebrow": "全 新 发 布", "title": "参数化动画片段", "subtitle": "一份 JSON,出一段时长精确的动画" },
8
+ "cues": [
9
+ { "at": 0.0, "kind": "title" },
10
+ { "at": 2.2, "kind": "card", "text": "8 种动画语法", "sub": "从 3Blue1Brown 到动态文字", "data": { "icon": "layers" } },
11
+ { "at": 3.0, "kind": "card", "text": "时长精确到帧", "sub": "帧数 = 时长 × 帧率", "data": { "icon": "clock", "value": 30, "suffix": " fps", "label": "默认帧率" } },
12
+ { "at": 3.8, "kind": "card", "text": "横竖屏都能出", "sub": "竖屏自动换一套排版", "data": { "icon": "phone" } },
13
+ { "at": 6.0, "kind": "number", "text": "英伟达五个财年的营收涨幅", "data": { "value": 7.8, "decimals": 1, "suffix": " 倍" } },
14
+ { "at": 7.2, "kind": "card", "text": "用 t3 财经图表出的一帧", "sub": "数据:英伟达 2021–2025 财年 10-K 年报", "image": "assets/财经图表_横屏.png" },
15
+ { "at": 8.4, "kind": "highlight", "data": { "rect": [0.648, 0.245, 0.104, 0.105] } }
16
+ ]
17
+ }