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,151 @@
1
+ # 10-synthwave · 复古系(80s Synthwave / VHS / Y2K)
2
+
3
+ > 移植说明书。上游:`demos/10-synthwave/index.html`(82KB,单文件,three.js 全 3D 场景 + 后处理链)、
4
+ > `demos/10-synthwave/cues.json`(100BPM,drop 4.2s)、`prompts/10-synthwave.md`。
5
+ > 上游渲染契约是 `window.renderAt(t)` 画 t 秒那一帧;这里是 Remotion 版:`useCurrentFrame()` 就是 t×fps。
6
+
7
+ ## 1. 一眼认出
8
+
9
+ - **一张透视网格贯穿全片**:地平线固定,网格线从地平线往镜头冲,滚动靠 `z 偏移取模`,不是整体平移。`floorMat` 里
10
+ 网格线宽 1.5px、远处自动收敛成一条亮带。
11
+ - **日落是分层剪纸**:太阳不是渐变球,是同一个圆按 5–7 条横带切开,切口随高度变宽(`sunMat` 的 `vP.y` 阶梯),
12
+ 色从洋红 `#FF2FB8` 经橙 `#EF933D` 到黄 `#E6C465`。
13
+ - **双辉光**:紧的 4px 高亮 + 宽的 30px 低透明,霓虹字与网格共用同一套(`bloom` pass + `neonLevel`)。
14
+ - **VHS 是整条链**:RGB split(红蓝各偏 1–2px)→ 2px 扫描线(10% 黑)→ 随机 glitch 抽帧(`glitches: [0.37,0.63,1.53,2.47,
15
+ 3.23,6.07,7.77,9.37]`)→ 4:3 圆角遮罩 + 桶形畸变 → 结尾 CRT 关机(`crt_off: [9.833,9.967]`)。
16
+ - **镀铬字带星芒**:多段金属渐变(`#F4F4FF` 高光 → 深紫 → 反光条),bevel 高光 + 4 角星芒 `star4` 扫过(`glint: [4.95,5.55]`)。
17
+ - **节拍就是分镜**:100BPM(0.6s 一拍)。0–1s VHS 雪花 + `PLAY ▶` OSD 落定;1–4.2s 镜头压低贴着网格飞、太阳升起、
18
+ 棕榈一根根掠过;4.2s slam(镀铬标题砸进来 + 车冲出 + 音乐 gap 0.18s);5.8–6.6s 霓虹手写体点亮并闪烁
19
+ (`neon_strike` 8 段明暗);7.2–8.1s 副标浮现;9.667s 定格,9.833s CRT 收成一条线。
20
+
21
+ ## 2. 色板
22
+
23
+ | 角色 | hex | 用在哪 |
24
+ | --- | --- | --- |
25
+ | 夜空(page) | `#120A2A` | 天顶到地平线的深紫,占 55% 以上 |
26
+ | 天幕过渡(surface) | `#2A1055` | 地平线上方 300px 的紫红过渡带 |
27
+ | 雾(field) | `#3A1A4E` | 山脚与网格交界处的 `HAZE`,压住接缝 |
28
+ | 高光白(text) | `#F4F4FF` | 镀铬字高光段、OSD 白字、扫描环 |
29
+ | 洋红(accent) | `#FF2FB8` | 网格、太阳上半、霓虹手写体 |
30
+ | 青(accent2) | `#8FF9FF` | 太阳下沿的补色反光、玻璃小字、信号点 |
31
+ | 太阳橙/黄 | `#EF933D` / `#E6C465` | 日落的中间带与最亮带 |
32
+
33
+ `theme.ts`:`page`→`#120A2A`,`text`→`#F4F4FF`,`accent`→`#FF2FB8`,`field`→`#3A1A4E`;青与橙只进 `material.color`。
34
+
35
+ **禁止色**:绿色(任何色相 90–160 都破坏这套配色)、纯黑 `#000`(最暗是 `#120A2A`)、纯白 `#FFF`(最亮 `#F4F4FF`);
36
+ 不要用蓝紫以外的冷色做大面积背景,会变成科幻而不是 synthwave。
37
+
38
+ ## 3. 字体与字排
39
+
40
+ **当前优先使用插件内置字体:** 英文标签用 Michroma,霓虹手写用 Mr Dafoe,中文可用 Douyin Sans;Alimama ShuHeiTi 尚未内置。
41
+
42
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
43
+
44
+ 原片三族:`Michroma`(OSD `PLAY ▶`、tagline,字距拉满)、`Mr Dafoe`(霓虹手写 "Midnight",用 SVG 轮廓描管)、
45
+ `Archivo italic 900 / font-stretch 125%`(V5 中文版的标题字)。中文变体 `V5` 用 `Alimama ShuHeiTi` + `Douyin Sans`。
46
+
47
+ DrawAI 替代(Windows 自带优先):
48
+ - 拉丁窄体标签 → `'"Bahnschrift SemiCondensed","Arial Narrow",sans-serif'`,大写,`letterSpacing:'0.22em'`。
49
+ - 镀铬标题 → `'"Arial Black","Impact",sans-serif'`,`letterSpacing:'-0.01em'`;镀铬质感靠渐变填充,不靠字体。
50
+ - 霓虹手写 → `'"Segoe Script","Brush Script MT",cursive'`,`fontStyle:'italic'`;或直接走第 5 节的轮廓描线。
51
+ - 中文 → `'"Microsoft YaHei","PingFang SC",sans-serif'` 700。
52
+ - 损失:Michroma 的方正宽字面与 Bahnschrift 差 8–10%,`0.22em` 的字距会让 1700px 的行宽撑破,改 `0.18em`;
53
+ Segoe Script 没有 Mr Dafoe 的单线管径,做霓虹管要靠 `-webkit-text-stroke:2px` + 两层 `text-shadow` 补。
54
+
55
+ ## 4. 动效语法
56
+
57
+ | 动作 | 时间 | 参数 |
58
+ | --- | --- | --- |
59
+ | OSD 落定 | 0.1s | `PLAY ▶` 从雪花里浮出,透明度 0→1 用 6 帧,`y` 从 -14 落到 0(`eOutCubic`) |
60
+ | 太阳升起 | 1.1–3.9s | `sunPx` 从地平线 -60 线性升到 360;同时 `skyMat` 的 `uSun` 跟着亮,**不是单独动太阳** |
61
+ | 镜头压低下潜 | 1.0–2.6s | `camY` 3.2→1.1,`tilt` 4°→-9°,`fov` 42→52(广角让网格更快) |
62
+ | 网格冲刺 | 全片 | `zOff = (t * 0.9) % 1`,每帧 ≥0 且 <1,网格线 z 取 `i - zOff` |
63
+ | 加速段 | 2.6–3.85s | `speed` 0.9→2.6(`eInQuad`),叠 5 个脉冲 `build_pulses`,每个让 `bloom` 抬 0.35–0.55 |
64
+ | 磁带倒带 | 3.867–3.933s | 2 帧:画面纵向撕开 18px + 色偏翻倍 + 亮度压到 0.8,然后 `tape_hold` 静 0.27s |
65
+ | slam | 4.2s | 镀铬标题从 1.9 倍缩到 1.0(`eOutExpo` 7 帧),落地一帧白闪(`#F4F4FF`,alpha 0.9→0) |
66
+ | 星芒扫过 | 4.95–5.55s | `star4` 沿标题对角线扫,5.4s 峰值,长度 620px |
67
+ | 霓虹描管 | 5.8–6.6s | 按 SVG 路径长度 `strokeRange` 0→1 逐段点亮(`eInOutSine`),点亮后 1 帧 `neonLevel` 抖动 |
68
+ | 霓虹闪烁 | 6.6–6.833s | `neon_strike` 8 段 `[1, 0.15, 1, 1, 0.08, 0.5, 0.85, 1]`,每段 1–2 帧 |
69
+ | 结尾推镜 | 7.2–9.6s | `camZ` 从 8.0 缓推到 7.2(`eInOutSine`),9.667s 停 |
70
+ | CRT 关机 | 9.833–9.967s | 纵向压成一条 2px 亮线,再收缩到中心点 |
71
+
72
+ 节奏:`cues.json` 里 100BPM = 0.6s/拍 = 18 帧/拍。所有硬切点落在拍上或拍的后半拍(`0.3s`)。
73
+
74
+ ## 5. Remotion 落地配方
75
+
76
+ 三条路线,按工程量从小到大:
77
+
78
+ 1. **纯 Canvas2D 伪 3D(推荐,可控且确定性最好)**:自己做一点透视投影,网格、太阳、山、棕榈全部画在 2D 上,
79
+ 镀铬字用 `createLinearGradient` 多段色标,VHS 用第二个 canvas 做通道偏移 + 扫描线。无需 three。
80
+ 2. **`@remotion/three` + `<ThreeCanvas>`**:工程已带 `three@0.183.2` 与 `@remotion/three`。场景按 `useThree()` 拿
81
+ renderer,每帧在 `useCurrentFrame()` 变化时手动 `render()` 一次(关掉 `frameloop`),后处理不要用
82
+ `EffectComposer`(帧时钟不可控),改在 ThreeCanvas 上盖一层 SVG/Canvas 做辉光与 VHS。
83
+ 3. **上游 three.js 场景直接搬**:`index.html` 里的 `skyMat/sunMat/floorMat/palms/car` 都是标准 `THREE.ShaderMaterial`,
84
+ 可以整段搬进 `<ThreeCanvas>`,只需把 `renderAt(t)` 换成 `useCurrentFrame()/fps`,并把 `Clock`/`requestAnimationFrame` 全部删掉。
85
+
86
+ **必须改写的三处**(照抄会出错):
87
+ - 上游用 `document.getAnimations()` 与 `THREE.Clock`;Remotion 里一切时间来自 `frame / fps`,不许有 `Date.now()`。
88
+ - 上游字体靠 `await document.fonts.load(...)`;Remotion 里用 `delayRender/continueRender` 或
89
+ `@remotion/fonts` 的 `loadFont()`,否则首帧字宽会是 fallback。
90
+ - 上游后处理是 `EffectComposer` + `UnrealBloomPass`(HUD 也用),Remotion 下不可靠;用
91
+ `filter:'blur(30px) brightness(1.4)'` 的 `screen` 叠层做宽辉光,`text-shadow` 做紧辉光。
92
+
93
+ 15 帧骨架(Canvas2D 路线,可直接放 `scene-0.tsx`):
94
+
95
+ ```tsx
96
+ const W = 1920, H = 1080, HZ = 620; // 地平线 y
97
+ const proj = (x: number, y: number, z: number) => { const k = 900 / z; return [W / 2 + x * k, HZ - y * k] }
98
+ const scene = (t: number, speed: number) => {
99
+ const zOff = (t * 0.9 * speed) % 1
100
+ for (let i = 1; i <= 26; i++) { // 横向网格线:越近越疏
101
+ const z = i - zOff; if (z <= 0.05) continue
102
+ const [, y] = proj(0, 0, z)
103
+ ctx.globalAlpha = Math.min(1, 0.15 + 0.85 / z); ctx.strokeStyle = '#FF2FB8'; ctx.lineWidth = 1.5
104
+ ctx.beginPath(); ctx.moveTo(0, y); ctx.lineTo(W, y); ctx.stroke()
105
+ }
106
+ for (let k = -14; k <= 14; k++) { // 纵向:全部收束到消失点
107
+ const [x1, y1] = proj(k * 9, 0, 2), [x2, y2] = proj(k * 9, 0, 60)
108
+ ctx.globalAlpha = 0.55; ctx.beginPath(); ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.stroke()
109
+ }
110
+ ctx.globalAlpha = 1
111
+ }
112
+ ```
113
+
114
+ ## 6. 镜头结构模板
115
+
116
+ 10 秒 / 4 段,对应 cues 的真实切点(可直接当 storyboard):
117
+
118
+ | 段 | 帧 | 画面 | 硬事件 |
119
+ | --- | --- | --- | --- |
120
+ | 0 | 0–126(0–4.2s) | 夜空 → 雪花落定 → 镜头压低贴网格飞 → 太阳升起 → 棕榈掠过 → 加速脉冲 | 3.867s 磁带倒带 2 帧 |
121
+ | 1 | 126–198(4.2–6.6s) | slam:镀铬标题砸入 + 白闪 + 车冲出画面 → 星芒扫过 → 霓虹手写体逐段点亮 + 闪烁 | 4.2s 音乐 gap 0.18s |
122
+ | 2 | 198–252(6.6–8.4s) | 霓虹字稳态 + 轻微管径呼吸 → tagline 浮现(7.2–8.1s)→ 第二颗星芒(8.4s) | — |
123
+ | 3 | 252–300(8.4–10s) | 收束推镜 → 9.667s 定格 → 9.833s CRT 关机 | 9.967s 全黑 |
124
+
125
+ **样片建议**:先只做 4.2–6.6s(slam + 星芒 + 霓虹点亮),这一段决定像不像;网格与天际线可以先用纯色占位。
126
+
127
+ ## 7. 坑
128
+
129
+ 1. **网格线会闪(shimmer)**:`z` 连续插值的线宽在缩放时跳变;每条线用整数 `z` 阶梯 + `snap()` 到 1/30s,
130
+ 并给线宽加 `lineWidth = Math.max(1, 1.5 * (12 / z))` 的钳制。
131
+ 2. **辉光在浅色底上消失**:`screen` 混合只在深底上有效;纸色底要改用 `lighter` + 提高不透明度,或者干脆给
132
+ 整片套一层 `mixBlendMode:'multiply'` 的深紫底。
133
+ 3. **VHS 通道偏移必须整像素**:`filter` 或 `transform: translate(0.7px)` 会产生亚像素插值,扫描线就糊了;
134
+ 用离屏 canvas `drawImage(src, -1, 0)` 或 `translate(1px)`。
135
+ 4. **slam 的白闪会吃掉一帧字**:白闪必须画在标题**下面**(先闪后字),并且只持续 1 帧;2 帧以上会被看成丢帧。
136
+ 5. **镀铬渐变要有硬停**:多段色标必须 `addColorStop` 相邻两个位置几乎相同(如 0.48/0.52)才有金属硬边;
137
+ 均匀过渡只会像塑料。
138
+ 6. **霓虹描管的长度要用实际路径长**:`path.getTotalLength()` 在 SSR/无 DOM 时拿不到;Remotion 里改用
139
+ 预先量好的常量表(上游 `strokeRange` 是写死的数组)。
140
+ 7. **结尾 CRT 关机不要用 scale(1,0)**:那会让亮线消失得太快;正确是高度 1080→2(3 帧)→ 宽度 1920→2(4 帧)
141
+ → 亮度衰减到 0(2 帧)。
142
+
143
+ ## 8. 版权与素材
144
+
145
+ 上游 `demos/10-synthwave/` 是 MIT(见仓库 `LICENSE`),可以照搬数值与配方。但:
146
+ - 字体 `Michroma`、`Mr Dafoe` 与 `Archivo` 已随 DrawAI 内置;只有内置字体不适用时才考虑第 3 节的历史替代栈,
147
+ 并在 `BRIEF.md` 里写明「字体非原版」。
148
+ - 片名 `NEON DRIVE · Midnight`、`OUTRUN 1986`、`SUMMER 1986 · IN HI-FI STEREO` 都是虚构品牌,**可以改,不要用真实商标**
149
+ (Ferrari、Lamborghini、MTV、VHS 厂牌)。
150
+ - 上游的车型是自建低模(`car()` 里 loft 出来的),不是贴图;照搬几何没问题,但别用真车厂的轮廓做「像某某跑车」的营销物料。
151
+ - 纹理由 shader 生成,没有外部图片依赖;若加纸张/金属纹理,用 CC0 源并记来源。
@@ -0,0 +1,147 @@
1
+ # 12-aurora-glass · 弥散渐变 / 玻璃拟态
2
+
3
+ 上游:`demos/12-aurora-glass/main.js`(64.7KB:7 个漂移色斑 + 3 张透视玻璃卡 + 3D 相机)
4
+ + `shaders.js`(27.4KB:`FS_AURORA`/`FS_CARD`/`FS_LENS`/`FS_FINAL` 共 9 个全屏 pass)
5
+ + `cues.json`(881B,80BPM,`drop:6.0`)。1920×1080 / 30fps / 10.000s。
6
+ 提示词原文用 `mg_style {action:"read",slug:"12-aurora-glass"}` 取。
7
+
8
+ ## 1. 一眼认出
9
+
10
+ - **底是近黑深紫**:`PAL.base='#040312'`(`main.js:117-119`),body 是 `#05041a`。亮部全靠色斑加色叠,没有提亮的灰。
11
+ - **7 块无边界的斑**:`BLOBS`(`main.js:136`)每块 `rx 240–560 / ry 170–380 / 强度 0.32–1.15`,沿 `loopBezier` 四锚点闭环走 24–40s。唯一的硬边是玻璃卡轮廓。
12
+ - **玻璃 = 五层叠加**:模糊 30px(`TAPS_FROST = gaussTaps(30*DPR/4)`)、`saturate(170%)`(`shaders.js:179`)、+7% 白、近边 13px 内折射偏移 24px(`rim = 1-smoothstep(0,13,inside)`)、1px 白描边(alpha 0.14→0.7 随朝向)。缺一层就成了贴纸。
13
+ - **节奏 0.75s 一格**:`bpm:80`,最短错峰 `word_letters:0.075`(2–3 帧)。
14
+ - **文字只做 opacity + 8px 上浮**:`riseA(t,t0,dur=0.75)` → `{a:eSine(k), dy:8*(1-eOutCubic(k))}`,无缩放无旋转。
15
+
16
+ ## 2. 色板
17
+
18
+ | 角色 | hex | 用在哪 |
19
+ | --- | --- | --- |
20
+ | page | `#040312` | 全片底,占 70% 面积 |
21
+ | accent | `#7050FF` | `PAL.violet`,主色斑、字标高光 |
22
+ | accent2 | `#2F46F2` | `PAL.blue`,第二块斑、卡片投影色偏 |
23
+ | accent3 | `#34CFF0` | `PAL.cyan`,冷侧斑、镜头边缘 |
24
+ | accent4 | `#B653F0` | `PAL.magenta`,与 violet 混出洋红带 |
25
+ | deep | `#3320A8` | `PAL.indigo`,玻璃卡内部折射 |
26
+ | muted | `#8C8CFF` | `PAL.periwinkle`,副标、tagline |
27
+ | text | `#FFFFFF` | 只做 1px 描边与 5–10% 白填充 |
28
+
29
+ `theme.ts`:`page`→PAGE,`text`→INK,`accent`→ACCENT。`surface #171043` / `field #0B0726` 是 base
30
+ 提亮 4%/2% 的**推导值**(源码无此 hex),只用于不透明卡面兜底。
31
+
32
+ **禁止色**:纯灰(光会变雾霾)、硬边渐变、拉满饱和度的大色块、纯白填充。
33
+
34
+ ## 3. 字体与字排
35
+
36
+ **当前优先使用插件内置字体:** 中文标题优先 HarmonyOS Sans SC,英文标题用 Sora,界面标签和正文用 Inter。
37
+
38
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
39
+
40
+ 原片(`main.js:205`):`FONT_CN="'HarmonyOS Sans SC'"`(标题 900 / 216px / `track:10`)、
41
+ `FONT_WORD="'Sora'"`(`Aurora` 178px)、`FONT_UI="'Inter', 'HarmonyOS Sans SC'"`。字体由
42
+ `/assets/fonts/fonts.css` 指向;DrawAI 已内置这三族字体。
43
+
44
+ - 中文标题 `'"Microsoft YaHei UI","Microsoft YaHei","Noto Sans SC",sans-serif'`,`900`,`letterSpacing:'0.046em'`(=216px 下的 10px)。
45
+ - 拉丁字标 `'"Segoe UI Variable Display","Segoe UI",sans-serif'`,`200`,`letterSpacing:'0.32em'`。
46
+ - 小标签 `'"Consolas","JetBrains Mono",monospace'`。
47
+
48
+ **损失**:① YaHei 只有 400/700,900 会合成或回退成 Bold,216px 的「玻璃拟态」薄一档;用
49
+ `-webkit-text-stroke:0.5px currentColor` 补(≤32px 禁用,会糊)。② Sora 是宽字面几何体,Segoe 更窄,
50
+ `Aurora` 全小写宽字距会失衡,靠 0.32em 补。③ 圆润中宫没了 —— 一句只写 4–6 字。
51
+
52
+ 字排:标题锁 `base:580`、`w:900`、216px 单行;副标 54px `track:6`;英文标 32px 大写 `0.28em`。
53
+
54
+ ## 4. 动效语法
55
+
56
+ - 节拍:80BPM = 0.75s = **22.5 帧/拍**,1 小节 90 帧。`cues.json` 注明 bar 0 从 `drop`(6.0s)
57
+ 起算,前 6 秒是钩子段,不按小节走。
58
+ - 缓动:`eSine(t)=-(cos(πt)-1)/2`(主)、`eOutQuint`(卡入场)、`eOutCubic`(8px 位移)、
59
+ `seg`/`hermite`(相机)。**禁用** `spring`/`elastic`/`back` —— 过冲会变成弹跳 UI。
60
+ - 签名动作:
61
+ 1. **卡片入场**(`cardA_in:-0.8`→1.1s):1.9s `eOutQuint`,`y` 抬 70px、`z` 抬 560(等价
62
+ scale 0.86→1);同时 `tilt = 20*Math.exp(-3.2*tau)*Math.cos(3.6*tau)`(`cardState`,
63
+ `main.js:464`)—— 全片唯一过冲,只作用在角度上。
64
+ 2. **色斑漂移**:每块走自己的闭环,10 秒只走完 1/3,没有"进入/离开"这一帧。
65
+ 3. **drop 6.0**:`uGain` 抬亮 + `uRipple` 径向光 + 三卡沿 `drift` 炸散(A 是 `[920,-30,-560]`)。
66
+ 4. **字标逐字**(`word:6.9`):2.25 帧错峰,只做 opacity+8px;`wordScale=1+0.022*eSine` 是唯一缩放。
67
+ 5. **wave 9.0**:`FS_LENS` 的折射环把穿过的地面弯 ~2.5px,不是发光圆。
68
+ - 组成:卡 A 660×470 r42、B 400×200 r38、C 440×250 r40;边距 ≥120px;图层自下而上 = 色斑 →
69
+ 卡片(投影 `uSH`)→ 卡内容 → 镜头 → bloom → grain → vignette。
70
+
71
+ ## 5. Remotion 落地配方
72
+
73
+ 1. **9 个 pass 的 GLSL 不照抄**。每帧 8 次 render-target 切换(`FS_AURORA`→`FS_DOWN`→`FS_BLUR`×2
74
+ →`FS_CARD`→`FS_LENS`→`FS_FINAL`)。`@remotion/three` 理论上可 1:1,但 300 帧 GPU 渲染不可控 ——
75
+ 走 DOM/CSS。
76
+ 2. `requestAnimationFrame` + 累积 `t` → `useCurrentFrame()`;`uFrame` 的 grain 种子 →
77
+ `random('grain-'+frame)`。
78
+ 3. `document.fonts.load` 预热(`main.js:217-226`)→ 系统栈免预热。
79
+
80
+ 近似与损失:
81
+ - **色斑**:7 个 `div` + `blur(120px)` + `mixBlendMode:'screen'`。上游是解析高斯 + `uWarp` 噪声扭曲;
82
+ CSS 版斑重叠处会发灰,`opacity .45–.6` 压。
83
+ - **玻璃卡**:`backdropFilter:'blur(30px) saturate(170%)'` + `rgba(255,255,255,.07)` +
84
+ `inset 0 0 0 1.2px rgba(255,255,255,.30)`。损失:① 没有近边折射(那层变形才是"厚度");
85
+ ② 不随 `tilt` 变;③ 嵌套 `backdrop-filter` 只取最近一层。
86
+ - **调色**:bloom .22 用 `screen` 径向渐变;vignette .18 用
87
+ `radial-gradient(ellipse at 50% 52%, transparent 58%, rgba(4,3,18,.6))`;grain .14 用内联
88
+ `feTurbulence` + `opacity .06`,**每帧换 seed**。dither 做不了,8bit 下大 blur 必现 banding。
89
+ - **运动模糊**:只有 `glide`(5.95–6.9)要,用 `CameraMotionBlur` 包那段;其余 <2px/帧。
90
+
91
+ ```tsx
92
+ import { AbsoluteFill, Easing, interpolate, useCurrentFrame, useVideoConfig } from 'remotion'
93
+ const BLOBS = [
94
+ { c: '#7050FF', x: 0.42, y: 0.55, r: 520, ax: 120, ay: 60, p: 0.0 },
95
+ { c: '#2F46F2', x: 0.66, y: 0.40, r: 420, ax: 90, ay: 80, p: 1.7 },
96
+ { c: '#B653F0', x: 0.30, y: 0.36, r: 300, ax: 70, ay: 50, p: 3.1 },
97
+ ] // 上游是 7 块 + loopBezier 24–40s 闭环,这里用两个频率的 sin 近似同一条路径
98
+ const eOutQuint = Easing.out(Easing.poly(5))
99
+ export default function AuroraGlass() {
100
+ const f = useCurrentFrame(), { fps } = useVideoConfig(), t = f / fps
101
+ // cardA_in=-0.8,1.9s 到位;y 抬 70px、z 抬 560 在屏幕空间等价于 scale 0.86→1
102
+ const e = interpolate(t, [-0.8, 1.1], [0, 1], { easing: eOutQuint, extrapolateLeft: 'clamp', extrapolateRight: 'clamp' })
103
+ return (
104
+ <AbsoluteFill style={{ background: '#040312', overflow: 'hidden' }}>
105
+ {BLOBS.map((b, i) => {
106
+ const cx = (b.x + (b.ax / 1920) * Math.sin(t * 0.42 + b.p)) * 1920
107
+ const cy = (b.y + (b.ay / 1080) * Math.cos(t * 0.31 + b.p)) * 1080
108
+ return <div key={i} style={{ position: 'absolute', left: cx - b.r, top: cy - b.r,
109
+ width: b.r * 2, height: b.r * 2, borderRadius: '50%', background: b.c,
110
+ filter: 'blur(120px)', opacity: 0.55, mixBlendMode: 'screen' }} />
111
+ })}
112
+ <div style={{ position: 'absolute', left: 760, top: 280 + 70 * (1 - e), width: 660, height: 470,
113
+ borderRadius: 42, transform: `scale(${0.86 + 0.14 * e})`, background: 'rgba(255,255,255,0.07)',
114
+ backdropFilter: 'blur(30px) saturate(170%)',
115
+ boxShadow: 'inset 0 0 0 1.2px rgba(255,255,255,0.30), 0 60px 120px rgba(4,3,18,0.55)' }} />
116
+ <AbsoluteFill style={{ background: 'radial-gradient(ellipse at 50% 52%, transparent 58%, rgba(4,3,18,0.6) 100%)' }} />
117
+ </AbsoluteFill>
118
+ )
119
+ }
120
+ ```
121
+
122
+ ## 6. 镜头结构模板
123
+
124
+ | 秒 | 帧 | 意图 |
125
+ | --- | --- | --- |
126
+ | 0–0.75 | 0–23 | 暗场起:只亮 2 块斑,卡 A 已在浮入路上 |
127
+ | 0.75–3.0 | 23–90 | 三卡到齐(`cardB_in:-0.3`、`cardC_in:0.05`),建立"玻璃悬在光里" |
128
+ | 3.0–6.0 | 90–180 | UI 演示:chips 3.0、toggle 3.75、slider 3.95/4.85、镜头进画 5.95 |
129
+ | 6.0–7.5 | 180–225 | drop:光爆 + 卡片炸散(`part 6.72/6.95`),亮度峰值 |
130
+ | 7.5–10.0 | 225–300 | 字标逐字 → tagline 8.5 → 定格,只留色斑在动 |
131
+
132
+ 保留五段的**功能**(建光场 → 元件入场 → 交互演示 → 光爆 → 字标收尾),换掉内容。
133
+
134
+ ## 7. 坑
135
+
136
+ - `backdrop-filter` 对 `blur(>40px)` 在 headless Chromium 会降采样成块状,30px 是安全上沿。
137
+ - 7 层 4000px 宽的 `blur(120px)` 每帧重新栅格化,慢 3–5× 且吃 GPU 内存。
138
+ - `mixBlendMode:'screen'` 需要实底,`AbsoluteFill` 透明会和视频背景混出白边。
139
+ - 1px `inset` 描边在非整数 DPR 下会消失或变 2px,写 `1.2px`。
140
+ - 逐字错峰用浮点秒(`0.075`)算,取整成 2 帧会让最后一个字母晚 1 帧。
141
+
142
+ ## 8. 版权与素材
143
+
144
+ 上游 MIT(`upstream/LICENSE`)。弥散色斑、玻璃卡、大圆角属通用视觉语言。`HarmonyOS Sans SC` /
145
+ `Sora` / `Inter` 是厂商字体,**不能随片分发**。「Aurora / 极光」是虚构产品名,客户品牌必须替换;
146
+ `UI.reply` 的四句日程文案原创可用。音乐用 `motion_audio` + `motion_sfx` 另配(80BPM,
147
+ ambient pad + 玻璃轻击)。
@@ -0,0 +1,140 @@
1
+ # 18-hanazi · 综艺花字(竖屏)
2
+
3
+ 上游:`demos/18-hanazi/index.html`(51.4KB,**逻辑全内联**:CSS + 花字组件 `HZ` + 四个分镜的
4
+ `renderAt`)+ `cues.json`(1116B,120BPM,`drop:6.0`、`freeze:7.5`)。1080×1920 / 30fps / 10.000s。
5
+ `/assets/white_dof.jpg` 等 15 个素材**不在仓库**,只有引用路径。
6
+ 提示词原文用 `mg_style {action:"read",slug:"18-hanazi"}` 取。
7
+
8
+ ## 1. 一眼认出
9
+
10
+ - **每个字三层描边**:标题的 `HZ` 参数 `size:172, white:13, outer:12, ext:16`(`index.html:238`)——
11
+ 相对字高 **7.6% / 7.0% / 9.3%**,三层几乎等宽。只有一层描边的字就不是这个风格。
12
+ - **字永远歪着**:每字 `rot [-7,4,-3,6,-5]`、`y +[6,-16,10,-12,4]`(`index.html:237-240`)。全片没有正着放的花字。
13
+ - **入场是弹簧不是缓动**:`spring(t,.517,22)`,源码注释写明 "peak 1.15 at frame 5, ~1.01 at frame 8"。
14
+ - **竖屏一行 5 字是极限**:`x=[196,368,540,712,884]` 等距 172,左右各留 196。第 6 字必胀出安全区。
15
+ - **装饰是手绘几何**:四角星 `sparkleD`、爆炸框 `burstD`(2n 顶点交替内外半径抖动)、放射线 `focusD`、汗滴 `DROP_D`;没有 emoji、没有渐变图标。
16
+
17
+ ## 2. 色板
18
+
19
+ | 角色 | hex | 用在哪 |
20
+ | --- | --- | --- |
21
+ | text | `#FFFFFF` | 白描边、说明字 |
22
+ | ink | `#1E2A78` | 主描边、标签字(25 次,最高频) |
23
+ | shade | `#1A1030` | 最外描边、硬阴影、警条底(15 次) |
24
+ | accent | `#FFE14D` | 亮黄强调、斜纹(15 次) |
25
+ | accent2 | `#FF3D7F` | 玫红爆炸框、外描边(8 次) |
26
+ | deep | `#0E1440` | 深蓝底、电池壳(8 次) |
27
+ | cool | `#2CCBF2` | 天蓝,糖纸 wipe 底色 |
28
+ | warn | `#FF2E4D` | 警告条内条、「爆表」 |
29
+ | page | `#1B1B22` | 舞台底(照片没盖满时露的缝) |
30
+
31
+ 另有 `#FF9A1F`/`#A3124F`(暖渐变与挤出)、`#7BE35A`、`#8EE8FF`(汗滴)、`#B04CFF`、`#A9C4E0`。
32
+ **禁止色**:莫兰迪/灰粉、金属渐变、纯黑 `#000`(阴影一律 `#1A1030`)、任何没描边的字。
33
+
34
+ ## 3. 字体与字排
35
+
36
+ **当前优先使用插件内置字体:** 主花字用 Resource Han Rounded,副标用 Douyin Sans,手写吐槽用 LXGW Marker Gothic;英文可用 Luckiest Guy 或 ZCOOL KuaiLe。Alimama ShuHeiTi 尚未内置。
37
+
38
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
39
+
40
+ 原片 6 种字体(`/assets/fonts/fonts.css`,上游仓库不带字体文件,DrawAI 已内置其中可用的字体):`'Resource Han Rounded'` 900(标题)、
41
+ `'Douyin Sans'` 700(副标)、`'Alimama ShuHeiTi'` 700(震惊)、`'LXGW Marker Gothic'`(手写吐槽)、
42
+ `'ZCOOL KuaiLe'`、`'Luckiest Guy'`(EP.07)。
43
+
44
+ - 圆胖体 `'"YouYuan","Microsoft YaHei UI","Microsoft YaHei",sans-serif'`。幼圆是 Win10/11 唯一自带圆体,
45
+ 只有 400 —— **加粗靠描边**:`strokeWidth = 2*(white+outer) = 50px` 的圆头描边把字面撑胖,等价 700–800。
46
+ - 副标 `'"Microsoft YaHei UI","Microsoft YaHei","Noto Sans SC",sans-serif'` 700;手写吐槽
47
+ `'"KaiTi","Microsoft YaHei",sans-serif'` + `skewX(-7deg)`(上游 `quiet` 的 `skew:-7`);
48
+ 英文 `'"Arial Black","Impact",sans-serif'`。
49
+
50
+ **损失**:① 幼圆没 900,中宫比 Resource Han Rounded 瘦,靠描边补仍偏"幼";② 楷体太书法,只有 ≤66px
51
+ 的小字能骗过去;③ 抖音体/Alimama 是平台授权,替代后「震惊!!」的窄字面没了,250px 会显宽,缩到 236px。
52
+
53
+ 字号:主花字 172px(屏宽 16%);爆炸大字 250px(23%);副标 92px;标签 40–54px,**最小 40px**。
54
+ 字距:**不用 `letter-spacing`** —— 每字要独立旋转,必须逐字绝对定位,`x = 起点 + i × 字号`。
55
+ 安全区:左右 96px;主花字底边 ≤1560(给抖音 UI 留 360);顶部 ≥240。标题基线 1515 + 上浮 16 = 1531。
56
+
57
+ ## 4. 动效语法
58
+
59
+ - 节拍:120BPM = 0.5s = **15 帧/拍**,20 拍。事件几乎都落在半拍(0.267s = 8 帧)上。
60
+ - 缓动:`spring(t,z=.517,w=22)` 主曲线;`E.outCubic` 退场、`E.outExpo` punch-in、`E.inCubic` 下沉。
61
+ **禁用**线性 —— 全片没有匀速运动。
62
+ - 签名动作:
63
+ 1. **逐字弹入**(`title` 0.2 起,错峰 `0.0667s` = **2 帧**):`scale 0→1.15→1`、`y` 从 -90 落回、
64
+ `rot` ±16° 回正,8 帧到位;0.22s 后叠 `1.8° wiggle + 3px bob`,`wf=1.15Hz`(`charXf:97`)。
65
+ 2. **quarter-beat 蹦跳**(`title_beats [1.0,1.5,2.0]`):每字再错 2 帧,`hy=40*4k(1-k)`,squash `+0.11/-0.07`。
66
+ 3. **pop-out**(0.17s = 5 帧):先 `1.12` 再 `inCubic` 到 0,换镜前清场(`popOut`)。
67
+ 4. **拍上去**(`punch2:3.0` `kick(...,10,10,13)`、`drop:6.0` `kick(...,26,7,11)`):整镜 translate ±26px,
68
+ `exp(-7u)` 衰减 —— 位移不是缩放。
69
+ 5. **糖纸 wipe**(`wipe:4.0`):0.46s = 14 帧,128px `pattern` 斜条从 `x=2400` 横移到 `-2400`(`inOutSine`)并 `rotate(-20°)`。
70
+ - 组成:照片满屏(Ken Burns 1.0→1.08);花字锚在 `y 1230–1720`;装饰在四周 120–260px 环带;图层
71
+ 自下而上 = 照片 → 暗角/日光 → 花字(ext→outer→white→fill→gloss)→ 装饰 → flash → grain。
72
+
73
+ ## 5. Remotion 落地配方
74
+
75
+ 1. `renderAt(t)` 里逐帧 `setAttribute`/`style.display` → 每帧重算 style,`show()/disp()` → `return null`。
76
+ 2. 自写 `spring()` → `spring({frame, fps, config:{damping:22.75, stiffness:484, mass:1}})`:zeta .517 ×
77
+ omega 22 等价 `damping=2ζω=22.75`、`stiffness=ω²=484`,第 5 帧峰值 1.15 与原片一致。
78
+ 3. `Math.random()` 的爆炸框抖动 → `random('burst-'+seed)`;`hand(t,seed)` 是确定性值噪(`vn`/`h1`),
79
+ 可原样搬,但 `t` 必须是 `frame/fps`。
80
+ 4. CSS `filter:url(#soft)`(feGaussianBlur 8px)→ `drop-shadow(0 6px 18px rgba(26,16,48,.45))`。
81
+ **损失**:SVG 模糊是各向同性"墨水晕",drop-shadow 只有偏移,边缘更干净也更数字。
82
+ 5. 五层叠字必须用 SVG:`-webkit-text-stroke` 只能叠一层,且不吃 `paintOrder`。
83
+ 6. Ken Burns 用 `<Img src={staticFile(...)}>` + `scale(1+0.08p)`。**素材缺失时**用 `linear-gradient` 色块 +
84
+ `feTurbulence` 顶替,但"综艺截图感"是内容的一半 —— 这个风格应该让用户提供素材。
85
+
86
+ ```tsx
87
+ import { useCurrentFrame, useVideoConfig, spring } from 'remotion'
88
+ const FONT = '"Resource Han Rounded","Noto Sans SC",sans-serif'
89
+ const OUTER = '#FF3D7F', EXT = '#A3124F'
90
+ export const HanaziChar = ({ ch, x, y, rot, t0, size }:
91
+ { ch: string; x: number; y: number; rot: number; t0: number; size: number }) => {
92
+ const f = useCurrentFrame(), { fps } = useVideoConfig(), u = f - t0 * fps
93
+ if (u < 0) return null
94
+ const pop = spring({ frame: u, fps, config: { damping: 22.75, stiffness: 484, mass: 1 } }) // ζ.517 ω22
95
+ const drop = spring({ frame: u, fps, config: { damping: 22, stiffness: 400, mass: 1 } }) // ζ.55 ω20
96
+ const turn = spring({ frame: u, fps, config: { damping: 18, stiffness: 324, mass: 1 } }) // ζ.45 ω18
97
+ const hold = Math.min(1, Math.max(0, (u / fps - 0.22) / 0.35))
98
+ const r = rot * (1 - turn) + hold * 2.2 * Math.sin(2 * Math.PI * 1.15 * (f / fps))
99
+ const s = pop * (1 + hold * 0.012 * Math.sin(2 * Math.PI * 2.3 * (f / fps)))
100
+ const t = { fontFamily: FONT, fontWeight: 700, fontSize: size, textAnchor: 'middle' as const,
101
+ dominantBaseline: 'central' as const, strokeLinejoin: 'round' as const }
102
+ return (
103
+ <g transform={`translate(${x} ${y - 90 * (1 - drop)}) rotate(${r}) scale(${s})`}>
104
+ <text {...t} y={16} fill={EXT} stroke={EXT} strokeWidth={50}>{ch}</text>
105
+ <text {...t} y={8} fill={EXT} stroke={EXT} strokeWidth={50}>{ch}</text>
106
+ <text {...t} fill={OUTER} stroke={OUTER} strokeWidth={50}>{ch}</text>
107
+ <text {...t} fill="#fff" stroke="#fff" strokeWidth={26}>{ch}</text>
108
+ <text {...t} fill="url(#gz)">{ch}</text>
109
+ </g>
110
+ )
111
+ }
112
+ ```
113
+
114
+ 运动模糊:上游 `window.DEMO.motionBlur={samples:1, shutter:0.5}`(`index.html:40`)只开 1 采样。这里用
115
+ `CameraMotionBlur` 只包 punch/drop 两镜(±26px 位移要糊);花字本体不包,描边会糊成双层边。
116
+
117
+ ## 6. 镜头结构模板
118
+
119
+ | 秒 | 帧 | 意图 |
120
+ | --- | --- | --- |
121
+ | 0–2.5 | 0–75 | 逆光起手 + 标题逐字(0.2 起,5 字 10 帧铺完),1.0/1.5/2.0 三次蹦跳 |
122
+ | 2.5–4.0 | 75–120 | 划痕转场 `scratch` + 三个问号 + 手写吐槽「空气突然安静」逐行扫出 |
123
+ | 4.0–7.5 | 120–225 | 糖纸 wipe 进二段:嘉宾条 4.2、警告条 4.9、**drop 6.0「震惊!!」**、副标 6.6、检测表 7.0 |
124
+ | 7.5–8.5 | 225–255 | freeze:画面拍成白边卡(`freeze_hold` 0.267s),只留 `zoom 1.03` 呼吸 |
125
+ | 8.5–10.0 | 255–300 | 爆炸框 + 「绝绝子」逐字(8.1/8.167/8.233)+ stamp 8.5 + EP.07 收尾 |
126
+
127
+ ## 7. 坑
128
+
129
+ - 172px × 5 字 = 860px,两层描边外扩后 ~886px,左右只剩 97px。换 6 字先量再排。
130
+ - 五层 `<text>` 用同一个 `dominantBaseline`,别混用 `dy` 和 `y` —— 两套度量差 0.02–0.05em。
131
+ - 三层描边都要 `strokeLinejoin:'round'`,否则「?」的尖角会炸开。
132
+ - 「冻结半帧」用 `<Freeze frame={225}>` 包画面、外层单独做 zoom,不要在场景里插值时间。
133
+ - grain 层必须 `inset:0` + `pointerEvents:'none'`;尺寸小于画布时 `overlay` 会留暗带。
134
+
135
+ ## 8. 版权与素材
136
+
137
+ 上游 MIT(`upstream/LICENSE`)。贴纸照片标称 CC0 但**不在仓库**,需自备。「喵呜日记」是虚构节目名,
138
+ `EP.07` 可用。`Resource Han Rounded`/`Douyin Sans`/`Alimama ShuHeiTi`/`LXGW Marker Gothic`/
139
+ `ZCOOL KuaiLe`/`Luckiest Guy` 各有授权,**不能随片分发**。四角星、爆炸框、汗滴是可自由重画的通用
140
+ 图形。音效用 `motion_sfx`(120BPM,boing + 玻璃叮 + 拍击)。
@@ -0,0 +1,156 @@
1
+ # 19-paperclip · 粗描边贴纸人科普 MG
2
+
3
+ 上游:`demos/19-paperclip/index.html`(69.8KB,**逻辑全内联**:一块 2400×5900 的世界 + 相机 + 周期表
4
+ + 地图)+ `cues.json`(3076B:`world {w:2400,h:5900}`、16 个相机关键帧、`ev` 40+ 事件、`chapters`)
5
+ + `assets/stickers/meta.json`(8 张 PNG 的尺寸,**本体不在仓库**)+ `assets/countries-110m.json`(TopoJSON)。
6
+ 1920×1080 / 30fps / 10.000s,120BPM。提示词原文用 `mg_style {action:"read",slug:"19-paperclip"}` 取。
7
+
8
+ ## 1. 一眼认出
9
+
10
+ - **世界是一块竖长的手机屏**:`2400×5900`(`#world`),`border-radius:210`,底 `#E9EEF2` 铺 48px 网点(`#C5CFD8` 2.3px);外套 `#0E141A` 机身 + 46px 白圈(`#bezel` 的 `box-shadow 0 0 0 46px #F7F9FB`)。
11
+ - **没有切镜,只有相机**:`cues.json` 的 `cam` 是 16 个 `{t,x,y,z}`,`z` 从 1.06 压到 0.2;每段标了 `move:"drift"|"fly"|"track"|"pullA"|"pullB"|"hold"`。10 秒是同一张画布上的六次运镜。
12
+ - **一切素材都是白描边贴纸**:`phone` 435×888、`battery` 448×331(`meta.json`),白边约长边的 2.3%(10px/435);SVG 图标是显式的 `stroke="#F7F9FB" stroke-width="26"` + `paint-order:"stroke"`(`magnetSVG`,26/240 ≈ 11%)。
13
+ - **章节头是同一个模子**:20×20 橙色方块 + `02 对照元素周期表`(30px 700)+ `PERIODIC TABLE`(Inter 20px / `.18em` / `#8C9AA8`)。全片 4 个章节头一字不差。
14
+ - **数字是主角**:计数器 236px Inter 900 `-0.045em`(`cNum`),结尾 400px(`eNum`);`tnum` 保证滚动不抖。
15
+
16
+ ## 2. 色板
17
+
18
+ | 角色 | hex | 用在哪 |
19
+ | --- | --- | --- |
20
+ | text | `#25313D` | 所有中文正文与标题(35 次,最高频) |
21
+ | accent | `#FF5A36` | 唯一强调色:章节小方块、稀土、结尾大数字(29 次) |
22
+ | page | `#E9EEF2` | 手机屏内的纸色(第二高频底色) |
23
+ | surface | `#F7F9FB` | 卡片、tile、白描边、机身白圈(22 次) |
24
+ | muted | `#8C9AA8` | 英文小标、`/118`、单位(17 次) |
25
+ | sub | `#5E6D7B` | 注释、产地副名(4 次) |
26
+ | line | `#CDD6DE` | tile 内描边、未点亮格 |
27
+ | dot | `#C5CFD8` | 48px 网点 |
28
+ | stage | `#1D2731` | 屏外底,径向渐变到 `#27333F`/`#161E26` |
29
+ | bezel | `#0E141A` | 机身 |
30
+
31
+ **禁止色**:除 `#FF5A36` 之外的第二个彩色(绿/黄/紫一出现就散)、任何渐变填充(只有最外层底是
32
+ 径向渐变)、纯黑 `#000`(墨是 `#25313D`)、任何 8px 以上的柔光。
33
+
34
+ ## 3. 字体与字排
35
+
36
+ **当前优先使用插件内置字体:** 中文用 Noto Sans SC,英文和数字用 Inter;Alibaba PuHuiTi 尚未内置,必要时在取得后再替换。
37
+
38
+ 下方保留原片排版参数及旧版系统替代方案;只有内置字体不适合或不可用时才参考旧系统栈及其损失说明。
39
+
40
+ 原片(`index.html:19-20`):`.zh{font-family:'Alibaba PuHuiTi'}`、`.in{font-family:'Inter';
41
+ font-feature-settings:'tnum' 1,'case' 1}`。两个都不是系统字体。
42
+
43
+ - 中文 `'"Microsoft YaHei UI","Microsoft YaHei","Noto Sans SC",sans-serif'`,标题 700–900。
44
+ **损失**:Alibaba PuHuiTi 字面更紧凑、900 更硬,YaHei 会松一圈,124px 的两行标题要多留 30px 宽。
45
+ - 拉丁/数字 `'"Segoe UI Black","Segoe UI","Inter",sans-serif'`(Win10 自带 Segoe UI Black 顶 900),
46
+ 并保留 `fontFeatureSettings:'tnum','case'`。**损失**:Inter 的开源几何形在 Segoe 上偏圆,236px 的
47
+ `70` 会瘦一点,把 `letterSpacing` 收到 `-0.05em` 补。
48
+ - 等宽(`.iso` 编号、`TWN 0K8F2A`)`'"Consolas","JetBrains Mono",monospace'`。
49
+
50
+ 字号阶梯(世界坐标,随相机缩放):标题 124px/1.15;章节头 30px + 20px 英文;栏目名 34px;大数字
51
+ 236px;分类数字 64px/72px;标签 34–50px;正文 28px/1.5。屏内最小 24px(`z=0.84` 时等效 20px)。
52
+
53
+ 网格:`TX=196, TP=112, TS=104, TY=2620, FG=36`(`tXY`)—— 18 列 × 112 = 1904px,
54
+ `196+17*112=2100 < 2400`;镧系/锕系在第 7 行下断开 36px。所有章节间距是 112 的整数倍。
55
+
56
+ ## 4. 动效语法
57
+
58
+ - 节拍:120BPM = 0.5s = **15 帧/拍**;但运镜不按拍走,按 `chapters [0, 2.7, 4.35, 5.62, 7.0]` 分五段。
59
+ - 缓动:`eFly = bez(.62,0,.22,1)`、`ePull = bez(.5,0,.08,1)`、`pullA = bez(.3,0,.1,1)`、
60
+ `pullB = bez(.42,0,.22,1)`、`hold = u*u*(3-u)/2`(`EASE`,`index.html:79`)。z 在**对数空间**插值:
61
+ `Math.exp(lerp(log(a.z), log(b.z), e))`。**禁用** `spring`/`back`:没有任何元素会弹过头。
62
+ - 签名动作:
63
+ 1. **相机 fly**(1.25–1.9、3.32–3.34、6.1–7.0):0.6–1.0s,`eFly`,位移 1200–1600px 世界坐标;同时
64
+ `r` 从 0 微调到 -3.5°。这是全片的"转场"。
65
+ 2. **贴纸 slap**(`slap(t,land,dur=.2,amp=.3)`):0.2s 内 `s:1.3→1`、`r:6°→0`、`lift:1→0`,
66
+ 落地后 `wob(t-land,4.5,10)` 衰减抖动 —— 所有贴纸/角标落地都走这一个函数。
67
+ 3. **badge 剥离飞行**(`badge_peel 2.74` 起,`k` 错峰 0.012s):62→104px 的方块沿弧线飞到周期表
68
+ 对应格子,落地序列 `badge_land` 10 个点(3.3→3.5,每 0.0222s 一个)驱动计数器 0→70。
69
+ 4. **路径描边生长**(`route_dur:.4`):`stroke-dasharray:'1 1'` + `pathLength:1`,`stroke-dashoffset`
70
+ 从 1 到 0,`oC` 缓动;同一招用于年代轴、引线、地图国界。
71
+ 5. **计数器滚动**:数字直接 `textContent = lit`,但每次 +1 时 `scale(1.16)` 弹一下再 `oC` 收回;
72
+ 70 那一刻叠 `.06` 的 `wob(t,4,9)`。
73
+ - 组成:世界 2400 宽;章节头永远在 `x=196` 或 `x=300`;所有贴纸的白边 10px;投影
74
+ `drop-shadow(0 ${6+34*lift}px ${10+34*lift}px rgba(22,34,46,${.26-.08*lift}))`。
75
+
76
+ ## 5. Remotion 落地配方
77
+
78
+ 1. `el()` 建 DOM + 逐帧改 `style` → React 组件;`fetch(ROOT+'cues.json')` → `import cues from './cues.json'`,
79
+ `fetch(ROOT+'assets/stickers/...')` → `staticFile()`。
80
+ 2. **相机数学可以 1:1 搬**(`projC` / `cam` / `worldM`,`index.html:76-96` 是纯函数):
81
+ `[a,b] = rot((wx-C.x)*C.z, (wy-C.y)*C.z, C.r)`,屏幕点 = `(960+a, 540+b)`。CSS 等价写法:
82
+ `transform: translate(960px,540px) rotate(${C.r}deg) scale(${C.z}) translate(${-C.x}px,${-C.y}px)`
83
+ (`transformOrigin:'0 0'`,顺序不能换)。
84
+ 3. **`d3` + `topojson` 不可用**。`countries-110m.json` 已在仓库:自己解 TopoJSON —— `arcs` 是增量
85
+ 编码,先按 `transform {scale,translate}` 还原成 `[x,y]` 数组,再按几何的 `arcs` 索引拼接
86
+ (负数表示反向并翻转)。投影退化成等距圆柱(`x=MB0+(lon+180)/360*w`)代替
87
+ `d3.geoNaturalEarth1`。**损失**:高纬大陆会被横向拉宽,南极洲本来就被跳过。
88
+ 4. `filter:#mbf`(4 个 `feDisplacementMap` 的 4-tap 运动模糊)+ `#pblur`(落地时 `stdDeviation` 0→12)
89
+ → `@remotion/motion-blur` 的 `CameraMotionBlur` 只包 fly/pull 两段;手机落地那一镜用
90
+ `blur(${12*(1-p)}px)` 的普通 CSS blur 近似纵向残影。
91
+ 5. **贴纸素材缺失时自造**:SVG `<filter>` 里 `feMorphology operator="dilate" radius="5"` + `feFlood
92
+ floodColor="#F7F9FB"` + `feComposite operator="over"` 得到 10px 白边(radius 5 = 两侧各 5px),
93
+ 再加 `feDropShadow dx=0 dy=10 stdDeviation=14`。比 `filter: drop-shadow()` 叠 8 层更硬、更像真的
94
+ 描边。没有照片就用**扁平色块 + 网点**自造图标(`radial-gradient` 48px 网格 + `#CDD6DE` 内描边),
95
+ 代价是失去"实物照片 × 精密图表"的对照感 —— 这是这个风格的一半,能拿素材就拿。
96
+
97
+ ```tsx
98
+ import { AbsoluteFill, useCurrentFrame, useVideoConfig } from 'remotion'
99
+ import cues from './cues.json'
100
+ const CAM = cues.cam
101
+ const cam = (t: number) => { // 上游 cam():分段 + 对数 z 插值
102
+ const i = Math.max(0, CAM.findLastIndex((c) => c.t <= t))
103
+ const a = CAM[i], b = CAM[Math.min(i + 1, CAM.length - 1)]
104
+ const u = Math.min(1, Math.max(0, (t - a.t) / (b.t - a.t || 1)))
105
+ const e = u * u * (3 - 2 * u) // 各段真实曲线见 EASE[move]
106
+ return { x: a.x + (b.x - a.x) * e, y: a.y + (b.y - a.y) * e,
107
+ z: Math.exp(Math.log(a.z) + (Math.log(b.z) - Math.log(a.z)) * e), r: (b.r ?? 0) * e }
108
+ }
109
+ export default function PaperclipWorld() {
110
+ const f = useCurrentFrame(), { fps } = useVideoConfig()
111
+ const C = cam(f / fps)
112
+ return (
113
+ <AbsoluteFill style={{ background: 'radial-gradient(120% 90% at 35% 50%,#27333F 0%,#1D2731 55%,#161E26 100%)', overflow: 'hidden' }}>
114
+ <div style={{ position: 'absolute', left: 0, top: 0, transformOrigin: '0 0',
115
+ transform: `translate(960px,540px) rotate(${C.r}deg) scale(${C.z}) translate(${-C.x}px,${-C.y}px)` }}>
116
+ <div style={{ position: 'relative', width: 2400, height: 5900, borderRadius: 210, overflow: 'hidden',
117
+ background: '#E9EEF2', backgroundImage: 'radial-gradient(circle,#C5CFD8 2.3px,transparent 2.9px)',
118
+ backgroundSize: '48px 48px' }}>
119
+ {/* 章节内容放在世界坐标里,位置不随帧变 */}
120
+ </div>
121
+ </div>
122
+ </AbsoluteFill>
123
+ )
124
+ }
125
+ ```
126
+
127
+ ## 6. 镜头结构模板
128
+
129
+ | 秒 | 帧 | 意图 |
130
+ | --- | --- | --- |
131
+ | 0–1.25 | 0–38 | 手机落屏(`phone_land 0.16`,`slap` 落地)+ 两行标题 mask 上浮 + 英文小标 + 细线 |
132
+ | 1.25–2.8 | 38–84 | 向下飞 1220px,手机缩到 1 号位,5 个部件依次打标签(`parts 1.62–2.02`) |
133
+ | 2.86–4.35 | 86–131 | 周期表铺开(`table_in`)+ 计数器(`counter_in 3.24`)+ 角标剥离落格(3.3–3.5) |
134
+ | 4.42–5.62 | 133–169 | 按类别的条形/芯片起飞(`chips 4.48–5.2`),地球轴 + `/118` 出现 |
135
+ | 5.66–7.0 | 170–210 | 世界地图:4 张产地贴纸 + 4 条弧线路径生长 + 深圳 pin(6.45) |
136
+ | 7.0–8.14 | 210–244 | 拉远(`pullA` z 0.42 → `pullB` z 0.2),屏内 `70` 撕下变成贴纸飞向结尾 |
137
+ | 8.14–10.0 | 244–300 | slam 落定 + 斜线 `/118` + 标题 62px + 说明 28px + 来源脚注 |
138
+
139
+ ## 7. 坑
140
+
141
+ - 2400×5900 的 DOM 世界 ≈ 1416 万 px²,Chromium 会切 tile 渲染,`overflow:hidden` + `borderRadius`
142
+ 的角上会出接缝;把圆角放在内层、外层不裁。
143
+ - 相机 `scale` 会把所有 `stroke-width`、`boxShadow`、`fontSize` 一起缩放 —— 想要"恒定的 10px 白边"
144
+ 就得在贴纸上写世界单位,不要写屏幕单位。
145
+ - `filter` 嵌套在 `transform: scale()` 的层里会让文字发虚,文字层别和贴纸共用 filter 容器。
146
+ - TopoJSON 的 `arcs` 忘了 `transform.scale/translate` 会得到 0–1 的坐标,整张地图缩成一个点。
147
+ - 大数字用 fallback 字体时 `tnum` 不一定生效(Segoe UI 支持,很多中文黑体不支持),数字容器给
148
+ 固定 `width` + `fontVariantNumeric:'tabular-nums'` 双保险。
149
+ - `findLastIndex` 需要 Node 18+/ES2023 —— Remotion 的打包目标如果是 ES2020,换成手写 `for` 循环。
150
+
151
+ ## 8. 版权与素材
152
+
153
+ 上游 MIT(`upstream/LICENSE`)。`countries-110m.json` 来自 world-atlas / Natural Earth(public domain)。
154
+ `Alibaba PuHuiTi` / `Inter` 是厂商字体,**不能随片分发**。贴纸 PNG 不在仓库,需自备或按第 5 节自造;
155
+ 若用图库照片,选 CC0/Pexels 并裁成白边贴纸。品牌 `NEXA / N9 PRO` 是虚构的,客户品牌必须替换;
156
+ 周期表元素数据是公共事实。音效用 `motion_sfx`(120BPM,纸张拍击 + 低频 whoosh + 单音 beep)。