dsh-drawai 0.4.2 → 0.4.3

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 (366) hide show
  1. package/README.md +4 -3
  2. package/lib/index.js +7777 -7719
  3. package/lib/motion/asset-pack.js +394 -394
  4. package/lib/motion/assets.js +291 -291
  5. package/lib/motion/demo-assets-lock.js +10 -10
  6. package/lib/motion/mgstyles/vendor/README.md +28 -28
  7. package/lib/motion/mgstyles/vendor/modules/d3/LICENSE +13 -13
  8. package/lib/motion/mgstyles/vendor/modules/d3/dist/d3.min.js +2 -2
  9. package/lib/motion/mgstyles/vendor/modules/opentype.js/LICENSE +20 -20
  10. package/lib/motion/mgstyles/vendor/modules/opentype.js/dist/opentype.mjs +14460 -14460
  11. package/lib/motion/mgstyles/vendor/modules/simplex-noise/LICENSE +21 -21
  12. package/lib/motion/mgstyles/vendor/modules/simplex-noise/dist/esm/simplex-noise.js +465 -465
  13. package/lib/motion/mgstyles/vendor/modules/topojson-client/LICENSE +13 -13
  14. package/lib/motion/mgstyles/vendor/modules/topojson-client/dist/topojson-client.min.js +2 -2
  15. package/lib/motion/render.js +179 -179
  16. package/lib/motion/shotcraft/upstream/SKILL.md +286 -286
  17. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -54
  18. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -200
  19. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -45
  20. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -20
  21. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -65
  22. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -151
  23. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -129
  24. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -75
  25. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -40
  26. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -11
  27. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -10
  28. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -49
  29. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -210
  30. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -423
  31. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -170
  32. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -157
  33. package/lib/motion/shotcraft/upstream/demos/README.md +120 -120
  34. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -112
  35. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -647
  36. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -316
  37. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -82
  38. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -115
  39. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -243
  40. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +388 -388
  41. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -250
  42. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -305
  43. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -246
  44. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -390
  45. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -138
  46. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -542
  47. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -315
  48. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -299
  49. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -173
  50. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -348
  51. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -366
  52. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -279
  53. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -184
  54. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -390
  55. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -155
  56. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -303
  57. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -290
  58. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -278
  59. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -307
  60. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -215
  61. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -299
  62. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -232
  63. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -290
  64. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -273
  65. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -167
  66. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -536
  67. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -164
  68. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -175
  69. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -197
  70. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -241
  71. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -279
  72. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -230
  73. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -345
  74. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -275
  75. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -229
  76. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -312
  77. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -222
  78. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -295
  79. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -329
  80. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -315
  81. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -264
  82. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -260
  83. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -263
  84. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -123
  85. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -187
  86. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -175
  87. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -305
  88. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -350
  89. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -352
  90. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -218
  91. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -297
  92. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -157
  93. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -218
  94. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -202
  95. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -265
  96. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -457
  97. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -446
  98. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -249
  99. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -278
  100. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -332
  101. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -358
  102. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -201
  103. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -200
  104. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -208
  105. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -341
  106. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -389
  107. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -293
  108. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -183
  109. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -245
  110. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -222
  111. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -223
  112. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -217
  113. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -343
  114. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -357
  115. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -187
  116. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -333
  117. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -274
  118. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -270
  119. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -430
  120. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -252
  121. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -106
  122. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -288
  123. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -362
  124. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -168
  125. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -310
  126. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -261
  127. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -459
  128. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -294
  129. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -161
  130. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -248
  131. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -359
  132. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -227
  133. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -162
  134. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -248
  135. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -186
  136. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -355
  137. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -272
  138. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -262
  139. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -217
  140. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -285
  141. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -205
  142. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -178
  143. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -147
  144. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -143
  145. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -134
  146. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -217
  147. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -198
  148. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -221
  149. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -312
  150. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -261
  151. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -121
  152. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -153
  153. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -179
  154. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -140
  155. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -309
  156. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -191
  157. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -292
  158. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -135
  159. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -124
  160. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -255
  161. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -173
  162. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -225
  163. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -141
  164. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -137
  165. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -147
  166. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -409
  167. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -280
  168. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -271
  169. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -385
  170. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -312
  171. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -303
  172. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -77
  173. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -311
  174. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -307
  175. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -349
  176. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -255
  177. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -244
  178. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -217
  179. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -652
  180. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -153
  181. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -238
  182. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -324
  183. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -354
  184. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -101
  185. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -129
  186. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -297
  187. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -57
  188. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -155
  189. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -175
  190. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -153
  191. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -146
  192. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -226
  193. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -1
  194. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -193
  195. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -121
  196. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -199
  197. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -183
  198. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -257
  199. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -382
  200. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -111
  201. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -50
  202. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -95
  203. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -41
  204. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -52
  205. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -39
  206. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -39
  207. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -57
  208. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -51
  209. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -46
  210. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -52
  211. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -43
  212. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -42
  213. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -48
  214. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -52
  215. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -45
  216. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -46
  217. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -44
  218. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -63
  219. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -54
  220. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -58
  221. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -35
  222. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -53
  223. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -42
  224. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -50
  225. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -46
  226. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -56
  227. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -49
  228. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -50
  229. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -53
  230. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -53
  231. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -55
  232. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -52
  233. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -60
  234. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -57
  235. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -51
  236. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -41
  237. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -53
  238. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -60
  239. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -55
  240. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -57
  241. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -47
  242. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -37
  243. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -54
  244. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -36
  245. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -56
  246. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -56
  247. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -40
  248. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -60
  249. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -57
  250. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -73
  251. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -87
  252. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -55
  253. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -50
  254. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -59
  255. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -38
  256. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -38
  257. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -59
  258. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -39
  259. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -61
  260. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -52
  261. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -50
  262. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -66
  263. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -43
  264. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -38
  265. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -38
  266. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -56
  267. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -44
  268. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -38
  269. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -63
  270. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -57
  271. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -63
  272. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -58
  273. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -45
  274. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -55
  275. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -49
  276. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -42
  277. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -42
  278. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -45
  279. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -48
  280. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -55
  281. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -43
  282. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -41
  283. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -42
  284. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -59
  285. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -55
  286. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -65
  287. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -42
  288. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -64
  289. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -64
  290. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -54
  291. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -91
  292. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -51
  293. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -66
  294. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -38
  295. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -66
  296. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -58
  297. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -61
  298. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -64
  299. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -45
  300. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -41
  301. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -51
  302. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -42
  303. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -63
  304. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -57
  305. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -75
  306. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -59
  307. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -67
  308. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -60
  309. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -66
  310. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -40
  311. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -45
  312. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -62
  313. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -55
  314. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -37
  315. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -55
  316. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -50
  317. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -43
  318. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -55
  319. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -51
  320. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -51
  321. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -56
  322. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -49
  323. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -57
  324. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -36
  325. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -64
  326. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -47
  327. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -170
  328. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -157
  329. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -103
  330. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -44
  331. package/lib/motion/shotcraft/upstream/template/package.json +20 -20
  332. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -6
  333. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -17
  334. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -65
  335. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -48
  336. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -24
  337. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -192
  338. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -111
  339. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -150
  340. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -158
  341. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -468
  342. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -552
  343. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -411
  344. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -200
  345. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -324
  346. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +388 -388
  347. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -4
  348. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -7
  349. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -68
  350. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -1
  351. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -24
  352. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -74
  353. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -91
  354. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -213
  355. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -15
  356. package/lib/motion/style-frames.js +306 -306
  357. package/lib/motion/sync.js +214 -214
  358. package/lib/motion-project.js +105 -105
  359. package/lib/motion-render-worker.js +174 -174
  360. package/lib/routing/router.js +222 -222
  361. package/lib/routing/vendor/README.md +96 -96
  362. package/lib/routing/vendor/libavoid-routing.js +753 -753
  363. package/lib/routing/vendor/libavoid.min.js +59 -59
  364. package/lib/video-trace-pool.js +128 -128
  365. package/package.json +1 -1
  366. package/LICENSE +0 -4175
