dsh-drawai 0.3.4 → 0.4.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 (538) hide show
  1. package/LICENSE +4154 -0
  2. package/README.md +49 -11
  3. package/lib/audio-media.js +150 -0
  4. package/lib/audio-service.js +66 -0
  5. package/lib/canvas-format.js +134 -0
  6. package/lib/client.js +5090 -184
  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-runner.js +6 -4
  12. package/lib/drawing-tasks.js +26 -0
  13. package/lib/ffmpeg-manager.js +1056 -0
  14. package/lib/imagegen.mjs +596 -0
  15. package/lib/index.js +1762 -129
  16. package/lib/media.js +26 -13
  17. package/lib/mgstyle-core.js +75 -0
  18. package/lib/motion/apply.js +181 -0
  19. package/lib/motion/asset-pack-lock.js +10 -0
  20. package/lib/motion/asset-pack.js +335 -0
  21. package/lib/motion/assets.js +291 -0
  22. package/lib/motion/audio.js +103 -0
  23. package/lib/motion/audiolevel.js +63 -0
  24. package/lib/motion/audiomix.js +144 -0
  25. package/lib/motion/beats.js +338 -0
  26. package/lib/motion/builtin-assets.js +62 -0
  27. package/lib/motion/canvas-spec.js +442 -0
  28. package/lib/motion/capture.js +95 -0
  29. package/lib/motion/cards.js +80 -0
  30. package/lib/motion/collect.js +449 -0
  31. package/lib/motion/delivery.js +140 -0
  32. package/lib/motion/edge-speech.py +90 -0
  33. package/lib/motion/entry.jsx +73 -0
  34. package/lib/motion/export.js +200 -0
  35. package/lib/motion/ffmpeg.js +43 -0
  36. package/lib/motion/fonts.js +71 -0
  37. package/lib/motion/jobs.js +117 -0
  38. package/lib/motion/json.js +4 -0
  39. package/lib/motion/media-catalog.js +59 -0
  40. package/lib/motion/mgstyles/BRIEF-TEMPLATE.md +63 -0
  41. package/lib/motion/mgstyles/briefs/01-flat-vector.md +104 -0
  42. package/lib/motion/mgstyles/briefs/02-line-art.md +97 -0
  43. package/lib/motion/mgstyles/briefs/03-isometric.md +108 -0
  44. package/lib/motion/mgstyles/briefs/05-cel-boil.md +145 -0
  45. package/lib/motion/mgstyles/briefs/06-collage.md +149 -0
  46. package/lib/motion/mgstyles/briefs/07-liquid.md +106 -0
  47. package/lib/motion/mgstyles/briefs/08-morph.md +111 -0
  48. package/lib/motion/mgstyles/briefs/09-bauhaus.md +150 -0
  49. package/lib/motion/mgstyles/briefs/10-synthwave.md +151 -0
  50. package/lib/motion/mgstyles/briefs/12-aurora-glass.md +147 -0
  51. package/lib/motion/mgstyles/briefs/18-hanazi.md +140 -0
  52. package/lib/motion/mgstyles/briefs/19-paperclip.md +156 -0
  53. package/lib/motion/mgstyles/briefs/20-pixel.md +118 -0
  54. package/lib/motion/mgstyles/briefs/22-hud.md +118 -0
  55. package/lib/motion/mgstyles/catalog.d/01-flat-vector.json +34 -0
  56. package/lib/motion/mgstyles/catalog.d/02-line-art.json +34 -0
  57. package/lib/motion/mgstyles/catalog.d/03-isometric.json +35 -0
  58. package/lib/motion/mgstyles/catalog.d/05-cel-boil.json +28 -0
  59. package/lib/motion/mgstyles/catalog.d/06-collage.json +28 -0
  60. package/lib/motion/mgstyles/catalog.d/07-liquid.json +28 -0
  61. package/lib/motion/mgstyles/catalog.d/08-morph.json +28 -0
  62. package/lib/motion/mgstyles/catalog.d/09-bauhaus.json +28 -0
  63. package/lib/motion/mgstyles/catalog.d/10-synthwave.json +28 -0
  64. package/lib/motion/mgstyles/catalog.d/12-aurora-glass.json +28 -0
  65. package/lib/motion/mgstyles/catalog.d/18-hanazi.json +28 -0
  66. package/lib/motion/mgstyles/catalog.d/19-paperclip.json +28 -0
  67. package/lib/motion/mgstyles/catalog.d/20-pixel.json +28 -0
  68. package/lib/motion/mgstyles/catalog.d/22-hud.json +28 -0
  69. package/lib/motion/mgstyles/catalog.json +1356 -0
  70. package/lib/motion/mgstyles/upstream/README.md +147 -0
  71. package/lib/motion/mgstyles/upstream/README.zh-CN.md +147 -0
  72. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/cues.json +1 -0
  73. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/index.html +712 -0
  74. package/lib/motion/mgstyles/upstream/demos/02-line-art/cues.json +331 -0
  75. package/lib/motion/mgstyles/upstream/demos/02-line-art/film.js +676 -0
  76. package/lib/motion/mgstyles/upstream/demos/02-line-art/index.html +18 -0
  77. package/lib/motion/mgstyles/upstream/demos/02-line-art/tools/dump_timing.mjs +26 -0
  78. package/lib/motion/mgstyles/upstream/demos/03-isometric/cues.json +109 -0
  79. package/lib/motion/mgstyles/upstream/demos/03-isometric/index.html +25 -0
  80. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/anim.js +82 -0
  81. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/main.js +219 -0
  82. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/night5.js +180 -0
  83. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/render.js +202 -0
  84. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title.js +167 -0
  85. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title5.js +294 -0
  86. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/ui.js +141 -0
  87. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/world.js +1399 -0
  88. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/cues.json +157 -0
  89. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/index.html +34 -0
  90. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/engine.js +326 -0
  91. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/scene.js +2036 -0
  92. package/lib/motion/mgstyles/upstream/demos/06-collage/assets/gen/layout.json +157 -0
  93. package/lib/motion/mgstyles/upstream/demos/06-collage/cues.json +80 -0
  94. package/lib/motion/mgstyles/upstream/demos/06-collage/index.html +889 -0
  95. package/lib/motion/mgstyles/upstream/demos/07-liquid/cues.json +100 -0
  96. package/lib/motion/mgstyles/upstream/demos/07-liquid/index.html +108 -0
  97. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/engine.js +153 -0
  98. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/links.js +64 -0
  99. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/lookdev.js +46 -0
  100. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/scene.js +963 -0
  101. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/shaders.js +647 -0
  102. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/textsdf.js +114 -0
  103. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/type.js +50 -0
  104. package/lib/motion/mgstyles/upstream/demos/08-morph/cues.json +131 -0
  105. package/lib/motion/mgstyles/upstream/demos/08-morph/glyphs.json +1 -0
  106. package/lib/motion/mgstyles/upstream/demos/08-morph/index.html +901 -0
  107. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/cues.json +270 -0
  108. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/film.js +697 -0
  109. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/index.html +12 -0
  110. package/lib/motion/mgstyles/upstream/demos/10-synthwave/cues.json +44 -0
  111. package/lib/motion/mgstyles/upstream/demos/10-synthwave/index.html +1028 -0
  112. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/cues.json +67 -0
  113. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/index.html +16 -0
  114. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/main.js +967 -0
  115. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/shaders.js +468 -0
  116. package/lib/motion/mgstyles/upstream/demos/18-hanazi/cues.json +117 -0
  117. package/lib/motion/mgstyles/upstream/demos/18-hanazi/index.html +541 -0
  118. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/countries-110m.json +1 -0
  119. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/stickers/meta.json +34 -0
  120. package/lib/motion/mgstyles/upstream/demos/19-paperclip/cues.json +285 -0
  121. package/lib/motion/mgstyles/upstream/demos/19-paperclip/index.html +599 -0
  122. package/lib/motion/mgstyles/upstream/demos/20-pixel/cues.json +42 -0
  123. package/lib/motion/mgstyles/upstream/demos/20-pixel/film.js +914 -0
  124. package/lib/motion/mgstyles/upstream/demos/20-pixel/index.html +18 -0
  125. package/lib/motion/mgstyles/upstream/demos/22-hud/cues.json +108 -0
  126. package/lib/motion/mgstyles/upstream/demos/22-hud/index.html +125 -0
  127. package/lib/motion/mgstyles/upstream/demos/22-hud/js/holo.js +275 -0
  128. package/lib/motion/mgstyles/upstream/demos/22-hud/js/hud.js +855 -0
  129. package/lib/motion/mgstyles/upstream/demos/22-hud/js/post.js +150 -0
  130. package/lib/motion/mgstyles/upstream/demos/22-hud/js/util.js +65 -0
  131. package/lib/motion/mgstyles/upstream/demos/22-hud/js/v5.js +142 -0
  132. package/lib/motion/mgstyles/upstream/harness/render.mjs +319 -0
  133. package/lib/motion/mgstyles/upstream/manifest.json +269 -0
  134. package/lib/motion/mgstyles/upstream/prompts/01-flat-vector.md +98 -0
  135. package/lib/motion/mgstyles/upstream/prompts/02-line-art.md +95 -0
  136. package/lib/motion/mgstyles/upstream/prompts/03-isometric.md +97 -0
  137. package/lib/motion/mgstyles/upstream/prompts/05-cel-boil.md +95 -0
  138. package/lib/motion/mgstyles/upstream/prompts/06-collage.md +95 -0
  139. package/lib/motion/mgstyles/upstream/prompts/07-liquid.md +98 -0
  140. package/lib/motion/mgstyles/upstream/prompts/08-morph.md +95 -0
  141. package/lib/motion/mgstyles/upstream/prompts/09-bauhaus.md +96 -0
  142. package/lib/motion/mgstyles/upstream/prompts/10-synthwave.md +95 -0
  143. package/lib/motion/mgstyles/upstream/prompts/12-aurora-glass.md +96 -0
  144. package/lib/motion/mgstyles/upstream/prompts/18-hanazi.md +95 -0
  145. package/lib/motion/mgstyles/upstream/prompts/19-paperclip.md +96 -0
  146. package/lib/motion/mgstyles/upstream/prompts/20-pixel.md +96 -0
  147. package/lib/motion/mgstyles/upstream/prompts/22-hud.md +95 -0
  148. package/lib/motion/mgstyles/upstream/rubric.md +51 -0
  149. package/lib/motion/mgstyles/upstream/template.md +36 -0
  150. package/lib/motion/pixelqa.js +198 -0
  151. package/lib/motion/preview.js +97 -0
  152. package/lib/motion/project.js +395 -0
  153. package/lib/motion/qa.js +290 -0
  154. package/lib/motion/reference-media.jsx +10 -0
  155. package/lib/motion/render-settings.js +112 -0
  156. package/lib/motion/render.js +161 -0
  157. package/lib/motion/runtime/package-lock.json +3058 -0
  158. package/lib/motion/runtime/package.json +16 -0
  159. package/lib/motion/scene-kit.js +183 -0
  160. package/lib/motion/sfx.js +232 -0
  161. package/lib/motion/shotcraft/ClipCard.tsx +204 -0
  162. package/lib/motion/shotcraft/catalog.json +2461 -0
  163. package/lib/motion/shotcraft/upstream/SKILL.md +286 -0
  164. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -0
  165. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -0
  166. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -0
  167. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -0
  168. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -0
  169. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -0
  170. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -0
  171. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -0
  172. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -0
  173. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -0
  174. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -0
  175. package/lib/motion/shotcraft/upstream/assets/scripts/__pycache__/sfx-source.cpython-313.pyc +0 -0
  176. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -0
  177. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -0
  178. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -0
  179. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -0
  180. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -0
  181. package/lib/motion/shotcraft/upstream/demos/README.md +120 -0
  182. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -0
  183. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -0
  184. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -0
  185. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -0
  186. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -0
  187. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -0
  188. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +389 -0
  189. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -0
  190. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -0
  191. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -0
  192. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -0
  193. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -0
  194. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -0
  195. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -0
  196. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -0
  197. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -0
  198. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -0
  199. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -0
  200. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -0
  201. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -0
  202. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -0
  203. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -0
  204. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -0
  205. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -0
  206. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -0
  207. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -0
  208. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -0
  209. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -0
  210. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -0
  211. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -0
  212. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -0
  213. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -0
  214. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -0
  215. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -0
  216. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -0
  217. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -0
  218. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -0
  219. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -0
  220. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -0
  221. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -0
  222. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -0
  223. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -0
  224. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -0
  225. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -0
  226. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -0
  227. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -0
  228. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -0
  229. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -0
  230. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -0
  231. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -0
  232. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -0
  233. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -0
  234. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -0
  235. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -0
  236. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -0
  237. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -0
  238. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -0
  239. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -0
  240. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -0
  241. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -0
  242. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -0
  243. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -0
  244. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -0
  245. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -0
  246. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -0
  247. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -0
  248. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -0
  249. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -0
  250. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -0
  251. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -0
  252. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -0
  253. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -0
  254. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -0
  255. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -0
  256. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -0
  257. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -0
  258. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -0
  259. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -0
  260. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -0
  261. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -0
  262. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -0
  263. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -0
  264. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -0
  265. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -0
  266. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -0
  267. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -0
  268. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -0
  269. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -0
  270. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -0
  271. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -0
  272. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -0
  273. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -0
  274. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -0
  275. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -0
  276. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -0
  277. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -0
  278. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -0
  279. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -0
  280. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -0
  281. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -0
  282. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -0
  283. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -0
  284. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -0
  285. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -0
  286. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -0
  287. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -0
  288. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -0
  289. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -0
  290. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -0
  291. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -0
  292. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -0
  293. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -0
  294. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -0
  295. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -0
  296. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -0
  297. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -0
  298. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -0
  299. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -0
  300. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -0
  301. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -0
  302. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -0
  303. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -0
  304. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -0
  305. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -0
  306. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -0
  307. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -0
  308. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -0
  309. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -0
  310. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -0
  311. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -0
  312. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -0
  313. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -0
  314. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -0
  315. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -0
  316. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -0
  317. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -0
  318. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -0
  319. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -0
  320. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -0
  321. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -0
  322. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -0
  323. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -0
  324. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -0
  325. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -0
  326. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -0
  327. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -0
  328. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -0
  329. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -0
  330. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -0
  331. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -0
  332. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -0
  333. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -0
  334. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -0
  335. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -0
  336. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -0
  337. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -0
  338. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -0
  339. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -0
  340. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -0
  341. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -0
  342. package/lib/motion/shotcraft/upstream/manifest.json +2715 -0
  343. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -0
  344. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -0
  345. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -0
  346. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -0
  347. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -0
  348. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -0
  349. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -0
  350. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -0
  351. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -0
  352. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -0
  353. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -0
  354. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -0
  355. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -0
  356. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -0
  357. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -0
  358. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -0
  359. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -0
  360. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -0
  361. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -0
  362. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -0
  363. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -0
  364. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -0
  365. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -0
  366. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -0
  367. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -0
  368. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -0
  369. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -0
  370. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -0
  371. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -0
  372. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -0
  373. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -0
  374. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -0
  375. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -0
  376. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -0
  377. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -0
  378. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -0
  379. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -0
  380. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -0
  381. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -0
  382. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -0
  383. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -0
  384. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -0
  385. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -0
  386. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -0
  387. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -0
  388. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -0
  389. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -0
  390. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -0
  391. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -0
  392. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -0
  393. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -0
  394. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -0
  395. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -0
  396. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -0
  397. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -0
  398. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -0
  399. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -0
  400. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -0
  401. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -0
  402. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -0
  403. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -0
  404. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -0
  405. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -0
  406. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -0
  407. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -0
  408. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -0
  409. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -0
  410. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -0
  411. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -0
  412. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -0
  413. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -0
  414. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -0
  415. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -0
  416. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -0
  417. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -0
  418. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -0
  419. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -0
  420. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -0
  421. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -0
  422. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -0
  423. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -0
  424. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -0
  425. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -0
  426. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -0
  427. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -0
  428. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -0
  429. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -0
  430. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -0
  431. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -0
  432. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -0
  433. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -0
  434. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -0
  435. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -0
  436. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -0
  437. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -0
  438. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -0
  439. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -0
  440. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -0
  441. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -0
  442. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -0
  443. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -0
  444. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -0
  445. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -0
  446. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -0
  447. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -0
  448. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -0
  449. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -0
  450. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -0
  451. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -0
  452. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -0
  453. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -0
  454. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -0
  455. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -0
  456. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -0
  457. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -0
  458. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -0
  459. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -0
  460. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -0
  461. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -0
  462. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -0
  463. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -0
  464. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -0
  465. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -0
  466. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -0
  467. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -0
  468. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -0
  469. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -0
  470. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -0
  471. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -0
  472. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -0
  473. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -0
  474. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -0
  475. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -0
  476. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -0
  477. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -0
  478. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -0
  479. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -0
  480. package/lib/motion/shotcraft/upstream/template/package.json +20 -0
  481. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -0
  482. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -0
  483. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -0
  484. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -0
  485. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -0
  486. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -0
  487. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -0
  488. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -0
  489. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -0
  490. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -0
  491. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -0
  492. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -0
  493. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -0
  494. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -0
  495. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +389 -0
  496. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -0
  497. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -0
  498. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -0
  499. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -0
  500. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -0
  501. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -0
  502. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -0
  503. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -0
  504. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -0
  505. package/lib/motion/spec.js +113 -0
  506. package/lib/motion/style-engine.js +153 -0
  507. package/lib/motion/style-frames.js +271 -0
  508. package/lib/motion/sync.js +214 -0
  509. package/lib/motion/theme.js +121 -0
  510. package/lib/motion/video-runtime.js +192 -0
  511. package/lib/motion/voice.js +417 -0
  512. package/lib/motion-agent-files.js +82 -0
  513. package/lib/motion-agent-protocol.js +66 -0
  514. package/lib/motion-agent-tools.js +196 -0
  515. package/lib/motion-agent.js +171 -0
  516. package/lib/motion-capture.js +93 -0
  517. package/lib/motion-core.js +238 -0
  518. package/lib/motion-film-review.js +71 -0
  519. package/lib/motion-library.js +210 -0
  520. package/lib/motion-planner.js +254 -0
  521. package/lib/motion-project.js +87 -0
  522. package/lib/motion-render-worker.js +153 -0
  523. package/lib/motion-session.js +32 -0
  524. package/lib/motion-source.js +49 -0
  525. package/lib/motion-tasks.js +452 -0
  526. package/lib/motion-vision.js +44 -0
  527. package/lib/mxfile.js +27 -7
  528. package/lib/routing/node-runtime.js +14 -0
  529. package/lib/routing/router.js +211 -0
  530. package/lib/routing/vendor/README.md +96 -0
  531. package/lib/routing/vendor/libavoid-routing.js +753 -0
  532. package/lib/routing/vendor/libavoid.min.js +59 -0
  533. package/lib/shotcard-core.js +39 -0
  534. package/lib/shotcard-reference.js +56 -0
  535. package/lib/style-kernel.js +37 -3
  536. package/lib/task-patches.js +26 -2
  537. package/lib/video-export.js +49 -22
  538. package/package.json +34 -4
