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,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` 另配。