dsh-drawai 0.3.3 → 0.4.0

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 (533) hide show
  1. package/LICENSE +4142 -0
  2. package/README.md +43 -10
  3. package/lib/audio-media.js +147 -0
  4. package/lib/audio-service.js +66 -0
  5. package/lib/canvas-format.js +134 -0
  6. package/lib/client.js +5283 -223
  7. package/lib/comfyui-default-workflow.mjs +1825 -0
  8. package/lib/comfyui-workflow.mjs +426 -0
  9. package/lib/document-commands.js +12 -0
  10. package/lib/document-core.js +29 -0
  11. package/lib/drawing-tasks.js +26 -0
  12. package/lib/imagegen.mjs +596 -0
  13. package/lib/index.js +1758 -129
  14. package/lib/media.js +26 -13
  15. package/lib/mgstyle-core.js +75 -0
  16. package/lib/motion/apply.js +180 -0
  17. package/lib/motion/asset-pack-lock.js +10 -0
  18. package/lib/motion/asset-pack.js +335 -0
  19. package/lib/motion/assets.js +290 -0
  20. package/lib/motion/audio.js +103 -0
  21. package/lib/motion/audiolevel.js +63 -0
  22. package/lib/motion/audiomix.js +144 -0
  23. package/lib/motion/beats.js +337 -0
  24. package/lib/motion/builtin-assets.js +62 -0
  25. package/lib/motion/canvas-spec.js +442 -0
  26. package/lib/motion/capture.js +95 -0
  27. package/lib/motion/cards.js +80 -0
  28. package/lib/motion/collect.js +447 -0
  29. package/lib/motion/delivery.js +112 -0
  30. package/lib/motion/edge-speech.py +90 -0
  31. package/lib/motion/entry.jsx +73 -0
  32. package/lib/motion/export.js +200 -0
  33. package/lib/motion/ffmpeg.js +42 -0
  34. package/lib/motion/fonts.js +71 -0
  35. package/lib/motion/jobs.js +113 -0
  36. package/lib/motion/json.js +4 -0
  37. package/lib/motion/media-catalog.js +59 -0
  38. package/lib/motion/mgstyles/BRIEF-TEMPLATE.md +63 -0
  39. package/lib/motion/mgstyles/briefs/01-flat-vector.md +104 -0
  40. package/lib/motion/mgstyles/briefs/02-line-art.md +97 -0
  41. package/lib/motion/mgstyles/briefs/03-isometric.md +108 -0
  42. package/lib/motion/mgstyles/briefs/05-cel-boil.md +145 -0
  43. package/lib/motion/mgstyles/briefs/06-collage.md +149 -0
  44. package/lib/motion/mgstyles/briefs/07-liquid.md +106 -0
  45. package/lib/motion/mgstyles/briefs/08-morph.md +111 -0
  46. package/lib/motion/mgstyles/briefs/09-bauhaus.md +150 -0
  47. package/lib/motion/mgstyles/briefs/10-synthwave.md +151 -0
  48. package/lib/motion/mgstyles/briefs/12-aurora-glass.md +147 -0
  49. package/lib/motion/mgstyles/briefs/18-hanazi.md +140 -0
  50. package/lib/motion/mgstyles/briefs/19-paperclip.md +156 -0
  51. package/lib/motion/mgstyles/briefs/20-pixel.md +118 -0
  52. package/lib/motion/mgstyles/briefs/22-hud.md +118 -0
  53. package/lib/motion/mgstyles/catalog.d/01-flat-vector.json +34 -0
  54. package/lib/motion/mgstyles/catalog.d/02-line-art.json +34 -0
  55. package/lib/motion/mgstyles/catalog.d/03-isometric.json +35 -0
  56. package/lib/motion/mgstyles/catalog.d/05-cel-boil.json +28 -0
  57. package/lib/motion/mgstyles/catalog.d/06-collage.json +28 -0
  58. package/lib/motion/mgstyles/catalog.d/07-liquid.json +28 -0
  59. package/lib/motion/mgstyles/catalog.d/08-morph.json +28 -0
  60. package/lib/motion/mgstyles/catalog.d/09-bauhaus.json +28 -0
  61. package/lib/motion/mgstyles/catalog.d/10-synthwave.json +28 -0
  62. package/lib/motion/mgstyles/catalog.d/12-aurora-glass.json +28 -0
  63. package/lib/motion/mgstyles/catalog.d/18-hanazi.json +28 -0
  64. package/lib/motion/mgstyles/catalog.d/19-paperclip.json +28 -0
  65. package/lib/motion/mgstyles/catalog.d/20-pixel.json +28 -0
  66. package/lib/motion/mgstyles/catalog.d/22-hud.json +28 -0
  67. package/lib/motion/mgstyles/catalog.json +1356 -0
  68. package/lib/motion/mgstyles/upstream/README.md +147 -0
  69. package/lib/motion/mgstyles/upstream/README.zh-CN.md +147 -0
  70. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/cues.json +1 -0
  71. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/index.html +712 -0
  72. package/lib/motion/mgstyles/upstream/demos/02-line-art/cues.json +331 -0
  73. package/lib/motion/mgstyles/upstream/demos/02-line-art/film.js +676 -0
  74. package/lib/motion/mgstyles/upstream/demos/02-line-art/index.html +18 -0
  75. package/lib/motion/mgstyles/upstream/demos/02-line-art/tools/dump_timing.mjs +26 -0
  76. package/lib/motion/mgstyles/upstream/demos/03-isometric/cues.json +109 -0
  77. package/lib/motion/mgstyles/upstream/demos/03-isometric/index.html +25 -0
  78. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/anim.js +82 -0
  79. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/main.js +219 -0
  80. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/night5.js +180 -0
  81. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/render.js +202 -0
  82. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title.js +167 -0
  83. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title5.js +294 -0
  84. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/ui.js +141 -0
  85. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/world.js +1399 -0
  86. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/cues.json +157 -0
  87. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/index.html +34 -0
  88. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/engine.js +326 -0
  89. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/scene.js +2036 -0
  90. package/lib/motion/mgstyles/upstream/demos/06-collage/assets/gen/layout.json +157 -0
  91. package/lib/motion/mgstyles/upstream/demos/06-collage/cues.json +80 -0
  92. package/lib/motion/mgstyles/upstream/demos/06-collage/index.html +889 -0
  93. package/lib/motion/mgstyles/upstream/demos/07-liquid/cues.json +100 -0
  94. package/lib/motion/mgstyles/upstream/demos/07-liquid/index.html +108 -0
  95. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/engine.js +153 -0
  96. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/links.js +64 -0
  97. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/lookdev.js +46 -0
  98. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/scene.js +963 -0
  99. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/shaders.js +647 -0
  100. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/textsdf.js +114 -0
  101. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/type.js +50 -0
  102. package/lib/motion/mgstyles/upstream/demos/08-morph/cues.json +131 -0
  103. package/lib/motion/mgstyles/upstream/demos/08-morph/glyphs.json +1 -0
  104. package/lib/motion/mgstyles/upstream/demos/08-morph/index.html +901 -0
  105. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/cues.json +270 -0
  106. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/film.js +697 -0
  107. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/index.html +12 -0
  108. package/lib/motion/mgstyles/upstream/demos/10-synthwave/cues.json +44 -0
  109. package/lib/motion/mgstyles/upstream/demos/10-synthwave/index.html +1028 -0
  110. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/cues.json +67 -0
  111. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/index.html +16 -0
  112. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/main.js +967 -0
  113. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/shaders.js +468 -0
  114. package/lib/motion/mgstyles/upstream/demos/18-hanazi/cues.json +117 -0
  115. package/lib/motion/mgstyles/upstream/demos/18-hanazi/index.html +541 -0
  116. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/countries-110m.json +1 -0
  117. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/stickers/meta.json +34 -0
  118. package/lib/motion/mgstyles/upstream/demos/19-paperclip/cues.json +285 -0
  119. package/lib/motion/mgstyles/upstream/demos/19-paperclip/index.html +599 -0
  120. package/lib/motion/mgstyles/upstream/demos/20-pixel/cues.json +42 -0
  121. package/lib/motion/mgstyles/upstream/demos/20-pixel/film.js +914 -0
  122. package/lib/motion/mgstyles/upstream/demos/20-pixel/index.html +18 -0
  123. package/lib/motion/mgstyles/upstream/demos/22-hud/cues.json +108 -0
  124. package/lib/motion/mgstyles/upstream/demos/22-hud/index.html +125 -0
  125. package/lib/motion/mgstyles/upstream/demos/22-hud/js/holo.js +275 -0
  126. package/lib/motion/mgstyles/upstream/demos/22-hud/js/hud.js +855 -0
  127. package/lib/motion/mgstyles/upstream/demos/22-hud/js/post.js +150 -0
  128. package/lib/motion/mgstyles/upstream/demos/22-hud/js/util.js +65 -0
  129. package/lib/motion/mgstyles/upstream/demos/22-hud/js/v5.js +142 -0
  130. package/lib/motion/mgstyles/upstream/harness/render.mjs +319 -0
  131. package/lib/motion/mgstyles/upstream/manifest.json +269 -0
  132. package/lib/motion/mgstyles/upstream/prompts/01-flat-vector.md +98 -0
  133. package/lib/motion/mgstyles/upstream/prompts/02-line-art.md +95 -0
  134. package/lib/motion/mgstyles/upstream/prompts/03-isometric.md +97 -0
  135. package/lib/motion/mgstyles/upstream/prompts/05-cel-boil.md +95 -0
  136. package/lib/motion/mgstyles/upstream/prompts/06-collage.md +95 -0
  137. package/lib/motion/mgstyles/upstream/prompts/07-liquid.md +98 -0
  138. package/lib/motion/mgstyles/upstream/prompts/08-morph.md +95 -0
  139. package/lib/motion/mgstyles/upstream/prompts/09-bauhaus.md +96 -0
  140. package/lib/motion/mgstyles/upstream/prompts/10-synthwave.md +95 -0
  141. package/lib/motion/mgstyles/upstream/prompts/12-aurora-glass.md +96 -0
  142. package/lib/motion/mgstyles/upstream/prompts/18-hanazi.md +95 -0
  143. package/lib/motion/mgstyles/upstream/prompts/19-paperclip.md +96 -0
  144. package/lib/motion/mgstyles/upstream/prompts/20-pixel.md +96 -0
  145. package/lib/motion/mgstyles/upstream/prompts/22-hud.md +95 -0
  146. package/lib/motion/mgstyles/upstream/rubric.md +51 -0
  147. package/lib/motion/mgstyles/upstream/template.md +36 -0
  148. package/lib/motion/pixelqa.js +198 -0
  149. package/lib/motion/preview.js +95 -0
  150. package/lib/motion/project.js +395 -0
  151. package/lib/motion/qa.js +290 -0
  152. package/lib/motion/reference-media.jsx +10 -0
  153. package/lib/motion/render-settings.js +112 -0
  154. package/lib/motion/render.js +159 -0
  155. package/lib/motion/scene-kit.js +183 -0
  156. package/lib/motion/sfx.js +232 -0
  157. package/lib/motion/shotcraft/ClipCard.tsx +204 -0
  158. package/lib/motion/shotcraft/catalog.json +2461 -0
  159. package/lib/motion/shotcraft/upstream/SKILL.md +286 -0
  160. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -0
  161. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -0
  162. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -0
  163. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -0
  164. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -0
  165. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -0
  166. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -0
  167. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -0
  168. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -0
  169. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -0
  170. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -0
  171. package/lib/motion/shotcraft/upstream/assets/scripts/__pycache__/sfx-source.cpython-313.pyc +0 -0
  172. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -0
  173. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -0
  174. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -0
  175. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -0
  176. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -0
  177. package/lib/motion/shotcraft/upstream/demos/README.md +120 -0
  178. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -0
  179. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -0
  180. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -0
  181. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -0
  182. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -0
  183. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -0
  184. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +389 -0
  185. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -0
  186. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -0
  187. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -0
  188. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -0
  189. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -0
  190. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -0
  191. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -0
  192. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -0
  193. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -0
  194. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -0
  195. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -0
  196. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -0
  197. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -0
  198. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -0
  199. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -0
  200. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -0
  201. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -0
  202. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -0
  203. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -0
  204. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -0
  205. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -0
  206. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -0
  207. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -0
  208. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -0
  209. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -0
  210. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -0
  211. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -0
  212. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -0
  213. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -0
  214. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -0
  215. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -0
  216. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -0
  217. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -0
  218. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -0
  219. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -0
  220. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -0
  221. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -0
  222. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -0
  223. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -0
  224. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -0
  225. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -0
  226. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -0
  227. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -0
  228. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -0
  229. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -0
  230. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -0
  231. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -0
  232. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -0
  233. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -0
  234. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -0
  235. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -0
  236. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -0
  237. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -0
  238. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -0
  239. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -0
  240. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -0
  241. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -0
  242. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -0
  243. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -0
  244. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -0
  245. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -0
  246. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -0
  247. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -0
  248. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -0
  249. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -0
  250. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -0
  251. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -0
  252. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -0
  253. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -0
  254. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -0
  255. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -0
  256. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -0
  257. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -0
  258. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -0
  259. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -0
  260. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -0
  261. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -0
  262. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -0
  263. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -0
  264. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -0
  265. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -0
  266. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -0
  267. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -0
  268. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -0
  269. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -0
  270. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -0
  271. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -0
  272. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -0
  273. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -0
  274. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -0
  275. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -0
  276. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -0
  277. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -0
  278. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -0
  279. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -0
  280. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -0
  281. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -0
  282. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -0
  283. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -0
  284. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -0
  285. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -0
  286. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -0
  287. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -0
  288. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -0
  289. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -0
  290. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -0
  291. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -0
  292. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -0
  293. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -0
  294. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -0
  295. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -0
  296. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -0
  297. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -0
  298. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -0
  299. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -0
  300. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -0
  301. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -0
  302. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -0
  303. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -0
  304. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -0
  305. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -0
  306. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -0
  307. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -0
  308. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -0
  309. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -0
  310. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -0
  311. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -0
  312. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -0
  313. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -0
  314. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -0
  315. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -0
  316. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -0
  317. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -0
  318. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -0
  319. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -0
  320. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -0
  321. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -0
  322. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -0
  323. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -0
  324. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -0
  325. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -0
  326. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -0
  327. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -0
  328. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -0
  329. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -0
  330. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -0
  331. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -0
  332. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -0
  333. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -0
  334. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -0
  335. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -0
  336. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -0
  337. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -0
  338. package/lib/motion/shotcraft/upstream/manifest.json +2715 -0
  339. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -0
  340. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -0
  341. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -0
  342. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -0
  343. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -0
  344. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -0
  345. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -0
  346. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -0
  347. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -0
  348. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -0
  349. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -0
  350. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -0
  351. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -0
  352. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -0
  353. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -0
  354. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -0
  355. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -0
  356. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -0
  357. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -0
  358. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -0
  359. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -0
  360. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -0
  361. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -0
  362. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -0
  363. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -0
  364. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -0
  365. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -0
  366. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -0
  367. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -0
  368. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -0
  369. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -0
  370. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -0
  371. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -0
  372. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -0
  373. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -0
  374. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -0
  375. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -0
  376. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -0
  377. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -0
  378. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -0
  379. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -0
  380. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -0
  381. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -0
  382. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -0
  383. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -0
  384. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -0
  385. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -0
  386. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -0
  387. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -0
  388. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -0
  389. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -0
  390. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -0
  391. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -0
  392. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -0
  393. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -0
  394. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -0
  395. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -0
  396. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -0
  397. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -0
  398. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -0
  399. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -0
  400. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -0
  401. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -0
  402. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -0
  403. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -0
  404. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -0
  405. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -0
  406. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -0
  407. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -0
  408. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -0
  409. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -0
  410. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -0
  411. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -0
  412. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -0
  413. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -0
  414. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -0
  415. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -0
  416. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -0
  417. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -0
  418. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -0
  419. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -0
  420. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -0
  421. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -0
  422. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -0
  423. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -0
  424. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -0
  425. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -0
  426. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -0
  427. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -0
  428. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -0
  429. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -0
  430. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -0
  431. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -0
  432. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -0
  433. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -0
  434. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -0
  435. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -0
  436. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -0
  437. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -0
  438. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -0
  439. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -0
  440. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -0
  441. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -0
  442. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -0
  443. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -0
  444. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -0
  445. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -0
  446. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -0
  447. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -0
  448. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -0
  449. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -0
  450. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -0
  451. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -0
  452. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -0
  453. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -0
  454. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -0
  455. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -0
  456. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -0
  457. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -0
  458. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -0
  459. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -0
  460. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -0
  461. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -0
  462. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -0
  463. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -0
  464. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -0
  465. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -0
  466. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -0
  467. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -0
  468. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -0
  469. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -0
  470. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -0
  471. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -0
  472. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -0
  473. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -0
  474. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -0
  475. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -0
  476. package/lib/motion/shotcraft/upstream/template/package.json +20 -0
  477. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -0
  478. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -0
  479. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -0
  480. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -0
  481. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -0
  482. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -0
  483. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -0
  484. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -0
  485. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -0
  486. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -0
  487. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -0
  488. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -0
  489. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -0
  490. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -0
  491. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +389 -0
  492. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -0
  493. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -0
  494. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -0
  495. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -0
  496. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -0
  497. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -0
  498. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -0
  499. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -0
  500. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -0
  501. package/lib/motion/spec.js +113 -0
  502. package/lib/motion/style-engine.js +153 -0
  503. package/lib/motion/style-frames.js +268 -0
  504. package/lib/motion/sync.js +214 -0
  505. package/lib/motion/theme.js +121 -0
  506. package/lib/motion/voice.js +417 -0
  507. package/lib/motion-agent-files.js +82 -0
  508. package/lib/motion-agent-protocol.js +66 -0
  509. package/lib/motion-agent-tools.js +196 -0
  510. package/lib/motion-agent.js +171 -0
  511. package/lib/motion-capture.js +92 -0
  512. package/lib/motion-core.js +238 -0
  513. package/lib/motion-film-review.js +71 -0
  514. package/lib/motion-library.js +210 -0
  515. package/lib/motion-planner.js +254 -0
  516. package/lib/motion-project.js +80 -0
  517. package/lib/motion-render-worker.js +145 -0
  518. package/lib/motion-session.js +32 -0
  519. package/lib/motion-source.js +49 -0
  520. package/lib/motion-tasks.js +452 -0
  521. package/lib/motion-vision.js +43 -0
  522. package/lib/mxfile.js +27 -7
  523. package/lib/routing/node-runtime.js +14 -0
  524. package/lib/routing/router.js +211 -0
  525. package/lib/routing/vendor/README.md +96 -0
  526. package/lib/routing/vendor/libavoid-routing.js +753 -0
  527. package/lib/routing/vendor/libavoid.min.js +59 -0
  528. package/lib/shotcard-core.js +39 -0
  529. package/lib/shotcard-reference.js +56 -0
  530. package/lib/style-kernel.js +37 -3
  531. package/lib/task-patches.js +26 -2
  532. package/lib/video-export.js +17 -2
  533. package/package.json +29 -4
