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,66 @@
1
+ ---
2
+ name: outline-word-fill
3
+ 一句话: 空心词(细暖灰描边、500 字重)从 3.2 倍急缓收缩落位,虚线大圆随后从 2.8 倍收到字周围并缓慢自转,左右水平虚线从画框边缘内伸;描边先微微增亮,实心白热字在一帧内硬切点亮,一闪辉光即定格
4
+ 适用: 单词式利益点/口号的重锤一拍;节奏卡点上的"钉子"镜;深底品牌片的强调帧
5
+ 时长: 约 3.0s(90f@30fps,短促单拍 + 36f 落定)
6
+ 能量: 高(3.2 倍收缩 + 瞬时点亮,短时高冲击)
7
+ ---
8
+
9
+ ## 意图
10
+ 一个词要打成钉子,靠的不是慢慢淡入而是**两次落定**:先是巨大空心字
11
+ 急速收缩到位(这是尺寸的落定),再是描边在一帧内变实心白(这是质感的
12
+ 落定)。中间那 1.5s 的虚线圆收缩与水平虚线内伸是"瞄准"过程——技术
13
+ 制图语汇,让点亮那一下读作"确认"。填充**必须是瞬时**的:慢扫填充会把
14
+ 钉子变成缓慢的美化动画。
15
+
16
+ ## 动效核心
17
+ (demo 以 1920×1080 原生坐标、帧号标定;look = ember 暖黑 · 橙)
18
+ - 空心字急缓收缩:`scale = mix(3.2, 1, ramp(f, 2, 11, EASE.snappy))`,2–8f 淡入——
19
+ **收缩窗只 11f**,快到几乎是一次冲击;按 scale 速度给瞬时失焦(停稳归零)
20
+ - 双层字:`outline`(`color:transparent` + `-webkit-text-stroke:2px` 暖灰)与 `solid`
21
+ (白热 #fff5ee,初始 opacity 0)叠放,220px / **500 字重** Helvetica Neue
22
+ (中等字重,不是标题的 800——空心字太粗会糊成块)
23
+ - 虚线大圆(r=410、`dasharray 22 18`)+ 内圈 72 格刻度环(每 30° 一根长刻度,反向慢转)+ 四个套准刻度:
24
+ 8–18f 淡入,`scale 2.8 → 1` 在 8–52f 慢收(EASE.out,**44f,全片最慢的一条曲线**);主圈 0.22°/f 自转,
25
+ 点亮那一刻刹停("锁定"),内圈继续慢转让 hold 段画面仍在呼吸
26
+ - 左右水平虚线(`dasharray 14 12`):28–46f 从画框边缘内伸到圆边外 28px,线端带准星点;
27
+ 线上方 mono 读数「BEFORE 1 week」/「AFTER 4 hrs」——把"更快"讲成一组前后对比数据(手 K 一周 vs video-shotcraft 一下午出片)
28
+ - 描边预热:44–53f 暖灰 → 亮橙白并带一点外发光,给硬切一个"充能"前奏
29
+ - **瞬时填充**:第 54 帧 `lit = frame >= 54 ? 1 : 0`,solid 与 outline 透明度硬切,不存在中间态;
30
+ 同帧圆 / 水平线锁定成橙色、右侧读数变橙
31
+ - 一闪即逝的辉光:`flash = lit · (1 − ramp(f, 54, 8))`,白 14px + 橙 60px 两层 text-shadow,8f 衰完后
32
+ 只留极弱橙晕;一道冲击环从圆边外扩 160px、14f 消散(只此一次);舞台主光同步脉冲一下
33
+ - 落定:56–70f 圆内眉题(小号 video-shotcraft 标志 + 全小写 mono 字标)/ 副行(40px,"One prompt to a finished promo.")升起,70–90f hold,全程极缓推进 1→1.015
34
+
35
+ ## 参数表
36
+ | 参数 | 典型值 | 调节手感 |
37
+ |------|--------|----------|
38
+ | 收缩 | `scale 3.2 → 1`,窗 11f,snappy | 3.2 倍是"从脸前退开"的量;<2 倍读作普通缩放;窗 >20f 就成了缓慢 zoom,冲击全失 |
39
+ | 字重字号 | 220px / **500**,占画宽约三分之一 | 空心字上 700+ 会让细描边包住一大块空白,读作气球字;500 是空心字的甜点 |
40
+ | 描边 | 2px 暖灰(138,118,104),点亮前预热到亮橙白 | 细描边是"制图"语汇;>4px 变涂鸦;预热那一档删了硬切显得没由来 |
41
+ | 虚线圆 | r=410、`dash 22 18`、scale 2.8→1(44f)、0.22°/f 自转,点亮时刹停 | 44f 慢收缩是全片的"呼吸",与 11f 的字收缩形成快慢对比;窗压到 20f 两者撞在一起 |
42
+ | 水平虚线 | `dash 14 12`,28–46f 内伸到圆边外 28px | 内伸终点要停在圆边外(不进圆内);伸满全宽读作十字准星,过头了 |
43
+ | 瞬时填充 | 第 54 帧硬切(按帧判断,不用归一化时间窗) | **这一下是全卡的目的**:任何形式的慢扫(>3f)都会把钉子降级成美化动画 |
44
+ | 辉光 | 白 14px + 橙 60px,8f 衰完;冲击环 14f | 一闪即逝才像"点亮";持续辉光读作发光字体,质感立刻廉价 |
45
+ | 时长 | 90f(3.0s):点亮后 hold 36f | 点亮后 <20f 观众来不及读副行与读数 |
46
+
47
+ ## 已知坑
48
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
49
+ 首次实战须以真实素材回验
50
+ - **只适合单个短词(demo `Faster`,6 字母)**:字号 220 与虚线圆 r=410 是写死的
51
+ 一组坐标,字一长就顶穿圆、水平虚线内伸终点也会压到字上——换成
52
+ 两个词或中文四字须同步调 `SIZE` / `R` / 内伸终点三处
53
+ - `-webkit-text-stroke` 是前缀属性,Chromium/WebKit 才生效;Firefox 下
54
+ outline 层是全透明(词直到点亮帧才突然出现)。Remotion 走 Chromium 无碍
55
+ - 瞬时填充必须按**帧**硬切(demo `frame >= POP`)。早期版本用归一化时间窗 `seg(0.742, 0.762)`,
56
+ 片长一拉长这个窗就会变成几帧的可见渐变——改时长时只挪 `POP` 帧号
57
+ - 深底专用:暖黑底 + 细描边 + 辉光是效果的全部;浅底上空心字
58
+ 几乎不可见,需整套重配
59
+ - 声音强依赖:点亮那一帧必须有一记短促重音(金属/开关/低频撞击),
60
+ 这是本卡"钉子"感的一半,配法纪律见 sound-design.md;与
61
+ word-relay-geometry 分工:那卡是三词接力(本卡是它第一段的独立化 +
62
+ 升级版),同片二者不并置
63
+
64
+ ## 参考实现
65
+ demos/typography/outline-word-fill/
66
+ (OutlineWordFill.tsx)
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: paper-title-card
3
+ 一句话: 一句话逐词压印上纸、一个词标强调色斜体、短划线收束
4
+ 适用: 章节转场/价值主张字卡;重要功能出场前的引导卡;全片呼吸位
5
+ 时长: 1.7–1.8s(50–55f)
6
+ 能量: 低(呼吸位,隔开两段高能镜头)
7
+ 标签: transition、rhythm
8
+ ---
9
+
10
+ ## 意图
11
+ 在两段产品画面之间给观众一句话的喘息:说清"接下来看什么、它值什么"。letterpress 压印质感让字卡与纸墨风格的产品画面同属一个世界。
12
+
13
+ ## 动效核心
14
+ - 单句文案逐词入场:scale 从大压到 1 + blur→0 + opacity(letterpress 压印配方);demo 文案为 video-shotcraft 口号
15
+ "Direct the film. / Let the agent shoot it."(强调词 *shoot*),词表可标 `br` 强制换行,两行长度接近、不留孤词
16
+ - 每句恰好一个重点词:italic + 强调色(模板片为琥珀)
17
+ - 强调色短下划线 scaleX 0→1 收束
18
+ - 尾部整卡淡出交棒;可挂 mono 小字副行 + DigitRoll 数字
19
+
20
+ ## 参数表
21
+ | 参数 | 典型值 | 调节手感 |
22
+ |------|--------|----------|
23
+ | 逐词入场 | 第 i 词 delay = 4 + i·4、9f,bezier(0.2,0.75,0.3,1);scale 1.28→1 + blur 7px→0 + opacity | scale 起点 1.28 是"压印"读感的甜点——对照暗场版 TitleCard 用 40px 上移+blur 10,同配方明暗两版 |
24
+ | 重点词 | italic + 强调色 oklch(52% 0.115 65),一句恰好一个 accent | 两个 accent 等于没有 accent;重点词选功能名/收益词(C2) |
25
+ | 下划线 | 16→34f scaleX 0→1,220×6px 强调色 | 下划线是收束信号,出现即预告本卡快结束 |
26
+ | 时长 | 全片 4 张字卡均 50–55f(≈1.8s) | 字卡时长定式化——观众读一句话的时间,长了拖节奏短了读不完 |
27
+ | 版式 | 字号 116/serif;纸底 oklch(97.5% 0.008 82) + 中心暖光 radial;尾部 8f 淡出 | 纸底+暖光与产品画面同色系,字卡才不像广告插播 |
28
+ | 副行 | mono 小字 + DigitRoll(demo "12 shots rendered today");digit-roll 参数见 list-stack-press 卡计数器行 | 副行给具体数字最有说服力;数字滚动必须在本卡淡出前落定(教训)——排节拍从本卡淡出帧倒推 |
29
+
30
+ ## 声音
31
+ 字卡出场统一钉 swoosh-quick(模板片四张字卡钉在 f220/565/725/885 同音)——同类元素同音是词汇表纪律(S2);字卡本身无落地重音,能量留给前后镜头。
32
+
33
+ ## 已知坑
34
+ - 文案要具体:带产品功能名+具体收益,抽象隐喻词被用户逐字改掉(C2——"one board"→"one place to go"、加 "Paper Radar");文案在画面锁定后按最终镜头重写一遍(C1)
35
+ - 重要功能出场前要有引导字卡(C2 判例:文档镜头前应加一句引导,如 "Every project, linked to your weekly report")——字卡不是装饰,是章节路标
36
+
37
+ ## 参考实现
38
+ demos/typography/paper-title-card/PaperTitleCard.tsx(原 template/src/aifl/PaperTitleCard.tsx,参数化:words/sub/subDigits 可换文案)
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: pill-chip-slot-cycle-handled
3
+ 一句话: 白底句式 "Your `chip` Handled" 里深色胶囊内词竖向滚轮轮换,胶囊宽度按预量文本宽插值平滑伸缩、两侧文字被自然挤开收拢,胶囊上下露出 13% 透明度的灰色幽灵项
4
+ 适用: "我们替你搞定 ___" 这类句式卖点;SaaS 功能列举的一句话收口;浅底品牌片主视觉一拍
5
+ 时长: 约 5.0s(150f@30fps:静置 → 3 次切换(0.25/0.47/0.69)→ 尾部静置)
6
+ 能量: 中(三拍稳定节拍,宽度伸缩是唯一的连续运动)
7
+ ---
8
+
9
+ ## 意图
10
+ 词槽轮换有两派:让句子躲开变化(宽度固定的滚轮),或者让句子**接受**
11
+ 变化(胶囊撑宽、两侧文字被挤开)。这卡是后者,代价是必须把宽度算准,
12
+ 回报是句子读起来活的——"Your" 和 "Handled" 被推着走,观众感到胶囊里
13
+ 的词有分量。上下露出的灰色幽灵项是第二个记号:它明示"这是个可以滚的
14
+ 列表",让观众预期还有下一个词。
15
+
16
+ ## 动效核心
17
+ - 宽度预量:setup 期用隐藏 `<span>` 逐词量 `offsetWidth`,各加 74px 内边距
18
+ 存成 `widths[]`(带 `o.w.length·13` 兜底,防 setup 时未挂载量不到)
19
+ - 位置量 `pos` 由 3 段窗累加:切换点 `[0.25, 0.47, 0.69]`,每窗 0.12
20
+ (≈18f),缓动 `E.inOutCubic`——**两头都缓**,对应"滚轮起步与停稳"
21
+ - 内列 `colIn` 竖移 `-pos·48`px(行高 48 = 胶囊高);胶囊宽度取
22
+ `lerp(frac, widths[ci], widths[ci+1])`,**帧内插值**所以伸缩是连续的,
23
+ 两侧 `flex:none` 的文字被 flex 布局自然挤开
24
+ - 幽灵项在胶囊外(chipWrap 内)上 -38px / 下 58px,取 `near = round(pos)`
25
+ 的前后邻居文本,随滚动微移 `(pos-near)·48·0.5`(**半速视差**,比胶囊内
26
+ 的词慢一半,才像"外圈")
27
+ - 幽灵项透明度 `0.13 · (0.4 + settle·0.6)`,`settle = 1 - min(1, |pos-near|·3)`
28
+ ——滚动中途更淡、落定时最清楚
29
+ - 每行内是 emoji + 词的两段结构(emoji 18px、词 700 22px 白字),
30
+ 胶囊 `#1a1c24` 底 + `0 8px 24px rgba(20,22,40,.22)` 投影 + `overflow:hidden`
31
+
32
+ ## 参数表
33
+ | 参数 | 典型值 | 调节手感 |
34
+ |------|--------|----------|
35
+ | 词表 | 4 词 + emoji(Shots/Camera/Sound/Renders——video-shotcraft 包办的镜头/运镜/音效/渲染),3 次切换 | 词长差决定挤开幅度的观感:demo 最短 5 字母最长 7 字母;差 >2 倍胶囊跳变太猛,句子重心左右甩 |
36
+ | 切换点 | `[0.25, 0.47, 0.69]`,窗 0.12(≈18f) | 段间约 0.10(≈15f)静置读词;起手 0.25 前的静置让观众先认出句式 |
37
+ | 缓动 | `E.inOutCubic` | 两头缓才像滚轮起停;outCubic(只后缓)读作被甩上来,胶囊宽度也会跟着突变 |
38
+ | 胶囊 | 高 48px、圆角 99、`#1a1c24`、宽 = 文本宽 + 74 | +74 是左右内边距 + emoji 位;<50 词贴边,>100 胶囊胖成按钮 |
39
+ | 幽灵项 | 上 -38 / 下 58px,基础透明度 0.13 | 0.13 是"看得见但不抢"的甜点;>0.25 读作三行并列文字,不是幽灵;删了列表暗示就没了 |
40
+ | 幽灵视差 | `(pos-near)·48·0.5`(半速) | 半速是"外圈更远"的立体感来源;同速则三行像一整块滑动,幽灵失去意义 |
41
+ | 句子字号 | 两侧 30px/800、胶囊内 22px/700 | 胶囊内比句子小是正确层级(徽章依附句子);等大或更大就读作两个标题打架 |
42
+ | 配色 | 底 `#fbfbfd`、句子 `#15171d`、胶囊白字 | 浅底 + 单一深色块是本卡的身份证;深底版会让胶囊消失,需整套重配 |
43
+
44
+ ## 已知坑
45
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
46
+ 首次实战须以真实素材回验
47
+ - **宽度靠 setup 期 `offsetWidth` 实测**:字体没加载完时量到的是回退字体
48
+ 的宽度,胶囊会偏窄或偏宽——移植时须确保 webfont 就绪后再量,或改用
49
+ 离屏 canvas `measureText`;`length·13` 那条兜底只保证不崩,不保证准
50
+ - 词长差要控制在 2 倍内:宽度自适应是本卡的卖点也是风险,
51
+ 5→8 字母(如 `Sales`→`Workflow`)这一跳已经是可接受上限,再大句子两侧甩得晃眼
52
+ - 两侧文字必须 `flex:none`:不然 flex 会去压缩它们而不是移动它们,
53
+ "挤开"变成"字被压扁"
54
+ - 幽灵项文本取 `round(pos)` 的邻居,所以在切换的正中间(pos=x.5)会
55
+ **跳一次文本**——被 `settle` 压到最淡时发生,肉眼基本不可察;但若把
56
+ 透明度调高到 0.25+,这一跳就会露出来
57
+ - emoji 在不同平台字形宽度不一(尤其 `⚙️` 带变体选择符),会让实测宽度
58
+ 漂移几像素;实战建议换成项目自己的单色图标,别依赖系统 emoji
59
+ - 与 vertical-word-roll-blur-cycle 分工:那卡宽度固定、裸词、带滚筒 blur
60
+ (词是句子成分),本卡宽度自适应、深色胶囊、带幽灵项(词是徽章)——
61
+ 同片只留一个;声音上三次落定是三个节奏点,配轻质开关/胶囊贴合音,
62
+ 连发交替双样本,配法纪律见 sound-design.md
63
+
64
+ ## 参考实现
65
+ demos/typography/pill-chip-slot-cycle-handled/
66
+ (PillChipSlotCycleHandled.tsx)
@@ -0,0 +1,58 @@
1
+ ---
2
+ name: pill-slot-cycle
3
+ 一句话: 句中词槽轮换——固定句干钉死不动,句尾 pill 徽章每 ~0.7s 老虎机滚一格(旧的上飞加速淡出、新的从下带模糊滑入),连换 N 个功能词后落成完整句子收束
4
+ 适用: "功能列举"类文案的最优雅解法(比逐条列表快、比字符级滚动有语义);一句话卖点 + 多个动词短语的段落
5
+ 时长: 入场 12f + 每拍 21f × 词数 + 收束 14f + hold;6 词约 6.7s(demo 200f,含 48f 完整句 hold)
6
+ 能量: 中(稳定节拍器,无峰值)
7
+ ---
8
+
9
+ ## 意图
10
+ 罗列六个功能,列表要六行、逐条淡入要六拍还占满屏。词槽轮换把它们
11
+ 塞进**一句话的一个槽位**里:句干 "One skill to ___"(demo 讲 video-shotcraft:Storyboard it → Capture the page →
12
+ Move the camera → Cut on the beat → Design the sound → Render the film)是承诺,槽里
13
+ 滚过的每个 pill 是证据,最后 pill 飞走、"do it all." 落位——证据
14
+ 列举完毕,结论盖章。结构自带三幕:承诺→列举→收束。命门是句干
15
+ **纹丝不动**:观众的眼睛全程钉在槽位上,句干一晃列举感就散。
16
+
17
+ ## 动效核心
18
+ - 句干绝对定位左端锚死——**不能用 flex 居中**,pill 宽度变化会带着
19
+ 句干重排(首轮踩过的坑,已是判例)
20
+ - 每拍 21f(~0.7s),前 8f 完成换位、后 13f 静置——静置段是给观众
21
+ 读词的,读不完的拍子等于没换
22
+ - 入场:translateY 120→0 + blur 14→4→0,Easing.out(cubic);
23
+ 离场:translateY 0→-130 + blur 0→10,Easing.in(cubic) 加速飞出
24
+ ——新来的减速落定、旧的加速逃走,方向感是"向上翻页"
25
+ - 槽内用隐形占位 pill(visibility hidden)撑宽度,新旧两枚绝对定位
26
+ 叠放——槽宽随当前词自然变化但不抖
27
+ - 收束拍:末 pill 上飞(7f ease-in),"do it all." 从下 90px 带
28
+ Easing.back(1.4) 过冲落位——全片唯一一次过冲,留给结论;落位后整行用 smooth 26f 缓缓居中
29
+ (列举期间句干仍左锚死,只在结论句完整后才移动),"to do" 之间收回普通词距
30
+
31
+ ## 参数表
32
+ | 参数 | 典型值 | 调节手感 |
33
+ |------|--------|----------|
34
+ | 拍长 | 21f/词,5–7 词 | <16f 读不完短语;>28f 节拍器感散掉;8+ 词观众开始数数 |
35
+ | 换位窗 | 拍内前 8f | 拉长到 12f+ 新旧同屏太久,读作两个 pill 打架 |
36
+ | 飞行距离 | 入 +120 / 出 -130px | <80px 读作原地闪换;入出不对称(出略远)让离场更决绝 |
37
+ | 运动模糊 | 入 ≤14 / 出 ≤12px 竖向 blur,按真实速度计算(静止为 0);入 rotateX -38°→0、出 0→34° 绕滚筒翻页 | 去掉 blur 换位读作硬弹;>20px 中间帧糊成色块 |
38
+ | 收束过冲 | Easing.back(1.4),14f | >2 结论落位像卡通;无过冲结论与列举没有档次差 |
39
+ | 收尾 hold | 完整句静置 ≥45f | 这句话是全段目的,不 hold 等于白列举 |
40
+
41
+ ## 已知坑
42
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
43
+ 首次实战须以真实素材回验
44
+ - 本卡是整词级 pill 轮换且嵌在活句子里(不是字符/数位级机械滚动)——文案是
45
+ "句干+动词短语"结构才用本卡,纯数字/纯标题词别硬套
46
+ - 与 typewriter-moves 分工:打字机是"一个字一个字造句",本卡是
47
+ "句子造好了换零件"——同片可共存但别在同一句文案上连用
48
+ - 与 type-rhythm-sync 分工:那是既有文字随音轨变属性(不换内容),
49
+ 本卡换内容——绑音轨时本卡拍点对鼓点即可,别再叠字重脉冲
50
+ - pill 短语长度要接近(demo 最长 "Capture the page" / "Design the sound")——长短差 >2 倍
51
+ 槽宽跳变太猛,句子重心左右甩
52
+ - 收束句与句干字号字重必须完全一致(demo 都是 96px/800)——
53
+ "do it all." 若比句干大,读作新标题而非句子补完
54
+
55
+ ## 参考实现
56
+ demos/typography/pill-slot-cycle/
57
+ (PillSlotCycle.tsx)
58
+ 原片出处:notion-ai 4.5–8.5s
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: text-column-converge
3
+ 一句话: 双词对峙合拢——左"NEW"右特性词钉死在等屏边距两侧硬切轮换、全程零收缩,换到最后一词才唯一一次 ease-in-out 滑到居中咬合成短语,下方小字近乎硬切浮现;收尾揭晓型文字卡
4
+ 适用: 特性清单收束到产品名/口号的段落("NEW × 一串特性 → NEW <产品名>"式);发布会式 recap、版本号揭晓
5
+ 时长: 轮换 7–16f/词 × 8–9 词 + 合拢 ~36f + 小字后静置;全段约 5–6s
6
+ 能量: 中低(机器节奏、小字规格清单气质,不是砸字)
7
+ 标签: outro
8
+ ---
9
+
10
+ ## 意图
11
+ 两词分踞左右像目录页对峙,观众以为只是轮换字幕;直到最后一词
12
+ 停稳才发现左右其实是同一句话的两半——唯一一次连续合拢把整段
13
+ 轮换追认为"悬念铺垫"。命门是**钉死**:轮换期两词位置一像素不动、
14
+ 左右屏边距完全相等(原片实测 412 vs 413@1280),任何渐进收缩都会
15
+ 提前剧透合拢、把揭晓稀释成进度条。合拢只许发生一次,且必须在
16
+ 最后一词之后——这是收尾揭晓,不是持续动效。
17
+
18
+ ## 动效核心
19
+ - 左词左缘、右词右缘各自钉死在等屏边距处(原片实测 412/413px
20
+ @1280,×1.5 → 618/1302@1920);右词换长换短一律右缘定位
21
+ - 词轮换纯硬切,停留帧数不均(16/12/9/8/7/8/10/12f,机器节奏
22
+ 带人味);轮换全程间距零收缩(判例:渐进收缩版被用户驳回重做)
23
+ - **唯一一次合拢**:末词停稳 ~10f 后,~1.2s(36f)ease-in-out
24
+ (cubic)连续滑动,两词滑到以屏幕中线居中定格
25
+ - 合拢终点按等宽字体实际步进算(0.6em+letterSpacing × 字符数),
26
+ 两词恰好一空格咬合,无重叠无缝隙;无 stamp 缩放、无二次补偿移动
27
+ (demo:video-shotcraft 八个特性词轮换,末词为全小写字标 video-shotcraft,终点按 `NEW ` + 字标字符数算;
28
+ 小字为品牌短句后半 "CRAFT THE SHOT.")
29
+ - 定格 ~18f 后斜体小字近乎硬切浮现(4f 快淡、零位移),与整行
30
+ 同左缘、字号同正文
31
+ - 质感:冷色深底 + 极淡顶光 + 暗角/颗粒;词换瞬间 1 帧提亮;NEW 轮换期为次级灰、
32
+ 合拢中随进度提亮到主色;合拢滑动按速度加水平运动模糊(≤4px,静止为 0);
33
+ demo 全长 180f(导出 `TEXT_COLUMN_CONVERGE_DURATION`)
34
+
35
+ ## 参数表
36
+ | 参数 | 典型值 | 调节手感 |
37
+ |------|--------|----------|
38
+ | 屏边距 | 618px@1920(**原片实测** 412/413@1280 ×1.5) | 左右差 >2px 读作没对齐;边距是本卡身份,别改成黄金分割 |
39
+ | 词停留 | 7–16f 不均 | 均匀停留读作节拍器;<7f 读不完词 |
40
+ | 合拢触发 | 末词停稳 +10f(原片 32.4→32.7s 实测) | 停稳期太短,观众没意识到"这词不换了"就开始滑 |
41
+ | 合拢时长 | 36f ease-in-out cubic(**原片实测** ~1.2s 连续滑动) | <24f 读作弹跳归位;>50f 读作拖 |
42
+ | 咬合步进 | 0.6em+letterSpacing/字符,等宽字体 | 非等宽字体步进不可预测,会重叠或漏缝 |
43
+ | 字号 | 42@1080p(**原片实测**字高 ~20/720) | 这段是小字规格清单气质,放大到 60+ 就成了砸字(单词重锤去用 outline-word-fill) |
44
+ | 小字浮现 | 定格 +18f,4f 快淡零位移(原片 34.4→34.6s 间直接出现) | 加滑入/长淡入就抢了合拢的戏 |
45
+
46
+ ## 已知坑
47
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
48
+ 首次实战须以真实素材回验
49
+ - 与 type-rhythm-sync(字属性节拍)/beat-cut-moves(硬切节拍)撞
50
+ 领域:那两张是"轮换本身即内容";本卡命门是**位置钉死 + 末次合拢**
51
+ 的收尾揭晓,轮换只是铺垫。若段落没有"合拢揭晓"就别用本卡
52
+ - 合拢只许一次——每切一词收一档的渐进收缩版已被原片对照证伪并
53
+ 删除,别复活
54
+ - 必须等宽字体(demo 用 SF Mono);比例字体下咬合终点算不准
55
+ - 原片词换瞬间带 1 帧亮度闪烁(打字机换行感),demo 已加回 1f 提亮;
56
+ 闪烁 >1f 会读作故障
57
+
58
+ ## 参考实现
59
+ demos/typography/text-column-converge/
60
+ (TextColumnConverge.tsx)
61
+ 原片出处:raycast-teams.mp4 28–36s
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: title-demote-to-label
3
+ 一句话: 大标题降格为节标签两式——A 大标题居中显影站稳一拍后连续缩小 0.3x 平移到左上角落成小节标签、内容区在其下生长;B 同套路但登场时带文本选中态高亮块扫入再撤掉
4
+ 适用: 章节开场(标题先当主角再让位给内容);教程/功能演示片的小节交接;B 式给"文字/编辑"类产品加身份暗示
5
+ 时长: A ~3.7s(112f)/ B ~4.5s(134f);demo 两式串播 246f
6
+ 能量: 低中(版式变换型,氛围镜头)
7
+ 标签: transition
8
+ ---
9
+
10
+ ## 意图
11
+ 章节标题的常规命运是"出现→消失→内容登场",标题和内容互不认识。
12
+ 本卡让标题**降格而不退场**:居中大字站稳一拍宣告主题,然后一次连续
13
+ 补间缩到 0.3x 飞到左上角,落成这一节的栏目标签——它还在屏幕上,
14
+ 只是从主角变成了门牌。观众获得免费的空间记忆:刚才那个大词就是
15
+ 现在左上角那个小词,本节讲的就是它。内容骨架在降格进行中就开始
16
+ 生长,交接零空档。
17
+
18
+ ## 动效核心
19
+ - 降格是**单次连续补间**,26f 不对称 in-out(bezier(0.6,0,0.18,1):起步果断、落点很软):
20
+ scale 1→0.22(220px 标题 → ≈48px 标签)+ 位置 (960,540)→(216,196) 同一条曲线——分两段(先缩后飞)读作两个动作
21
+ - transform-origin 左中;居中修正量 translate(-50%) 随补间同步归零
22
+ (`translate(${-(1-dem)*50}%, -50%)`)——不归零终点会偏一个半宽
23
+ - 登场显影:标题逐字从遮罩线下升起(rise,16f/字、1.6f 错峰),朱红句点晚 10f 过冲弹出;
24
+ mono 眉题「CHAPTER 01」字距由宽收紧。显影后必须站稳 ≥18f 再降格(demo 20f,期间 1.5% 极缓推近)——
25
+ 没站稳就缩,宣告拍被吃掉。眉题随起飞 6f 淡出,落位前标签前缀「01 /」从左擦入接班
26
+ - 内容错峰生长(demo 为 video-shotcraft 的分镜工作台页,两节标题取品牌短句「Frame.」「Craft.」:
27
+ A = 60px 导语 + 三张卡(镜头配方卡 / 用户评价 / 卡点节拍);B = 58px 分镜脚本 + 句内选区 → 连线 → 旁注匹配镜头卡):每块裁切从左揭开(宽 0.3→1,字不压扁)+ 上移 30px 淡入,
28
+ 先密后疏错峰;生长起点在降格进行到 12f 时,标题还在飞内容已在长——这个重叠是"交接无空档"的来源。
29
+ 横跨全宽的分隔线晚几帧再画,别让它在标题飞行路径上同帧生长
30
+ - B 式选中高亮:左缘/宽度两个百分比分别补间——扫入时宽度 0→100%
31
+ (盖住,10f),撤掉时左缘 0→100%(从左让开,8f);高亮撤净后再起降格
32
+ - 降格飞行按位置差分速度加方向性运动模糊(静止为 0);B 式选区用强调色 20% 透明 + 跟随右缘的插入光标
33
+ - 两式串播不再白闪:共用一个舞台,A 内容 ease-in 上移 12f 退场 → B 大标题原地显影;
34
+ B 降格前 A 标签上移一行、缩到 0.7、变灰成"上一节",B 标签落进同一个槽位(多节连用不叠放的做法)
35
+ (demo 导出 `TITLE_DEMOTE_TO_LABEL_DURATION` = 246f,look = paper)
36
+
37
+ ## 参数表
38
+ | 参数 | 典型值 | 调节手感 |
39
+ |------|--------|----------|
40
+ | 降格补间 | 26f 不对称 in-out,scale→0.22(落成 ≈48px) | <14f 读作标题被弹走;终点 >0.45 标签太大压内容;标签 <40px 不可读 |
41
+ | 站稳拍 | 显影后 ≥18f 静置 | 省掉这拍,观众没读完标题它就跑了,降格白做 |
42
+ | 内容错峰 | 先密后疏,块 18–22f,宽 0.3→1 | 全部同时长出读作页面刷新而非"生长" |
43
+ | 生长起点 | 降格开始后 +12f | 等标题完全落位才生长会空 8f 冷场 |
44
+ | 选中高亮 | 扫入 10f / hold 10f / 撤 8f,强调色 20% 透明 | 高亮 hold <5f 读作闪烁 bug;不撤干净就降格,色块跟着飞很脏 |
45
+ | 两节交接 | 旧内容 exit 12f 上移退场;旧标签 16f 上移一行变灰 | 旧标签不让位,新标签落在它身上 = 标签坟场 |
46
+
47
+ ## 已知坑
48
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
49
+ 首次实战须以真实素材回验
50
+ - 与"标题钉进 3D 空间随相机透视变形"的场景锁定拍法(已退役)分工
51
+ (空间型),本卡是 2D 版式层级的连续降格(版式型)——要"标题住进
52
+ 产品空间"用那卡,要"标题变栏目名"用本卡,同片选一
53
+ - 降格路径上不许有其他元素动——标题飞行是全屏唯一焦点,骨架生长
54
+ 在它落点下方不抢(起点错开),但弹窗/光标类同帧入场必抢
55
+ - 多节连用(每节一次降格)时左上角标签要**换行不叠放**:新标签落位
56
+ 旧标签上移让位,否则第二节起左上角变成标签坟场
57
+ - B 式的选中高亮是"文字可被选中"的产品暗示,非编辑器/文档类产品
58
+ 用了语义空转,别为了好看加
59
+ - 标题文案 ≤3 个词——降格到 0.3x 后还要当可读标签,长句缩完就是一条灰线
60
+
61
+ ## 参考实现
62
+ demos/typography/title-demote-to-label/
63
+ (TitleDemoteToLabel.tsx)
64
+ 原片出处:perplexity-promo 16–18.5s;B 式变体源自 framer text-selection-title
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: type-assembly-moves
3
+ 一句话: 文字集结三式——split-text-stagger 逐字裂升、letterform-drift-assembly 漂移合拢、text-on-path 沿线流入
4
+ 适用: 大标题/标语的入场;与 type-entrance-moves、document-typewriter-reveal 同属标题入场大品类,全片 ≤2 种
5
+ 时长: 单式 4–5.5s(动作段 A ~56f / B ~104f / C ~110f;demo 全长含 hold:A 130f / B 150f / C 160f,各自导出 `*_DURATION`)
6
+ 能量: A 中 / B 中高 / C 中
7
+ ---
8
+
9
+ ## 意图
10
+ 标题入场已有"原位变形系"(字符坠落/打字机——字在原地换形态)。本卡补"集结系":字符从别处**汇聚成**标题,运动轨迹
11
+ 本身有戏。A 琴键式——每字从看不见的裁切线下滑升,理性利落,通用度
12
+ 最高;B 片头式——字符四散带模糊漂入、逐个锁定加深,Stranger Things
13
+ 的仪式感,适合品牌名亮相;C 语义式——字符沿一条上升曲线鱼贯流入
14
+ 再摆正,曲线可以正好描着图表增长线走,文字与数据同框叙事。
15
+
16
+ ## 三式选型
17
+ | 式 | 做法 | 适用 |
18
+ |----|------|------|
19
+ | A split-text-stagger 裂升 | 每字 overflow 盒内 translateY(115%→0) 带 10% 过冲,delay i×2f,基线同步生长(demo:亮场 136px 品牌短句「FRAME MOTION.」) | 通用默认;利落理性 |
20
+ | B drift-assembly 漂移合拢 | 字符 seed 方向 ±260–360px + blur 8px + 旋转 ±24° + 纵深 1.22 漂入错峰归位,锁定帧加深脉冲,合体后整词呼吸 1.04(demo:亮场 148px 品牌名「Shotcraft」) | 品牌名/片头级亮相 |
21
+ | C text-on-path 沿线流入 | 整串字按真实步进沿弧长刚性推进(末字领跑、切线角旋转,行进中可读),到达后逐字沿弧线抬升到左上标题位(demo:midnight 暗场营收增长线 + 数值牌) | 曲线有语义时(增长线/流程线) |
22
+
23
+ ## 参数表
24
+ | 参数 | 典型值 | 调节手感 |
25
+ |------|--------|----------|
26
+ | A 过冲 | 10%(14f out-cubic 升到 −10% 再 6f 回落;原案 6% 可测不可感,实渲加码) | 正常速度要看得见回落那一下;升起快段按竖向速度加 y 向模糊 |
27
+ | B 锁定脉冲 | 字色深到 #000 + 描边 0→3px→0 / 8f | 白底上加深+描边,不用发光(判例) |
28
+ | B 漂移绑定 | 位移 (1−p)、旋转、纵深缩放、blur 8(1−p)、opacity 0.35→1 共用一条 p(Easing.out(cubic),每字 45f、错峰 3f) | 分曲线走,字会"到了还糊着" |
29
+ | C 摆正 | 到达停 8f 再从左到右 1.1f 错峰、18f 抬升:y 用带 ~4% 过冲的快曲线、x 用 in-out、旋转晚 2f 收敛 → 轨迹是弧;终位按实测字宽排版 | 不摆正就永远是"挂在线上",读不出标题;抬升行程大时过冲 >5% 会顶进眉题 |
30
+ | C 曲线 | evolve(dashoffset 按弧长比例)随车头字符同步生长;demo 做成图表增长线(电光蓝 5px 描边 + 外发光 + 线下渐变面积 + 青色车头光点与到顶脉冲 + 网格刻度 + 季度标记) | 曲线先画完字再走,读作两个动画 |
31
+ | 收尾 | 全员落定真静止 ≥30f | R1 |
32
+
33
+ ## 已知坑
34
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
35
+ 首次实战须以真实素材回验
36
+ - 标题入场大品类现已五式(本卡三式 + type-entrance-moves + document-typewriter-reveal),
37
+ **同片 ≤2 种**(P4)铁律不变
38
+ - B 式与 C 式都是高注意力入场,别再叠相机动作——字在飞的时候镜头必须稳
39
+ - C 式别让字符各自起跑:后面的字要追越前面的字,曲线低段必然挤成一团(原版踩过);
40
+ 按弧长刚性推进、字间距取真实步进才读得出整句;字号 >80px 时曲线拐弯处字会互相啃角,
41
+ 大字改用更平缓的曲线或减字数
42
+
43
+ ## 参考实现
44
+ demos/typography/type-assembly-moves/
45
+ (LetterformDriftAssembly.tsx / SplitTextStagger.tsx / TextOnPath.tsx)
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: type-entrance-moves
3
+ 一句话: 标题文字入场一式——letter-drop-physics 字符坠落(重力砸落、弹跳、歪斜站定,最后一拍集体立正归位)
4
+ 适用: 大标题/章节字卡的入场;与 type-assembly-moves(集结系)、document-typewriter-reveal(打字机)同品类互斥选用
5
+ 时长: 单式 5s(含 hold 与静止收尾;动作段 ~116f,demo 150f)
6
+ 能量: 中高(物理趣味)
7
+ ---
8
+
9
+ ## 意图
10
+ 标题入场库内已有打字机(沉稳文档感)和集结系(字从别处汇聚),本卡补
11
+ 物理喜剧感——字符从天而降、砸地弹跳、歪歪扭扭站定,最后一拍
12
+ 集体立正归位,适合轻松调性的开场破冰(demo 让品牌名「Shotcraft」砸落站定,
13
+ 副标题「Every shot lands on the beat.」随归位一拍浮出)。标题入场同片 ≤2 种(P4)。
14
+
15
+ ## 做法
16
+ | 式 | 做法 | 适用 |
17
+ |----|------|------|
18
+ | A letter-drop-physics 字符坠落 | 字符错峰从顶砸落,重力加速+两次衰减弹跳+落地歪斜站定,最后一拍全体齐整回正 | 轻松调性开场;"活物感"的标题破冰 |
19
+
20
+ ## 参数表
21
+ | 参数 | 典型值 | 调节手感 |
22
+ |------|--------|----------|
23
+ | 坠落 | 第 i 字符帧 4+36·(1−(1−i/(n−1))^1.5) 起跳(首末字固定在 4f / 40f,间隔越来越密;demo 9 字符 6.5→1.6f);y = −DROP + DROP·(t/24)²(重力)→ 4u(1−u) 抛物线弹跳 30% → 二跳 9% | 弹跳衰减比 30%/9% 是"有弹性但不闹"的甜点;三跳以上读作果冻 |
24
+ | 歪斜 | 落地瞬间 rotate 到 seed hash ±6° 并保持 | 歪角是"物理感"的一半;全体笔直落地读作普通位移入场 |
25
+ | 归位一拍 | 全员落定后(如帧 110)6f ease-out 集体 rotate→0 + scale 1.06→1 | 集体归位是句号——错峰归位会把"立正"的仪式感拆散 |
26
+ | 收尾 | 动作完毕真静止 ≥20f | R1:静止期所有属性锁死(含歪角归零后) |
27
+
28
+ ## 已知坑
29
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
30
+ 首次实战须以真实素材回验
31
+ - 落地砸声是声音强依赖候选位(sound-design §4.5):逐字钉帧会让重量感翻倍,
32
+ 无声版也成立但少一半劲
33
+ - 字符间不做真实碰撞(demo 为各字符独立轨迹)——字距排开即可;
34
+ 想要"互相撞歪"需预烘焙轨迹,成本高收益薄
35
+ - 选词避开带下行笔画的字母(g/j/p/q/y)或按字形单独校地面——demo 按基线贴地,
36
+ 下行笔画会"插进"地面
37
+ - 标题入场自带高注意力——别和其他高能量入场同帧抢戏
38
+
39
+ ## 参考实现
40
+ demos/typography/type-entrance-moves/
41
+ (LetterDropPhysics.tsx)
@@ -0,0 +1,51 @@
1
+ ---
2
+ name: type-rhythm-sync
3
+ 一句话: 文字随声同步两式——font-weight-pump 字重脉冲(笔画随鼓点变粗弹回)与 karaoke-fill-sync 卡拉OK填色(词随旁白逐个点亮)
4
+ 适用: 标题/标语与音轨强绑定的段落;A 绑节拍(鼓点),B 绑语音(旁白逐词)
5
+ 时长: A FontWeightPump 165f / B KaraokeFillSync 150f;A 128 BPM 每拍 14f、衰减窗 9–13f,B 每词按语速 18–33f
6
+ 能量: A 高(蹦迪感)/ B 中(跟读引导)
7
+ 标签: rhythm
8
+ ---
9
+
10
+ ## 意图
11
+ 文字动效库内此前全是"入场怎么进",没有词管"在场的字怎么跟着声音活"。
12
+ 这两式补上:A 让标题变成节奏器官——笔画随低音鼓抽动变粗又弹回,
13
+ 文字在蹦迪,适合高能段落的视觉低音炮;B 让标语变成跟读字幕——
14
+ 旁白读到哪个词哪个词从左到右填色点亮,视线被牵着走,适合口播/
15
+ 标语强调段。共同点是**字不动、属性动**:无位移、无入退场,
16
+ 纯粹是字重/颜色在声音的拍点上呼吸。
17
+
18
+ ## 两式选型
19
+ | 式 | 做法 | 适用 |
20
+ |----|------|------|
21
+ | A font-weight-pump 字重脉冲 | 命中帧细体字瞬间撑成黑体(可变字重连续插值),9–13f 衰减弹回;重音拍额外撑宽 6%;第 2 小节长出上下描边回声行跟拍,drop 拍落定成粗体渐变海报 | 音乐驱动的高能段;标题当低音炮 |
22
+ | B karaoke-fill-sync 填色随读 | 浅底两行标语(demo「FRAME MOTION / CRAFT SHOTS」),每词从左到右柔边填亮,进度跟语速,正在读的词填强调色、读完退成主墨色并保持;活跃词下带读指下划线 | 旁白/口播强调段;多词标语的视线引导 |
23
+
24
+ ## 参数表
25
+ | 参数 | 典型值 | 调节手感 |
26
+ |------|--------|----------|
27
+ | A 脉冲包络 | `env=(1−t/D)^0.8`(t=命中后帧数;demo 逐字中心 9f→边缘 13f 错开回弹,≥D 精确归 0);fontWeight `250+650·env` 连续插值(SF Pro 可变字重);每个字钉在 **900 字重**排好的槽位里——静止时细体字间留缝、命中时笔画撑满槽位"合拢",整行不重排;无可变字体时退回 env>0.15 窗口 300↔900 跳变 + `-webkit-text-stroke` 连续衰减补过渡 | 槽位按最粗字重排是关键:按常规字重排,峰值时字会互相挤压重叠 |
28
+ | A 节拍 | 128 BPM 每 14f 一拍(16/30/…/114)+ 第 9 拍 drop(128f);每小节第 1 拍重音 `scaleX = 1+0.06·env` 并染粉;drop 冲到 900 后不回细,~16f 回落定格在 780 字重 + 紫→粉逐字渐变 + 一道横向光带 | 拍距必须 > 最长衰减窗(14>13),两拍重叠读作抽搐 |
29
+ | A 回声行 | 第 2 小节起上下各一行 2px 描边同字,晚 2f 跟拍脉冲、每拍被推开 26px(drop 推开 60px 后归位) | 递进靠"加层"而不是加大幅度;第 1 小节就上回声,后面没牌可打 |
30
+ | A 节拍参照物 | 画面下方 8+1 格步进音序器(两小节 + DROP 格),命中哪拍哪格亮起放大 12%,已过的格保留暗亮 | 静音环境(预览/静帧)没有这排格子就读不出"在跟拍";只让格子和字动,不做整画面逐拍泵 |
31
+ | B 词级时间表 | 逐词 [start,end] 帧区间,词内 linear 填充;词间留 4–10f 停顿(换气) | 时间戳实战来自旁白打点表;均匀分配读作机器朗读 |
32
+ | B 词级时间表(demo) | FRAME 20–38、MOTION 42–75(长词慢读)、CRAFT 85–103、SHOTS 107–130;0–19f 预备、130–149f 真静止 | 长词给更长的读窗,读作真人语速 |
33
+ | B 填色实现 | 每词双层同文本叠放:底层浅灰(13% 透明墨色)+ 上层按进度揭开:`mask-image: linear-gradient(90deg, #000 e−4%, transparent e+4%)`,e=p·108−4(±4% 柔边前沿;硬切可用 `clipPath: inset(0 (1−p)·100% 0 0)`);正在读的词填强调色,读完 10f 退成主墨色 | 逐词独立叠层免量测词宽占比;整行单层 clip 需精确像素表、易漂 |
34
+ | B 读指 | 活跃词下 8px 圆角下划线(demo 用强调色),宽度 = p·100%;读完 6f 从左往右收掉 | 4px 浅灰在 1080p 缩略下不可见(本批实渲踩坑);读完的词不留线 |
35
+ | B 旁白参照物 | 标语下方 48 根竖条旁白波形:读词处起伏、换气处回落,已播部分染强调色 | 静音预览/静帧没有这条波形就读不出"在跟读" |
36
+ | 收尾 | A 末拍衰减归零后 / B 末词填完后真静止 ≥20f | R1 呼吸判例 |
37
+
38
+ ## 已知坑
39
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
40
+ 首次实战须以真实素材回验
41
+ - 两式都是**声音强依赖**手法:A 命中帧必须与鼓点同帧、B 填色区间必须
42
+ 跟旁白词边界(钉帧走 sound-design §4.5 相对起点)——无声上片则 A 读作
43
+ 抽风、B 读作莫名变色,别在无音轨段落用
44
+ - A 式依赖系统可变字体(macOS SF Pro)做 wght 连续插值;换字体或在无可变字体的渲染机上
45
+ 会退成几档跳变,先确认字体加载与渲染器支持,不行就走 stroke+跳变兜底
46
+ - A 式全片 ≤1 段(P4)——标题蹦迪是抢戏大户,两段同片互相拆台
47
+ - B 式词数 ≤6/屏:更多词时填色进度读不过来,拆行或拆镜
48
+
49
+ ## 参考实现
50
+ demos/typography/type-rhythm-sync/
51
+ (FontWeightPump.tsx / KaraokeFillSync.tsx)
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: typewriter-moves
3
+ 一句话: 打字机 error-retype——误删重打的"改口"三幕剧:打出平庸词 → 犹豫 → 退格删掉 → 更快打出卖点词
4
+ 适用: slogan/卖点字卡、否定式文案;文字自带时间性的入场
5
+ 时长: ~5.3s(160f)
6
+ 能量: 中低
7
+ 标签: opening
8
+ ---
9
+
10
+ ## 意图
11
+ 打字是唯一自带时间性的文字入场——字符一个个到来本身就是节奏,
12
+ 不需要额外动效。A 式把打字当**独白**:逐字打出平庸词
13
+ (demo 眉题 Introducing video-shotcraft 下的 "just a slideshow")→ 停顿犹豫
14
+ → 退格删掉 → 更快打出卖点词("your cinematic crew"),犹豫-否定-宣言的
15
+ 三幕剧,戏全在三档速度差里。
16
+
17
+ ## 式
18
+ | 式 | 做法 | 适用 |
19
+ |----|------|------|
20
+ | A error-retype | 打 2f/字符 → 停顿 16f 光标闪两下 → 退 1.5f/字符 → 重打 1.5f/字符无犹豫;光标打删常亮、停顿才闪 | slogan 字卡的"改口"戏;否定式文案 |
21
+
22
+ ## 参数表
23
+ | 参数 | 典型值 | 调节手感 |
24
+ |------|--------|----------|
25
+ | 字符节奏 | substring(0, floor((f-起点)/步长)),帧确定无插值 | 任何缓动打字都读作加载动画 |
26
+ | 三档速度 | 打 2f/字符、删 1.5f、重打 1.5f 且零犹豫 | 三档差必须可感——等速改口读作 bug 不是戏,命门 |
27
+ | 光标三态 | 打删常亮=果断;停顿 4f 半周期闪两下=犹豫;完稿闪两下后条件摘除 | 光标就是演员的脸,全程等速闪就没有"犹豫" |
28
+ | 排版 | 逐字符固定宽 span(60px 等宽槽),左缘锚定 | 变宽字体/整串测宽会逐帧重排抖动 |
29
+ | 收尾 | 静止 ≥50f | 光标残留 0.05 opacity 都毁真静止 |
30
+
31
+ ## 已知坑
32
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
33
+ 首次实战须以真实素材回验
34
+ - 声音强依赖:键击声逐字符对齐、退格音调更低(sound-design
35
+ §4.5)——无声打字机只剩字幕机
36
+ - 全片 ≤1 次——改口是一次性的戏剧转折,改两次口是口吃
37
+ - 等宽字体或逐字符 span 二选一必须占一个,否则字符到来时
38
+ 整行重排,打字变成抽搐
39
+
40
+ ## 参考实现
41
+ demos/typography/typewriter-moves/
42
+ (TypewriterErrorRetype.tsx)
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: vertical-word-roll-blur-cycle
3
+ 一句话: 句尾词换成竖向滚轮,3 次换词各 0.55s(outQuint 七成 + outBack 三成,前快后极慢带微过冲),相邻行按距离上垂直 blur 与灰度,中心词落定瞬间从灰染成强调色
4
+ 适用: "Crafted for ___" / "Built for ___" 这类句干 + 受众/对象列举的一句话卖点;浅底品牌片的干净一拍
5
+ 时长: 约 5.0s(150f@30fps:静置 → 3 次换词 → 尾部整组淡出)
6
+ 能量: 中(稳定三拍,无峰值)
7
+ ---
8
+
9
+ ## 意图
10
+ 句尾换词的最优解是滚轮而不是淡入淡出:滚轮自带**方向**(往上翻页),
11
+ 观众知道"还有下一个"。这卡的两个身份记号是相邻行的**垂直 blur**
12
+ (滚轮景深,模拟机械转筒的失焦)和落定时的**染色**(灰→强调色,
13
+ "这个才是答案")。句干(demo `Crafted for`)全程纹丝不动——眼睛钉在滚轮上,
14
+ 句干一晃列举感就散。
15
+
16
+ ## 动效核心
17
+ - 位置量 `p` 由 3 段窗累加:`STEPS = [0.16, 0.36, 0.56]`,每段窗 0.11
18
+ (≈16f,约 0.55s),段间留 0.09 静置给观众读词
19
+ - 每段缓动是**混合曲线**:`0.7·E.outQuint(u) + 0.3·E.outBack(u)`——
20
+ outQuint 给"前快后极慢"的机械减速,outBack 那三成给落定的微过冲回落
21
+ - reel 定位 `translateY(ROW - p·ROW)`,ROW=44px,mask 高 `ROW·3`=132px
22
+ (露三行)——中心行恒定是 mask 第二行
23
+ - 距离驱动的三通道,`d = |i - p|`:
24
+ - blur:`d<1` 时 `3d`,`d≥1` 时 `3 + 2·min(d-1,1)`(最远 5px);demo 用 SVG
25
+ `feGaussianBlur stdDeviation="0 b"` 只糊纵向,转动时再按滚轮速度叠 ≤4px 纵向运动模糊(静止为 0)
26
+ - opacity:`d<1` 时 `1 - 0.65d`,否则 `max(0.1, 0.35 - 0.23(d-1))`
27
+ - 颜色:`mixHex(ACCENT_DIM, ACCENT, clamp01(1 - 2.4d))` —— **d>0.42 就完全
28
+ 是暗色**,所以只有真正落定的那一刻才是强调色,滚动中途全程灰
29
+ - 收尾 `seg(t, 0.9, 0.985)` 整组(句干 + 滚轮)淡出,不留残影给下一镜
30
+
31
+ ## 参数表
32
+ | 参数 | 典型值 | 调节手感 |
33
+ |------|--------|----------|
34
+ | 词表 | 4 词(Launches→Demos→Promos→Every Shot),3 次换词 | 末词是结论(最宽那个词),前三个是例子;>5 词观众开始数,<3 词读不出"列举" |
35
+ | 拍点 | `[0.16, 0.36, 0.56]`,窗 0.11(≈16f) | 段间 0.09(≈13f)静置是给读词的,读不完的拍子等于没换;窗 >0.18 新旧同屏太久 |
36
+ | 缓动配方 | `0.7·outQuint + 0.3·outBack` | outQuint 是机械减速的来源;outBack 那三成给落定"咔"一下,纯 outQuint 读作电子屏滑动 |
37
+ | 行高/视窗 | ROW 44px、mask `44×3`px、词宽 190px | 露三行才有滚筒感(露一行读作淡入淡出);宽度写死 190 是为不挤句干,词更长要同步加 |
38
+ | 相邻行 blur | 邻行 3px,最远 5px,**仅垂直向感知** | blur 是"滚筒景深"的身份证,删了退化成词条平移;>8px 邻行糊成灰条看不出是字 |
39
+ | 落定染色 | `1 - 2.4d` 映射 ACCENT_DIM→ACCENT | 系数 2.4 让染色只发生在落定瞬间;<1.5 滚动中途就上色,答案感散掉 |
40
+ | 字号字重 | 句干与滚轮同为 30px/800、`letter-spacing:-.5px` | 必须完全一致——滚轮词比句干大就读作两个元素,不是一句话 |
41
+ | 收尾淡出 | `seg(t, 0.9, 0.985)` 整组 | 末词落定后约 40f 静置再淡出;不 hold 等于白列举 |
42
+
43
+ ## 已知坑
44
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
45
+ 首次实战须以真实素材回验
46
+ - **mask 宽度写死 190px**:换词表时最长词(demo `Every Shot`,带空格的词组要 `white-space: nowrap`)必须能装进去,
47
+ 否则被裁字;反之词都很短则右侧留大片空白,句子重心偏左——换词表必须
48
+ 重量一次宽度
49
+ - 词长差别不宜过大:mask 宽度是固定的(本卡不做宽度自适应,那是
50
+ pill-chip-slot-cycle-handled 的活),词长差 >2 倍时短词在框里显得孤立
51
+ - 句干必须钉死:demo 用 `flex + gap:14px` 是因为 mask 宽度恒定不会推挤
52
+ 句干——一旦改成宽度自适应的滚轮,就必须换成绝对定位锚左端,
53
+ 否则句干随词宽左右甩
54
+ - `p` 是三段窗**累加**出来的,所以三段窗不能重叠:重叠会让 p 在一帧内
55
+ 跨越一整行,滚轮"跳格"
56
+ - 与 pill-chip-slot-cycle-handled 分工:那卡是深色胶囊 + 宽度自适应挤开
57
+ (词是徽章),本卡是裸词滚轮(词是句子成分)——同片只留一个
58
+ - 声音:每次落定是一个节奏点,配轻机械/开关音;三连发要交替双样本
59
+ 防机枪感,配法纪律见 sound-design.md
60
+
61
+ ## 参考实现
62
+ demos/typography/vertical-word-roll-blur-cycle/
63
+ (VerticalWordRollBlurCycle.tsx)