@@ -0,0 +1,149 @@
1
+ # 06-collage · 拼贴剪贴 / NOGGIN
2
+
3
+ 上游:`demos/06-collage/index.html`(66.5KB,889 行,**全部内联 Canvas2D**)+ `assets/gen/layout.json`(16 张抠图的
4
+ 尺寸与铰链点)+ `cues.json`(90BPM,`pop:4.0`,`tear:7.5`)。1920×1080 / **30fps 渲染但只走 12fps 网格** / 10.000s。
5
+ 片子专用 `assets/gen/*.png`(16 张)、`page_kraft.jpg`、`page_red.jpg` 未收录;共享的
6
+ `grain/washi/dust` 纹理可在 `motion_assets library` 搜索并导入;来源信息记录于素材清单。提示词原文用 `mg_style {action:"read",slug:"06-collage"}` 取。
7
+
8
+ ## 1. 一眼认出
9
+
10
+ - **运动是 12fps 的,不是 30**:`K(t)=Math.floor(t*12+1e-4)`,所有位移/角度先落到 `Q(t)=K/12` 再取整;
11
+ 30/12=2.5 帧一步,所以实际是 2 帧、3 帧交替。
12
+ - **每个元素自己会抖**:`jit(id,t,amp=2)` 给 x/y ±2px、rot ±0.4°;不动的元素 `boil(false)` 降到 6fps、±1.1px。
13
+ - **白描边是「剪」出来的**:`rimmed(img,r)` 沿半径 3.5px 的圆画 28 遍再 `source-in` 填 `#F4EFE4`,不是 stroke。
14
+ - **要么拍上去要么贴上去**:`slap(t,t0,pre=3)` 前 3 步放大到 1.38 且 `lift` 到 1,落点过冲 0.972,再回弹 1.01。
15
+ - **影子是纸的影子**:`shadow(c,lift)` 的 blur `5+34*lift`、offset `3+24*lift`、alpha `0.36+0.08*lift`。
16
+
17
+ ## 2. 色板
18
+
19
+ | 角色 | hex | 用在哪 |
20
+ | --- | --- | --- |
21
+ | 纸(page) | `#F2ECDF` | 剪贴块的纸白、`cutQuad` 的底 |
22
+ | 版心纸(surface) | `#EFE8DA` | `tornStrip(900,250,53,16)` 的刊头、圆章 |
23
+ | 牛皮(field) | `#E3CFAE` | `page_kraft.jpg` 的底色,整张底 |
24
+ | 墨(text) | `#16130F` | 所有字、撕边、胶带下的暗部 |
25
+ | 脏金(muted) | `#7A5516` | 旧报纸的泛黄区、半调暗部 |
26
+ | 印刷红(accent) | `#D2261C` | 红圆盘、`PAT.red`、NOGGIN 的 A |
27
+ | 撕口(border) | `#C4A077` | 卷边背面的纸芯 |
28
+
29
+ `theme.ts`:`page`→`#F2ECDF`,`text`→`#16130F`,`accent`→`#D2261C`,`field`→`#E3CFAE`;`#3F6FA8` 只给太空楔形的地球边缘。
30
+
31
+ **禁止色**:任何高饱和的冷光/霓虹(青、品红、荧光绿)—— 这套片子只有油墨四色 + 纸。
32
+
33
+ ## 3. 字体与字排
34
+
35
+ **当前优先使用插件内置字体:** 英文大标题用 Anton,章印小字可用 Bebas Neue,中文使用 Noto Serif SC;Alimama ShuHeiTi 未内置,需粗黑时可选 Noto Sans SC。
36
+
37
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
38
+
39
+ 原片:`'400 124px "Anton"'`(构成主义斜带)、`'400 238px "Anton"'`(NOGGIN 刊头)、`'900 132px "Noto Serif SC"'`
40
+ (脑洞季刊)、`'700 190px "Alimama ShuHeiTi"'`(四个 212×212 的字块)、`'500 19px "IBM Plex Mono"'` 加
41
+ `letterSpacing 3px`(kicker)、`'400 22px "Bebas Neue"'`(圆章小字)。
42
+ DrawAI 替代:
43
+ - Anton → `'"Arial Black","Impact",sans-serif'`;Bebas → `'"Impact","Arial Narrow",sans-serif'`。
44
+ - 中文重黑 → `'"Microsoft YaHei","PingFang SC",sans-serif'` 700;宋体 → `'"SimSun","STSong",serif'` 900。
45
+ - mono → `'"Consolas","JetBrains Mono",monospace'`。
46
+ - 损失:Arial Black 比 Anton 宽 ~8%,124px 的长句要收到 108px 才不撞边;Impact 没有 Bebas 的几何骨架;
47
+ 雅还没有 Alimama 的字面厚度,190px 会显空;SimSun 没有 900 字重,合成粗体把笔画糊死。
48
+ `letterSpacing` 3px 在 Consolas 上要减到 2px。
49
+
50
+ ## 4. 动效语法
51
+
52
+ - **节拍**:90BPM,一拍 = 20 帧,16 分 = 5 帧;视觉网格 12fps(2.5 帧/step)。两套网格只在 0.5s 公倍,
53
+ `cues.json` 的事件都是两边同时对齐的(`hero:[6.667,6.833,7.0,7.167]` 就是每 1/6s 一块字)。
54
+ - **缓动**:`eOut = 1-(1-x)^3`、`eIO` 三次;但多数动作不是缓动,是**阶跃** —— 12fps 上只有 3–4 个姿态。
55
+ - 签名动作:
56
+ 1. **大手把肖像拍上来**(`slap_portrait:0.333`、`slap_circle:0.667`、`slap_news:1.0`):`IN` 四档
57
+ `[1100,-100]→[560,-50]→[200,-18]→[40,-4]`,每档一个 1/12s;落定那一步 `sqx 1.02 / sqy 0.96 / y+=14`。
58
+ 2. **颌骨分段**(`jaw:[1.333,1.667,2.0]`):`jaw` 取 `[0.5,1,0.5,0]` 的最大值 → 下颌骨绕
59
+ `jaw_hinge:[372.75,470.5]` 转 `-1.6°`,嘴用 2–3 张替换帧(不是变形)。
60
+ 3. **开盖**(`pop:4.0`):`LIDF` 四档 `[-70,10,-230]`、`[-200,-30,-660]`、`[-300,-70,-700]`、`[-385,-40,-300]`
61
+ (角度/位移/抬起),静止角 `-95°`;`lid_land:4.333` 后有 5% 回弹(`1+0.05*(1-eOut(...))`)。
62
+ 4. **一件件拍进画面**(`rocket:4.333`、`earth:4.667`、`birds:5.0`、`roses:5.333`、`butterflies:5.5`、
63
+ `manicules:6.0`):每件都走 `slap`,间隔 1–3 个 step,`lift` 制造「手还没走」的悬空感。
64
+ 5. **撕 + 卷**(`tear:[7.5,7.667,8.167]`):90 点撕裂线 `x` 从 1190 移到 770,叠
65
+ `sin(u*9.1+1.3)*22 + sin(u*31+0.4)*8`;`fmap(d,R)= d<=πR ? R*sin(d/R) : πR-d` 把弧长换成卷边高度,
66
+ `R` 四档 70/110/130/130。
67
+ - **组成规则**:`cam` 基准 `z=1, px=845, py=560`,pop 冲拳 `z 1.11→1.075→1.056→1.05`、`cx [12,-8,3,0]`;
68
+ 图层固定为 纸纹 → 大色块/红圆盘 → 照片剪影 → 胶带/涂鸦 → 颗粒;版心 90px,但刊头故意让印刷头像
69
+ 出血 120px(`RX=1490, RS=0.60`)。
70
+
71
+ ## 5. Remotion 落地配方
72
+
73
+ 必须换掉的六处:
74
+ 1. `c.drawImage` 逐帧 → `<Img src={staticFile('portrait.png')}>` + 每帧算 `transform`;白描边用 8 向偏移复制
75
+ 再叠一层同色 `filter: drop-shadow` 四向,**不要**真的画 28 遍。
76
+ 2. `requestAnimationFrame` → `frame`;`hash()` 是 imul 确定性哈希,可原样保留;`Math.random()` 一律换掉。
77
+ 3. CSS `transition`/`animation` 禁;静态 `filter` 可以留。
78
+ 4. 12fps 阶梯:`K(f)=Math.floor(f*12/30+1e-4)`,**别用 `Math.round`**(2.5 帧的交替会被抹成 15fps)。
79
+ 5. 按许可选择内置颗粒/胶带纹理,或用 `feTurbulence` + `feColorMatrix` 做 256px tile,`mixBlendMode:'overlay'` opacity 0.26,
80
+ 每 2 个 step 换偏移 `-hash(k,1)*120, -hash(k,2)*900`(`finish()` 就是这么干的);半调网点用
81
+ `radial-gradient(circle, #16130F 1.4px, transparent 1.6px)` 4px tile。损失:真半调的网点半径随亮度变,
82
+ 平铺网点不会,暗部是「发灰」而不是「发黑」。
83
+ 6. 翻页/卷边没有便宜的 CSS 3D 替代 → SVG `<path>` 打 4 档形变 + 6px `#EFE7D6` 亮边 + `#C4A077` 背面;
84
+ 损失:没有真正的透视缩短,大角度会「软」。
85
+
86
+ ```tsx
87
+ const hash = (a: number, b = 0) => { // 上游同款,可确定性复现
88
+ let h = Math.imul(a ^ 0x9e3779b9, 0x85ebca6b) ^ Math.imul(b + 0x165667b1, 0xc2b2ae35);
89
+ h ^= h >>> 15; return (h >>> 0) / 4294967296;
90
+ };
91
+ const K = (f: number) => Math.floor((f * 12) / 30 + 1e-4); // 12fps 网格
92
+ const ks = (f: number, t0: number) => K(f) - Math.round(t0 * 12);
93
+ const jit = (id: number, f: number, amp = 2, fps = 12) => {
94
+ const k = Math.floor((f * fps) / 30);
95
+ return {x: (hash(id, k) * 2 - 1) * amp, y: (hash(id + 71, k) * 2 - 1) * amp,
96
+ rot: (hash(id + 913, k) * 2 - 1) * amp * 0.2};
97
+ };
98
+ const slap = (f: number, t0: number, pre = 3) => {
99
+ const k = ks(f, t0);
100
+ if (k < -pre) return null;
101
+ if (k < 0) { const u = -k / pre; return {s: 1 + 0.38 * u * u + 0.05 * u, lift: u, sqy: 1}; }
102
+ if (k === 0) return {s: 0.972, lift: 0, sqy: 0.96};
103
+ return k === 1 ? {s: 1.01, lift: 0.03, sqy: 1} : {s: 1, lift: 0, sqy: 1};
104
+ };
105
+ export const Collage = () => {
106
+ const f = useCurrentFrame();
107
+ const p = slap(f, 0.3333); // 大手把肖像拍上来
108
+ if (!p) return null;
109
+ const j = jit(7, f);
110
+ return <AbsoluteFill style={{background: '#E3CFAE'}}>
111
+ <Img src={staticFile('portrait.png')} style={{position: 'absolute', left: 845, top: 554, width: 802,
112
+ transform: `translate(-50%,-50%) translate(${j.x}px, ${j.y + (1 - p.lift) * -40}px)`
113
+ + ` rotate(${j.rot}deg) scale(${p.s}, ${p.s * p.sqy})`,
114
+ filter: `drop-shadow(0 ${3 + p.lift * 24}px ${5 + p.lift * 34}px rgba(34,20,8,${0.36 + 0.08 * p.lift}))`}} />
115
+ </AbsoluteFill>;
116
+ };
117
+ ```
118
+
119
+ ## 6. 镜头结构模板
120
+
121
+ | 秒 | 帧 | 意图 |
122
+ | --- | --- | --- |
123
+ | 0.333–1.0 | 10–30 | 三下:肖像、红圆盘、报纸,各隔 1/3s |
124
+ | 1.333–2.0 | 40–60 | 下颌三段开合,配 3 张嘴 |
125
+ | 2.333–3.333 | 70–100 | 盖章 + 期号,剪刀五下 `snips`,纸屑落下 |
126
+ | 3.333–4.0 | 100–120 | 抖动蓄力,最后 1/3s **留白**,只有纸在抖 |
127
+ | 4.0–4.333 | 120–130 | `pop` 开盖,深海楔形翻开,`lid_land` 回弹 |
128
+ | 4.333–6.0 | 130–180 | 火箭/地球/鸟/玫瑰/蝴蝶逐件拍入 |
129
+ | 6.0–6.667 | 180–200 | 两只手指标志 `manicules` 敲两下,构成主义斜带压上 |
130
+ | 6.667–7.167 | 200–215 | 「脑洞大开」四块字每 1/6s 拍一块 |
131
+ | 7.5–8.167 | 225–245 | 撕纸 + 卷边,右缘翻过去 |
132
+ | 8.333–10.0 | 250–300 | 封底:NOGGIN 刊头、脑洞季刊、圆章、剪刀合上 |
133
+
134
+ ## 7. 坑
135
+
136
+ - `K` 必须 `+1e-4` 再 floor,否则 `f=0` 与 `f=30` 会跨到同一格,撕纸的第一帧对不上 `7.5`。
137
+ - `jit` 的 rot 是 `amp*0.2` 弧度再转度,直接写 2° 会抖成帕金森。
138
+ - 白描边是 alpha 里填色(`source-in`),CSS `drop-shadow` 只会往外发光,做不出「剪刀沿」的厚度;
139
+ 四个方向的 `drop-shadow` 叠起来接近,但拐角会圆。
140
+ - `slap` 的 `pre=3` 是 3 个 step(0.25s),不是 3 帧;按帧数写会变成 0.1s 的抽搐。
141
+ - 90BPM 的 16 分是 5 帧、12fps 网格是 2.5 帧,事件表里两者必须同时落在整数格上,否则「拍」和「抖」错半格。
142
+
143
+ ## 8. 版权与素材
144
+
145
+ 上游 MIT。16 张抠图 PNG(`assets/gen/*`)是 rembg 从新闻/NASA 公共领域图切的,**不在仓库**,要用得自己
146
+ 重做;`page_kraft.jpg`、`page_red.jpg` 未收录,共享 `grain/washi/dust` 已在插件素材库,来源信息见素材清单。字体 Anton、Bebas Neue、
147
+ Noto Serif SC 与 IBM Plex Mono 已内置,Alimama ShuHeiTi 尚未内置。`NOGGIN` 与
148
+ `THE MIND IS A COLLAGE` 是上游虚构的刊名与标语,客户项目必须换掉;维多利亚肖像、火箭、地球、手指标志
149
+ 是通用公共领域图形,可以重画,别直接抓某本杂志的封面版式。
@@ -0,0 +1,106 @@
1
+ # 07-liquid · 液态流动
2
+
3
+ 上游:`index.html` 6.4KB + `js/scene.js` 56.7KB + `js/shaders.js` 31.7KB + `js/engine.js` 9.8KB + `js/{type,textsdf,links,lookdev}.js`;`cues.json` bpm 150(12 帧/拍)D major:pour 0 / rain 0.4 / fuse 2.0 / leap 3.2 / flood 4.0 / immersed 4.42 / reveal 4.85 / gather 5.75 / gap 6.2 / drop 6.4 / glint 7.1 / drip 7.6 / ripple 8.4 / end 10.0;1920×1080 / 30fps / 10s,WebGL2 + RGBA16F + bloom。
4
+
5
+ ## 1. 一眼认出
6
+
7
+ - 只有一种材质:**稠液体**。球缘 1–2px 高光唇线(`palThin`),内部按厚度 u 混合橙→粉→紫(`palMid`,`js/shaders.js:284-302`),不是玻璃也不是水。
8
+ - 落地先压扁再回弹:静止水洼 `SV_PUD = 0.5` + `svLand()` 的 `spring(tl, 6, d.z)`(`js/scene.js:128-130`),接触点留 splat 与 5–7 条 tendril。
9
+ - 棚拍暗紫棚:`backdrop()` 顶 `lin(0.070,0.018,0.090)` → 地平线 `lin(0.205,0.058,0.235)`;地平线 786px(`uHorizon`)、接触线 872px(`floorY`)、key light `{x:-0.78,y:-0.95}`。
10
+ - 4.0s 三层洪流面压上来(`uOv[3]`,`sheets_in 4.035/4.105/4.175` 各错 2 帧),4.42s 沉进液体(immersed),只剩涡流 `uSw` 与气泡 `uBub`;6.4s 液滴拉成 4 个字形(`uTex`+`uL[4]`+`uLM[4]` 椭圆中介形),7.2s glint 扫过,8.4s 一滴落下、`uRip` 收尾。
11
+
12
+ ## 2. 色板
13
+
14
+ 着色器里全是线性值(`lin(c)=pow(c,2.2)`,`js/shaders.js:10`);下表按 `c^(1/2.2)` 反算,`js/links.js:6` 另有官方 sRGB 近似(`PM`/`PT`),取色以后者为准(差 10–15%)。
15
+
16
+ | 角色 | hex | 用在哪 |
17
+ |---|---|---|
18
+ | 液体主体 | `#FF5C0F` → `#FF1A70` → `#8F1FFF` | `palMid`,随 u 三段插值 |
19
+ | 高光唇线 | `#FFBD4D` → `#FF80A8` → `#D685FF` | `palThin`,球缘 1–2px |
20
+ | 深部 | `#E65A3B` → `#CD2B94` → `#853BCA` | `palDeep`,厚处与接触阴影 |
21
+ | 背景顶 / 地平线 | `#4C2955` / `#7C4684` | `backdrop()`,786px |
22
+ | 地面近 / 远 | `#371E3E` / `#703F77` | `floorCol()` |
23
+ | 主字 / 副标 / 高光 | `#FFE8F0` / `#FFC8E0` / `#FFF7F0` | `js/type.js`、`links.js:39` |
24
+
25
+ 禁止色:**纯黑 #000 / 纯白 #FFF 都不进液体**(暗部 `#371E3E`、高光 `#FFF7F0`);**不加青/蓝绿**,色谱里没有。
26
+
27
+ ## 3. 字体与字排
28
+
29
+ **当前优先使用插件内置字体:** 英文标题用 Fraunces,中文可用 Resource Han Rounded 或 Noto Serif SC,界面副标用 Inter;上游指定的 Fraunces 可变轴实例可能与默认值不同。
30
+
31
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
32
+
33
+ 原片:`Fraunces Liquid` 900,'drop' 400px / tracking 10 / pad 170 / sigma 10(`js/textsdf.js`);v5 换成 `Resource Han Rounded` 900 / 300px。副标 `Noto Serif SC` 600 44px、y958、tracking 14、`rgb(255,232,240)` α.96;次行 `Inter` 600 20px、y999、tracking 5.5、`rgb(255,200,224)` α.70,右对齐到 `word.letters[3].bbox[2]-4`(`js/type.js`)。
34
+
35
+ Windows 栈:display `"Constantia","Georgia",serif` 700 + `-webkit-text-stroke:0.4px`;中文 `"SimSun","宋体",serif` 600;西文 `"Segoe UI",sans-serif` 600。损失:Fraunces 的柔楔衬线 / 光学尺寸 / 圆 terminal 全丢,Constantia 更硬、x-height 更小,400px 下 tracking 要 10→14;宋体 300px 露点阵边,大字号中文改 `"Microsoft YaHei"` 700;两族都无 900,硬给会被 Chrome 合成加粗并横向撑开。
36
+
37
+ ## 4. 动效语法
38
+
39
+ 150 BPM → 12 帧/拍、6 帧/半拍,cue 全落 0.4 网格。缓动(`js/scene.js:28-31`):`inOut=(0.65,0,0.35,1)`、`easeIn=(0.5,0,0.9,0.4)`、`frontEase=(0.28,0.55,0.42,1)`;回弹用 `spring(t,f=4,z=0.3)` / `wob(t,f,decay)`(`scene.js:33-38`)。禁用 CSS `ease` 与 `bounce/elastic` 预设;`linear` 只给洪流前沿与 glint。
40
+
41
+ 1. **落滴**(0→0.167):四滴 0.4/0.8/1.2/1.6 落地(x 640/1250/405/960,尺寸 1.0/0.85/0.8/1.35);`easeIn` 下落,落地前 2 帧缩到 0.94,落地后 12 帧 squash 到 0.62 再回 0.5。
42
+ 2. **融合**(merges 2.0/2.4/2.8):三对球按 `mergeK` 的 smoothstep 收拢,靠 `k=0.1` 的 smooth-union(`uK`)不是布尔;每对 0.18s、错峰 0.4s,接 hop 1.66/2.06/2.46。
43
+ 3. **洪流**(4.0→4.42,一拍):前沿是 `uFlA`(amp/freq/lean) 行波,三层 `uOv` 各错 2 帧;immersed 时相机 zoom 降、画面转 `uSw`+`uBub`。
44
+ 4. **标志与收尾**:6.4 `logo_snap` / 6.417 `letter_bridge_snap`,液滴被 `frontEase` 拉成 4 字形 0.32s,字间走 `uLM` 椭圆、不淡入;8.4 `drip_land`→8.567 `drip_snap`,`uRip` 一圈 0.55s 衰到 0。
45
+
46
+ 构图:落点 x 固定,地平线 786、接触线 872、副标基线 958/999,安全边距 96px。图层:backdrop → floor → 主体 → 唇线 → sheets → SDF 字 → bloom → tonemap → grain。
47
+
48
+ ## 5. Remotion 落地配方
49
+
50
+ API:`useCurrentFrame` / `useVideoConfig` / `interpolate` / `Easing.bezier` / `AbsoluteFill`;保真路线加 `three` + `@react-three/fiber` 的 `<shaderMaterial>`;运动模糊用 `@remotion/motion-blur` 的 `<MotionBlurTrail>`。
51
+
52
+ 必须换掉:
53
+
54
+ 1. `requestAnimationFrame` / `renderAt(t)` 主循环(`js/engine.js`)→ 全由 `frame` 派生,`t = frame/fps`;`js/scene.js:51` 的 `camAt(t)` 可原样搬。
55
+ 2. `Date.now()` / 自增 `uFrame` → 唯一时钟是 `frame`,glint 与气泡相位都按 t 算。
56
+ 3. `Math.random()` → 上游已是固定种子 `rng(20260927)`(`scene.js:39`),照抄 LCG,否则每帧噪点都在跳。
57
+ 4. CSS `transition/animation`、远程 `@font-face` → 静态 style,字体走上面的栈。
58
+ 5. WebGL 逐帧重绘 → **A 保真**:fragment shader 原样塞 `<shaderMaterial>`,每帧上传 `uB[72]/uS[20]/uBub[32]/uFl/uOv[3]/uCam/uT`,代价是 bloom mip chain 自写 + 确认 `EXT_color_buffer_float`。**B 降级**:双层 SVG 椭圆(`palMid` 渐变 + `palThin` 高光弧)+ `blur(6px)`,bloom 靠复制层 `blur(24px) saturate(1.4)`,损失 smooth-union / 折射 / 唇线,球数超 5 个露馅。**A 更保真**,B 只适合 <3s 或液体非主角。
59
+ 6. 运动模糊:上游是页内时间超采样(FAST 段 16/20/24 采样、shutter 0.5,`index.html:24` 只声明 `samples:1`);Remotion 用 `<MotionBlurTrail samples={6} shutter={0.5}>` 只包下落/洪流层,或按 `uOvV`(px/frame)在 shader 里对前沿一维多采样。
60
+
61
+ ```tsx
62
+ import { AbsoluteFill, Easing, interpolate, useCurrentFrame, useVideoConfig } from 'remotion';
63
+ const B = { front: Easing.bezier(0.28, 0.55, 0.42, 1), fall: Easing.bezier(0.5, 0, 0.9, 0.4) };
64
+ const springS = (t: number, f = 6, z = 0.38) => t <= 0 ? 0 : Math.exp(-z * 2 * Math.PI * f * t) * Math.cos(2 * Math.PI * f * Math.sqrt(1 - z * z) * t);
65
+ const DROPS = [[0.4, 640, 1], [0.8, 1250, 0.85], [1.2, 405, 0.8], [1.6, 960, 1.35]];
66
+
67
+ export const Liquid: React.FC = () => {
68
+ const t = useCurrentFrame() / useVideoConfig().fps;
69
+ const flood = interpolate(t, [4.035, 4.42], [0, 1], { easing: B.front, extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
70
+ return (
71
+ <AbsoluteFill style={{ background: 'linear-gradient(#4C2955 0%, #7C4684 72.8%, #703F77 72.9%, #371E3E 100%)' }}>
72
+ {DROPS.map(([t0, x, s], i) => {
73
+ const fall = interpolate(t, [t0 - 0.167, t0], [0, 1], { easing: B.fall, extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
74
+ const r = interpolate(fall, [0, 1], [10, 62 * s]);
75
+ const sy = 1 + 0.38 * springS(t - t0, 6, 0.38);
76
+ return <div key={i} style={{ position: 'absolute', left: x - r, top: 872 - r * 2 * sy, width: r * 2, height: r * 2 * sy, borderRadius: '50%',
77
+ boxShadow: 'inset 0 2px 5px #FFF7F0, 0 0 40px #FF1A7066',
78
+ background: 'radial-gradient(circle at 34% 26%, #FFBD4D, #FF80A8 30%, #FF5C0F 58%, #8F1FFF)' }} />;
79
+ })}
80
+ <AbsoluteFill style={{ transform: `translateY(${(1 - flood) * 1080}px)`, background: 'linear-gradient(#FF80A8, #8F1FFF)' }} />
81
+ </AbsoluteFill>
82
+ );
83
+ };
84
+ ```
85
+
86
+ ## 6. 镜头结构模板
87
+
88
+ - **0–2.0** 空棚 + 786px 地平线起手,第一滴 0.4 落,splat / tendril 长出,1.66 起腾跃。
89
+ - **2.0–4.0** fuse / leap:三对融合成"水母",hop 2.06/2.46 + 3.433 `thread_snap` 细丝。
90
+ - **4.0–4.42** flood:三层 sheet 压满,4.0 impact 相机抖一帧。
91
+ - **4.42–6.4** immersed→gap:全屏液体只剩涡流气泡,5.75 收成一条液线。
92
+ - **6.4–8.4** drop→glint:6.4 落成、6.417 桥接,7.2 扫光 0.55s。
93
+ - **8.4–10** 8.4 滴落、8.567 涟漪,8.8 后只剩微颤。
94
+
95
+
96
+ ## 7. 坑
97
+
98
+ 1. 无头 Chrome 拿不到 `EXT_color_buffer_float` 时 bloom 全黑——先探测,退回 8bit 并把阈值降 0.2。
99
+ 2. uniform 数组定长(`NB 72` / `NS 20` / `NBUB 32`),`uNB` 只控有效个数,超了静默截断。
100
+ 3. squash 支点是**接触点**(`makeM` 的 `piv`)不是质心,CSS `transform-origin` 放错会像气球。
101
+ 4. sRGB 里 lerp 会发灰:`#FF1A70 → #8F1FFF` 中间补 `#FF3E9F`、`#C63BFF`。
102
+ 5. `uMbw` 是"帧间快门比例"不是模糊半径,搬过来换成 `shutter/fps`。
103
+
104
+ ## 8. 版权与素材
105
+
106
+ 上游 mg-styles-15 为 MIT。Fraunces、Instrument Serif、Inter 与 Noto Serif SC 已随 DrawAI 内置;`js/textsdf.js` 的字形图集不要复用。'drop' / 'LIQUID MOTION' / 「液态流动」是占位词。
@@ -0,0 +1,111 @@
1
+ # 08-morph · 形变动画
2
+
3
+ 上游:`index.html` 81.3KB(全部逻辑内联)+ `glyphs.json` 24.5KB(`upm:1000`,`glyphs[ch].contours` 为整数点,只有 m/o/r/p/h/e 六个 Outfit SemiBold 轮廓);`cues.json` bpm 150(12 帧/拍);land cup 0.4 / sun 2.0 / sunset 3.2 / gull 4.4 / plane 5.4 / pin 6.4 / heart 7.6 / m 8.6;build 4.8 / drop 6.4 / outro 8.8;1920×1080 / 30fps / 10s,Canvas2D + 一张离屏 canvas。
4
+
5
+ ## 1. 一眼认出
6
+
7
+ - **一形万象**:始终只有一个实心剪影,8 个图标同一套 fill 轮换,没有描边、渐变、阴影(暗面是 `shade` 单独画的形,不是 opacity)。
8
+ - 变形不是交叉淡化:轮廓先重采样成**等点数**(body 240 / 洞 72 / 描边 24 / shade 60),`lerpP` 逐点插值;`via` 段经过中介圆或胶囊(`P.Ca/Cb`),所以中间必过"圆"。
9
+ - 每次落地都压扁再弹:`IMP` 表 + `impact()` 的 `A*sin(2πτ/0.28)*exp(-τ*7.5)`,`τ` 从 `im.t-2*FR` 起算。
10
+ - 背景是 5 色色块按 cue 依次 wipe(cream→mari→verm→ultra→cream→verm→ink),带软边,不是渐变。
11
+ - 最后一定落在印刷质感上:纸纹 + 512² 颗粒(每帧偏移)+ 暗角,像丝网印。
12
+
13
+ ## 2. 色板
14
+
15
+ `index.html:25` `const C = { ink:'#16151B', cream:'#F4EEE3', mari:'#FFB627', verm:'#FF4F2B', ultra:'#2438E8' }`;pin 的暗面单独 `shadeC:'#D93A1C'`。
16
+
17
+ | 角色 | hex | 用在哪 |
18
+ |---|---|---|
19
+ | 纸底 / 主字 | `#F4EEE3` cream | 常驻底色、gull / plane / heart / m 的 fill |
20
+ | 墨 | `#16151B` ink | cup 的 fill、8.02s 的终场色块 |
21
+ | 黄 | `#FFB627` mari | sun 的 fill、1.62s 色块、字标圆点 |
22
+ | 橙红 | `#FF4F2B` verm | sunset / pin / heart 的 highlight、2.453s 色块 |
23
+ | 群青 | `#2438E8` ultra | 地平线/海面 flood 色块、plane 的 shade 30% |
24
+ | 暗面 | `#D93A1C` | 只给 pin 的 shade |
25
+
26
+ `surface/field/border/muted` 由 cream 与 ink 混出:`#E7E1D7`(6%) / `#DED8CF`(10%) / `#D0CBC3`(16%) / `#908C89`(45%)。禁止色:**不许渐变、发光、纯白 #FFF**;暗面只用 `mixC` 调暗,不用透明度。
27
+
28
+ ## 3. 字体与字排
29
+
30
+ **当前优先使用插件内置字体:** 字标优先 Outfit,中文副标优先 HarmonyOS Sans SC,编号用 IBM Plex Mono;原片轮廓形变仍要使用对应的轮廓路径。
31
+
32
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
33
+
34
+ 原片:字标 `Outfit SemiBold` 250px(`FS=250`、`s=FS/1000`、`track=-5`、`yB=566`、词 `'morphe'`),轮廓来自 `glyphs.json`。副标 `HarmonyOS Sans SC` 500 34px / tracking 4 + `IBM Plex Mono` 500 19px 编号、14px 英文 / tracking 2.5,基线 y1002,x96。片尾 `HarmonyOS Sans SC` 500 40px、tracking 11、`GAP=30`、yb702;英文 `ONE SHAPE · EVERY STORY` 17px IBM Plex Mono、tracking 4、α.65、y758。
35
+
36
+ Windows 栈:字标 `"Segoe UI Semibold","Segoe UI",sans-serif` + `letter-spacing:-0.05em`;中文 `"Microsoft YaHei","Segoe UI",sans-serif` 500;等宽 `"Consolas","Courier New",monospace`。损失:Outfit 的几何正圆 o/e、单层 a 全丢,Segoe 的 o 略扁、字腔更大,250px 下要手动把 tracking 收紧到 -3;字重 500 在雅黑上偏粗,scaleX 0.98 压一点;Consolas 的 0 有斜杠、IBM Plex Mono 的 `1` 有底座,编号 01/07 观感会变。
37
+
38
+ ## 4. 动效语法
39
+
40
+ 150 BPM → 12 帧/拍,morph 窗多为 0.6–0.8s。缓动(`index.html` 顶部 `bez`):`EM=bez(0.7,0,0.3,1)`(变形主曲线)、`EO=bez(0.16,1,0.3,1)`、`EIO=bez(0.45,0,0.55,1)`、`EB=bez(0.42,0,0.12,1)`(色块 bloom)、`EXI` expo-in。禁用 `bounce/elastic` 与 CSS 默认 `ease`;位移与形变都用同一条 `EM`,只有入场用 `EO`。
41
+
42
+ 1. **落杯**(0→0.4 land,morph 0→0.62):drop 形从上方 0.5 处压下,`EM` 到杯形;落地那一帧杯底压 6%,0.3s 回。
43
+ 2. **变形链**(8 段,全部 `EM`):cup>sun 1.3→2.0(via 圆 r116);sun>sunset 2.4→3.2;sunset>gull 3.6→4.4(via 圆 r118);gull>plane 4.8→5.4;plane>pin 6.3→6.4(via 胶囊,只 0.1s,硬切感);pin>heart 7.0→7.6(via 圆 r120,`rot 18`);heart>m 8.0→8.6。每段前半 `gA=EM(u/0.5)` 走到中介形、后半 `gB=EM((u-0.5)/0.5)` 张开到目标。
44
+ 3. **飞行**(5.4–6.4):plane 沿 `loop cx1215 cy387 r255` 绕,flight 节点 5.6/6.04/6.14 各错一次拍翼/侧倾,position 走 `qbez` 二次贝塞尔。
45
+ 4. **心跳**(7.8 / 7.93):heart 两次 `A.14` 的 squash,间隔 0.13s,第二次幅度 60%。
46
+ 5. **字标**(8.32 起):5 个字母 `t0 + i*0.075`,`travel 0.42` 先平移、`fly 0.32` 再落位,`EO`;字标圆点在 e 右侧 `dotGap=9`、半径 22。
47
+
48
+ 网格:画布中心 960,安全边距 96,地面 642,色块圆心取图标 `pos`。图层:色块 fields(逐个 wipe)→ 图标 shade → body → 洞(evenodd)→ 描边 → UI → 颗粒/暗角。
49
+
50
+ ## 5. Remotion 落地配方
51
+
52
+ API:`useCurrentFrame` / `useVideoConfig` / `interpolate` / `Easing.bezier` / `AbsoluteFill` / `<svg>` + `<path>`;运动模糊 `@remotion/motion-blur` 的 `<MotionBlurTrail samples={4} shutter={0.5}>`;离线采样用 `@resvg/resvg-js`,或干脆在 build 阶段把轮廓算成点数组存 JSON。
53
+
54
+ 必须换掉:
55
+
56
+ 1. `requestAnimationFrame` / `renderAt(t)` → 一切由 `frame` 派生;`sceneTime` 一类积分(若有)改成对 t 的解析式。
57
+ 2. `Date.now()` / 自增帧计数 → 唯一时钟 `frame`,颗粒偏移用 `frame` 整数取模。
58
+ 3. `Math.random()` → 上游颗粒是固定序列,搬成 `(f*197)%512` / `(f*331)%512` 的确定性偏移。
59
+ 4. Canvas2D 逐帧 `draw` + `<path>.getPointAtLength`(`sampleD`/`resamplePoly`)→ **双轨**:A)离线把每个图标的 body/hole/stroke/shade 采样成点数组写进 JSON,运行时只做 `lerpP`,再用 `<path d=…>` 渲染(保真,推荐);B)运行时用 `@resvg/resvg-js` 把 SVG path 栅格化成 PNG 再 `lerp` 两张图(会糊,且 morph 中间态是双影,只能当占位)。A 的损失几乎为零,前提是点数与首顶点对齐(见坑 1、2)。
60
+ 5. CSS `transition/animation`、`clip-path` 动画 → 色块 wipe 用 SVG `<mask>` 的圆/矩形半径按 `EB` 插值,别用 CSS。
61
+ 6. 4 采样运动模糊(`index.html:15`)→ `<MotionBlurTrail samples={4} shutter={0.5}>` 只包飞行与字标层;squash 帧不要加,会糊掉冲击。
62
+
63
+ ```tsx
64
+ import { AbsoluteFill, Easing, interpolate, useCurrentFrame, useVideoConfig } from 'remotion';
65
+ const EM = Easing.bezier(0.7, 0, 0.3, 1);
66
+ const C = { ink: '#16151B', cream: '#F4EEE3', mari: '#FFB627', verm: '#FF4F2B', ultra: '#2438E8' };
67
+ const ring = (n: number, cx: number, cy: number, r: number) =>
68
+ Array.from({ length: n }, (_, i) => [cx + r * Math.cos((i / n) * 2 * Math.PI), cy + r * Math.sin((i / n) * 2 * Math.PI)] as const);
69
+ const P = { circle: ring(64, 960, 480, 120), square: ring(64, 960, 480, 120).map(([x, y]) => [960 + (x - 960) * 0.9, 480 + (y - 480) * 0.9] as const) };
70
+ const d = (pts: readonly (readonly [number, number])[], u: number) =>
71
+ pts.map(([x, y], i) => `${i ? 'L' : 'M'}${(x + (P.square[i][0] - x) * u).toFixed(1)} ${(y + (P.square[i][1] - y) * u).toFixed(1)}`).join('') + 'Z';
72
+
73
+ export const Morph: React.FC = () => {
74
+ const t = useCurrentFrame() / useVideoConfig().fps;
75
+ const u = interpolate(t, [7.0, 7.6], [0, 1], { easing: EM, extrapolateLeft: 'clamp', extrapolateRight: 'clamp' });
76
+ const wipe = interpolate(t, [6.4, 6.85], [0, 1], { easing: Easing.bezier(0.42, 0, 0.12, 1), extrapolateRight: 'clamp' });
77
+ const sx = 1 + 0.14 * Math.sin(Math.PI * u); // 变形中段轻微拉伸
78
+ return (
79
+ <AbsoluteFill style={{ background: C.ink }}>
80
+ <AbsoluteFill style={{ background: C.cream, clipPath: `circle(${wipe * 120}% at 960px 540px)` }} />
81
+ <svg width={1920} height={1080} viewBox="0 0 1920 1080">
82
+ <path d={d(P.circle, u)} fill={C.verm} transform={`translate(960 480) scale(${sx} 1) translate(-960 -480)`} />
83
+ </svg>
84
+ </AbsoluteFill>
85
+ );
86
+ };
87
+ ```
88
+
89
+ ## 6. 镜头结构模板
90
+
91
+ - **0–1.3** 落杯:0→0.62 变形,落地压 6%,0.8 后 cup 静置,1.0 起副标 `早安 / GOOD MORNING`。
92
+ - **1.3–2.4** cup→sun:1.62 mari 圆从 sun 位置涨开;2.0 sun 落定,`IMP` A.07。
93
+ - **2.4–3.6** sun→sunset:2.453 sky 色块、2.6 sea 色块;sunset 3.2 到。
94
+ - **3.6–4.8** sunset→gull:3.98 flood 把海面推到 -80;gull 4.4,副标 `海风 / SEA BREEZE`。
95
+ - **4.8–6.4** gull→plane→pin:5.4 起飞绕 loop,6.3 起 0.1s 极快变 pin,6.367 shock。
96
+ - **6.4–7.6** 全屏 cream 闪一帧→verm 圆 7.233 涨开→pin→heart。
97
+ - **7.6–8.6** 心跳 7.8/7.93,8.02 ink 色块压满,8.0 起 heart→m。
98
+ - **8.6–10** 字标 8.32 起 5 字母落位,8.95 tagline,9.14–9.38 进度点收满。
99
+
100
+ ## 7. 坑
101
+
102
+ 1. 点数必须与上游一致(240/200/72/24/60),少一个点就抖;两形点数不同时先 `resamplePoly` 到同 N,别用 `interpolate` 硬插两串不等长数组。
103
+ 2. 首顶点与绕向要对齐(`orient` 按有符号面积、`bestShift` 找最小位移),否则变形会拧成麻花——这是这份 demo 最容易被做坏的地方。
104
+ 3. `getPointAtLength` 依赖 DOM,Server 端渲染直接崩;必须预采样或只在 `<svg>` 里用 `getTotalLength` 的浏览器路径。
105
+ 4. 色块 wipe 软边是 `FEATHER = 0.4*0.5/FPS` 个像素,硬边会有锯齿,太大则像雾。
106
+ 5. 颗粒每帧整数偏移,subpixel 抖动会把纸纹糊平。
107
+ 6. 洞用 `fill-rule:evenodd` 一次画,别用两个 path 叠,变形时会露缝。
108
+
109
+ ## 8. 版权与素材
110
+
111
+ 上游 mg-styles-15 为 MIT。`glyphs.json` 是 Outfit SemiBold 的轮廓子集(SIL OFL),可作字标参考但别当品牌字体;纸纹 `Paper001_4K_color.jpg` 已在插件素材库,可通过 `motion_assets library` 搜索并导入,来源 ambientCG、许可 CC0;也可用工程自带 SVG 近似(损失细纤维)。7 个中文副标与 `ONE SHAPE · EVERY STORY` 是文案占位,成品换客户词。
@@ -0,0 +1,150 @@
1
+ # 09-bauhaus · 几何构成 / 包豪斯
2
+
3
+ 上游:`demos/09-bauhaus/film.js`(44.8KB,Canvas2D 四块印版 + 一遍 WebGL2 套印合成)+
4
+ `demos/09-bauhaus/cues.json`(120BPM,`drop:6.0`,`freeze:8.0`)。1920×1080 / 30fps / 10.000s。
5
+ 提示词原文用 `mg_style {action:"read",slug:"09-bauhaus"}` 取。
6
+
7
+ ## 1. 一眼认出
8
+
9
+ - **落点都在网格上**:`M = 120` 是唯一模数,中央八格 = 960×960,从 `x=480,y=60` 开始铺满 1020px 高。
10
+ - **只有三原色 + 纸 + 墨**:画面里出现第四种彩色,风格立刻不成立。
11
+ - **几何体只有直角**:正方形、四分之一圆、半圆、等边三角;没有圆角矩形、没有渐变填充。
12
+ - **节拍可见**:每 15 帧(120BPM 一拍)发生一次「状态切换」,两次切换之间画面**完全静止**,不是持续缓动。
13
+ - **印刷感**:套印偏移(misregistration)2–4px、纸纹、边缘有墨的厚度;不是干净的矢量渲染。
14
+
15
+ ## 2. 色板
16
+
17
+ | 角色 | hex | 用在哪 |
18
+ | --- | --- | --- |
19
+ | 纸(page) | `#F1E9DA` | 全片底,占 60% 以上面积 |
20
+ | 红(accent) | `#E03C31` | 圆、强调块、套印最抢的一色 |
21
+ | 黄(accent2) | `#F2B705` | 次级形、级的底色 |
22
+ | 蓝(accent3) | `#1E4FA3` | 深色形、与红对位 |
23
+ | 墨(text) | `#111111` | 字、细刻线、套准十字 |
24
+
25
+ `theme.ts` 映射:`page`→PAPER,`text`→INK,`accent`→STAMP。黄与蓝不走 theme,在场景里
26
+ 直接写常量(`const Y='#F2B705', B='#1E4FA3'`)—— 它们不是"主题色",是这个风格的固定颜料。
27
+
28
+ **禁止色**:任何低饱和中间色(灰蓝、米灰之外的暖褐)、任何渐变、任何透明度低于 0.85 的色块。
29
+
30
+ ## 3. 字体与字排
31
+
32
+ **当前优先使用插件内置字体:** 中文标题优先 HarmonyOS Sans SC 或 Noto Sans SC,拉丁大字用 Anton,副标可用 Inter。Alimama ShuHeiTi 与 Alibaba PuHuiTi 尚未内置。
33
+
34
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
35
+
36
+ 原片:`'700 180px "Alimama ShuHeiTi"'`(阿里妈妈数黑体,仓库里没有这个字体)。上游另有
37
+ `/assets/fonts/fonts.css` 里的 Archivo / Inter 用于拉丁副标。
38
+
39
+ DrawAI 替代:
40
+ - 中文标题:`fontFamily: '"Alibaba PuHuiTi","HarmonyOS Sans SC","Noto Sans SC",sans-serif'` +
41
+ `fontWeight: 700` + `letterSpacing: '-0.02em'`。
42
+ - 拉丁大写:`'"Archivo Black","Anton","Arial Black",sans-serif'`,`letterSpacing: '0.14em'`,
43
+ 字号 = 网格的 1/2(60px)或整格(120px)取整。
44
+ - **竖排标题**(`BAUHAUS` 九字母):每字单独一个 `<div>`,`writingMode` 不用,直接纵向堆叠,
45
+ 行高 = 字号的 0.86,末字与首字各让出半格。
46
+ - 损失:数黑体的"圆头方身"没有了,替代字体更方,字面更宽 —— 竖排要在**次字母间距**上补回来
47
+ (`letterSpacing: '-0.06em'`)。
48
+
49
+ ## 4. 动效语法
50
+
51
+ - 节拍:120BPM = 0.5s = **15 帧/拍**,1 小节 60 帧。所有切换落在 `frame % 15 === 0`。
52
+ - 缓动:`io2`(power2.inOut)= `Easing.bezier(0.455,0.03,0.515,0.955)`;
53
+ `in2`(power2.in)= `Easing.in(Easing.poly(2))`,用于"砸下来"的落点。
54
+ **禁用**:`Easing.elastic`、`spring` 的一切过冲 —— 包豪斯的形不弹。
55
+ - 时长:入场 9–12 帧(0.3–0.4 拍),切换级联 2 帧错峰。
56
+ - 签名动作:
57
+ 1. **红圆落地**(0.5s 起,每拍一个):从 `scale 0` → `1`,`in2`,11 帧,落点永远在网格交点。
58
+ 2. **印版转位**(2–6s):整组绕 `(960,540)` 以 90° 为步长的 `groupAngle(t)` 离散转动,
59
+ 每拍 +22.5°,用 `io2` 在 8 帧内完成,其余时间静止 → 看起来是"印刷滚筒咔哒一声"。
60
+ 3. **海报拼合**(2–6s):八个色块按对角顺序 `(i+j)` 从中心向外插入,每个错峰 3 帧。
61
+ 4. **下落级联**(6–8s):8×8 方格按到中心的曼哈顿距离做符号距离场翻转,每格 2 帧错峰、
62
+ 翻 180° 绕自身底边,`in2`。
63
+ 5. **定格**(8–10s,`freeze`):60 帧内**零运动**,只有纸纹在极缓地"呼吸"(噪点种子每 3 帧换一次,
64
+ opacity 0.04→0.06),最后 12 帧竖排标题从下往上压印出现(`clipPath` 从 100% 收到 0)。
65
+ - 组成规则:所有元素对齐 `x ∈ {480, 600, ..., 1440}`、`y ∈ {60, 180, ..., 1020}`;安全边距 = 1 格。
66
+
67
+ ## 5. Remotion 落地配方
68
+
69
+ 上游的三处写法**必须**换掉:
70
+
71
+ 1. `renderAt(t)` + `requestAnimationFrame` → 每帧都是 `useCurrentFrame()` 的函数,禁止任何
72
+ 时间累积状态(`let x = 0; x += ...` 这种在 Remotion 里等于无状态丢失)。
73
+ 2. `Math.random()` 的纸纹/抖动 → `random('grain-' + Math.floor(frame / 3))`(`remotion` 的种子随机),
74
+ 保证同一帧多次渲染结果一致。
75
+ 3. 四块印版 + WebGL press pass → **不照抄**。用 DOM 分层做近似:
76
+ ```tsx
77
+ // 套印:同一形状画两遍,一色偏移 3px,用 multiply 叠回去
78
+ <div style={{ position:'absolute', inset:0, mixBlendMode:'multiply' }}>
79
+ <Plate color="#E03C31" dx={0} />
80
+ <Plate color="#1E4FA3" dx={3} dy={-2} />
81
+ </div>
82
+ ```
83
+ 纸纹用一层 SVG `feTurbulence`(`baseFrequency 0.8`,`numOctaves 4`)铺满,
84
+ `opacity: 0.05`,`mixBlendMode: 'multiply'`;再加一层 `radial-gradient` 暗角。
85
+ **近似损失**:没有真正的"墨在纸上洇开"的柔边和高光偏移;靠 `filter: contrast(1.02)` 找补。
86
+ 4. 运动模糊:上游用 8 采样。这里在 `renderMedia` 开 `motionBlur` 只在**转位与级联**两镜有意义;
87
+ 定格镜必须关掉(否则纸纹会被糊成一片)。也可用 `@remotion/motion-blur` 的 `CameraMotionBlur`
88
+ 包住单个 `<Sequence>`。
89
+
90
+ 骨架(真实可跑,一镜的核心结构):
91
+
92
+ ```tsx
93
+ import { AbsoluteFill, useCurrentFrame, interpolate, Easing } from 'remotion'
94
+ const M = 120, X0 = 480, Y0 = 60
95
+ const io2 = Easing.bezier(0.455, 0.03, 0.515, 0.955)
96
+ const in2 = Easing.in(Easing.poly(2))
97
+ const beat = 15
98
+ export default function Scene() {
99
+ const f = useCurrentFrame()
100
+ const p = (t0: number, t1: number) => interpolate(f, [t0, t1], [0, 1], { extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: io2 })
101
+ const dots = [[0, 0], [3, 0], [0, 3], [3, 3], [1, 1], [2, 2]] // 网格坐标
102
+ return (
103
+ <AbsoluteFill style={{ background: '#F1E9DA' }}>
104
+ {dots.map(([cx, cy], i) => {
105
+ const start = 15 + i * beat // 每拍一个
106
+ const s = interpolate(f, [start, start + 11], [0, 1], { extrapolateRight: 'clamp', easing: in2 })
107
+ return <div key={i} style={{
108
+ position: 'absolute', width: M * 2, height: M * 2, borderRadius: '50%',
109
+ left: X0 + cx * M - M, top: Y0 + cy * M - M,
110
+ background: '#E03C31', transform: `scale(${s})`,
111
+ }} />
112
+ })}
113
+ <div style={{ position: 'absolute', inset: 0, opacity: 0.05, mixBlendMode: 'multiply',
114
+ backgroundImage: 'url(/noise.svg)', backgroundSize: '512px 512px' }} />
115
+ </AbsoluteFill>
116
+ )
117
+ }
118
+ ```
119
+
120
+ (`p(t0,t1)` 是这一镜唯一的进度函数;上游 `prog`/`lerp` 的语义完全对应。)
121
+
122
+ ## 6. 镜头结构模板
123
+
124
+ | 秒 | 帧 | 意图 |
125
+ | --- | --- | --- |
126
+ | 0–0.5 | 0–15 | 空网格闪一下,先建立"规则",让观众看见栅格 |
127
+ | 0.5–2.0 | 15–60 | 三原色形依次落位,每拍一个,落在交点上 |
128
+ | 2.0–6.0 | 60–180 | 转位:整组离散旋转 + 色块拼合,节奏最密 |
129
+ | 6.0–8.0 | 180–240 | 级联翻牌,动作量最大,`in2` 落点砸实 |
130
+ | 8.0–10.0 | 240–300 | 定格 + 竖排标题压印,留白收尾 |
131
+
132
+ 替换内容时保留这五段的**功能**(建立规则 → 元件入场 → 结构变换 → 高潮 → 定格),
133
+ 换掉具体的形与字。
134
+
135
+ ## 7. 坑
136
+
137
+ - 细刻线(1–2px)在 1080p 下会 shimmer:线宽给 `1.5` 且**不要**给它做位移动画。
138
+ - `mixBlendMode: 'multiply'` 在深色底上会把颜色压死 —— 底必须是纸色,不能是透明。
139
+ - 纸纹 SVG 用 `background-image: url(/noise.svg)` 需要文件进 `publicDir`;否则用内联
140
+ `data:image/svg+xml;utf8,...`(Remotion 的 CSP 允许 `data:`)。
141
+ - 分层多的镜(级联 64 格)会拖慢渲染:格子用纯 `div`,别每格一个 SVG。
142
+ - `Easing.elastic` 一旦混进来,风格立刻变成"弹跳卡通",不接受"稍微弹一点点"。
143
+ - 竖排标题的 `letterSpacing` 是负值时,最后一个字母的下沿会溢出安全区,容器要留 20px 余量。
144
+
145
+ ## 8. 版权与素材
146
+
147
+ 上游 MIT(`upstream/LICENSE`),可商用可改。三原色、正方形、四分之一圆属通用几何,自由使用。
148
+ **品牌名必须虚构**:不要写"Bauhaus""包豪斯"作为客户品牌,也不要复刻真实厂牌标志;
149
+ 标题用虚构词(如 `KONSTRUKTION`、`FORM & MASS`)。上游 `cues.json` 里的音乐是程序合成的,
150
+ DrawAI 侧用 `motion_audio` + `motion_sfx` 另配。