@@ -0,0 +1,63 @@
1
+ # mg-styles brief 模板
2
+
3
+ 每份 brief 是「一个风格如何**在 DrawAI 的 Remotion 工程里**被做出来」的可执行说明书。
4
+ 它不是上游提示词的翻译,而是**换了一套渲染栈之后的落地手册**:上游用 HTML 页 +
5
+ `renderAt(t)` + puppeteer 截帧,DrawAI 用 React 场景 + Remotion 逐帧渲染。同一个
6
+ "每帧是 t 的纯函数"的心智模型,但 API、约束、可用的近似手段全都变了。
7
+
8
+ ## 硬性要求
9
+
10
+ - 8 节,顺序固定,标题一字不差(`mg_style` 工具和校验脚本按标题取内容)。
11
+ - 全文 6–11KB(超过 12KB 就砍第 6 节的措辞,不要砍第 5 节和判据)。宁可少写,不要把上游提示词整段抄过来 —— 提示词原文由 `mg_style read`
12
+ 另外返回,brief 只写"换到 Remotion 之后要注意什么"。
13
+ - 每个技术判断都要能在 `demos/<slug>/` 的源码里找到依据(写文件名/函数名),
14
+ 或者明确标注"这是近似手段"。
15
+ - 颜色一律给 hex,并注明角色(纸/墨/主色/副色)。不要写"暖色调"这种没法执行的描述。
16
+ - 动效参数要可检验:帧数、角度、缓动函数名、错峰帧数、网格模数。
17
+
18
+ ## 八节
19
+
20
+ ### 1. 一眼认出
21
+ 3–5 条**判据**,不是形容词。反例:「有节奏感」;正例:「所有落点都在 240px 网格线上」。
22
+
23
+ ### 2. 色板
24
+ 表格:角色 / hex / 用在哪。再给一句"禁止色"(这个风格里绝对不能出现的颜色倾向)。
25
+
26
+ ### 3. 字体与字排
27
+ 原片用什么字体(查 `assets/fonts/fonts.css` 与 demo 源码里的 font-family);
28
+ DrawAI 里没有这个字体时用什么替代(给具体 font-family 栈);字号/字重/字距/竖排/
29
+ 中英混排的规则。替代会损失什么,直说。
30
+
31
+ ### 4. 动效语法
32
+ - 节拍:BPM、每拍几帧(30fps 下 120BPM = 15 帧/拍)。
33
+ - 缓动:曲线名 + 参数;明确禁用哪些(比如包豪斯禁 overshoot)。
34
+ - 签名动作 3–5 个,每个给:做什么、多少帧、什么缓动、错峰多少帧。
35
+ - 组成规则:网格模数、安全边距、图层顺序。
36
+
37
+ ### 5. Remotion 落地配方
38
+ 这一节最重要。写清楚:
39
+ - 用哪些 API(`useCurrentFrame` / `interpolate` / `Easing` / `spring` /
40
+ `@remotion/motion-blur` / `@remotion/three` / `random(seed)`)。
41
+ - 上游哪些写法**必须换掉**:`requestAnimationFrame` → 帧函数;`Date.now()` /
42
+ `Math.random()` → 种子随机;CSS transition/animation → 每帧算出的样式;
43
+ Canvas 2D 逐帧绘制 → 可以用,但要在 `useEffect` 里按 `frame` 重绘(给骨架代码)。
44
+ - WebGL/着色器后处理(纸纹、套印、发光):`three/addons` 的后处理链在场景里是
45
+ **允许**的(EffectComposer + SSAOPass / UnrealBloomPass),不要再默认写成 CSS 假发光。
46
+ 确实要换近似方案(CSS filter、SVG feTurbulence、mix-blend-mode)时必须写清
47
+ 「损失是什么、在哪一帧看得出来」,并在 `STYLE.md` 落一条 `偏离:` 行。
48
+ - 累积采样:`render.samples`(场景从 `props.render` 读)+ `scene-kit/det.ts` 的
49
+ `jitter()`(Halton(2,3),禁 `Math.random()`);写明这一镜要几个样本、为什么。
50
+ - 运动模糊:`render.shutter` 的多快门采样,或 `@remotion/motion-blur` 的
51
+ `CameraMotionBlur`;说明适用/不适用的镜头。
52
+ - 给一段 15–30 行的骨架代码(真实可跑,不是伪代码),展示这一镜的核心结构。
53
+
54
+ ### 6. 镜头结构模板
55
+ 按秒给意图(不是内容):0–0.5s 钩子、…、结尾定格多少秒。写"这一镜要完成什么",
56
+ 让 agent 能替换成自己的内容。
57
+
58
+ ### 7. 坑
59
+ 3–6 条,每条一句话,都是会在渲染时真的出问题的事:字体回落、细线 shimmer、
60
+ 渐变 banding、`staticFile` 路径、粒子/物理不确定、跨镜状态泄漏、超大 DOM 节点。
61
+
62
+ ### 8. 版权与素材
63
+ 上游 MIT;可用素材的范围;品牌名必须虚构;哪些图形是"通用几何"可以自由用。
@@ -0,0 +1,104 @@
1
+ 上游:`demos/01-flat-vector/index.html`(76.7KB 单文件,SVG 场景图 + 每帧 `setAttribute`,无 js 目录)+ `demos/01-flat-vector/cues.json`(120BPM,build:4.0,drop:6.0,outro:8.0)。1920×1080 / 30fps / 10.000s。提示词原文用 `mg_style {action:"read",slug:"01-flat-vector"}` 取。
2
+
3
+ ## 1. 一眼认出
4
+ 1. 整幅背景是一块 `#2B2BFF` 纯平蓝(`C.U` 的 10000×10000 rect),画面里没有渐变、阴影、描边,全是实心色块叠在一起。
5
+ 2. 色阶只有五档:蓝 / 珊瑚 `#FF5A4E` / 向日葵 `#FFC62B` / 薄荷 `#2EE6A8` / 奶油 `#FFF6E9`,任何一块都不混色。
6
+ 3. 每次落地都压扁:触地前后 2–6 帧竖向压到 60%、横向撑到 136% 再弹回。
7
+ 4. 同一时刻只有一个主体在动,`cues.json` 的 40 余个帧键几乎不重叠。
8
+ 5. 圆角模数统一:楼房 rx 6–10,云是 rx 28 的胶囊 + 两个圆,球是正圆 r=74。
9
+
10
+ ## 2. 色板
11
+ | 角色 | hex | 用在哪 |
12
+ | --- | --- | --- |
13
+ | 纸(天) | `#2B2BFF` | `C.U`,铺满 world 的底rect |
14
+ | 地面 / 云 | `#FFF6E9` | `C.CR`,地面台、云、窗内墙 |
15
+ | 墨 | `#151433` | `C.INK`,主角楼 BLD[4]、鸟、门洞 |
16
+ | 主色 | `#FF5A4E` | `C.CO`,球/太阳、12 道光芒、第 3 栋楼 |
17
+ | 副色 | `#FFC62B` | `C.SU`,第 4/7 栋楼、地面 lead bar |
18
+ | 副色 | `#2EE6A8` | `C.MI`,第 1/6 栋楼、8 棵树 |
19
+ | 远景 | `#4D4DFF` + 窗 `#6060FF` | tone-on-tone,只比背景亮一档 |
20
+ | 层级 | `#1F1FCC` / `#3B3BFF` / `#A3A3FF` | 只在窗内房间与 UI 里分前后 |
21
+
22
+ 禁止色:任何中性灰与 `#000000`;最深的墨只到 `#151433`,再深平涂会脏。
23
+
24
+ ## 3. 字体与字排
25
+
26
+ **当前优先使用插件内置字体:** 标题和英文优先 Fredoka,中文优先 Resource Han Rounded;字形圆润时保持原片的定位和字距。
27
+
28
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
29
+ - 上游:`Fredoka` 700(拉丁标志 `popwıse`、数字、`¥`)+ `Resource Han Rounded` 700/900(「每天,聪明一点点」)。`assets/fonts/fonts.css` 只被 `<link>` 引用,vendored 的 `demos/` 下没有字体文件。
30
+ - 替代:display `"Arial Black","Segoe UI Black","Microsoft YaHei",sans-serif`,中文 `"Microsoft YaHei","Microsoft YaHei UI",sans-serif` 700,等宽 `"Consolas","JetBrains Mono",monospace`(片中未用,留给 UI)。
31
+ - 损失:Fredoka 是圆头几何体,Arial Black 末端是方的、字面窄约 8%,要 `letter-spacing:0.01em`、字号 +4% 才接近;Windows 没有圆体中文,雅黑会把「圆胖」变「方黑」,可爱度掉一档——别用描边补偿。
32
+ - 字排:标志固定 900px 宽、tracking 0;副标 70px、逐字加 7px;tagline 30px/600/字距 2px。
33
+
34
+ ## 4. 动效语法
35
+ - 120 BPM,一拍 15 帧;所有事件落在 3 帧网格(`bldStagger=3`)。
36
+ - 缓动只有四条:`E.pop = bezier(0.34,1.56,0.64,1)` 入场;`spring(f=2,z=.4)` 生长;`kick(f=3,z=.35)` 落地震动;`E.outQt` 抛物线。相机推镜用幂 2.2 的 ease-in,回弹用 `E.outB(1.2)` 做速度匹配。
37
+ - 禁用:linear;任何超过 10 帧的 ease-in-out(主体会「软」)。
38
+ - 签名动作:
39
+ 1. **单点落地**(0–15 帧):g=2040 px/s²,13 帧触地,`sy=1-0.4q, sx=1+0.36q`,首弹 78px、`k=.09` 拉伸;第 24 帧二落只有 40% 幅度。
40
+ 2. **预备-冲出-回弹**:antic 27 → launch 31(4 帧),冲出前 `sy*=1-0.3a`(压 30%),之后立刻 pop。所有角色入场都是这三段。
41
+ 3. **楼房生长**(44 帧起,9 栋,错峰 3 帧):以底边 `(cx,820)` 为锚 `scaleY=s`,同时 `scaleX=1/(1+k)` 反挤;顶盖 slab 跟 `max(s,0)/(1+k)`,屋顶装饰再延 2 帧。
42
+ 4. **推镜穿窗**(86→112 帧):`camAntic 86 / push 90 / glass 105 / arrive 112`,幂 2.2 推到 30 倍(`S1=1920/64`),穿过后 `E.outB(1.2)` 速度匹配;窗内是同一套矢量语言按 1920×1080 画好再 `scale(64/1920)` 塞进去(INT 组)。
43
+ 5. **字母落下**(243 帧起,`letterStagger=1`):逐字 `pop(f=5,z=.65)`,落点叠 `dip=10*kick(...,3.2,.4)`;i 的点在 247–255 帧脱开成 r=74 圆点,成为最终句号。
44
+ - 网格:2×2 四宫格 = 960×540,冲击波算到格角;安全边距 74px(`R0`);层级自下而上:天 → 远景 → 太阳与光线 → 楼群 → 地面 → 云/鸟/树 → 窗内房间 → 四宫格 icon → 标志。
45
+
46
+ ## 5. Remotion 落地配方
47
+ 必须换掉:
48
+ - `document.createElementNS` 建树 + 每帧 `setAttribute`:改成 React 元素 + 内联 `transform`,让 React 每帧重算 style。
49
+ - `await fetch(cues.json)` 与 `document.fonts.load`:cues 直接 `import`,字体落到系统栈,不要等 `fonts.ready`。
50
+ - `Math.random()` 排窗灯:换成 `mulberry(seed)` 或模块顶层生成一次的固定数组。
51
+ - `measureText` 反算字号:改成固定 `fontSize` + `letterSpacing`,宽度用容器顶住。
52
+ - 时间与随机:上游是 `renderAt(t)` 纯函数,**没有** `requestAnimationFrame` / `Date.now()`,别在 Remotion 里用 `useEffect` 把它们加回来;`crisp()` 的量化与 `Math.random()` 的窗灯全部改由 `f` 决定。CSS `transition/animation` 一律不用,所有值由 `interpolate` 每帧算出。
53
+
54
+ ```tsx
55
+ const FPS = 30;
56
+ const spring = (tau: number, f = 2, z = 0.4) => { // 上游 spring() 闭式解
57
+ if (tau <= 0) return 0;
58
+ const w = 2 * Math.PI * f, wd = w * Math.sqrt(1 - z * z);
59
+ return 1 - Math.exp(-z * w * tau) * (Math.cos(wd * tau) + (z * w / wd) * Math.sin(wd * tau));
60
+ };
61
+ const bldY = (f: number, i: number) => spring((f - (44 + i * 3)) / FPS, 2, 0.4); // bldStart 44 / 错峰 3
62
+ const squash = (f: number) => f < 13 ? 0 : 0.4 * Math.exp(-(f - 13) / 4) * Math.cos((f - 13) * 0.6);
63
+
64
+ export const FlatVector: React.FC = () => {
65
+ const f = useCurrentFrame(); const { fps } = useVideoConfig();
66
+ const zoom = f < 90 // 0–30 帧 1.4→1.12;90–112 推到 30 倍
67
+ ? interpolate(f, [0, 30], [1.4, 1.12], { easing: Easing.bezier(0.65, 0, 0.35, 1), extrapolateRight: "clamp" })
68
+ : interpolate(f, [90, 105, 112, 124], [1.12, 20, 30, 28.8], { easing: Easing.bezier(0.2, 0, 0.8, 1) });
69
+ const k = squash(f);
70
+ return (
71
+ <AbsoluteFill style={{ background: "#2B2BFF", overflow: "hidden" }}>
72
+ <div style={{ position: "absolute", left: 960, top: 540, transform: `scale(${zoom}) translate(-960px,-540px)` }}>
73
+ {BLD.map((b, i) => { const s = Math.max(bldY(f, i), 0);
74
+ return <div key={i} style={{ position: "absolute", left: b.cx - b.w / 2, top: 820 - b.h,
75
+ width: b.w, height: b.h, background: b.c, transformOrigin: "50% 100%",
76
+ transform: `scale(${1 / (1 + k)}, ${s * (1 + k)})` }} />; })}
77
+ </div>
78
+ </AbsoluteFill>
79
+ );
80
+ };
81
+ ```
82
+ (`zoom` 与 `k` 就是这一镜的全部状态;楼群只读 `bldY`。)
83
+
84
+ ## 6. 镜头结构模板
85
+ | 秒 | 帧 | 意图 |
86
+ | --- | --- | --- |
87
+ | 0.0–0.5 | 0–15 | 珊瑚圆点从画外砸进蓝底,落地压扁后二弹 |
88
+ | 0.5–1.4 | 15–42 | 点变太阳升到 (1300,230),12 道光芒 0.14 rad/s 慢转;远景天际线先起 |
89
+ | 1.4–2.9 | 42–88 | 9 栋楼错峰 3 帧长出,窗灯 64–82 帧依次亮,云/鸟/树跟随 |
90
+ | 2.9–3.7 | 86–112 | 推镜 30 倍穿进 64×36 的窗,105 帧闪白,112/113 两帧 arrival shake |
91
+ | 3.7–5.5 | 112–165 | 窗内四宫格 bar/check/heart/coin 依次跳起,180/195/210/225 各放一次冲击波 |
92
+ | 5.5–6.0 | 165–180 | 四格收拢成一点,为转场蓄力 |
93
+ | 6.0–8.0 | 180–240 | 标志擦入,字母 243 帧起逐帧落,点从 tittle 变句号 |
94
+ | 8.0–9.0 | 240–270 | 副标 259 帧、EN 266 帧,270/285 两次 beatBob |
95
+ | 9.0–10.0 | 270–300 | 定格 + 4% 缓推,最后一帧回 1.0 便于 loop |
96
+
97
+ ## 7. 坑
98
+ - `E.pop` 在 u=0 导数极大,直接喂 scale 会第 1 帧就跳 20%,像 pop 了两次;用 `pop()` 的 `pin=.9` 把残余钉回 1。
99
+ - 推到 30 倍后所有 stroke/圆角都要除以 `zoom`,否则窗框线变成 30px 黑边(demo 里每个 stroke 都写了 `/z`)。
100
+ - 窗灯用随机序会让每帧重排、闪成雪花,必须固定成数组;`scaleY` 的锚点必须是底边,否则整排楼陷进地里。
101
+ - 四宫格冲击波要算到格角(`qR`),固定半径会露空档;大色块平涂易 banding,整帧加 2% 噪声。
102
+
103
+ ## 8. 版权与素材
104
+ 上游 `mg-styles-15` 为 MIT;`popwise` 与「每天 聪明一点点」是虚构品牌,商用必须换名,无点 i 也是品牌记号。Fredoka 与 Resource Han Rounded 已随 DrawAI 内置。全片无位图素材,噪点与光晕都是程序生成;音乐按 120BPM / F 大调用 `motion_audio` + `motion_sfx` 重做。
@@ -0,0 +1,97 @@
1
+ 上游:`demos/02-line-art/film.js`(47.0KB,Canvas2D 一笔画 + 一组隐藏 SVG 只为 `getTotalLength()` 采样)+ `demos/02-line-art/cues.json`(72BPM,1/8=0.4167s,fill:7.5,poster:7.8)。1920×1080 / 30fps / 10.000s。提示词原文用 `mg_style {action:"read",slug:"02-line-art"}` 取。
2
+
3
+ ## 1. 一眼认出
4
+ 1. 全片只有一根线,从地平线一路画到屋顶、浪、环、拱,中间不抬笔(`PIECES` 的 23 段首尾相接)。
5
+ 2. 线宽在屏幕上恒定 4.5px(`?lw=4.5`,默认 3)、圆头圆角;越新越亮,新墨 `#FFF6DC`,旧线退到 40% 并偏成 `#967D50`。
6
+ 3. 背景是 `#0B1320` 的深蓝夜,只有一层很淡的径向光晕、44 颗尘点,没有第二个光源。
7
+ 4. 笔尖永远带一团暖白光晕,停顿那一下还会鼓一下。
8
+ 5. 7.5s 时那根圆环从中心「胀」成金币,线转成面,表面有一道 1.5px 的斜高光。
9
+
10
+ ## 2. 色板
11
+ | 角色 | hex | 用在哪 |
12
+ | --- | --- | --- |
13
+ | 纸 / 夜 | `#0B1320` | `NAVY`,整幅 `fillRect` |
14
+ | 墨线 | `#E9D7A5` | `GOLD`,主线常态 |
15
+ | 旧线 | `#967D50` | `AGED`,`lineColor(b)` 在 b=0.4 时的端点 |
16
+ | 新墨 | `#FFF6DC` | `HOT`,刚画过 1.5s 内(b>1)向这里插值 |
17
+ | 币面 | `#F2E0AE` → `#DDC284`(42%) → `#CCAB6C`(70%) → `#A8874E` | 135° 线性渐变 |
18
+ | 斜面 | `#FFF6DC` / `#6E5428` | 1.5px 高光弧 + 1px 暗边 |
19
+
20
+ 禁止色:任何高饱和色(红/品红/荧光绿)与纯白 `#FFFFFF`;最亮只到 `#FFF6DC`。
21
+
22
+ ## 3. 字体与字排
23
+
24
+ **当前优先使用插件内置字体:** 拉丁标题使用 Cormorant Garamond,中文使用 Noto Serif SC;保留细字重与宽字距。
25
+
26
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
27
+ - 上游:`Cormorant Garamond` 500(`ATELIER LINEA`,50px,字距 0.46em)与 `Noto Serif SC` 300(「始于一线」26px,字距 0.5em)。两者都不在 Windows。
28
+ - 替代:display 用 `"Constantia","Cambria","Georgia",serif`;中文用 `"Source Han Serif SC","Noto Serif SC","SimSun",serif`;等宽 `"Consolas","JetBrains Mono",monospace`(片中未用)。
29
+ - 损失:Cormorant 的高对比 hairline 在 Windows 上没有等价物,Constantia 小写更宽更厚,要字号 -8%、字距加到 0.52em 才不散;`SimSun` 只有 Regular,300 的细衬线中文在 26px 以下会糊成一团。
30
+ - 字排:全大写 + 宽字距是这套的记号;逐字母从「散开」收拢(`spread=(1-e)*0.22*size*(i-mid)`,`stagger=0.045`),中轴对齐 (925,868)。
31
+
32
+ ## 4. 动效语法
33
+ - 72 BPM,一拍 25 帧,1/8 = 12.5 帧;27 个 draw marker 都落在 0.4167s 的网格附近。
34
+ - 缓动:`easeIO = bezier(0.65,0,0.35,1)` 是签名(转角略减速);`easeOut = (0.16,1,0.3,1)`;`easeSwell = (0.24,0.3,0.2,1)` 线转面;`easePulse = (0.45,0,0.2,1)` 回流脉冲。
35
+ - 禁用:back / elastic / spring —— 线不能过冲、笔尖不能倒退;也不能用 linear 画长段,会匀速得像机器。
36
+ - 签名动作:
37
+ 1. **连续落笔**:`headS(t)` 把时间经 `monotone()` 单调三次样条映射到弧长,笔头永远单调前进;采样步长 `STEP=0.5` 世界 px,`TOTAL` 是总弧长。
38
+ 2. **停顿标点**:重复 marker(roof 2.083→2.233、tower2 3.5→3.65、sky2 4.75→4.9)让笔停 0.15s;停顿前 0.133s 相机先刹车。
39
+ 3. **旧线衰减**:`b = FLOOR+(1-FLOOR)*(1-smooth(0.2,1.5,age))`,地景 `FLOOR=0.4`、logo 段 0.96;颜色随 b 从 `#E9D7A5` 移到 `#967D50`。
40
+ 4. **线转面**(7.5s):evenodd 双圆,内圆 `ri = MR*(1-easeSwell(u))` 从 0 扩到 MR,0.367s 由环带填满成金币;`destination-out` 挖门洞。
41
+ 5. **相机追笔**:33 点高斯加权(σ=0.3、lead 0.08s);zoom 5.8→1.1(对数样条),浪段有 `-0.016 rad` 侧倾。
42
+ - 网格:线宽 4.5px;起笔 taper 前 130 世界 px;字距 0.46em;构图围绕 (925,540),标题 (925,868),logo 中心 (925,392)。
43
+
44
+ ## 5. Remotion 落地配方
45
+ 必须换掉:
46
+ - `getTotalLength()/getPointAtLength()`:渲染时没有 SVG DOM 度量。用 `pathLength={1}` 归一化,`strokeDasharray="1 1"` + `strokeDashoffset={1-p}` 画进度;笔尖坐标改为构建期采样好的点表(`tools/dump_timing.mjs` 那套)。
47
+ - `ctx.filter='blur(16px)'` 三层离屏合成:改成三条同 `d` 的 path,`strokeWidth` 12/6/3、`opacity` 0.10/0.18/1。损失是没有真正高斯 bloom,叠加偏「贴纸」。
48
+ - `createConicGradient` 的币面光泽:用两条相交线性渐变 + 一条 `mix-blend-mode:screen` 的窄白条模拟 18° glint。
49
+ - 逐帧 `mulberry(f*7919+13)` 噪声:改成一张 `staticFile("grain.png")`,每帧 `translate` 由 `f` 决定。
50
+ - Canvas 2D 逐帧重绘整条线:换成静态 `<path>` + 只改 `strokeDashoffset`,不每帧重建 `d`;上游的 `renderAt(t)` 本身就是纯函数,没有 `requestAnimationFrame`/`Date.now()`,别加回去,CSS `transition/animation` 也不要用。
51
+ - `ctx.measureText` 排版:改成逐字母 `<span>` + `letterSpacing`,宽度不反算。
52
+
53
+ ```tsx
54
+ const D = "M-160 740 L272 740 …"; // 23 段拼成的单条 path,构建期生成
55
+ export const LineArt: React.FC = () => {
56
+ const f = useCurrentFrame(); const { fps } = useVideoConfig();
57
+ const t = f / fps;
58
+ const p = Math.min(1, t / 7.5); // draw 阶段:0→7.5s 画完
59
+ const zoom = interpolate(t, [0, 0.22, 1.116, 2.533, 3.85, 5.135, 7.5, 10],
60
+ [5.8, 3.49, 2.8, 1.45, 1.3, 1.16, 1.46, 1.1]); // cues.zoom
61
+ const tip = SAMPLE[Math.floor(p * (SAMPLE.length - 1))]; // 构建期采样的 [x,y]
62
+ return (
63
+ <AbsoluteFill style={{ background: "#0B1320" }}>
64
+ <svg viewBox="0 0 1920 1080"
65
+ style={{ transform: `scale(${zoom})`, transformOrigin: `${tip[0]}px ${tip[1]}px` }}>
66
+ <path d={D} fill="none" stroke="#E9D7A5" strokeLinecap="round" pathLength={1}
67
+ strokeWidth={4.5 / zoom} strokeDasharray="1 1" strokeDashoffset={1 - p} />
68
+ <circle cx={tip[0]} cy={tip[1]} r={9 / zoom} fill="#FFF6DC" opacity={t < 7.5 ? 1 : 0} />
69
+ </svg>
70
+ </AbsoluteFill>
71
+ );
72
+ };
73
+ ```
74
+ (`p` 是这一镜唯一的进度;线宽写了 `/zoom`,所以镜头推拉不改变屏幕线宽。)
75
+
76
+ ## 6. 镜头结构模板
77
+ | 秒 | 帧 | 意图 |
78
+ | --- | --- | --- |
79
+ | 0.0–0.7 | 0–21 | 一笔从左侧画进地平线,镜头贴到 5.8 倍,笔尖点亮 |
80
+ | 0.7–2.08 | 21–62 | 芽 → 三节枝 → 檐口,roof 处停 0.15s |
81
+ | 2.08–3.85 | 62–116 | 亭 → 塔 → 天际线,镜头退到 1.3 倍;建筑线直、植物线抖 |
82
+ | 3.85–5.14 | 116–154 | 地平线向右拉满 1600px,起浪的第一笔 |
83
+ | 5.14–6.46 | 154–194 | 浪 → 卷 → 抬升,镜头上摇并侧倾 -0.016 rad |
84
+ | 6.46–7.5 | 194–225 | 环 → 足 → 拱,镜头收紧到 1.46 倍,为填金预备 |
85
+ | 7.5–8.33 | 225–250 | 圆环胀成金币(0.367s),反向脉冲扫回起点,门洞挖出 |
86
+ | 8.33–9.25 | 250–278 | 字标逐字母收拢(0.045s),副标跟上 |
87
+ | 9.25–10.0 | 278–300 | 两侧各一条 24px 金线,暗角 + 噪点上满,末段 +3% 微推 |
88
+
89
+ ## 7. 坑
90
+ - `getTotalLength()` 在 Remotion 的渲染环境里不存在,任何「运行时量路径」的写法都会直接抛错。
91
+ - 线宽不除 `zoom`,5.8 倍时是 26px 粗带,退到 1.1 倍又细成发丝。
92
+ - 旧线用 `opacity` 降会在 `#0B1320` 上变脏灰,必须换色到 `#967D50`(demo 的 `lineColor`)。
93
+ - 三层 blur 每帧跑三次全屏高斯,渲染会慢 3–5 倍,能用描边就别上 filter。
94
+ - 停顿用普通 `interpolate` 会回弹一下,必须保证「时间→弧长」单调(`monotone()` 的斜率限制)。
95
+
96
+ ## 8. 版权与素材
97
+ 上游 `mg-styles-15` 为 MIT;`ATELIER LINEA` 是虚构时装屋名,文案「始于一线」也不要照抄。Cormorant Garamond 与 Noto Serif SC 已随 DrawAI 内置(见第 3 节)。噪点图 `grain_fine_2048.png` 可通过 `motion_assets library` 搜索并导入,其上游许可尚未逐项明确;也可用工程自带 `builtin/grain.svg`。音乐按 72BPM 铺一条极简钢琴/弦乐,乐器采样是单音,需要自行编排。
@@ -0,0 +1,108 @@
1
+ 上游:`demos/03-isometric/js/`(`world.js` 80.5KB 场景与纯时间更新、`render.js` 9.2KB 累积采样器、`anim.js` 4.0KB 纯函数、`title.js` 8.5KB 地面挤出字)+ `cues.json`(120BPM,drop:6.0,pullback:7.75–8.75)。1920×1080 / 30fps / 10.000s,three.js + 正交相机 + 累积采样(SPP 16)。提示词原文用 `mg_style {action:"read",slug:"03-isometric"}` 取。
2
+
3
+ ## 1. 一眼认出
4
+ 1. 真等轴:`OrthographicCamera` 沿 `DIR=(1,1,1)` 看,立方体三条可见棱在屏幕上呈 2:1 斜率,没有一处透视收缩。
5
+ 2. 12×12 的瓦片岛,瓦片顶面是奶白陶土 `#F1EEFA`,侧面才是彩色;空瓦片在冲击波经过时翻面。
6
+ 3. 光很软:暖白主光 `#FFF3E6` + 淡紫半球光 `#C9BFF0`,阴影没有硬边(16 次子采样抖动出的面积光)。
7
+ 4. 所有生长都是「底座先落 → 墙长 → 屋顶晚 0.375s 掉下来」,没有一处均匀缩放;收尾一定拉远成浮岛,标题平躺在等轴地面上。
8
+
9
+ ## 2. 色板
10
+ | 角色 | hex | 用在哪 |
11
+ | --- | --- | --- |
12
+ | 纸(背景) | `#EEEAFC` / `#DAD3F7` / `#C4BAEF` | `bgTop/bgMid/bgLow` 竖向渐变 |
13
+ | 地面点阵 | `#A79EE2` | `PAL.dot`,等轴地板的圆点 |
14
+ | 草 | `#94DFBD` `#8CDBB6` `#9DE3C4` `#86D6B0`,深 `#74CBA3` | 瓦片草坪 |
15
+ | 广场 / 路 | `#F4F1FD` `#ECE8FB` / `#8781D0`,标线 `#FBFAFF` | 环路与虚线 |
16
+ | 水/陶土 | `#8CC6FF` / `#F1EEFA` `#D0D4EE` | 水面瓦片与生长中的素模 |
17
+ | 点缀 | `#FFC4AC` `#A8D2FF` `#B7ECD6` `#D9D1FA` | 浮块与楼体 |
18
+ | 窗 | 灭 `#98ACEE`、亮 `#FFF0C8` | `winOff/winOn` |
19
+ | 数据青 | `#62F0F2` | 冲击波、数据流、ping |
20
+ | 墨 | `#2C2960` | 标注文字、CORE 主体 |
21
+ | 土层 | `#FFFFFF` → `#CBC3F3` → `#B2A8EC` → `#9F95E1` | `soil1–4` strata |
22
+
23
+ 禁止色:纯黑 `#000000` 与高饱和红(最暖只到 `#FF9E86`);阴影不要压到 20% 亮度以下,会失去棚拍感。
24
+
25
+ ## 3. 字体与字排
26
+
27
+ **当前优先使用插件内置字体:** 英文标题使用 Unbounded,中文用 HarmonyOS Sans SC,数字和单位用 JetBrains Mono。参考帧中的 Unbounded 可变字体不一定与上游 800 静态实例完全一致。
28
+
29
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
30
+ - 上游:`Unbounded` 800(`ISOPOLIS`、数字)、`HarmonyOS Sans SC` 700/500(中文标签与标注卡)、`JetBrains Mono` 500(`CITY OS`、单位、EN 小标)。标题用 opentype.js 把 `assets/fonts/Unbounded-800-static.ttf` 读成 glyph 路径再挤出 3D。
31
+ - 替代:display `"Arial Black","Impact",sans-serif`;中文 `"Microsoft YaHei","PingFang SC",sans-serif`;等宽 `"Consolas","JetBrains Mono",monospace`。
32
+ - 损失:Unbounded 是超宽几何无衬线,Arial Black 窄约 12%、圆弧更钝,要 `letter-spacing:0.04em` 并 +8% 字号;HarmonyOS 700 比雅黑 700 更匀,中文标签会略挤;挤出字换字体就换了字面宽度,tracking 要重调。
33
+ - 字排:`ISOPOLIS` size 2.2、depth 0.36、bevel 0.035、tracking 0.035(世界单位);副标走 canvas decal(4096×720);mono 字距 0.12em。
34
+
35
+ ## 4. 动效语法
36
+ - 120 BPM = 15 帧/拍;cues 走 1/16 秒网格(0.0625s = 1.875 帧),不要按整帧对齐。
37
+ - 缓动:`smoother` 是默认(`track()` 不传 ease 就用它);道路 `easeOutCubic`;墙 `WALL = spring(tau,14.8,0.61)`(8 帧到峰、9% 过冲);落体 `drop()`;pop `spring(tau,22,.42,v0=19)`。
38
+ - 禁用:linear 生长、任何 fov/透视变化、back 曲线用在墙高上(会穿模)。
39
+ - 签名动作:
40
+ 1. **瓦片波浪落下**(0.25–1.5s,6 个环):`drop(tau,0.3,h0=2.2,rot0≈-1.4,bounce=.075)` —— 0.3s 下落、`y=h0(1-u²)`、旋转 `rot0(1-u)^2.2` 触地归零;落地 `sy=1-0.3*exp(-tau/.05)*cos(40tau)`,再两次微弹 0.16/0.10s。
41
+ 2. **楼房生长**(2.25–4.44s):底板 0.1s 内 `scaleXZ 0.12→1` 落地,墙 `WALL(tau-1/30)` 弹到 1.09 再回,屋顶延 `roof_lag=0.375s` 用 `drop()` 扣上。
42
+ 3. **冲击波**(drop 6.0):`PULSE_T=drop-0.015`,从 CORE 足迹 `r=1` 以 `pulse_speed=15` 向外;物体在 `hopPatch` 顶点着色器里抬一下,窗色与描边按 `flashDelay(x,z)` 延迟点亮、0.4s 后消失。
43
+ 4. **相机 Hermite**:三通道 `[t,value,'e']` 关键帧(`CAM.x/y/z`),x 0→-3.2→3.0→0.45→2.2→-5.75,z 3.1→1.72→1.0;drop 前 2% 反向预备、之后 `+6%` punch 两帧、12 帧 `easeOutExpo` 落回。
44
+ 5. **收尾拉远**(7.75–8.75s):正交 zoom 1.8→1.0 露出浮岛;8.5s 标题板从地面长起,8.5625s 起字母每 0.0625s 一个,9.0s 定格。
45
+ - 网格:tile 0.955×0.34×0.955、间距 1.0、12×12;iso 面 `Scale(1,.866)` → `Shear(±30°)` → `Rotate(∓30°)`;z 序按画面 y;正交视高 VH=18,岛占 12。
46
+
47
+ ## 5. Remotion 落地配方
48
+ 这三条是**能力**,不是损失——用 `scene-kit/` 与 `render.samples` 实现;降级必须写进 STYLE.md(`偏离:累积 1×`):
49
+ - `Accumulator` 的 16 次子渲染:改成同帧内 N 次 draw + 亚像素抖动(`render.samples`,等轴斜边建议 4–8),jitter 用 `det.ts` 的 Halton(2,3),禁 `Math.random()`;累积缓冲用 `HalfFloatType`。判据:1:1 裁切里竖窗边阶梯 ≤2 级。
50
+ - `SSAOPass` / `UnrealBloomPass`:`three/addons` 后处理在场景里是**允许**的(`style-engine.js` 的 three 指引原文如此)。SSAO `kernelRadius` 8–12 世界单位;bloom `(resolution, 0.35–0.6, 0.4, 0.85)`;发光值 ≤0.9,禁纯白。
51
+ - grain + vignette:用 `look.tsx` 的 `<Grain>` / `<Vignette>`(feTurbulence 是确定性噪声,不消耗逐帧随机数)。
52
+ 这些确实没法照搬,要换掉:
53
+ - `URLSearchParams` 的 v5/night 分支:全部变成 props(`variant: "day" | "night"`)。
54
+ - `document.fonts.load` + opentype.js 挤字:改用 OFL 字体直接排版(Unbounded 比 Arial Black 宽 12%,按这个调字号),或把标题预渲成 PNG 贴平面。
55
+ - `world.js` 80KB 手摆坐标:只留 `MAP` 的 12 行字符表与 `tx(i)=i-5.5 / tz(j)=j-5.5`,其余程序生成。
56
+ - 时间源:上游 `window.renderAt(t)` 是纯函数,没有 `requestAnimationFrame`/`Date.now()`;R3F 的 `useFrame` 也不能用(它不跟 Remotion 帧走),CSS `transition/animation` 不用,一切由 `useCurrentFrame()` 推。
57
+
58
+ ```tsx
59
+ const FPS = 30;
60
+ const drop = (tau: number, h0 = 2.2, fall = 0.3) => { // 上游 drop():下落 + 落地压扁
61
+ if (tau < 0) { const u = (tau + fall) / fall;
62
+ return { y: h0 * (1 - u * u), rot: -1.4 * Math.pow(1 - u, 2.2), sy: 1, sxz: 1 }; }
63
+ const sq = Math.exp(-tau / 0.05);
64
+ return { y: 0.075 * Math.sin(Math.PI * Math.min(1, tau / 0.16)), rot: 0,
65
+ sy: 1 - 0.3 * sq * Math.cos(tau * 40), sxz: 1 + 0.12 * sq * Math.cos(tau * 40) };
66
+ };
67
+
68
+ export const Isopolis: React.FC = () => {
69
+ const f = useCurrentFrame(); const { fps, width, height } = useVideoConfig();
70
+ const t = f / fps;
71
+ const tiles = useMemo(() => TILES, []); // 12×12,tl 由 cues.sweep 铺开
72
+ return (
73
+ <ThreeCanvas width={width} height={height} orthographic
74
+ camera={{ position: [120, 120, 120], zoom: 100, near: 1, far: 400 }}>
75
+ <color attach="background" args={["#EEEAFC"]} />
76
+ <hemisphereLight args={["#F6F3FF", "#C9BFF0", 0.75]} />
77
+ <directionalLight position={[-0.42, 1, 0.62]} intensity={2.25} color="#FFF3E6" castShadow />
78
+ {tiles.map((tl) => { const d = drop(t - tl.tl);
79
+ return <mesh key={tl.k} position={[tl.x, 0.17 + d.y, tl.z]} rotation={[0, 0, d.rot]}
80
+ scale={[d.sxz, d.sy, d.sxz]} castShadow receiveShadow>
81
+ <boxGeometry args={[0.955, 0.34, 0.955]} />
82
+ <meshStandardMaterial color={tl.col} roughness={0.82} />
83
+ </mesh>; })}
84
+ </ThreeCanvas>
85
+ );
86
+ };
87
+ ```
88
+ (`drop()` 同时给出高度、翻转、压扁;瓦片、楼、树、车共用它,全片手感都在这。)
89
+
90
+ ## 6. 镜头结构模板
91
+ | 秒 | 帧 | 意图 |
92
+ | --- | --- | --- |
93
+ | 0.0–0.9 | 0–27 | 青色蓝图网格画出,相机 3.1 倍贴近 |
94
+ | 0.25–1.5 | 7–45 | 6 圈瓦片按 0.25s 间隔波浪落下,落地压扁 |
95
+ | 1.62–1.75 | 48–52 | 土层挤出 strata,道路 loop 画出 |
96
+ | 2.25–4.44 | 67–133 | 14 栋房、4 台风机、轻轨、市中心 12 栋生长,屋顶延后 0.375s |
97
+ | 4.625–5.75 | 139–172 | 车流出现、塔楼分段拔高、天线与光环 |
98
+ | 6.0–7.0 | 180–210 | drop:CORE 冲击波、6% punch、曝光 -0.15EV 预备 / +0.3EV 命中 || 6.25–7.7 | 187–231 | 4 架无人机、数据流、3 张标注卡 ENERGY/COMMUTE/DATA |
99
+ | 7.75–8.75 | 232–262 | 拉远 1.8→1.0,浮岛露出,青色 ping 追到岛影 |
100
+ | 8.5–10.0 | 255–300 | 标题板长起,字母每 0.0625s 一个,9.0 定格后 hold |
101
+
102
+ ## 7. 坑
103
+ - 正交相机的 `zoom` 和 shadow camera 是两套:拉远时阴影相机仍按 ±20 裁剪,岛边会突然没影子。
104
+ - 等轴下不能靠 z 排序:透明瓦片/水面必须 `depthWrite:false` + 显式 `renderOrder`。
105
+ - `spring(tau,14.8,.61)` 有 9% 过冲,屋顶不等 `roof_lag=0.375s` 就扣会穿出墙顶。
106
+ - cues 是 1/16 秒网格(0.0625s=1.875 帧),用 `Math.round(t*30)` 取帧会让最后几个字母挤在一起。
107
+ ## 8. 版权与素材
108
+ 上游 `mg-styles-15` 为 MIT;`ISOPOLIS`、`CITY OS · 144 TILES · ONLINE` 都是虚构品牌,换掉再用。Unbounded、HarmonyOS Sans SC 与 JetBrains Mono 已随 DrawAI 内置;上游 800 静态字重与内置可变字体并非完全相同。背景渐变、点阵地板、浮岛阴影全是 shader 生成,没有位图。
@@ -0,0 +1,145 @@
1
+ # 05-cel-boil · 逐帧手绘 / 线条沸腾
2
+
3
+ 上游:`demos/05-cel-boil/js/scene.js`(117KB,2036 行 Canvas2D)+ `js/engine.js`(13.8KB,笔刷与 boil 引擎)+
4
+ `cues.json`(120BPM,`strike_start:0.333`,`burst:6.5`,`title_settle:8.5`)。1920×1080 / **24fps** / 10.000s。
5
+ `index.html` 只有一块 canvas;**`assets/` 整个不在仓库**:`scene.js:1327` 要 `paper_base.jpg`、
6
+ `paper_tooth.png`、`dust_ink_01..04.png`。提示词原文用 `mg_style {action:"read",slug:"05-cel-boil"}` 取。
7
+
8
+ ## 1. 一眼认出
9
+
10
+ - **是一叠纸,不是一个背景**:`drawPaper` 把纸放大 1.045 铺满,`drawTooth` 再叠一层 multiply 的纸齿,
11
+ 位置按画号换:`ox=hs(v,51)*470`、`oy=hs(v,52)*310`。
12
+ - **线条每张画重抖一次**:`boil(pts, seed, amp=2.4, scale=70)` 用 simplex 噪声平移中线,seed 跟 drawing id
13
+ 走;`step===3` 时只循环 3 张(`bv(D)=D.id%3`),其余 4 张。
14
+ - **一拍二**:`SCHED` 11 段,开场 `[0,8,2]` 只有 4 张画,`[108,120,3]` 的 ta-da 是 3 帧一张。
15
+ - **手涂没对准**:`REG = {dx:-5, dy:4}`,填色层偏左 5px、偏下 4px,墨线压在上面。
16
+ - **可变宽墨线**:`outline(pts, wfn)` 把中线往两侧各推半个宽度;撇从 `W0*1.12` 收到 `W0*0.5`。
17
+
18
+ ## 2. 色板
19
+
20
+ | 角色 | hex | 用在哪 |
21
+ | --- | --- | --- |
22
+ | 纸(page) | `#f4e9d0` | `body` 底与 `PAL.cream`,占 60% 以上 |
23
+ | 纸白(surface) | `#fff6e2` | `PAL.hi`,高光与撕口 |
24
+ | 墨(text) | `#1c1613` | 所有线条、标题、落款 |
25
+ | 番茄(accent) | `#e5402b` | 火柴头、外焰、红圈、箭头 |
26
+ | 阳光(accent2) | `#ffc425` | 填色层主色(比墨线偏 5px) |
27
+ | 铅笔红(muted) | `#d9573f` | `PAL.pencil`,辅助线、阴影边缘 |
28
+
29
+ `theme.ts`:`page`→`#f4e9d0`,`text`→`#1c1613`,`accent`→`#e5402b`;另两色是这套画具的固定颜料。
30
+
31
+ **禁止色**:任何冷色(蓝/青/紫),连阴影都不许用蓝灰;纯白 `#fff` 也不行,最亮只到 `#fff6e2`。
32
+
33
+ ## 3. 字体与字排
34
+
35
+ **当前优先使用插件内置字体:** 中文用 LXGW Marker Gothic 或 Long Cang,英文手写用 Caveat;原片中手绘路径标题仍应按路径实现,不用字体冒充。
36
+
37
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
38
+
39
+ **标题「手作」不是字体**:`CHAR_SHOU` 4 笔 + `CHAR_ZUO` 7 笔,每笔是中线的点列(unit 空间 0..1,y 向下),
40
+ 分 `h` 横 / `v` 竖 / `p` 撇 / `g` 竖钩;`TITLE = {cx:960, cy:440, S:352, gap:18}`,两字转 `-0.045` / `+0.035`
41
+ rad、错 ±8px。宽度由 `strokeWidth(k,u,W0)` 给:撇 `W0*(1.12-0.62u^1.4)`,钩在 `u>0.8` 后收到 0.5 倍。
42
+ **这条必须照搬**,换成字体就变成字幕。
43
+
44
+ 字幕用 `'64px "LXGW Marker Gothic"'`、`'600 42px "Caveat"'`、`'400 86px "Long Cang"'`。替代:
45
+ 拉丁 `'"Ink Free","Segoe Script",cursive'`;中文 `'"KaiTi","STKaiti","Microsoft YaHei",serif'`。
46
+ 损失:Ink Free 是等宽单线,没有 Caveat 的笔压与连笔;楷体是印刷楷,等粗、有顿笔,字面还小一号(字号 +6%)。
47
+
48
+ ## 4. 动效语法
49
+
50
+ - **节拍**:一拍 = 12 帧,16 分 = 3 帧,`bar_anchor:0.5`。`exposure` 表把每段标成 on 1s / 2s / 3s ——
51
+ 先定「每张画几帧」,再谈运动。
52
+ - **缓动只在一张画内部**:`E.out2` 管镜头推拉与贴纸滑入;线条 boil 是**阶跃**,没有插值。
53
+ - 签名动作:
54
+ 1. **擦火柴**(`strike_start:0.333`):`strike_scrape:[0.333,0.458]` 只有 3 帧,线拉长 150–300% 只留 1 帧;
55
+ `ignite:0.5` 火焰出现,`match_land:1.0` 才落稳。
56
+ 2. **醒**(1.0–2.0,on 2s):`eyes_open:1.25`、`blink:1.417`、`look_left:1.5`、`look_right:1.667` 全在
57
+ 16 分上,每 3 帧换视线;`crouch:1.75` 是起跳前的 squash。
58
+ 3. **跳**(`jump:2.0`→`land:2.5`):12 帧,离地 3 帧到顶,落地 2 帧压到 `sy 0.92`,下一张弹回 1.04。
59
+ 4. **舞**(2.5–4.5):`hops:[3.0,3.5,4.0]` 每拍一跳,`twirl:[3.75,4.0]` 半圈,`shimmy:[4.083,4.25,4.417]`
60
+ 在 16 分上左右摆 6px;`tada:4.5` 定格成 on 3s。
61
+ 5. **爆 + 重组成字**(6.25–8.5):`squash:6.25` → `burst:6.5` → `impact_frames:[6.5,6.542]` 两帧反白 →
62
+ `box_blown:6.583` → 11 段 `strokes`(7.25 起每 3 帧一笔)→ `title_settle:8.5`。
63
+ - **组成规则**:舞台 `STAGE={s:1.4, X:960, Y:1002}`;相机切点 f12/30/48/60/108/132(`CLOSE 2.6` →
64
+ `WAKE 1.75` → `STAGE` → `LOW 1.5` → `MED 2.05`);安全边距 60px;图层:纸 → 大形色块 → 墨线 →
65
+ 填色(-5,+4)→ 高光 → tooth/dust 顶层。
66
+
67
+ ## 5. Remotion 落地配方
68
+
69
+ 必须换掉的六处:
70
+ 1. Canvas2D 逐帧绘制 → 两条路:(A) SVG `<path>`,几十条 path 让 React diff,最省心;(B) `<canvas>` +
71
+ `useLayoutEffect`,依赖 `drawing(f).fq` 而不是 `f`,否则一帧画两遍。
72
+ 2. `requestAnimationFrame` → `frame`;`Math.random()` → `hs()` / `mulberry32(seed)`;`Date.now()` 删掉。
73
+ 3. **CSS `transition`/`animation` 全禁**:会在 24fps 之间插出平滑假帧,一拍二立刻消失。
74
+ 4. 纸纹/尘土(不在仓库)→ `feTurbulence baseFrequency=0.85 numOctaves=3` 的 256px tile +
75
+ `mixBlendMode:'multiply'`、opacity 0.12。损失:没有真实纤维的断续走向,特写会「太干净」。
76
+ 5. 线宽:SVG `stroke-width` 不能沿路径变 → 真要变宽得把中线 offset 成多边形(`outline()` 移植,约 30 行);
77
+ 偷懒叠两遍 stroke(0.9 粗 + 0.6 细)造假压力,收笔处会露馅。
78
+ 6. `motionBlur.samples:1` 等于没有;smear 是手画的一帧拉伸,不是后期模糊。
79
+
80
+ ```tsx
81
+ const SCHED: [number, number, number][] = [[0,8,2],[8,24,1],[24,48,2],[48,60,1],[60,108,2],
82
+ [108,120,3],[120,132,2],[132,168,1],[168,224,2],[224,230,1],[230,240,3]];
83
+ const drawing = (f: number) => { let id = 0;
84
+ for (const [a, b, s] of SCHED) {
85
+ if (f >= b) { id += Math.ceil((b - a) / s); continue; }
86
+ const k = Math.floor((f - a) / s); return {fq: a + k * s, id: id + k, step: s};
87
+ } return {fq: 239, id, step: 3};
88
+ };
89
+ const wob = (pts: [number, number][], seed: number, amp = 2.4) => pts.map(([x, y]) => [
90
+ x + amp * Math.sin(x * 0.014 + y * 0.006 + seed * 2.1) * Math.cos(y * 0.011 - seed * 1.3),
91
+ y + amp * Math.cos(x * 0.009 - y * 0.013 + seed * 1.7),
92
+ ]);
93
+ const Stroke = ({pts, seed, w}: {pts: [number, number][]; seed: number; w: number}) => (
94
+ <path d={wob(pts, seed).map(([x, y], i) => `${i ? 'L' : 'M'}${x} ${y}`).join(' ')} fill="none"
95
+ stroke="#1c1613" strokeWidth={w} strokeLinecap="round" strokeLinejoin="round" />
96
+ );
97
+ export const HandMade = () => {
98
+ const f = useCurrentFrame();
99
+ const D = drawing(f); // 真正的时间是 D.fq,不是 f
100
+ const seed = D.id * 0.37 + 1; // 同一张画内所有笔画共用一个 boil seed
101
+ return <AbsoluteFill style={{background: '#f4e9d0'}}>
102
+ <svg width={1920} height={1080} viewBox="0 0 1920 1080">
103
+ <filter id="tooth"><feTurbulence baseFrequency={0.85} numOctaves={3} /></filter>
104
+ <rect width="100%" height="100%" filter="url(#tooth)" opacity={0.12}
105
+ style={{mixBlendMode: 'multiply', transform: `translate(${(D.id % 4) * -37}px, ${(D.id % 3) * -29}px)`}} />
106
+ <g transform="translate(960 440)"> {/* 每笔一条中线折线;变宽要自己 offset 成多边形 */}
107
+ <Stroke pts={[[-330, 0], [0, -40], [330, 0]]} seed={seed} w={58} />
108
+ <Stroke pts={[[0, -300], [0, 300]]} seed={seed + 1} w={46} />
109
+ </g>
110
+ </svg>
111
+ </AbsoluteFill>;
112
+ };
113
+ ```
114
+
115
+ 填色层:同一组 `Stroke` 再画一遍,`stroke="#ffc425"`、平移 `(-5, 4)`、压在墨线下面。
116
+
117
+ ## 6. 镜头结构模板
118
+
119
+ | 秒 | 帧 | 意图 |
120
+ | --- | --- | --- |
121
+ | 0.0–0.333 | 0–8 | 火柴躺在盒侧,2 帧一张,只有呼吸 |
122
+ | 0.333–1.0 | 8–24 | 擦:3 帧 smear + 翻转,on 1s |
123
+ | 1.0–2.0 | 24–48 | 睁眼、眨眼、左右看、下蹲,全在 16 分上 |
124
+ | 2.0–2.5 | 48–60 | 跳:一拍一,12 帧一个起落 |
125
+ | 2.5–4.5 | 60–108 | 跳舞,每拍一个 hop;LOW 机位压到 1.5 |
126
+ | 4.5–5.0 | 108–120 | ta-da 定格,on 3s |
127
+ | 5.0–6.5 | 120–156 | 二次弹跳 → 蓄力旋转 → 压扁 |
128
+ | 6.5–7.25 | 156–174 | 两帧反白 + 冲击框,然后烟团/火星/速度线 |
129
+ | 7.25–8.5 | 174–204 | 11 段笔画重组成「手作」 |
130
+ | 8.5–10.0 | 204–240 | 落款 → 回拉到 84% → 翻纸 → 眨眼,on 3s |
131
+
132
+ ## 7. 坑
133
+
134
+ - 一拍二不是「每 2 帧取整」,是 `drawing(f).fq` 回到这张画的起始帧;镜头仍按 `f` 算,混用才抖得对。
135
+ - 拿 `f` 而不是 `D.id` 当 boil seed,hold 段会变成 24fps 抖,节奏全散。
136
+ - 填色偏移是**屏幕**像素:特写 `s=2.6` 时不除 scale 会错位 13px(`GLOBAL.amp`/`GLOBAL.ink` 管这个)。
137
+ - 纸纹每张画换位置,否则看起来是「一张纸」而不是「一叠纸」。
138
+ - `strokes` 落在 `7.25 + 0.125k`,正好 3 帧一笔;一帧一笔会糊成一坨。
139
+ - 标题换成字体 = 放弃这个风格;`CHAR_*` 的笔画顺序与粗细剖面是这份片子的身份证。
140
+
141
+ ## 8. 版权与素材
142
+
143
+ 上游 MIT。`LXGW Marker Gothic`、`Caveat`、`Long Cang` 已随 DrawAI 内置;火柴盒、火焰精灵、
144
+ 「手作」字样是这个 demo 自己的角色与文案,客户项目里要换;星爆、烟团、速度线、反白冲击框是通用漫画
145
+ 语汇。纸纹自己拍/扫或用 `feTurbulence` 生成,别抓别人的扫描件。