@@ -1,59 +1,59 @@
1
- ---
2
- name: blur-slide
3
- 一句话: 标题逐词入场,y 0.38em→0 + blur 18→0 + opacity 0→1 三通道走同一条 ease-out 同步收敛,词间隔约 4f;副标题在标题收完前就错峰跟进
4
- 适用: 几乎所有标题/副标题成对出现的场合;产品页首屏文案、章节小标题;需要"专业但不抢戏"的默认文字 reveal
5
- 时长: 约 4.0s(120f@30fps)
6
- 能量: 低(一次性收敛,无峰值无循环)
7
- ---
8
-
9
- ## 意图
10
- 这是文字 reveal 的**默认解**——没有奇观、没有机械感,只是把词一个个
11
- 柔和地放到位。它的专业感全来自一件事:y、blur、opacity 三个通道共用
12
- 同一个进度 `p`、同一条缓动,所以词是"从虚焦里浮出来"而不是"滑进来
13
- 顺便淡一下"。当一支片里已经有别的重手法(乱码/滚轮),标题就该
14
- 用这一卡,让位给主角。
15
-
16
- ## 动效核心
17
- - 单词进度 `p = ramp(frame, start, dur, EASE.out)`(quint-out 级),三通道全绑同一个 p:
18
- `opacity = p`、`translateY = (1-p)·dy`、`blur = (1-p)·B`px(demo 里主角词的字距收紧也挂在同一个 p 上)
19
- - 主标题(170px 衬线两行):第一行 3 词 10f 起、词间 4f、每词 22f;第二行先停 6f 换气,
20
- "feel" 26f、主角词 "cinematic." 30f 起且入场窗 30f(最后落定);`dy = 64`px、`B = 18`px
21
- - 副标题(46px 无衬线,9 词):34f 起、词间 2.4f、每词 20f、`dy = 26`px、`B = 9`px
22
- ——间隔更密、位移更小,**层级差是靠幅度不是靠时长**
23
- - 错峰而非排队:副标题在 34f 起手,标题要到 60f 才收完,两段有 26f 重叠——
24
- 排队会读作两拍,重叠才是一句话
25
- - 拆词不拆字:`text.split(' ')` 后每词一个 span,`line` 用 `gap:0.32em`
26
- 撑词距(不靠空格)——逐字入场太碎,词级才有"念出来"的语感
27
- - demo 版式:paper look(暖白纸 + 墨 + 朱红),杂志刊头(video-shotcraft 字标)/刊脚发丝线框成一页,朱红全大写眉题 →
28
- 170px 衬线主标题(主角词斜体朱红)→ 46px 无衬线副标题,左对齐 168px 网格;后景一枚 5% 墨色的
29
- 760px 刊号数字反向慢漂做视差;文字层全程极缓推近 1→1.03(smooth),刊脚发丝线 72f 起画给 hold 段收尾
30
-
31
- ## 参数表
32
- | 参数 | 典型值 | 调节手感 |
33
- |------|--------|----------|
34
- | 词间 stagger | 主 4f / 副 2.4f | 3–4f 是"逐词"的甜点;<2f 整行齐入没有 stagger,>8f 观众开始一个个数词 |
35
- | 单词入场窗 | 主 22f(主角词 30f)/ 副 20f,`EASE.out` | <10f 读作硬弹;>30f 每个词都在慢慢浮,整句拖沓 |
36
- | y 位移 | 主 64px(≈0.38em)/ 副 26px | 主副不等幅是层级来源;<0.15em 位移无感,>0.6em 词从画外飞进来变成滑入 |
37
- | blur 通道 | 主 `(1-p)·18`px / 副 `(1-p)·9`px | 这一通道就是"专业感",删了退化成普通淡入上移;超过字号的 ~12% 中间帧糊成色块 |
38
- | 主副错峰 | 主 10f–60f / 副 34f–80f | 重叠 ~26f 是"一句话";副标题起点推到主标题收完之后就读成两拍 |
39
- | 字号字重 | 170px 衬线 400 对 46px 无衬线 400 | 差 2 倍以上才有主副关系;字重相同时靠字体家族区分,副标题上 600+ 字重会和主标打架 |
40
- | 收尾 hold | 副标题 80f 收完,尾部约 40f(只剩极缓推近与刊脚收尾) | 静置 <8f 观众还没读完就切了 |
41
-
42
- ## 已知坑
43
- - demo 在占位文案上调校通过——参数是调校起点非实战定稿,
44
- 首次实战须以真实素材回验
45
- - **占位文案是主 5 词(两行)/ 副 9 词,换项目文案时词数要贴近**:stagger 总长
46
- = `gap × 词数`,词数翻倍末词起点就往后挪一倍,末词的入场会被挤到收尾 hold
47
- ——超过 8 词就该同步把 gap 压到 2–2.5f
48
- - 三通道必须共用同一个 `p`:分开写三条缓动(哪怕曲线相同)就会出现
49
- "位移到了但还糊着"的错位,柔和感立刻散掉
50
- - 词级拆分对中文文案要手动切:`split(' ')` 在中文上得到一整块,
51
- 须自己按语义分段成 3–5 个 span,别退化成逐字
52
- - 每行是绝对定位的 `flex` 行(左对齐 168px 网格),词距靠 `gap` 而非空格;
53
- 换文案时注意第一行不要超过 ~1450px 宽(170px 衬线约 17 个字符),否则撞右侧刊号后景
54
- - 这是**低能量默认卡**:与本类里的乱码/滚轮属于不同职能,同片可以
55
- 也应该共存(主角用重手法,其余标题全用本卡)
56
-
57
- ## 参考实现
58
- demos/typography/blur-slide/
59
- (BlurSlide.tsx)
1
+ ---
2
+ name: blur-slide
3
+ 一句话: 标题逐词入场,y 0.38em→0 + blur 18→0 + opacity 0→1 三通道走同一条 ease-out 同步收敛,词间隔约 4f;副标题在标题收完前就错峰跟进
4
+ 适用: 几乎所有标题/副标题成对出现的场合;产品页首屏文案、章节小标题;需要"专业但不抢戏"的默认文字 reveal
5
+ 时长: 约 4.0s(120f@30fps)
6
+ 能量: 低(一次性收敛,无峰值无循环)
7
+ ---
8
+
9
+ ## 意图
10
+ 这是文字 reveal 的**默认解**——没有奇观、没有机械感,只是把词一个个
11
+ 柔和地放到位。它的专业感全来自一件事:y、blur、opacity 三个通道共用
12
+ 同一个进度 `p`、同一条缓动,所以词是"从虚焦里浮出来"而不是"滑进来
13
+ 顺便淡一下"。当一支片里已经有别的重手法(乱码/滚轮),标题就该
14
+ 用这一卡,让位给主角。
15
+
16
+ ## 动效核心
17
+ - 单词进度 `p = ramp(frame, start, dur, EASE.out)`(quint-out 级),三通道全绑同一个 p:
18
+ `opacity = p`、`translateY = (1-p)·dy`、`blur = (1-p)·B`px(demo 里主角词的字距收紧也挂在同一个 p 上)
19
+ - 主标题(170px 衬线两行):第一行 3 词 10f 起、词间 4f、每词 22f;第二行先停 6f 换气,
20
+ "feel" 26f、主角词 "cinematic." 30f 起且入场窗 30f(最后落定);`dy = 64`px、`B = 18`px
21
+ - 副标题(46px 无衬线,9 词):34f 起、词间 2.4f、每词 20f、`dy = 26`px、`B = 9`px
22
+ ——间隔更密、位移更小,**层级差是靠幅度不是靠时长**
23
+ - 错峰而非排队:副标题在 34f 起手,标题要到 60f 才收完,两段有 26f 重叠——
24
+ 排队会读作两拍,重叠才是一句话
25
+ - 拆词不拆字:`text.split(' ')` 后每词一个 span,`line` 用 `gap:0.32em`
26
+ 撑词距(不靠空格)——逐字入场太碎,词级才有"念出来"的语感
27
+ - demo 版式:paper look(暖白纸 + 墨 + 朱红),杂志刊头(video-shotcraft 字标)/刊脚发丝线框成一页,朱红全大写眉题 →
28
+ 170px 衬线主标题(主角词斜体朱红)→ 46px 无衬线副标题,左对齐 168px 网格;后景一枚 5% 墨色的
29
+ 760px 刊号数字反向慢漂做视差;文字层全程极缓推近 1→1.03(smooth),刊脚发丝线 72f 起画给 hold 段收尾
30
+
31
+ ## 参数表
32
+ | 参数 | 典型值 | 调节手感 |
33
+ |------|--------|----------|
34
+ | 词间 stagger | 主 4f / 副 2.4f | 3–4f 是"逐词"的甜点;<2f 整行齐入没有 stagger,>8f 观众开始一个个数词 |
35
+ | 单词入场窗 | 主 22f(主角词 30f)/ 副 20f,`EASE.out` | <10f 读作硬弹;>30f 每个词都在慢慢浮,整句拖沓 |
36
+ | y 位移 | 主 64px(≈0.38em)/ 副 26px | 主副不等幅是层级来源;<0.15em 位移无感,>0.6em 词从画外飞进来变成滑入 |
37
+ | blur 通道 | 主 `(1-p)·18`px / 副 `(1-p)·9`px | 这一通道就是"专业感",删了退化成普通淡入上移;超过字号的 ~12% 中间帧糊成色块 |
38
+ | 主副错峰 | 主 10f–60f / 副 34f–80f | 重叠 ~26f 是"一句话";副标题起点推到主标题收完之后就读成两拍 |
39
+ | 字号字重 | 170px 衬线 400 对 46px 无衬线 400 | 差 2 倍以上才有主副关系;字重相同时靠字体家族区分,副标题上 600+ 字重会和主标打架 |
40
+ | 收尾 hold | 副标题 80f 收完,尾部约 40f(只剩极缓推近与刊脚收尾) | 静置 <8f 观众还没读完就切了 |
41
+
42
+ ## 已知坑
43
+ - demo 在占位文案上调校通过——参数是调校起点非实战定稿,
44
+ 首次实战须以真实素材回验
45
+ - **占位文案是主 5 词(两行)/ 副 9 词,换项目文案时词数要贴近**:stagger 总长
46
+ = `gap × 词数`,词数翻倍末词起点就往后挪一倍,末词的入场会被挤到收尾 hold
47
+ ——超过 8 词就该同步把 gap 压到 2–2.5f
48
+ - 三通道必须共用同一个 `p`:分开写三条缓动(哪怕曲线相同)就会出现
49
+ "位移到了但还糊着"的错位,柔和感立刻散掉
50
+ - 词级拆分对中文文案要手动切:`split(' ')` 在中文上得到一整块,
51
+ 须自己按语义分段成 3–5 个 span,别退化成逐字
52
+ - 每行是绝对定位的 `flex` 行(左对齐 168px 网格),词距靠 `gap` 而非空格;
53
+ 换文案时注意第一行不要超过 ~1450px 宽(170px 衬线约 17 个字符),否则撞右侧刊号后景
54
+ - 这是**低能量默认卡**:与本类里的乱码/滚轮属于不同职能,同片可以
55
+ 也应该共存(主角用重手法,其余标题全用本卡)
56
+
57
+ ## 参考实现
58
+ demos/typography/blur-slide/
59
+ (BlurSlide.tsx)
@@ -1,55 +1,55 @@
1
- ---
2
- name: brace-expand
3
- 一句话: 一对紧贴的小花括号先在正中出现,随即带一次过冲向左右弹开并放大到标题级,文字 clip 宽度严格绑括号内缘、像被拉开幕布般从中间揭示,落定后字距再细微松弛
4
- 适用: 开发者/技术产品的标题字卡;章节开场;需要"一个符号完成揭示"的极简一拍
5
- 时长: 约 4s(120f@30fps:光标 0–6f → 6f 小括号硬切 → 14f 弹开 → 40–64f 字距松弛 → 副标 → hold)
6
- 能量: 中(单次过冲是唯一峰值,其余静止)
7
- ---
8
-
9
- ## 意图
10
- 标题揭示的手法里,本卡最省:不做遮罩条、不做逐字、不做位移——只让
11
- 一对括号往两边走,文字被"括出来"。它天生带代码语感(`{}` 是花括号),
12
- 所以在技术产品语境里读作"这就是内容本体"。命门是 clip 宽度**必须严格
13
- 绑括号位置**:一旦文字自己淡入或自己擦入,括号就退化成装饰,幕布感全失。
14
-
15
- ## 动效核心
16
- - 开场第 0 帧中心是一个闪烁的输入光标(编辑器语感,不是空帧);6f 被一对 0.4 倍、内缘相贴的 "{}" **硬切替换**
17
- (不淡入),静置 8f——先建立"这是一对括号"
18
- - 弹开 `ex = springAt(f, 14, { damping: 14, stiffness: 130 })`:起跳后 ~8f 到位、~11f 过冲峰 ≈9%、~24f 收敛,一次可见回弹
19
- - 同步放大 `sc = mix(0.4, 1, ex)`;幕布半宽 `x = (HALF − INNER)·ex·sc`、括号中心 `±(x + INNER·sc)`
20
- (HALF=676、INNER=64)——**位移与缩放乘在一起**,放大本身也在推开括号;ex=0 时两只括号内缘正好相贴
21
- - 文字揭示宽度 `clip.width = 2x`(严格绑括号内缘),两侧 14px 羽化(clip 窄时羽化跟着收)
22
- - 文字同步 `scale(sc)`,与括号共用同一个 sc;落定后字距 −0.05em → −0.03em 松弛(40–64f smooth)——"呼一口气"
23
- - 质感(midnight):等宽 300px 电光蓝括号 + 泛光(泛光峰值跟着过冲走、34–64f 回落),弹开快速段按水平速度加方向性
24
- 运动模糊(amount 0.22、封顶 16,落定为 0);标题(demo 为品牌名 video-shotcraft,全小写)164px 800 字重白→冷蓝渐变;背景编辑器点阵(32px,径向渐隐)+
25
- 顶光 + 地平线光带,括号下方一道随弹开展宽的冷光反射
26
- - 余波:眉题 `// shot recipes for your agent`(等宽 32px 青色)44f 起字距收拢入场,副标(品牌短句 Frame motion. Craft the shot.)54f 起逐词虚化浮现;70–120f 整幅 1→1.012 缓推
27
- - 定位全部绝对定位(括号 / clip 框 / 文字都以 960 为中线算 left),**不用 flex**:宽度全程在变,flex 会重排
28
-
29
- ## 参数表
30
- | 参数 | 典型值 | 调节手感 |
31
- |------|--------|----------|
32
- | 括号出现 | 6f 硬切替换光标 | 硬切是对的(符号"啪"地在那儿);改淡入就少了"先看清括号"的那几帧,弹开显得突然 |
33
- | 弹开 | 14f 起弹簧 damping 14 / stiffness 130(≈9% 过冲) | 过冲是全片唯一峰值;damping ≥18 读作滑开,没有"撑"的力道;<12 回弹两次读作果冻 |
34
- | 半距 | HALF = 676px(括号中心)、INNER = 64px(括号中心到内缘) | 决定标题可容纳的宽度:内腔 = 2·(HALF−INNER) = 1224px |
35
- | 缩放 | `mix(0.4, 1, ex)`,括号 300px / 字 164px | 0.4 起点是"小字号"的量;起点 >0.8 看不出放大,<0.3 括号一开始小得像标点 |
36
- | 文案宽度 | 「video-shotcraft」164px 落定实测 ≈1130px(内腔 1224px 减两侧羽化) | 字比内腔窄太多,括号还没到位字就露全了,幕布感变弱;比内腔宽则两头被裁 |
37
- | 字距松弛 | −0.05 → −0.03em,40–64f smooth | 这一下是"落定后的呼吸";松弛后字会变宽,要留在内腔内 |
38
- | 运动模糊 | SpeedBlur amount 0.22 / max 16 | amount 0.35 时峰值帧括号糊成三道横线,认不出是括号 |
39
-
40
- ## 已知坑
41
- - **文案长度必须与 HALF 匹配**:clip 只做裁切不做缩放——换成长标题时字会被括号裁掉两头,
42
- 必须同步加大 HALF(或减小字号);中文标题字宽约为英文两倍,6 个汉字就接近上限
43
- - clip 宽度是从 0 长起来的,所以文字**总是从中间往两边露**:文案的
44
- 视觉重心要在中央(居中单行短句最佳),左右不对称的长短句会露得别扭
45
- - 括号与文字必须共用同一个 `sc`:分别写两条缩放曲线(哪怕数值相同)
46
- 会在过冲那几帧出现括号已经到位、字还在长的错位
47
- - 过冲只此一次:全片其他运动都无过冲,这是把注意力压在"撑开"这一
48
- 动作上;再叠别的 back / 弹簧过冲就贬值了
49
- - clip 框高度写死 220px(标题 164px 留上下余量),字号大改时要同步——不然上下被切
50
- - 声音:弹开那一下值得一记短促的机械/木质开合音,落定后无声;
51
- 配法纪律见 sound-design.md
52
-
53
- ## 参考实现
54
- demos/typography/brace-expand/
55
- (BraceExpand.tsx)
1
+ ---
2
+ name: brace-expand
3
+ 一句话: 一对紧贴的小花括号先在正中出现,随即带一次过冲向左右弹开并放大到标题级,文字 clip 宽度严格绑括号内缘、像被拉开幕布般从中间揭示,落定后字距再细微松弛
4
+ 适用: 开发者/技术产品的标题字卡;章节开场;需要"一个符号完成揭示"的极简一拍
5
+ 时长: 约 4s(120f@30fps:光标 0–6f → 6f 小括号硬切 → 14f 弹开 → 40–64f 字距松弛 → 副标 → hold)
6
+ 能量: 中(单次过冲是唯一峰值,其余静止)
7
+ ---
8
+
9
+ ## 意图
10
+ 标题揭示的手法里,本卡最省:不做遮罩条、不做逐字、不做位移——只让
11
+ 一对括号往两边走,文字被"括出来"。它天生带代码语感(`{}` 是花括号),
12
+ 所以在技术产品语境里读作"这就是内容本体"。命门是 clip 宽度**必须严格
13
+ 绑括号位置**:一旦文字自己淡入或自己擦入,括号就退化成装饰,幕布感全失。
14
+
15
+ ## 动效核心
16
+ - 开场第 0 帧中心是一个闪烁的输入光标(编辑器语感,不是空帧);6f 被一对 0.4 倍、内缘相贴的 "{}" **硬切替换**
17
+ (不淡入),静置 8f——先建立"这是一对括号"
18
+ - 弹开 `ex = springAt(f, 14, { damping: 14, stiffness: 130 })`:起跳后 ~8f 到位、~11f 过冲峰 ≈9%、~24f 收敛,一次可见回弹
19
+ - 同步放大 `sc = mix(0.4, 1, ex)`;幕布半宽 `x = (HALF − INNER)·ex·sc`、括号中心 `±(x + INNER·sc)`
20
+ (HALF=676、INNER=64)——**位移与缩放乘在一起**,放大本身也在推开括号;ex=0 时两只括号内缘正好相贴
21
+ - 文字揭示宽度 `clip.width = 2x`(严格绑括号内缘),两侧 14px 羽化(clip 窄时羽化跟着收)
22
+ - 文字同步 `scale(sc)`,与括号共用同一个 sc;落定后字距 −0.05em → −0.03em 松弛(40–64f smooth)——"呼一口气"
23
+ - 质感(midnight):等宽 300px 电光蓝括号 + 泛光(泛光峰值跟着过冲走、34–64f 回落),弹开快速段按水平速度加方向性
24
+ 运动模糊(amount 0.22、封顶 16,落定为 0);标题(demo 为品牌名 video-shotcraft,全小写)164px 800 字重白→冷蓝渐变;背景编辑器点阵(32px,径向渐隐)+
25
+ 顶光 + 地平线光带,括号下方一道随弹开展宽的冷光反射
26
+ - 余波:眉题 `// shot recipes for your agent`(等宽 32px 青色)44f 起字距收拢入场,副标(品牌短句 Frame motion. Craft the shot.)54f 起逐词虚化浮现;70–120f 整幅 1→1.012 缓推
27
+ - 定位全部绝对定位(括号 / clip 框 / 文字都以 960 为中线算 left),**不用 flex**:宽度全程在变,flex 会重排
28
+
29
+ ## 参数表
30
+ | 参数 | 典型值 | 调节手感 |
31
+ |------|--------|----------|
32
+ | 括号出现 | 6f 硬切替换光标 | 硬切是对的(符号"啪"地在那儿);改淡入就少了"先看清括号"的那几帧,弹开显得突然 |
33
+ | 弹开 | 14f 起弹簧 damping 14 / stiffness 130(≈9% 过冲) | 过冲是全片唯一峰值;damping ≥18 读作滑开,没有"撑"的力道;<12 回弹两次读作果冻 |
34
+ | 半距 | HALF = 676px(括号中心)、INNER = 64px(括号中心到内缘) | 决定标题可容纳的宽度:内腔 = 2·(HALF−INNER) = 1224px |
35
+ | 缩放 | `mix(0.4, 1, ex)`,括号 300px / 字 164px | 0.4 起点是"小字号"的量;起点 >0.8 看不出放大,<0.3 括号一开始小得像标点 |
36
+ | 文案宽度 | 「video-shotcraft」164px 落定实测 ≈1130px(内腔 1224px 减两侧羽化) | 字比内腔窄太多,括号还没到位字就露全了,幕布感变弱;比内腔宽则两头被裁 |
37
+ | 字距松弛 | −0.05 → −0.03em,40–64f smooth | 这一下是"落定后的呼吸";松弛后字会变宽,要留在内腔内 |
38
+ | 运动模糊 | SpeedBlur amount 0.22 / max 16 | amount 0.35 时峰值帧括号糊成三道横线,认不出是括号 |
39
+
40
+ ## 已知坑
41
+ - **文案长度必须与 HALF 匹配**:clip 只做裁切不做缩放——换成长标题时字会被括号裁掉两头,
42
+ 必须同步加大 HALF(或减小字号);中文标题字宽约为英文两倍,6 个汉字就接近上限
43
+ - clip 宽度是从 0 长起来的,所以文字**总是从中间往两边露**:文案的
44
+ 视觉重心要在中央(居中单行短句最佳),左右不对称的长短句会露得别扭
45
+ - 括号与文字必须共用同一个 `sc`:分别写两条缩放曲线(哪怕数值相同)
46
+ 会在过冲那几帧出现括号已经到位、字还在长的错位
47
+ - 过冲只此一次:全片其他运动都无过冲,这是把注意力压在"撑开"这一
48
+ 动作上;再叠别的 back / 弹簧过冲就贬值了
49
+ - clip 框高度写死 220px(标题 164px 留上下余量),字号大改时要同步——不然上下被切
50
+ - 声音:弹开那一下值得一记短促的机械/木质开合音,落定后无声;
51
+ 配法纪律见 sound-design.md
52
+
53
+ ## 参考实现
54
+ demos/typography/brace-expand/
55
+ (BraceExpand.tsx)
@@ -1,65 +1,65 @@
1
- ---
2
- name: countdown-arc-scatter
3
- 一句话: 纸面表盘 9 个等大数字沿大弧切向排布,整盘扫过 96° 后减速急停,"5" 停在弧顶随即平移落位成标题首字符,其余数字带 blur 原地散去,标题逐词模糊淡入、末词转强调色
4
- 适用: 倒计时/时长承诺类文案("5 min to install");数据揭晓的一拍;需要"仪表盘"语汇的浅底短镜
5
- 时长: 约 3.3s(100f@30fps:扫动 ~30f + 落位 20f + 标题成句 + hold 22f;最短可压到 33f 单拍)
6
- 能量: 高(96° 大幅扫动压进 ~20 帧,纯冲击)
7
- ---
8
-
9
- ## 意图
10
- "5 分钟装完"写成静态字卡没人信。表盘扫过的做法把这个数字放进一个
11
- **量程**里:45、35、28、22、17、10 一路扫过去,停在 5——观众看到的是
12
- "从很多降到很少",数字自带论证。停下后 "5" 不消失而是**平移变成标题的
13
- 首字符**,一个元素完成从仪表到文案的身份切换,这是本卡最值钱的一手。
14
-
15
- ## 动效核心
16
- - 弧线排布:9 个数字挂在同一圆心上(demo 按 1920×1080 原生作画:圆心 (960,1150)、R=700,弧顶 y=450),
17
- `ang = (i-6)·24`°,位置 `x = cx + sin·R`、`y = cy - cos·R`,自身再 `rotate(位置角)` —— **切向排布**,
18
- 数字随弧倾斜像刻在盘面上;数字 112px Helvetica 粗体 tabular,等大同字重
19
- - 整盘扫动:先 5f 反向蓄力 +3°(anticipation),再一记物理弹簧 99°→0°(damping 12 / stiffness 60,
20
- ~24f 冲过 0° 约 2°、~34f 落定)——"减速急停 + 一次表针回弹"是"到位"的全部力道
21
- - 弧两端淡入淡出:`op = clamp((70 - |pa|)/22)`,位置角超过 ±70° 就归零、±48° 起渐显——
22
- **不用遮罩,用角度算透明度**,所以数字是"转进视野"的
23
- - `i=6` 的 "5" 角度设计为 0(扫完正停弧顶),回弹落定前 2f 即起飞:20f 不对称 in-out(EASE.swift)
24
- 平移到标题首字符槽,同一条曲线做 112→150px 放大与自转回正。标题首槽是固定宽 0.6em 的空位,
25
- 飞行的 "5" 也用同宽居中盒,所以落点与槽中心严格对齐、不需要换元素
26
- - 其余 8 个数字 28→44f 原地失焦淡出(`blur(out·6)`,**不位移**,位移会跟 "5" 的平移抢戏),早于 "5"
27
- 起飞 4f 先让路;扫动快速段每个数字按切向速度做方向性运动模糊(停稳归零)
28
- - 盘面层次:数字内侧一圈随盘同速转的细刻度(每 4° 一根、数字位加长);强调色指针挂在 `rot·0.35`
29
- 上跟转——**0.35 倍差速**,两条转速造出"盘面 + 指针"的层次;外侧一道静止发丝弧 + 顶部强调色读数标,
30
- 盘面散去后以 35% 留在海报上(标题像是从仪表上读出来的)
31
- - 标题三词逐词 `blur((1-p)·10)` + 淡入 + 0.12em 上浮,窗 42–56 / 46–60 / 50–66f(重叠 = 一句话);
32
- 末词在 64–76f 从墨色插值到强调色(demo 朱红)——全片唯一的颜色事件;下方 mono 34px 命令行补一句产品事实(demo 为 video-shotcraft 的真实安装命令 `npx skills add Vincentwei1021/video-shotcraft`;右上角是 video-shotcraft 字标)
33
-
34
- ## 参数表
35
- | 参数 | 典型值 | 调节手感 |
36
- |------|--------|----------|
37
- | 数列 | `[45,35,28,22,17,10,5,4,3]`,间距 24° | 递减不等距(45→35→28…)才像真量程,等差数列读作刻度尺;"5" 必须在 i=6 位(前 6 个扫过、后 2 个预留) |
38
- | 弧半径 | R=700px,圆心在画面下方(弧顶 y≈450) | 半径决定弧的曲度:<R/3 帧宽数字挤成小圈,弧近乎直线时表盘感消失;整条可视弧应横跨画面 60–70% |
39
- | 扫动 | 蓄力 +3° 5f → 弹簧 99°→0°(damping 12 / stiffness 60,~2° 过冲) | 过冲 >4° 读作弹簧玩具;无过冲的 inOut 缓停没有仪表的干脆 |
40
- | 可视角窗 | `(70-|pa|)/22`(±70° 外全透) | 22 是渐变宽度(约一格);调大成 40 数字半透着进出,糊;调 0 就是硬切出现 |
41
- | "5" 落位 | 32→52f(20f,EASE.swift),112→150px,同步回正 | 落位紧接扫停,中间不留静置——留了就断成两个动作;落点必须是标题首字符槽(固定槽宽保证对齐) |
42
- | 其余淡出 | 28→44f + `blur(out·6)` | 淡出**早于** "5" 起飞起手,先让路;blur 让散去像失焦而非消失 |
43
- | 刻度差速 | 指针 `rot·0.35`;标题逐词窗重叠约 10f、`blur (1-p)·10`px | 差速是"盘 vs 指针"的层次来源,1.0(同速)读作一整块贴图在转;逐词窗重叠才是"一句话",排队读作三个词各自出场 |
44
- | 末词染色 | 64→76f → 强调色 | 全片唯一的颜色事件,落在最后一个词上就是句子的落点 |
45
-
46
- ## 已知坑
47
- - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
48
- 首次实战须以真实素材回验
49
- - **33f 是极限压缩**(motion-lab 原稿:扫动 17f、"5" 落位 6f、三词淡入各约 5f),信息密度远高于可读上限;
50
- demo 已拉到 100f。再改时长时把各时间窗按**同一比例**缩放(比例关系是调校过的),别只拉扫动段
51
- - **换文案时要重估标题宽度**:demo 用 `TITLE_EM`(按字宽估算的整行 em 宽)把标题居中,"5" 的落点
52
- 由固定 0.6em 首槽推出——文案变了只改 `WORDS` 与 `TITLE_EM`,落点自动对齐,但整行居中要重估
53
- - 盘面数字必须**等大同字重**(demo 112px/700):大小不一读作数据可视化,
54
- 不是仪表盘扫过
55
- - "5" 的角度设计(i=6 → ang=0)是本卡的地基:改数列长度或改哪个数字
56
- 是主角,都必须让主角的 `ang` 算出来正好是 0,否则扫停时它不在弧顶
57
- - 浅底优先:暖白纸底 + 墨色数字 + 单一强调色是这卡的干净感来源;深底版
58
- 需整套重配(且淡出用的 blur 在深底上会发灰)
59
- - 声音:扫停那一下 + 落位那一下是两个紧连的节奏点(相隔仅数帧),
60
- 配两记不同音色的短音(扫停用机械止停、落位用轻质落定);同音连发
61
- 会糊成一声,配法纪律见 sound-design.md
62
-
63
- ## 参考实现
64
- demos/typography/countdown-arc-scatter/
65
- (CountdownArcScatter.tsx)
1
+ ---
2
+ name: countdown-arc-scatter
3
+ 一句话: 纸面表盘 9 个等大数字沿大弧切向排布,整盘扫过 96° 后减速急停,"5" 停在弧顶随即平移落位成标题首字符,其余数字带 blur 原地散去,标题逐词模糊淡入、末词转强调色
4
+ 适用: 倒计时/时长承诺类文案("5 min to install");数据揭晓的一拍;需要"仪表盘"语汇的浅底短镜
5
+ 时长: 约 3.3s(100f@30fps:扫动 ~30f + 落位 20f + 标题成句 + hold 22f;最短可压到 33f 单拍)
6
+ 能量: 高(96° 大幅扫动压进 ~20 帧,纯冲击)
7
+ ---
8
+
9
+ ## 意图
10
+ "5 分钟装完"写成静态字卡没人信。表盘扫过的做法把这个数字放进一个
11
+ **量程**里:45、35、28、22、17、10 一路扫过去,停在 5——观众看到的是
12
+ "从很多降到很少",数字自带论证。停下后 "5" 不消失而是**平移变成标题的
13
+ 首字符**,一个元素完成从仪表到文案的身份切换,这是本卡最值钱的一手。
14
+
15
+ ## 动效核心
16
+ - 弧线排布:9 个数字挂在同一圆心上(demo 按 1920×1080 原生作画:圆心 (960,1150)、R=700,弧顶 y=450),
17
+ `ang = (i-6)·24`°,位置 `x = cx + sin·R`、`y = cy - cos·R`,自身再 `rotate(位置角)` —— **切向排布**,
18
+ 数字随弧倾斜像刻在盘面上;数字 112px Helvetica 粗体 tabular,等大同字重
19
+ - 整盘扫动:先 5f 反向蓄力 +3°(anticipation),再一记物理弹簧 99°→0°(damping 12 / stiffness 60,
20
+ ~24f 冲过 0° 约 2°、~34f 落定)——"减速急停 + 一次表针回弹"是"到位"的全部力道
21
+ - 弧两端淡入淡出:`op = clamp((70 - |pa|)/22)`,位置角超过 ±70° 就归零、±48° 起渐显——
22
+ **不用遮罩,用角度算透明度**,所以数字是"转进视野"的
23
+ - `i=6` 的 "5" 角度设计为 0(扫完正停弧顶),回弹落定前 2f 即起飞:20f 不对称 in-out(EASE.swift)
24
+ 平移到标题首字符槽,同一条曲线做 112→150px 放大与自转回正。标题首槽是固定宽 0.6em 的空位,
25
+ 飞行的 "5" 也用同宽居中盒,所以落点与槽中心严格对齐、不需要换元素
26
+ - 其余 8 个数字 28→44f 原地失焦淡出(`blur(out·6)`,**不位移**,位移会跟 "5" 的平移抢戏),早于 "5"
27
+ 起飞 4f 先让路;扫动快速段每个数字按切向速度做方向性运动模糊(停稳归零)
28
+ - 盘面层次:数字内侧一圈随盘同速转的细刻度(每 4° 一根、数字位加长);强调色指针挂在 `rot·0.35`
29
+ 上跟转——**0.35 倍差速**,两条转速造出"盘面 + 指针"的层次;外侧一道静止发丝弧 + 顶部强调色读数标,
30
+ 盘面散去后以 35% 留在海报上(标题像是从仪表上读出来的)
31
+ - 标题三词逐词 `blur((1-p)·10)` + 淡入 + 0.12em 上浮,窗 42–56 / 46–60 / 50–66f(重叠 = 一句话);
32
+ 末词在 64–76f 从墨色插值到强调色(demo 朱红)——全片唯一的颜色事件;下方 mono 34px 命令行补一句产品事实(demo 为 video-shotcraft 的真实安装命令 `npx skills add Vincentwei1021/video-shotcraft`;右上角是 video-shotcraft 字标)
33
+
34
+ ## 参数表
35
+ | 参数 | 典型值 | 调节手感 |
36
+ |------|--------|----------|
37
+ | 数列 | `[45,35,28,22,17,10,5,4,3]`,间距 24° | 递减不等距(45→35→28…)才像真量程,等差数列读作刻度尺;"5" 必须在 i=6 位(前 6 个扫过、后 2 个预留) |
38
+ | 弧半径 | R=700px,圆心在画面下方(弧顶 y≈450) | 半径决定弧的曲度:<R/3 帧宽数字挤成小圈,弧近乎直线时表盘感消失;整条可视弧应横跨画面 60–70% |
39
+ | 扫动 | 蓄力 +3° 5f → 弹簧 99°→0°(damping 12 / stiffness 60,~2° 过冲) | 过冲 >4° 读作弹簧玩具;无过冲的 inOut 缓停没有仪表的干脆 |
40
+ | 可视角窗 | `(70-|pa|)/22`(±70° 外全透) | 22 是渐变宽度(约一格);调大成 40 数字半透着进出,糊;调 0 就是硬切出现 |
41
+ | "5" 落位 | 32→52f(20f,EASE.swift),112→150px,同步回正 | 落位紧接扫停,中间不留静置——留了就断成两个动作;落点必须是标题首字符槽(固定槽宽保证对齐) |
42
+ | 其余淡出 | 28→44f + `blur(out·6)` | 淡出**早于** "5" 起飞起手,先让路;blur 让散去像失焦而非消失 |
43
+ | 刻度差速 | 指针 `rot·0.35`;标题逐词窗重叠约 10f、`blur (1-p)·10`px | 差速是"盘 vs 指针"的层次来源,1.0(同速)读作一整块贴图在转;逐词窗重叠才是"一句话",排队读作三个词各自出场 |
44
+ | 末词染色 | 64→76f → 强调色 | 全片唯一的颜色事件,落在最后一个词上就是句子的落点 |
45
+
46
+ ## 已知坑
47
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
48
+ 首次实战须以真实素材回验
49
+ - **33f 是极限压缩**(motion-lab 原稿:扫动 17f、"5" 落位 6f、三词淡入各约 5f),信息密度远高于可读上限;
50
+ demo 已拉到 100f。再改时长时把各时间窗按**同一比例**缩放(比例关系是调校过的),别只拉扫动段
51
+ - **换文案时要重估标题宽度**:demo 用 `TITLE_EM`(按字宽估算的整行 em 宽)把标题居中,"5" 的落点
52
+ 由固定 0.6em 首槽推出——文案变了只改 `WORDS` 与 `TITLE_EM`,落点自动对齐,但整行居中要重估
53
+ - 盘面数字必须**等大同字重**(demo 112px/700):大小不一读作数据可视化,
54
+ 不是仪表盘扫过
55
+ - "5" 的角度设计(i=6 → ang=0)是本卡的地基:改数列长度或改哪个数字
56
+ 是主角,都必须让主角的 `ang` 算出来正好是 0,否则扫停时它不在弧顶
57
+ - 浅底优先:暖白纸底 + 墨色数字 + 单一强调色是这卡的干净感来源;深底版
58
+ 需整套重配(且淡出用的 blur 在深底上会发灰)
59
+ - 声音:扫停那一下 + 落位那一下是两个紧连的节奏点(相隔仅数帧),
60
+ 配两记不同音色的短音(扫停用机械止停、落位用轻质落定);同音连发
61
+ 会糊成一声,配法纪律见 sound-design.md
62
+
63
+ ## 参考实现
64
+ demos/typography/countdown-arc-scatter/
65
+ (CountdownArcScatter.tsx)
@@ -1,42 +1,42 @@
1
- ---
2
- name: document-typewriter-reveal
3
- 一句话: 悬浮在暗场里的整页真排版文档窗口在光标后自己"写"出来、侧栏跟进、历史条目逐个落入轨道,相机从斜侧标题特写一路后撤到全窗
4
- 适用: 文档/报告/笔记类功能镜头;信息密度最高的一拍
5
- 时长: 150f(约 5s,含 history-list-stack 尾段与标语 hold)
6
- 能量: 低中(信息密度最高,节奏放稳让观众读字)
7
- 标签: ui-entrance
8
- ---
9
-
10
- ## 意图
11
- 观众会读清屏幕上每个字——这一镜的说服力全在"文档是真的"。打字机式写入把静态页面变成"正在被写出来的文档",侧栏历史条目落入补上"持续产出"的时间纵深。
12
-
13
- ## 动效核心
14
- - 内容块两两一对按节拍写入:页面底色遮罩右锚左→右收窄,强调色 caret 骑在揭示前沿
15
- - 人名 @-mention 在 wipe 完成后长出强调色底色
16
- - 左右双栏靠底色补丁上→下收走入场,内缘强调色细线随揭示生长后淡去
17
- - 尾段(history-list-stack):6 条历史条目从上方逐个落入侧栏轨道,每落一条配一声 pop
18
- - 相机从斜侧标题特写拉到全窗(双栏必须都入画),之后微俯上移让出底部给一行标语,只做极缓推近;页面是一扇悬浮在暗场里的应用窗口(圆角、亮边、背光、长投影),不铺满全屏
19
-
20
- ## 参数表
21
- | 参数 | 典型值 | 调节手感 |
22
- |------|--------|----------|
23
- | 写入节拍 | 20 块两两一对,第 g 对 cue = 8 + g·4.4,每块 wipe 9f,最后一对 ~57f 完成(赶在 64f 全窗 settle 前) | 逐块写会超预算——"块数×节拍要先对预算"是这卡的核心算术,先算再写 |
24
- | 写入手法 | 底色遮罩 width 100%→0,bezier(0.4,0,0.6,1),遮罩色取纹理纸面实测色、右侧多盖(标题 120px——块测量宽度短于粗体实际字宽,否则尾词漏出);强调色 caret 3px(深一档的极光紫 + 同色柔光)只跟最新块、只骑在实际文字宽度内,写完 2f 淡出;首块开写前 8f 笔尖在标题起点闪烁待命 | caret 同时出现多个立刻穿帮;永远只有一个"笔尖" |
25
- | li 圆点 | 遮罩向左多盖 28px(::marker 在文本左 ~22px) | 不多盖圆点会提前穿帮——截图纹理里烤入的排版细节都要这样排查 |
26
- | @-mention | wipe 完成后 4f 起、8f 长出强调色底(极光紫 0.4)、`mix-blend-mode: multiply`(底色盖在纹理字上方,normal 混合会把人名洗浅);跳过非人名标题 | 高亮晚于写入才读作"重点被标出";同帧出现读作贴图 |
27
- | 双栏入场 | 左栏 cue 54 / 右栏 cue 62,底色补丁上→下 10f 收走 + 内缘 2px 强调色线随揭示生长、24f 淡去 | 双栏与正文错开节拍,同时入场会互相抢视线 |
28
- | 历史条目落入 | 6 条,cue = 66 + i·5(排在侧栏 wipe 完成 64f 后),每条 9f 落下;起点 −48px,bezier(0.2,1.15,0.3,1) 轻弹跳,空中影 `0 12·air px 24·air px` | 条目几何紧贴烤入纹理已有条目的下方、行高对齐——DOM 重绘条目必须和纹理里的活条目严格对齐 |
29
- | 舞台 | aurora 暗场:窗口背后一圈强调色背光(页面空间 translateZ −40,随窗口透视)、四周 0 0 0 1.5px 亮边 + 70px 长投影、顶沿一道高光;收尾标语 84px 两段(第二段强调色)左对齐窗口左缘 | 暖白纸面放进冷暗场里像一盏灯——舞台和窗口要同一套光向,背光别盖过纸面 |
30
- | 相机 | 自写 3D 窗口相机(布局级 CSS zoom,Q2),单调三次 Hermite 样条逐帧展开:f0 zoom 1.42 / rotY −18° / rotX 8°(窗口左上角与舞台光同时入画)→ f26 1.24 → f64 全窗 0.86 → f104 0.74 + rotX 9° + 上移 78px(底部让给标语)→ f150 0.746 | 开场太近(>1.6x)整屏只剩纸面,暗场与窗口边都看不见,读作原版平铺页面;全窗时双栏必须都入画(Q10) |
31
-
32
- ## 声音
33
- 写入段钉 keyboard.mp3 修剪到 ~50f(8→57f)盖住书写段(拟音与动作严格等长,S4);历史条目 6 连 pop 每 5f 一发、音量 0.40→0.25 阶梯递减做距离衰减(S2)。
34
-
35
- ## 已知坑
36
- - mock 内容必须出版级:产品原生排版、文字铺满、侧栏完整入镜(Q10)——"贴图+标语"级的敷衍文档会导致整镜头重做
37
- - 数据合规:mock 内容里绝不出现客户/成员真名(Q1)
38
- - 素材页面是活数据源(协作文档类)时,全量重采会刷掉已定稿纹理——用增量脚本只刷单页单键
39
- - 强调色示例(caret/@-mention/内缘线)在模板片中为琥珀色,适配新品牌时统一换成目标品牌强调色
40
-
41
- ## 参考实现
42
- demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx(原 template/src/aifl/live/SceneWbr.tsx;打字音效见 template/src/aifl/Main.tsx SFX 表;模板片中此镜承载的是周报文档场景)
1
+ ---
2
+ name: document-typewriter-reveal
3
+ 一句话: 悬浮在暗场里的整页真排版文档窗口在光标后自己"写"出来、侧栏跟进、历史条目逐个落入轨道,相机从斜侧标题特写一路后撤到全窗
4
+ 适用: 文档/报告/笔记类功能镜头;信息密度最高的一拍
5
+ 时长: 150f(约 5s,含 history-list-stack 尾段与标语 hold)
6
+ 能量: 低中(信息密度最高,节奏放稳让观众读字)
7
+ 标签: ui-entrance
8
+ ---
9
+
10
+ ## 意图
11
+ 观众会读清屏幕上每个字——这一镜的说服力全在"文档是真的"。打字机式写入把静态页面变成"正在被写出来的文档",侧栏历史条目落入补上"持续产出"的时间纵深。
12
+
13
+ ## 动效核心
14
+ - 内容块两两一对按节拍写入:页面底色遮罩右锚左→右收窄,强调色 caret 骑在揭示前沿
15
+ - 人名 @-mention 在 wipe 完成后长出强调色底色
16
+ - 左右双栏靠底色补丁上→下收走入场,内缘强调色细线随揭示生长后淡去
17
+ - 尾段(history-list-stack):6 条历史条目从上方逐个落入侧栏轨道,每落一条配一声 pop
18
+ - 相机从斜侧标题特写拉到全窗(双栏必须都入画),之后微俯上移让出底部给一行标语,只做极缓推近;页面是一扇悬浮在暗场里的应用窗口(圆角、亮边、背光、长投影),不铺满全屏
19
+
20
+ ## 参数表
21
+ | 参数 | 典型值 | 调节手感 |
22
+ |------|--------|----------|
23
+ | 写入节拍 | 20 块两两一对,第 g 对 cue = 8 + g·4.4,每块 wipe 9f,最后一对 ~57f 完成(赶在 64f 全窗 settle 前) | 逐块写会超预算——"块数×节拍要先对预算"是这卡的核心算术,先算再写 |
24
+ | 写入手法 | 底色遮罩 width 100%→0,bezier(0.4,0,0.6,1),遮罩色取纹理纸面实测色、右侧多盖(标题 120px——块测量宽度短于粗体实际字宽,否则尾词漏出);强调色 caret 3px(深一档的极光紫 + 同色柔光)只跟最新块、只骑在实际文字宽度内,写完 2f 淡出;首块开写前 8f 笔尖在标题起点闪烁待命 | caret 同时出现多个立刻穿帮;永远只有一个"笔尖" |
25
+ | li 圆点 | 遮罩向左多盖 28px(::marker 在文本左 ~22px) | 不多盖圆点会提前穿帮——截图纹理里烤入的排版细节都要这样排查 |
26
+ | @-mention | wipe 完成后 4f 起、8f 长出强调色底(极光紫 0.4)、`mix-blend-mode: multiply`(底色盖在纹理字上方,normal 混合会把人名洗浅);跳过非人名标题 | 高亮晚于写入才读作"重点被标出";同帧出现读作贴图 |
27
+ | 双栏入场 | 左栏 cue 54 / 右栏 cue 62,底色补丁上→下 10f 收走 + 内缘 2px 强调色线随揭示生长、24f 淡去 | 双栏与正文错开节拍,同时入场会互相抢视线 |
28
+ | 历史条目落入 | 6 条,cue = 66 + i·5(排在侧栏 wipe 完成 64f 后),每条 9f 落下;起点 −48px,bezier(0.2,1.15,0.3,1) 轻弹跳,空中影 `0 12·air px 24·air px` | 条目几何紧贴烤入纹理已有条目的下方、行高对齐——DOM 重绘条目必须和纹理里的活条目严格对齐 |
29
+ | 舞台 | aurora 暗场:窗口背后一圈强调色背光(页面空间 translateZ −40,随窗口透视)、四周 0 0 0 1.5px 亮边 + 70px 长投影、顶沿一道高光;收尾标语 84px 两段(第二段强调色)左对齐窗口左缘 | 暖白纸面放进冷暗场里像一盏灯——舞台和窗口要同一套光向,背光别盖过纸面 |
30
+ | 相机 | 自写 3D 窗口相机(布局级 CSS zoom,Q2),单调三次 Hermite 样条逐帧展开:f0 zoom 1.42 / rotY −18° / rotX 8°(窗口左上角与舞台光同时入画)→ f26 1.24 → f64 全窗 0.86 → f104 0.74 + rotX 9° + 上移 78px(底部让给标语)→ f150 0.746 | 开场太近(>1.6x)整屏只剩纸面,暗场与窗口边都看不见,读作原版平铺页面;全窗时双栏必须都入画(Q10) |
31
+
32
+ ## 声音
33
+ 写入段钉 keyboard.mp3 修剪到 ~50f(8→57f)盖住书写段(拟音与动作严格等长,S4);历史条目 6 连 pop 每 5f 一发、音量 0.40→0.25 阶梯递减做距离衰减(S2)。
34
+
35
+ ## 已知坑
36
+ - mock 内容必须出版级:产品原生排版、文字铺满、侧栏完整入镜(Q10)——"贴图+标语"级的敷衍文档会导致整镜头重做
37
+ - 数据合规:mock 内容里绝不出现客户/成员真名(Q1)
38
+ - 素材页面是活数据源(协作文档类)时,全量重采会刷掉已定稿纹理——用增量脚本只刷单页单键
39
+ - 强调色示例(caret/@-mention/内缘线)在模板片中为琥珀色,适配新品牌时统一换成目标品牌强调色
40
+
41
+ ## 参考实现
42
+ demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx(原 template/src/aifl/live/SceneWbr.tsx;打字音效见 template/src/aifl/Main.tsx SFX 表;模板片中此镜承载的是周报文档场景)
@@ -1,64 +1,64 @@
1
- ---
2
- name: flying-words
3
- 一句话: 22 个关键词按黄金角铺在扁椭圆截面上,沿 z 轴从远处飞到相机前擦身而过,透明度走 [0,1,0.5,0.2,0] 生命曲线,跑满 2 整圈首尾无缝
4
- 适用: 关键词云/能力清单的动态背景;片头片尾的"信息量"垫底层;需要纵深穿越感的转场
5
- 时长: 约 6.0s(180f@30fps,2 个完整循环,可无缝接续)
6
- 能量: 高(全屏持续 3D 位移,画面无一刻静止)
7
- ---
8
-
9
- ## 意图
10
- 关键词列举最土的做法是堆一屏静态词云。词语隧道把同一批词**摊到时间轴上**:
11
- 远处生成、由小变大、擦过镜头消失,观众永远只在读三五个词,但主观感受是
12
- "词很多"。它是背景层不是主角层——相机不动、元素动,所以前景压一层标题
13
- 或 UI 完全不打架。词表整体替换成项目关键词即可,不改一行运动逻辑。
14
-
15
- ## 动效核心
16
- - 透视(480 设计坐标下)`perspective:1100px`,词沿 z 从 **-1750 → 800px** 线性推进——正值即穿过
17
- 相机平面,这才有"擦身"。demo 按 1920 原生作画,同一套数值整体 ×4:P=4400、z −7000 → +3200,
18
- 投影手算 `s = P/(P−z)`(与 CSS perspective 逐点等价)
19
- - 铺位用黄金角:`a = i·2.39996 + rand(i·7+1)·0.8`,半径 `r = 82 + rand·165`(原生 ×4:330 + rand·660),
20
- y 半径再 ×0.6 压成扁椭圆——避开正中、避免近处几个词堆成一团
21
- - 生命曲线 `OP=[0,1,0.5,0.2,0]` @ `OT=[0,0.25,0.6,0.85,1]`:**前 1/4 猛亮到满,
22
- 中段降到半透,末段拖尾消失**——不是简单淡入淡出,中段压暗才不遮前景
23
- - 向外散开 `drift = 0.5 + u·1.35`:远处收拢在中心、越近越往画外甩,
24
- 和 z 轴推进叠成真透视感
25
- - 近端糊化:`u > 0.86` 时按 `(u-0.86)` 线性加失焦——词冲到眼前会大到失控,这一层模糊是遮丑;
26
- 真正的速度感交给按屏幕速度的方向拖尾(demo:沿 −v 方向 6 层渐虚 text-shadow 残影,比给每个词套
27
- 全屏 SVG 滤镜便宜得多);远端前 22% 行程再加大气雾失焦
28
- - demo 另加两层同一条隧道运动的纵深参照:10 道扁椭圆发丝环(隧道壁,近处变粗淡出)+ 56 粒尘埃画成
29
- 沿径向拉长的光速流线(线长 = 近 2.6 帧的屏幕位移);整条隧道 `±2.5°·sin(2πt)` 极缓滚转(周期函数,首尾一致)
30
- - 前景:demo 正中压一组静态字标(mono 眉题 + 112px 标题 + 径向暗幕),飞进字标椭圆区的词透明度压到 20%
31
- ——演示"背景层 + 前景标题不打架"的用法;字标静止,循环仍无缝
32
- - `CYCLES = 2` 是整数圈,demo 取 `t = frame / DURATION`(末帧的下一帧 = 第 0 帧)可无缝 loop;每词相位
33
- `ph = i/N` 均分、spawn 全确定性;中心电光蓝光晕 `opacity = 0.82 + sin(t·4π)·0.14` 呼吸 2 次,
34
- 钉住"隧道尽头"这个视觉锚
35
-
36
- ## 参数表
37
- | 参数 | 典型值 | 调节手感 |
38
- |------|--------|----------|
39
- | 词表 | 22 词,字号 `20 + rand·16`px(20–36;原生 64–120),700 字重 + 6 个衬线斜体词 | 词数与相位 `i/N` 绑定:<12 词画面稀,>30 词近处糊成一片;字号随机是层次感来源,全同号读作贴图 |
40
- | 纵深行程 | z −1750 → +800px,perspective 1100(原生 ×4) | 起点更远(−2500+)词太小认不出;终点不过 0 就没有"穿过去"只有"飞到脸前停住" |
41
- | 散开系数 | `drift = 0.5 + u·1.35` | 系数 <1 词全从正中喷出像爆炸;>2 早早飞出画外,隧道变喷泉 |
42
- | 生命曲线 | `[0,1,0.5,0.2,0]` @ `[0,0.25,0.6,0.85,1]` | 中段那个 0.5 是给前景让位的;改成一路满亮就抢主角,改成早早归零隧道变空 |
43
- | 循环圈数 | `CYCLES = 2`(必须整数) | 非整数 → t=1 与 t=0 不接,loop 处一跳;圈数越多单词过镜越快 |
44
- | 近端模糊 | `u>0.86` 起线性失焦 + 速度向方向拖尾 | 阈值提到 0.95 巨大词硬边扎眼;系数 >40 末段成色斑 |
45
- | 配色 | demo(midnight):冷白三阶 `#f2f5ff/#c3cbe2/#8a95b5` + 4 个电光蓝强调词 `#86a8ff`(只有强调词带泛光),中心光晕电光蓝 | 深底浅字发光是身份证,白底套本卡直接失效——要浅底得整套重配 |
46
- | 中心光晕 | ~1040×720 径向渐变、呼吸 2 次/片 | 删了隧道尽头没有焦点,词像随机乱飞;呼吸频率跟 CYCLES 对齐才不打拍 |
47
-
48
- ## 已知坑
49
- - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
50
- 首次实战须以真实素材回验
51
- - 词表替换要**保持词数与字长量级**(demo 22 词、单词 4–9 字母):相位是
52
- `i/N` 均分的,词数一变密度整体缩放;中文词字宽是英文的两倍以上,
53
- 换中文关键词须同步下调字号否则近处直接占满画面
54
- - `CYCLES` 必须是整数,否则首尾不接——这是本卡"可无缝 loop"的唯一前提,
55
- 想调过镜速度就整数加减,别改小数
56
- - 只做背景层:中段生命曲线压到 0.5 就是为了给前景让位,把它当主角
57
- (拉满亮度)反而读作杂乱
58
- - 深底专用:`text-shadow` 发光 + 径向暗角是效果的一半,浅底上词会糊成
59
- 脏点;22 个词元素全程挂在 DOM 里(不销毁重建)只改 transform/opacity,
60
- 移植 Remotion 时保持这个结构,别改成按帧增删节点
61
-
62
- ## 参考实现
63
- demos/typography/flying-words/
64
- (FlyingWords.tsx)
1
+ ---
2
+ name: flying-words
3
+ 一句话: 22 个关键词按黄金角铺在扁椭圆截面上,沿 z 轴从远处飞到相机前擦身而过,透明度走 [0,1,0.5,0.2,0] 生命曲线,跑满 2 整圈首尾无缝
4
+ 适用: 关键词云/能力清单的动态背景;片头片尾的"信息量"垫底层;需要纵深穿越感的转场
5
+ 时长: 约 6.0s(180f@30fps,2 个完整循环,可无缝接续)
6
+ 能量: 高(全屏持续 3D 位移,画面无一刻静止)
7
+ ---
8
+
9
+ ## 意图
10
+ 关键词列举最土的做法是堆一屏静态词云。词语隧道把同一批词**摊到时间轴上**:
11
+ 远处生成、由小变大、擦过镜头消失,观众永远只在读三五个词,但主观感受是
12
+ "词很多"。它是背景层不是主角层——相机不动、元素动,所以前景压一层标题
13
+ 或 UI 完全不打架。词表整体替换成项目关键词即可,不改一行运动逻辑。
14
+
15
+ ## 动效核心
16
+ - 透视(480 设计坐标下)`perspective:1100px`,词沿 z 从 **-1750 → 800px** 线性推进——正值即穿过
17
+ 相机平面,这才有"擦身"。demo 按 1920 原生作画,同一套数值整体 ×4:P=4400、z −7000 → +3200,
18
+ 投影手算 `s = P/(P−z)`(与 CSS perspective 逐点等价)
19
+ - 铺位用黄金角:`a = i·2.39996 + rand(i·7+1)·0.8`,半径 `r = 82 + rand·165`(原生 ×4:330 + rand·660),
20
+ y 半径再 ×0.6 压成扁椭圆——避开正中、避免近处几个词堆成一团
21
+ - 生命曲线 `OP=[0,1,0.5,0.2,0]` @ `OT=[0,0.25,0.6,0.85,1]`:**前 1/4 猛亮到满,
22
+ 中段降到半透,末段拖尾消失**——不是简单淡入淡出,中段压暗才不遮前景
23
+ - 向外散开 `drift = 0.5 + u·1.35`:远处收拢在中心、越近越往画外甩,
24
+ 和 z 轴推进叠成真透视感
25
+ - 近端糊化:`u > 0.86` 时按 `(u-0.86)` 线性加失焦——词冲到眼前会大到失控,这一层模糊是遮丑;
26
+ 真正的速度感交给按屏幕速度的方向拖尾(demo:沿 −v 方向 6 层渐虚 text-shadow 残影,比给每个词套
27
+ 全屏 SVG 滤镜便宜得多);远端前 22% 行程再加大气雾失焦
28
+ - demo 另加两层同一条隧道运动的纵深参照:10 道扁椭圆发丝环(隧道壁,近处变粗淡出)+ 56 粒尘埃画成
29
+ 沿径向拉长的光速流线(线长 = 近 2.6 帧的屏幕位移);整条隧道 `±2.5°·sin(2πt)` 极缓滚转(周期函数,首尾一致)
30
+ - 前景:demo 正中压一组静态字标(mono 眉题 + 112px 标题 + 径向暗幕),飞进字标椭圆区的词透明度压到 20%
31
+ ——演示"背景层 + 前景标题不打架"的用法;字标静止,循环仍无缝
32
+ - `CYCLES = 2` 是整数圈,demo 取 `t = frame / DURATION`(末帧的下一帧 = 第 0 帧)可无缝 loop;每词相位
33
+ `ph = i/N` 均分、spawn 全确定性;中心电光蓝光晕 `opacity = 0.82 + sin(t·4π)·0.14` 呼吸 2 次,
34
+ 钉住"隧道尽头"这个视觉锚
35
+
36
+ ## 参数表
37
+ | 参数 | 典型值 | 调节手感 |
38
+ |------|--------|----------|
39
+ | 词表 | 22 词,字号 `20 + rand·16`px(20–36;原生 64–120),700 字重 + 6 个衬线斜体词 | 词数与相位 `i/N` 绑定:<12 词画面稀,>30 词近处糊成一片;字号随机是层次感来源,全同号读作贴图 |
40
+ | 纵深行程 | z −1750 → +800px,perspective 1100(原生 ×4) | 起点更远(−2500+)词太小认不出;终点不过 0 就没有"穿过去"只有"飞到脸前停住" |
41
+ | 散开系数 | `drift = 0.5 + u·1.35` | 系数 <1 词全从正中喷出像爆炸;>2 早早飞出画外,隧道变喷泉 |
42
+ | 生命曲线 | `[0,1,0.5,0.2,0]` @ `[0,0.25,0.6,0.85,1]` | 中段那个 0.5 是给前景让位的;改成一路满亮就抢主角,改成早早归零隧道变空 |
43
+ | 循环圈数 | `CYCLES = 2`(必须整数) | 非整数 → t=1 与 t=0 不接,loop 处一跳;圈数越多单词过镜越快 |
44
+ | 近端模糊 | `u>0.86` 起线性失焦 + 速度向方向拖尾 | 阈值提到 0.95 巨大词硬边扎眼;系数 >40 末段成色斑 |
45
+ | 配色 | demo(midnight):冷白三阶 `#f2f5ff/#c3cbe2/#8a95b5` + 4 个电光蓝强调词 `#86a8ff`(只有强调词带泛光),中心光晕电光蓝 | 深底浅字发光是身份证,白底套本卡直接失效——要浅底得整套重配 |
46
+ | 中心光晕 | ~1040×720 径向渐变、呼吸 2 次/片 | 删了隧道尽头没有焦点,词像随机乱飞;呼吸频率跟 CYCLES 对齐才不打拍 |
47
+
48
+ ## 已知坑
49
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
50
+ 首次实战须以真实素材回验
51
+ - 词表替换要**保持词数与字长量级**(demo 22 词、单词 4–9 字母):相位是
52
+ `i/N` 均分的,词数一变密度整体缩放;中文词字宽是英文的两倍以上,
53
+ 换中文关键词须同步下调字号否则近处直接占满画面
54
+ - `CYCLES` 必须是整数,否则首尾不接——这是本卡"可无缝 loop"的唯一前提,
55
+ 想调过镜速度就整数加减,别改小数
56
+ - 只做背景层:中段生命曲线压到 0.5 就是为了给前景让位,把它当主角
57
+ (拉满亮度)反而读作杂乱
58
+ - 深底专用:`text-shadow` 发光 + 径向暗角是效果的一半,浅底上词会糊成
59
+ 脏点;22 个词元素全程挂在 DOM 里(不销毁重建)只改 transform/opacity,
60
+ 移植 Remotion 时保持这个结构,别改成按帧增删节点
61
+
62
+ ## 参考实现
63
+ demos/typography/flying-words/
64
+ (FlyingWords.tsx)