dsh-drawai 0.4.2 → 0.4.4

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 (379) hide show
  1. package/README.md +7 -5
  2. package/lib/client.js +142 -16
  3. package/lib/index.js +7945 -7719
  4. package/lib/motion/asset-pack.js +394 -394
  5. package/lib/motion/assets.js +291 -291
  6. package/lib/motion/demo-assets-lock.js +10 -10
  7. package/lib/motion/mgstyles/briefs/23-ink-wash.md +147 -0
  8. package/lib/motion/mgstyles/catalog.d/23-ink-wash.json +28 -0
  9. package/lib/motion/mgstyles/catalog.json +127 -14
  10. package/lib/motion/mgstyles/upstream/demos/23-ink-wash/brush.js +149 -0
  11. package/lib/motion/mgstyles/upstream/demos/23-ink-wash/film.js +202 -0
  12. package/lib/motion/mgstyles/upstream/manifest.json +28 -3
  13. package/lib/motion/mgstyles/upstream/prompts/23-ink-wash.md +59 -0
  14. package/lib/motion/mgstyles/vendor/README.md +28 -28
  15. package/lib/motion/mgstyles/vendor/modules/d3/LICENSE +13 -13
  16. package/lib/motion/mgstyles/vendor/modules/d3/dist/d3.min.js +2 -2
  17. package/lib/motion/mgstyles/vendor/modules/opentype.js/LICENSE +20 -20
  18. package/lib/motion/mgstyles/vendor/modules/opentype.js/dist/opentype.mjs +14460 -14460
  19. package/lib/motion/mgstyles/vendor/modules/simplex-noise/LICENSE +21 -21
  20. package/lib/motion/mgstyles/vendor/modules/simplex-noise/dist/esm/simplex-noise.js +465 -465
  21. package/lib/motion/mgstyles/vendor/modules/topojson-client/LICENSE +13 -13
  22. package/lib/motion/mgstyles/vendor/modules/topojson-client/dist/topojson-client.min.js +2 -2
  23. package/lib/motion/project.js +5 -1
  24. package/lib/motion/qa.js +116 -6
  25. package/lib/motion/render.js +179 -179
  26. package/lib/motion/scene-kit.js +1 -1
  27. package/lib/motion/shotcraft/upstream/SKILL.md +286 -286
  28. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -54
  29. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -200
  30. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -45
  31. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -20
  32. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -65
  33. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -151
  34. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -129
  35. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -75
  36. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -40
  37. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -11
  38. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -10
  39. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -49
  40. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -210
  41. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -423
  42. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -170
  43. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -157
  44. package/lib/motion/shotcraft/upstream/demos/README.md +120 -120
  45. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -112
  46. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -647
  47. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -316
  48. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -82
  49. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -115
  50. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -243
  51. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +388 -388
  52. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -250
  53. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -305
  54. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -246
  55. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -390
  56. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -138
  57. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -542
  58. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -315
  59. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -299
  60. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -173
  61. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -348
  62. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -366
  63. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -279
  64. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -184
  65. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -390
  66. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -155
  67. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -303
  68. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -290
  69. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -278
  70. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -307
  71. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -215
  72. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -299
  73. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -232
  74. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -290
  75. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -273
  76. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -167
  77. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -536
  78. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -164
  79. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -175
  80. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -197
  81. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -241
  82. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -279
  83. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -230
  84. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -345
  85. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -275
  86. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -229
  87. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -312
  88. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -222
  89. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -295
  90. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -329
  91. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -315
  92. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -264
  93. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -260
  94. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -263
  95. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -123
  96. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -187
  97. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -175
  98. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -305
  99. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -350
  100. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -352
  101. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -218
  102. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -297
  103. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -157
  104. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -218
  105. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -202
  106. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -265
  107. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -457
  108. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -446
  109. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -249
  110. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -278
  111. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -332
  112. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -358
  113. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -201
  114. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -200
  115. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -208
  116. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -341
  117. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -389
  118. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -293
  119. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -183
  120. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -245
  121. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -222
  122. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -223
  123. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -217
  124. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -343
  125. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -357
  126. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -187
  127. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -333
  128. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -274
  129. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -270
  130. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -430
  131. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -252
  132. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -106
  133. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -288
  134. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -362
  135. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -168
  136. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -310
  137. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -261
  138. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -459
  139. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -294
  140. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -161
  141. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -248
  142. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -359
  143. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -227
  144. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -162
  145. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -248
  146. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -186
  147. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -355
  148. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -272
  149. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -262
  150. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -217
  151. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -285
  152. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -205
  153. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -178
  154. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -147
  155. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -143
  156. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -134
  157. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -217
  158. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -198
  159. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -221
  160. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -312
  161. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -261
  162. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -121
  163. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -153
  164. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -179
  165. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -140
  166. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -309
  167. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -191
  168. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -292
  169. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -135
  170. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -124
  171. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -255
  172. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -173
  173. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -225
  174. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -141
  175. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -137
  176. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -147
  177. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -409
  178. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -280
  179. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -271
  180. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -385
  181. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -312
  182. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -303
  183. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -77
  184. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -311
  185. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -307
  186. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -349
  187. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -255
  188. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -244
  189. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -217
  190. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -652
  191. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -153
  192. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -238
  193. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -324
  194. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -354
  195. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -101
  196. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -129
  197. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -297
  198. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -57
  199. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -155
  200. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -175
  201. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -153
  202. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -146
  203. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -226
  204. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -1
  205. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -193
  206. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -121
  207. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -199
  208. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -183
  209. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -257
  210. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -382
  211. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -111
  212. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -50
  213. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -95
  214. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -41
  215. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -52
  216. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -39
  217. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -39
  218. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -57
  219. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -51
  220. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -46
  221. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -52
  222. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -43
  223. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -42
  224. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -48
  225. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -52
  226. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -45
  227. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -46
  228. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -44
  229. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -63
  230. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -54
  231. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -58
  232. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -35
  233. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -53
  234. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -42
  235. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -50
  236. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -46
  237. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -56
  238. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -49
  239. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -50
  240. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -53
  241. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -53
  242. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -55
  243. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -52
  244. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -60
  245. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -57
  246. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -51
  247. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -41
  248. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -53
  249. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -60
  250. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -55
  251. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -57
  252. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -47
  253. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -37
  254. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -54
  255. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -36
  256. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -56
  257. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -56
  258. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -40
  259. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -60
  260. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -57
  261. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -73
  262. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -87
  263. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -55
  264. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -50
  265. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -59
  266. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -38
  267. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -38
  268. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -59
  269. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -39
  270. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -61
  271. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -52
  272. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -50
  273. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -66
  274. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -43
  275. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -38
  276. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -38
  277. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -56
  278. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -44
  279. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -38
  280. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -63
  281. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -57
  282. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -63
  283. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -58
  284. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -45
  285. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -55
  286. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -49
  287. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -42
  288. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -42
  289. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -45
  290. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -48
  291. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -55
  292. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -43
  293. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -41
  294. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -42
  295. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -59
  296. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -55
  297. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -65
  298. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -42
  299. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -64
  300. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -64
  301. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -54
  302. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -91
  303. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -51
  304. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -66
  305. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -38
  306. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -66
  307. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -58
  308. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -61
  309. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -64
  310. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -45
  311. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -41
  312. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -51
  313. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -42
  314. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -63
  315. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -57
  316. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -75
  317. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -59
  318. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -67
  319. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -60
  320. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -66
  321. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -40
  322. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -45
  323. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -62
  324. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -55
  325. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -37
  326. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -55
  327. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -50
  328. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -43
  329. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -55
  330. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -51
  331. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -51
  332. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -56
  333. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -49
  334. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -57
  335. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -36
  336. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -64
  337. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -47
  338. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -170
  339. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -157
  340. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -103
  341. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -44
  342. package/lib/motion/shotcraft/upstream/template/package.json +20 -20
  343. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -6
  344. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -17
  345. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -65
  346. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -48
  347. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -24
  348. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -192
  349. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -111
  350. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -150
  351. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -158
  352. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -468
  353. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -552
  354. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -411
  355. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -200
  356. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -324
  357. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +388 -388
  358. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -4
  359. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -7
  360. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -68
  361. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -1
  362. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -24
  363. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -74
  364. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -91
  365. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -213
  366. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -15
  367. package/lib/motion/style-frames.js +306 -306
  368. package/lib/motion/sync.js +214 -214
  369. package/lib/motion-library.js +1 -1
  370. package/lib/motion-project.js +105 -105
  371. package/lib/motion-render-worker.js +174 -174
  372. package/lib/routing/router.js +222 -222
  373. package/lib/routing/vendor/README.md +96 -96
  374. package/lib/routing/vendor/libavoid-routing.js +753 -753
  375. package/lib/routing/vendor/libavoid.min.js +59 -59
  376. package/lib/svg-export.js +1344 -0
  377. package/lib/video-trace-pool.js +128 -128
  378. package/package.json +3 -2
  379. package/LICENSE +0 -4175
@@ -1,64 +1,64 @@
1
- ---
2
- name: glitch-cycle
3
- 一句话: 同一行等宽槽位循环轮播 4 条状态短语,每条头尾按概率关键帧 [1,0,0,0.1,0,0,1] 全乱码、中段偶发单字抖动,切换瞬间叠 RGB 分离与整行位移;末条概率收 0 保证收尾干净
4
- 适用: 加载/构建/部署过程的状态播报;技术型片头的"系统自述";需要机器口吻推进时间的一段垫底
5
- 时长: 约 5.6s(168f@30fps;demo 每条短语 38f,末条延续到片尾作收尾 hold)
6
- 能量: 中高(持续的高频噪声脉冲,切换点是峰值)
7
- ---
8
-
9
- ## 意图
10
- 状态播报最笨的做法是四行字逐条淡入。轮播把它们压进**一个槽位**:
11
- 短语头尾用乱码"熔断"再"凝固",中段几乎干净只偶尔抽一下——观众读到的
12
- 是"系统在一步步推进",而不是四条独立文案。乱码浓度是这卡的语法:
13
- 浓 = 正在切换,淡 = 正在这一状态里。底部进度条把四拍串成一条时间线,
14
- 最后一条把概率收到 0,落定即结束。
15
-
16
- ## 动效核心
17
- - 槽位按最长短语预建 `MAXCH` 个 span(`min-width:0.66em` 固定槽宽),
18
- 短短语左右对称填空格(行居中)——**字符不增删,只换内容**,整行永不重排
19
- - 时段等分:`slot = floor(frame / SLOT)`,短语内进度 `p = (frame - slot·SLOT)/SLOT`(demo SLOT=38f;
20
- 末条按同一 38f 走 `KF_LAST` 后保持干净直到片尾,留出 ~28f 收尾)
21
- - glitch 概率关键帧 `KF=[1,0,0,0.1,0,0,1]` 按 p 线性插值:**开头 1.0 全乱、
22
- 中段 0、约 p=0.5 处回弹到 0.1(偶发抽字)、结尾又回 1.0 熔进下一条**
23
- - 末条专用 `KF_LAST=[1,0,0,0.1,0,0,0]`,结尾概率归零 → t=1 画面干净
24
- - 逐字符判定:`rand(i·31 + bucket·17 + slot·97) < g` 才替换成字池字符,
25
- 命中字随机上强调点缀色或暗色(demo aurora:粉 / 暗紫);`bucket = floor(frame/2)`,
26
- 即每 2 帧重掷一次
27
- - 整行抖动与 RGB 分离强度全部乘 g(480 设计坐标值;demo 原生 1920、短语 104px):`jx = ±g·10`px
28
- (demo ±g·36)、`jy = ±g·4`px(demo ±g·10),`text-shadow` 左右各偏 `g·3`px(demo 粉 / 冰蓝各 g·10,
29
- g>0.04 才开)——**噪声浓度一个变量同时驱动换字、位移、色散**,所以三者永不打架;g>0.25 时同一个 g
30
- 再驱动一条水平撕裂带(行切三段、中段横移,带高每 2 帧重掷),g>0.45 时再叠 3 块像素块残影
31
- - demo 版式:上方状态行(脉冲点 + RENDERING · 工程名 · 渲染号)、槽位四角细括号、下方 1100px 进度轨
32
- 线性走满(与四拍无关地铺底,三根四拍刻度 + 发光头)+ `STEP n/4` / 百分比(tabular-nums);
33
- 末条收干净时给一次柔和泛光(只给主角一次),进度满后状态转 RENDERED、点转实心,再升起一行强调色署名(video-shotcraft 标志 + 品牌名)
34
-
35
- ## 参数表
36
- | 参数 | 典型值 | 调节手感 |
37
- |------|--------|----------|
38
- | 短语表 | 4 条,最长 17 字符(demo `LOCKING BEAT GRID`) | 每条 42f 是"读得完一个状态"的下限;5 条以上单条不足 34f 观众只看到闪 |
39
- | 概率关键帧 | `[1,0,0,0.1,0,0,1]`(6 段) | 中间那个 0.1 是"活着"的证据,删了短语中段死板;把 0 段调到 0.3+ 全片糊成故障 |
40
- | 重掷频率 | 每 2 帧(`floor(frame/2)`) | 1 帧一换糊成灰带;4 帧以上乱码看得清是"另一个词",不像噪声 |
41
- | 抖动幅度 | `x ±g·10` / `y ±g·4`px(480 坐标;1920 原生约 ×3.6) | x 大于 y 是横向撕裂的关键(等比抖动读作地震);超过 ~2 个字宽整行跳出槽位 |
42
- | RGB 分离 | 左红右青各 `g·3`px,阈值 g>0.04 | 这是"电子故障"的身份证;无阈值时中段那 0.1 的概率会让字常年带毛边 |
43
- | 槽宽字体 | SF Mono 26px(480 坐标;demo 原生 104px)、槽 `0.64–0.66em` | 等宽 + 固定槽宽是刚需;字距 3px 让乱码之间有呼吸,挤在一起读作乱码块 |
44
- | 进度条 | 150×2px(demo 原生 1100×4px),强调色渐变填充,线性 + 四拍刻度 | 唯一的线性元素,给四拍噪声一个稳定参照;删了轮播读不出"在推进" |
45
-
46
- ## 已知坑
47
- - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
48
- 首次实战须以真实素材回验
49
- - **换项目文案时四条短语字符数要接近(demo 12–17 字符)**:槽位数按最长
50
- 短语一次建好,短短语靠右填空格——如果一条只有 4 字符、另一条 30 字符,
51
- 短的那条在 30 格里孤零零居左,行宽全程被最长条撑着,节奏读作漂移
52
- - 概率关键帧是 6 段等分映射到短语内进度:短语条数变了单条时长跟着变,
53
- 但关键帧形状不变——所以条数越多,"全乱码"那两段的绝对时长越短,
54
- 切换感越弱,超过 5 条就该把首尾的 1.0 段拉宽
55
- - 末条必须用 `KF_LAST`(结尾收 0):用普通 KF 会让 t=1 停在满乱码上,
56
- 接下一镜时读作没渲染完
57
- - 深底专用:深色底 + 冷/艳色噪声是整套配色的地基(demo 用 aurora 深紫黑 + 粉 / 冰蓝分离),浅底上 RGB 分离
58
- 几乎不可见;声音也强依赖——四个切换点天然是四个节奏点,实战必须配
59
- 电子故障/开关音;
60
- 配法纪律见 sound-design.md(同类元素同音,连发交替双样本防机枪感)
61
-
62
- ## 参考实现
63
- demos/typography/glitch-cycle/
64
- (GlitchCycle.tsx)
1
+ ---
2
+ name: glitch-cycle
3
+ 一句话: 同一行等宽槽位循环轮播 4 条状态短语,每条头尾按概率关键帧 [1,0,0,0.1,0,0,1] 全乱码、中段偶发单字抖动,切换瞬间叠 RGB 分离与整行位移;末条概率收 0 保证收尾干净
4
+ 适用: 加载/构建/部署过程的状态播报;技术型片头的"系统自述";需要机器口吻推进时间的一段垫底
5
+ 时长: 约 5.6s(168f@30fps;demo 每条短语 38f,末条延续到片尾作收尾 hold)
6
+ 能量: 中高(持续的高频噪声脉冲,切换点是峰值)
7
+ ---
8
+
9
+ ## 意图
10
+ 状态播报最笨的做法是四行字逐条淡入。轮播把它们压进**一个槽位**:
11
+ 短语头尾用乱码"熔断"再"凝固",中段几乎干净只偶尔抽一下——观众读到的
12
+ 是"系统在一步步推进",而不是四条独立文案。乱码浓度是这卡的语法:
13
+ 浓 = 正在切换,淡 = 正在这一状态里。底部进度条把四拍串成一条时间线,
14
+ 最后一条把概率收到 0,落定即结束。
15
+
16
+ ## 动效核心
17
+ - 槽位按最长短语预建 `MAXCH` 个 span(`min-width:0.66em` 固定槽宽),
18
+ 短短语左右对称填空格(行居中)——**字符不增删,只换内容**,整行永不重排
19
+ - 时段等分:`slot = floor(frame / SLOT)`,短语内进度 `p = (frame - slot·SLOT)/SLOT`(demo SLOT=38f;
20
+ 末条按同一 38f 走 `KF_LAST` 后保持干净直到片尾,留出 ~28f 收尾)
21
+ - glitch 概率关键帧 `KF=[1,0,0,0.1,0,0,1]` 按 p 线性插值:**开头 1.0 全乱、
22
+ 中段 0、约 p=0.5 处回弹到 0.1(偶发抽字)、结尾又回 1.0 熔进下一条**
23
+ - 末条专用 `KF_LAST=[1,0,0,0.1,0,0,0]`,结尾概率归零 → t=1 画面干净
24
+ - 逐字符判定:`rand(i·31 + bucket·17 + slot·97) < g` 才替换成字池字符,
25
+ 命中字随机上强调点缀色或暗色(demo aurora:粉 / 暗紫);`bucket = floor(frame/2)`,
26
+ 即每 2 帧重掷一次
27
+ - 整行抖动与 RGB 分离强度全部乘 g(480 设计坐标值;demo 原生 1920、短语 104px):`jx = ±g·10`px
28
+ (demo ±g·36)、`jy = ±g·4`px(demo ±g·10),`text-shadow` 左右各偏 `g·3`px(demo 粉 / 冰蓝各 g·10,
29
+ g>0.04 才开)——**噪声浓度一个变量同时驱动换字、位移、色散**,所以三者永不打架;g>0.25 时同一个 g
30
+ 再驱动一条水平撕裂带(行切三段、中段横移,带高每 2 帧重掷),g>0.45 时再叠 3 块像素块残影
31
+ - demo 版式:上方状态行(脉冲点 + RENDERING · 工程名 · 渲染号)、槽位四角细括号、下方 1100px 进度轨
32
+ 线性走满(与四拍无关地铺底,三根四拍刻度 + 发光头)+ `STEP n/4` / 百分比(tabular-nums);
33
+ 末条收干净时给一次柔和泛光(只给主角一次),进度满后状态转 RENDERED、点转实心,再升起一行强调色署名(video-shotcraft 标志 + 品牌名)
34
+
35
+ ## 参数表
36
+ | 参数 | 典型值 | 调节手感 |
37
+ |------|--------|----------|
38
+ | 短语表 | 4 条,最长 17 字符(demo `LOCKING BEAT GRID`) | 每条 42f 是"读得完一个状态"的下限;5 条以上单条不足 34f 观众只看到闪 |
39
+ | 概率关键帧 | `[1,0,0,0.1,0,0,1]`(6 段) | 中间那个 0.1 是"活着"的证据,删了短语中段死板;把 0 段调到 0.3+ 全片糊成故障 |
40
+ | 重掷频率 | 每 2 帧(`floor(frame/2)`) | 1 帧一换糊成灰带;4 帧以上乱码看得清是"另一个词",不像噪声 |
41
+ | 抖动幅度 | `x ±g·10` / `y ±g·4`px(480 坐标;1920 原生约 ×3.6) | x 大于 y 是横向撕裂的关键(等比抖动读作地震);超过 ~2 个字宽整行跳出槽位 |
42
+ | RGB 分离 | 左红右青各 `g·3`px,阈值 g>0.04 | 这是"电子故障"的身份证;无阈值时中段那 0.1 的概率会让字常年带毛边 |
43
+ | 槽宽字体 | SF Mono 26px(480 坐标;demo 原生 104px)、槽 `0.64–0.66em` | 等宽 + 固定槽宽是刚需;字距 3px 让乱码之间有呼吸,挤在一起读作乱码块 |
44
+ | 进度条 | 150×2px(demo 原生 1100×4px),强调色渐变填充,线性 + 四拍刻度 | 唯一的线性元素,给四拍噪声一个稳定参照;删了轮播读不出"在推进" |
45
+
46
+ ## 已知坑
47
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
48
+ 首次实战须以真实素材回验
49
+ - **换项目文案时四条短语字符数要接近(demo 12–17 字符)**:槽位数按最长
50
+ 短语一次建好,短短语靠右填空格——如果一条只有 4 字符、另一条 30 字符,
51
+ 短的那条在 30 格里孤零零居左,行宽全程被最长条撑着,节奏读作漂移
52
+ - 概率关键帧是 6 段等分映射到短语内进度:短语条数变了单条时长跟着变,
53
+ 但关键帧形状不变——所以条数越多,"全乱码"那两段的绝对时长越短,
54
+ 切换感越弱,超过 5 条就该把首尾的 1.0 段拉宽
55
+ - 末条必须用 `KF_LAST`(结尾收 0):用普通 KF 会让 t=1 停在满乱码上,
56
+ 接下一镜时读作没渲染完
57
+ - 深底专用:深色底 + 冷/艳色噪声是整套配色的地基(demo 用 aurora 深紫黑 + 粉 / 冰蓝分离),浅底上 RGB 分离
58
+ 几乎不可见;声音也强依赖——四个切换点天然是四个节奏点,实战必须配
59
+ 电子故障/开关音;
60
+ 配法纪律见 sound-design.md(同类元素同音,连发交替双样本防机枪感)
61
+
62
+ ## 参考实现
63
+ demos/typography/glitch-cycle/
64
+ (GlitchCycle.tsx)
@@ -1,54 +1,54 @@
1
- ---
2
- name: gradient-word-sweep
3
- 一句话: 黑底标语里关键词被渐变彩光从左到右快速扫过"充能"——波前字符辉光最强向后衰减,填满后字符间勾连细紫红闪电、整词稳态泛光呼吸
4
- 适用: 标语里给单个动词/卖点词充能(Supercharged/faster/AI…);能量高潮段的文字戏;黑场品牌片的口号帧
5
- 时长: 扫充 ~15–20f(要快)+ 稳态闪电呼吸 1–2s;全段 2.5–3.5s
6
- 能量: 高(一词爆点,前后都该让位)
7
- 标签: effects
8
- ---
9
-
10
- ## 意图
11
- 整句白字里只有关键词被"通电":渐变彩光从左到右快速扫过字符,
12
- 像能量注入——扫过的瞬间最亮(波前尾迹),随后衰减到稳态;
13
- 填满后字符之间跳起勾连的细闪电,词保持泛光呼吸。三个命门:
14
- **快**(扫充 15–20f,慢了读作进度条)、**波前最亮**(刚点亮的
15
- 字符效果最强,没有这个梯度就是静态渐变裁切)、**辉光克制**
16
- (AE 式多层泛光但别糊成一团,闪电细而稀疏才是点缀)。
17
-
18
- ## 动效核心
19
- - 渐变填充:关键词做双层文字(白/渐变彩),彩层用从左到右推进的
20
- mask 揭开;斜切 mask 边缘略糊(~8% 词宽)
21
- - 波前尾迹增亮:跟随 mask 前沿一条 ~34% 词宽的增亮带,波前处
22
- 辉光最强、向后衰减;填充结束后 ~10f 淡出到稳态
23
- - 辉光:4 层泛光(环境大柔光+中晕+近核+亮核),稳态 opacity
24
- 0.55–0.72 档(实测:0.75–0.95 档被裁"泛光感有点强")
25
- - 闪电:填满后字符间勾连细闪电,紫红系三层描边(外晕 6/中 2.4/
26
- 亮核 1.4),mulberry32 种子随机跳位闪烁,稀疏零星(不是持续电弧)
27
- - 禁:填充过程不带跟随移动的光点/星光(实测判例:跟随白色光点读作廉价装饰,删)
28
- - 带模糊的辉光层不能直接用文字盒做 mask/clip:模糊溢出盒外会被切成矩形"方框光"——
29
- demo 把这些层放进四周外扩 90px 的盒子,mask 色标用 `calc(PAD + (100% − 2·PAD)·x)` 换算回文字坐标
30
- - demo 时长 `GRADIENT_WORD_SWEEP_DURATION = 105`(3.5s):入场两行错峰 blur-slide,
31
- 12→30f 扫充,33f 起 7 次排期闪电(末次 ~92f 熄灭),整段极缓推近 1→1.025
32
-
33
- ## 参数表
34
- | 参数 | 典型值 | 调节手感 |
35
- |------|--------|----------|
36
- | 扫充时长 | 15–20f | 原片"速度很快";>28f 读作进度条 |
37
- | 波前增亮带 | ~34% 词宽,波前最亮向后衰减 | 无梯度=静态渐变;带太宽=整词一起亮没有"注入"感 |
38
- | 稳态泛光 | 4 层 opacity 0.55/0.55/0.62/0.72 | 0.75+ 档被裁太强;辉光层数<3 读作纯色 |
39
- | 闪电线宽 | 外 6/中 2.4/核 1.4 @1080p | 加倍即被裁"粗";颜色偏紫红(magenta 216,60,190 系) |
40
- | 闪电频率 | 稀疏零星(同屏 ≤2 道,间歇 >8f;demo 排期 7 次、同屏 1 道、间隔 ≥4–11f) | 频率高读作电弧故障 |
41
-
42
- ## 已知坑
43
- - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
44
- 首次实战须以真实素材回验
45
- - 判例三条(用户逐字意见沉淀):①填充过程禁跟随光点;②闪电
46
- 必须紫红+细;③泛光宁弱勿强,波前梯度补足冲击力
47
- - 与 type-rhythm-sync 分工:那张是节拍;
48
- 本卡是单词"充能"的能量语义,词必须是句中卖点词
49
- - 关键词外的正文保持纯白静止——全句都动就没有"只有它通电"的戏
50
-
51
- ## 参考实现
52
- demos/typography/gradient-word-sweep/
53
- (GradientWordSweep.tsx)
54
- 原片出处:clickup-30.mp4
1
+ ---
2
+ name: gradient-word-sweep
3
+ 一句话: 黑底标语里关键词被渐变彩光从左到右快速扫过"充能"——波前字符辉光最强向后衰减,填满后字符间勾连细紫红闪电、整词稳态泛光呼吸
4
+ 适用: 标语里给单个动词/卖点词充能(Supercharged/faster/AI…);能量高潮段的文字戏;黑场品牌片的口号帧
5
+ 时长: 扫充 ~15–20f(要快)+ 稳态闪电呼吸 1–2s;全段 2.5–3.5s
6
+ 能量: 高(一词爆点,前后都该让位)
7
+ 标签: effects
8
+ ---
9
+
10
+ ## 意图
11
+ 整句白字里只有关键词被"通电":渐变彩光从左到右快速扫过字符,
12
+ 像能量注入——扫过的瞬间最亮(波前尾迹),随后衰减到稳态;
13
+ 填满后字符之间跳起勾连的细闪电,词保持泛光呼吸。三个命门:
14
+ **快**(扫充 15–20f,慢了读作进度条)、**波前最亮**(刚点亮的
15
+ 字符效果最强,没有这个梯度就是静态渐变裁切)、**辉光克制**
16
+ (AE 式多层泛光但别糊成一团,闪电细而稀疏才是点缀)。
17
+
18
+ ## 动效核心
19
+ - 渐变填充:关键词做双层文字(白/渐变彩),彩层用从左到右推进的
20
+ mask 揭开;斜切 mask 边缘略糊(~8% 词宽)
21
+ - 波前尾迹增亮:跟随 mask 前沿一条 ~34% 词宽的增亮带,波前处
22
+ 辉光最强、向后衰减;填充结束后 ~10f 淡出到稳态
23
+ - 辉光:4 层泛光(环境大柔光+中晕+近核+亮核),稳态 opacity
24
+ 0.55–0.72 档(实测:0.75–0.95 档被裁"泛光感有点强")
25
+ - 闪电:填满后字符间勾连细闪电,紫红系三层描边(外晕 6/中 2.4/
26
+ 亮核 1.4),mulberry32 种子随机跳位闪烁,稀疏零星(不是持续电弧)
27
+ - 禁:填充过程不带跟随移动的光点/星光(实测判例:跟随白色光点读作廉价装饰,删)
28
+ - 带模糊的辉光层不能直接用文字盒做 mask/clip:模糊溢出盒外会被切成矩形"方框光"——
29
+ demo 把这些层放进四周外扩 90px 的盒子,mask 色标用 `calc(PAD + (100% − 2·PAD)·x)` 换算回文字坐标
30
+ - demo 时长 `GRADIENT_WORD_SWEEP_DURATION = 105`(3.5s):入场两行错峰 blur-slide,
31
+ 12→30f 扫充,33f 起 7 次排期闪电(末次 ~92f 熄灭),整段极缓推近 1→1.025
32
+
33
+ ## 参数表
34
+ | 参数 | 典型值 | 调节手感 |
35
+ |------|--------|----------|
36
+ | 扫充时长 | 15–20f | 原片"速度很快";>28f 读作进度条 |
37
+ | 波前增亮带 | ~34% 词宽,波前最亮向后衰减 | 无梯度=静态渐变;带太宽=整词一起亮没有"注入"感 |
38
+ | 稳态泛光 | 4 层 opacity 0.55/0.55/0.62/0.72 | 0.75+ 档被裁太强;辉光层数<3 读作纯色 |
39
+ | 闪电线宽 | 外 6/中 2.4/核 1.4 @1080p | 加倍即被裁"粗";颜色偏紫红(magenta 216,60,190 系) |
40
+ | 闪电频率 | 稀疏零星(同屏 ≤2 道,间歇 >8f;demo 排期 7 次、同屏 1 道、间隔 ≥4–11f) | 频率高读作电弧故障 |
41
+
42
+ ## 已知坑
43
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
44
+ 首次实战须以真实素材回验
45
+ - 判例三条(用户逐字意见沉淀):①填充过程禁跟随光点;②闪电
46
+ 必须紫红+细;③泛光宁弱勿强,波前梯度补足冲击力
47
+ - 与 type-rhythm-sync 分工:那张是节拍;
48
+ 本卡是单词"充能"的能量语义,词必须是句中卖点词
49
+ - 关键词外的正文保持纯白静止——全句都动就没有"只有它通电"的戏
50
+
51
+ ## 参考实现
52
+ demos/typography/gradient-word-sweep/
53
+ (GradientWordSweep.tsx)
54
+ 原片出处:clickup-30.mp4
@@ -1,91 +1,91 @@
1
- ---
2
- name: lead-word-zoom-assemble
3
- 一句话: 首词以 2.3 倍字号占据画面中央、hold 期间继续推近 6%,随后一条曲线同时完成「缩回终字号」与「整行左滑归位」,后续词各自从槽位右侧 0.5em 被推进来;支点横向钉首词中心、纵向钉基线(挂载时实测),整行上移的同一时窗副行浮出,停一拍后整幕 crash-zoom 推近失焦交棒
4
- 适用: 品牌名/产品名的 Introducing 字卡;发布会式开场第二镜;一句话主张需要"先让一个词占满画面、再把整句补齐"的场合
5
- 时长: 约 2.8s(84f@30fps;组句 f36 完成、上移与副行 f32–46、静止 26f、末 12f crash)
6
- 能量: 中高(起手就是满画面的大字,但全程只有一次运动,没有二次冲击)
7
- 标签: opening
8
- ---
9
-
10
- ## 意图
11
- 字卡最容易犯的错是"整句一起淡入"——观众同时收到 5 个词,一个都没记住。这张卡把
12
- 阅读顺序做成**物理顺序**:先只给一个词,而且大到占满画面、还在继续朝观众推近,观众
13
- 被迫先读它;然后这个词退回自己在句子里的尺寸和位置,整句围绕它长出来。落定时观众
14
- 已经读过两遍主词。
15
-
16
- 真正的手感命门不是缩放曲线,而是**支点**。首词从"画面正中"走到"行内第三个字符的
17
- 位置",如果支点取行盒中心,缩放和左滑会各自把字往两边拽,末尾几帧基线抖得肉眼可见。
18
- 把 `transform-origin` 横向钉在首词中心、纵向钉在基线,这两点全程不动,整行就只是
19
- "收小",没有任何漂移。
20
-
21
- ## 动效核心
22
- - **两段缩放叠加成一条 scale**:
23
- `scale = interpolate(f, [0,12], [2.3, 2.3·1.06], PUSH_EASE)
24
- + interpolate(f, [12,24], [0, 1-2.3·1.06], ZOOM_EASE)`。
25
- 第一段是 hold 期间的推近(`cubic-bezier(.25,1,.5,1)`,减速后挂在峰值),第二段是缩回
26
- (从峰值一路减到终字号 1)。写成相加而不是分段判断,两段之间没有速度断点
27
- - **缩回与左滑共用 ZOOM_EASE**(`cubic-bezier(.5,0,.05,1)`,重 ease-in-out、零回弹):
28
- `translate = interpolate(f, [12,36], [slideDistance, 0], ZOOM_EASE)`。两个动作必须读作
29
- **一次**运动;各走各的曲线时会读成"先缩小、再滑走"两拍
30
- - **偏心距怎么来**:`slideDistance = lineWidth · (0.5 - leadRatio)`,`leadRatio` =
31
- 首词中心在整行里的占比。首词要停在画面正中,整行就得先向右偏这么多
32
- - **支点实测**:挂载时 `delayRender` 挂起渲染,量三个值——整行 `offsetWidth`、
33
- 首词 `offsetLeft + offsetWidth/2`、基线。基线用一个**零尺寸 inline-block 尺子**读出
34
- (`<span style={{display:'inline-block',width:0,height:0}}>` 的 `offsetTop` 就是基线),
35
- 比 `lineHeight × 0.8` 之类的估算准得多。量到之后 `continueRender`,`transform-origin`
36
- 写成 `${leadRatio*100}% ${baseline}px`
37
- - **后续词是被推进来的,不是淡进来的**:第 i 词(i≥1)在
38
- `pushStart = 12 + 6 + (i-1)·4` 起,`translate` 从 `0.5em → 0`
39
- (`cubic-bezier(.22,.8,.36,1)`,起步快、落地长),透明度只用 2f 淡完。淡入必须极短,
40
- 否则词会"浮现"而不是"被塞进槽位"
41
- - **词间空格必须放在 inline-block 之外**。跟在词 span 内部尾随时会被行盒裁掉,
42
- 落定后所有词黏成一团(上游原组件的 bug,这里已修)
43
- - **场景层的三拍收尾**:f32–46 整行 `translateY 0→−56px`(outCubic),副行在**同一时窗**
44
- 淡入 + 上移 16px——上移让出的空间当帧被副行填掉,没有空当;f46–72 完全静止 26f;
45
- f72–83 整幕 `scale 1→1.2` + `blur 0→9px` + `opacity 1→0.45`(ease-in-quad),推近失焦
46
- 交棒下一镜
47
- - **质感(demo)**:首词入场 6f 内带 8px→0 失焦;缩回段按 scale 速度给瞬时失焦(≤3.5px,停稳归零);
48
- 底为靛蓝主光 + 一抹暖色余光的低对比 mesh + 颗粒 + 暗角
49
- - **强调词**:精确匹配某个词换强调色(demo 里是品牌名 `video-shotcraft`)。品牌词推入落位那一下自带
50
- 高亮,不用再加第二个动作
51
-
52
- ## 参数表
53
- | 参数 | 典型值 | 调节手感 |
54
- |------|--------|----------|
55
- | 首词起手倍数 | initialScale 2.3 | 2.3 让首词横向溢出画面一点点(读作"太大了装不下");<1.8 只是"稍大的字",冲击消失 |
56
- | 推近 | pushScale 1.06,占满 hold 12f | 6% 是"还在朝观众来"的最小可感量;>1.15 会在缩回时读作反向弹跳 |
57
- | hold | 12f | 首词独占画面的时长;<8f 观众读不完一个长单词,>20f 整句节奏塌 |
58
- | 缩回 | 12f,ZOOM_EASE | 与左滑同曲线;单独给缩回一条更快的曲线会让整行"先缩完再滑",断成两拍 |
59
- | 左滑 | assembleDuration 24f | 比缩回长一倍:字号已经落定、位置还在走,这段"滑行尾巴"是电影感的来源 |
60
- | 后续词延迟 | wordDelay 6f(缩回起点之后) | 首词开始缩回才放后续词;同帧放会挤在一起看不清谁在动 |
61
- | 词间错峰 | wordStagger 4f | 4f 读作"依次被推进";0 则整段后缀一起进,回到"整句淡入" |
62
- | 单词推入 | wordDuration 12f,wordPush 0.5em | 0.5em 是"刚从槽位外面";>1em 会读作从画外飞入,与首词的收束方向打架 |
63
- | 词淡入 | wordFade 2f | 刻意极短。>6f 词会读作"浮现",推入的力学感消失 |
64
- | 字号/字重/字距 | 96px / 600 / −0.03em | 负字距在放大 2.3 倍时才不会散架;正字距的大字会读作"标语横幅" |
65
- | 上移 + 副行 | f34–50,−56px,副行同窗 | 两件事必须同窗:先上移再出副行会多出一个空当拍 |
66
- | 静止 | 22f | 落定后的可读时间,低于 15f 观众来不及读副行 |
67
- | crash | 末 12f,scale→1.2,blur→9px | 这是转场的**前半**,动机要和下一镜的第一帧对上;单独播时看起来像"没结束"是正常的 |
68
-
69
- ## 已知坑
70
- - **支点错了就抖基线**。`transform-origin` 必须是「首词中心 % + 基线 px」这一对。
71
- 取行盒中心(默认 `50% 50%`)时缩放与左滑互相拉扯,末尾几帧基线肉眼可见地跳
72
- - 基线别估算。`lineHeight × 0.8` 这类经验值在不同字体上差几像素,放大 2.3 倍后就是
73
- 十几像素的抖动。零尺寸 inline-block 尺子的 `offsetTop` 是唯一可靠的读法
74
- - `delayRender` 期间整行 `opacity: 0`——**必须**如此。否则未量到支点的第一帧会闪一下
75
- 错位的大字,成片里就是一帧脏帧
76
- - 布局是挂载时实测的,所以**结果随渲染环境的字体而变**:跨平台字体回退不同时整行宽度
77
- 会整体漂移(首词占比也跟着变)。介意的话把量到的三个值写死成常量
78
- - `scale` / `translate` 用的是独立 CSS 属性(不是 `transform` 简写)。混用会让其中一个
79
- 被覆盖;要合并成 `transform` 就必须自己保证 `translate → scale` 的顺序
80
- - 词间空格放进词 span 内部会被行盒裁掉(见上)。这个 bug 在小字号下不明显,96px 时
81
- 所有词会明显黏连
82
- - 首词必须是**短词**。"Introducing" 这类 10 字符左右刚好;首词超过 14 字符时 2.3 倍
83
- 放大会溢出画面两侧,观众读不到词尾
84
- - 强调色只给一个词。两个词都上色时观众不知道该记哪个,而且推入落位的高亮变成了
85
- "彩色标题",动作的意义被抹掉
86
- - 末段 crash 是转场的前半式,不是收尾。单独当片尾用会显得"断了"——要收尾就把
87
- crash 换成静止 hold 或淡出
88
-
89
- ## 参考实现
90
- demos/typography/lead-word-zoom-assemble/
91
- (LeadWordZoomAssemble.tsx)
1
+ ---
2
+ name: lead-word-zoom-assemble
3
+ 一句话: 首词以 2.3 倍字号占据画面中央、hold 期间继续推近 6%,随后一条曲线同时完成「缩回终字号」与「整行左滑归位」,后续词各自从槽位右侧 0.5em 被推进来;支点横向钉首词中心、纵向钉基线(挂载时实测),整行上移的同一时窗副行浮出,停一拍后整幕 crash-zoom 推近失焦交棒
4
+ 适用: 品牌名/产品名的 Introducing 字卡;发布会式开场第二镜;一句话主张需要"先让一个词占满画面、再把整句补齐"的场合
5
+ 时长: 约 2.8s(84f@30fps;组句 f36 完成、上移与副行 f32–46、静止 26f、末 12f crash)
6
+ 能量: 中高(起手就是满画面的大字,但全程只有一次运动,没有二次冲击)
7
+ 标签: opening
8
+ ---
9
+
10
+ ## 意图
11
+ 字卡最容易犯的错是"整句一起淡入"——观众同时收到 5 个词,一个都没记住。这张卡把
12
+ 阅读顺序做成**物理顺序**:先只给一个词,而且大到占满画面、还在继续朝观众推近,观众
13
+ 被迫先读它;然后这个词退回自己在句子里的尺寸和位置,整句围绕它长出来。落定时观众
14
+ 已经读过两遍主词。
15
+
16
+ 真正的手感命门不是缩放曲线,而是**支点**。首词从"画面正中"走到"行内第三个字符的
17
+ 位置",如果支点取行盒中心,缩放和左滑会各自把字往两边拽,末尾几帧基线抖得肉眼可见。
18
+ 把 `transform-origin` 横向钉在首词中心、纵向钉在基线,这两点全程不动,整行就只是
19
+ "收小",没有任何漂移。
20
+
21
+ ## 动效核心
22
+ - **两段缩放叠加成一条 scale**:
23
+ `scale = interpolate(f, [0,12], [2.3, 2.3·1.06], PUSH_EASE)
24
+ + interpolate(f, [12,24], [0, 1-2.3·1.06], ZOOM_EASE)`。
25
+ 第一段是 hold 期间的推近(`cubic-bezier(.25,1,.5,1)`,减速后挂在峰值),第二段是缩回
26
+ (从峰值一路减到终字号 1)。写成相加而不是分段判断,两段之间没有速度断点
27
+ - **缩回与左滑共用 ZOOM_EASE**(`cubic-bezier(.5,0,.05,1)`,重 ease-in-out、零回弹):
28
+ `translate = interpolate(f, [12,36], [slideDistance, 0], ZOOM_EASE)`。两个动作必须读作
29
+ **一次**运动;各走各的曲线时会读成"先缩小、再滑走"两拍
30
+ - **偏心距怎么来**:`slideDistance = lineWidth · (0.5 - leadRatio)`,`leadRatio` =
31
+ 首词中心在整行里的占比。首词要停在画面正中,整行就得先向右偏这么多
32
+ - **支点实测**:挂载时 `delayRender` 挂起渲染,量三个值——整行 `offsetWidth`、
33
+ 首词 `offsetLeft + offsetWidth/2`、基线。基线用一个**零尺寸 inline-block 尺子**读出
34
+ (`<span style={{display:'inline-block',width:0,height:0}}>` 的 `offsetTop` 就是基线),
35
+ 比 `lineHeight × 0.8` 之类的估算准得多。量到之后 `continueRender`,`transform-origin`
36
+ 写成 `${leadRatio*100}% ${baseline}px`
37
+ - **后续词是被推进来的,不是淡进来的**:第 i 词(i≥1)在
38
+ `pushStart = 12 + 6 + (i-1)·4` 起,`translate` 从 `0.5em → 0`
39
+ (`cubic-bezier(.22,.8,.36,1)`,起步快、落地长),透明度只用 2f 淡完。淡入必须极短,
40
+ 否则词会"浮现"而不是"被塞进槽位"
41
+ - **词间空格必须放在 inline-block 之外**。跟在词 span 内部尾随时会被行盒裁掉,
42
+ 落定后所有词黏成一团(上游原组件的 bug,这里已修)
43
+ - **场景层的三拍收尾**:f32–46 整行 `translateY 0→−56px`(outCubic),副行在**同一时窗**
44
+ 淡入 + 上移 16px——上移让出的空间当帧被副行填掉,没有空当;f46–72 完全静止 26f;
45
+ f72–83 整幕 `scale 1→1.2` + `blur 0→9px` + `opacity 1→0.45`(ease-in-quad),推近失焦
46
+ 交棒下一镜
47
+ - **质感(demo)**:首词入场 6f 内带 8px→0 失焦;缩回段按 scale 速度给瞬时失焦(≤3.5px,停稳归零);
48
+ 底为靛蓝主光 + 一抹暖色余光的低对比 mesh + 颗粒 + 暗角
49
+ - **强调词**:精确匹配某个词换强调色(demo 里是品牌名 `video-shotcraft`)。品牌词推入落位那一下自带
50
+ 高亮,不用再加第二个动作
51
+
52
+ ## 参数表
53
+ | 参数 | 典型值 | 调节手感 |
54
+ |------|--------|----------|
55
+ | 首词起手倍数 | initialScale 2.3 | 2.3 让首词横向溢出画面一点点(读作"太大了装不下");<1.8 只是"稍大的字",冲击消失 |
56
+ | 推近 | pushScale 1.06,占满 hold 12f | 6% 是"还在朝观众来"的最小可感量;>1.15 会在缩回时读作反向弹跳 |
57
+ | hold | 12f | 首词独占画面的时长;<8f 观众读不完一个长单词,>20f 整句节奏塌 |
58
+ | 缩回 | 12f,ZOOM_EASE | 与左滑同曲线;单独给缩回一条更快的曲线会让整行"先缩完再滑",断成两拍 |
59
+ | 左滑 | assembleDuration 24f | 比缩回长一倍:字号已经落定、位置还在走,这段"滑行尾巴"是电影感的来源 |
60
+ | 后续词延迟 | wordDelay 6f(缩回起点之后) | 首词开始缩回才放后续词;同帧放会挤在一起看不清谁在动 |
61
+ | 词间错峰 | wordStagger 4f | 4f 读作"依次被推进";0 则整段后缀一起进,回到"整句淡入" |
62
+ | 单词推入 | wordDuration 12f,wordPush 0.5em | 0.5em 是"刚从槽位外面";>1em 会读作从画外飞入,与首词的收束方向打架 |
63
+ | 词淡入 | wordFade 2f | 刻意极短。>6f 词会读作"浮现",推入的力学感消失 |
64
+ | 字号/字重/字距 | 96px / 600 / −0.03em | 负字距在放大 2.3 倍时才不会散架;正字距的大字会读作"标语横幅" |
65
+ | 上移 + 副行 | f34–50,−56px,副行同窗 | 两件事必须同窗:先上移再出副行会多出一个空当拍 |
66
+ | 静止 | 22f | 落定后的可读时间,低于 15f 观众来不及读副行 |
67
+ | crash | 末 12f,scale→1.2,blur→9px | 这是转场的**前半**,动机要和下一镜的第一帧对上;单独播时看起来像"没结束"是正常的 |
68
+
69
+ ## 已知坑
70
+ - **支点错了就抖基线**。`transform-origin` 必须是「首词中心 % + 基线 px」这一对。
71
+ 取行盒中心(默认 `50% 50%`)时缩放与左滑互相拉扯,末尾几帧基线肉眼可见地跳
72
+ - 基线别估算。`lineHeight × 0.8` 这类经验值在不同字体上差几像素,放大 2.3 倍后就是
73
+ 十几像素的抖动。零尺寸 inline-block 尺子的 `offsetTop` 是唯一可靠的读法
74
+ - `delayRender` 期间整行 `opacity: 0`——**必须**如此。否则未量到支点的第一帧会闪一下
75
+ 错位的大字,成片里就是一帧脏帧
76
+ - 布局是挂载时实测的,所以**结果随渲染环境的字体而变**:跨平台字体回退不同时整行宽度
77
+ 会整体漂移(首词占比也跟着变)。介意的话把量到的三个值写死成常量
78
+ - `scale` / `translate` 用的是独立 CSS 属性(不是 `transform` 简写)。混用会让其中一个
79
+ 被覆盖;要合并成 `transform` 就必须自己保证 `translate → scale` 的顺序
80
+ - 词间空格放进词 span 内部会被行盒裁掉(见上)。这个 bug 在小字号下不明显,96px 时
81
+ 所有词会明显黏连
82
+ - 首词必须是**短词**。"Introducing" 这类 10 字符左右刚好;首词超过 14 字符时 2.3 倍
83
+ 放大会溢出画面两侧,观众读不到词尾
84
+ - 强调色只给一个词。两个词都上色时观众不知道该记哪个,而且推入落位的高亮变成了
85
+ "彩色标题",动作的意义被抹掉
86
+ - 末段 crash 是转场的前半式,不是收尾。单独当片尾用会显得"断了"——要收尾就把
87
+ crash 换成静止 hold 或淡出
88
+
89
+ ## 参考实现
90
+ demos/typography/lead-word-zoom-assemble/
91
+ (LeadWordZoomAssemble.tsx)
@@ -1,51 +1,51 @@
1
- ---
2
- name: marker-underline-title
3
- 一句话: 大标题落定后,关键词下方马克笔下划线从左到右快速描画——变宽笔形、毛糙边缘、微上斜跟随斜体字势,贴着字底
4
- 适用: 标题里强调单个关键词(new/free/AI…);手写感/人味的品牌调性;正文标注式强调
5
- 时长: 标题落定 +4~8f 后起笔,划线 8–12f,总 1–1.5s
6
- 能量: 低(一笔点睛,不抢标题的戏)
7
- ---
8
-
9
- ## 意图
10
- 打印体标题里突然出现一笔手绘马克笔,用材质反差把一个词从
11
- 排版里拎出来——像人拿笔在海报上圈重点。命门有三:**快**
12
- (8–12f 一笔呵成,慢了读作加载条)、**近**(贴着字底,离远了
13
- 读作分隔线不是强调)、**跟字势**(斜体词的划线必须左低右高
14
- 微上斜——斜向画反是最容易犯且一眼假的错,判例见已知坑)。
15
-
16
- ## 动效核心
17
- - SVG path 描画(strokeDashoffset 或裁剪窗),从左到右 8–12f,
18
- ease-out 微收尾(起笔快收笔略缓=手劲)
19
- - 笔形:路径变宽(中段最宽)、边缘毛糙(轻微噪声扰动/粗糙笔刷
20
- 贴图),首尾略细=起笔收笔
21
- - 位置:贴字底(bottom 偏移 ≈ -0.1em),中轴微上斜跟随斜体字势
22
- - 时机:标题完全落定后 +4~8f 起笔——划线是"看完标题后的强调",
23
- 与标题同动就抢戏
24
- - 质感(demo):笔画过一道确定性干笔滤镜——低频 feTurbulence 位移(1.8px)做毛糙边、
25
- 沿笔向拉长的高频噪声阈值做细碎飞白;墨色暖调近黑 multiply 进纸面
26
- - demo 导出 `MARKER_UNDERLINE_TITLE_DURATION = 75`:标题两行错峰 22f 落定 → f32–42 划线 → 静止 33f
27
-
28
- ## 参数表
29
- | 参数 | 典型值 | 调节手感 |
30
- |------|--------|----------|
31
- | 划线时长 | 10f(原片实测节奏;14f 版被裁偏慢) | >14f 读作进度条;<6f 看不见笔迹方向 |
32
- | 字底距离 | ≈-0.1em(从 -40 收到 -20@1080p 才贴住字势) | 离远读作分隔线;碰到字底降部又乱 |
33
- | 斜向 | 左低右高微上斜(跟斜体) | **画反(左高右低)一眼假**——返工判例 |
34
- | 笔宽 | 中段 ~0.12em,首尾 ~0.6x | 等宽读作机器线;差异>2x 读作书法 |
35
- | 毛糙度 | 边缘轻噪声 | 太糙读作故障;全平滑读作 CSS border |
36
-
37
- ## 已知坑
38
- - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
39
- 首次实战须以真实素材回验
40
- - 与 draw-svg-trace 撞领域(有意单列为两卡):那张是通用
41
- SVG 描画(图标/插画/任意线稿);本卡专做**文字强调**的马克笔
42
- 质感(变宽+毛糙+跟字势),做图形描画去用那张
43
- - 斜向判例:v1 左高右低被比对环节抓出——划线斜向必须跟字势,
44
- 正体字则水平微抖
45
- - 残余差距:原片(notion-ai)笔头飞白颗粒感更细碎,实战可加
46
- 更细的笔刷噪点
47
-
48
- ## 参考实现
49
- demos/typography/marker-underline-title/
50
- (MarkerUnderlineTitle.tsx)
51
- 原片出处:notion-ai.mp4
1
+ ---
2
+ name: marker-underline-title
3
+ 一句话: 大标题落定后,关键词下方马克笔下划线从左到右快速描画——变宽笔形、毛糙边缘、微上斜跟随斜体字势,贴着字底
4
+ 适用: 标题里强调单个关键词(new/free/AI…);手写感/人味的品牌调性;正文标注式强调
5
+ 时长: 标题落定 +4~8f 后起笔,划线 8–12f,总 1–1.5s
6
+ 能量: 低(一笔点睛,不抢标题的戏)
7
+ ---
8
+
9
+ ## 意图
10
+ 打印体标题里突然出现一笔手绘马克笔,用材质反差把一个词从
11
+ 排版里拎出来——像人拿笔在海报上圈重点。命门有三:**快**
12
+ (8–12f 一笔呵成,慢了读作加载条)、**近**(贴着字底,离远了
13
+ 读作分隔线不是强调)、**跟字势**(斜体词的划线必须左低右高
14
+ 微上斜——斜向画反是最容易犯且一眼假的错,判例见已知坑)。
15
+
16
+ ## 动效核心
17
+ - SVG path 描画(strokeDashoffset 或裁剪窗),从左到右 8–12f,
18
+ ease-out 微收尾(起笔快收笔略缓=手劲)
19
+ - 笔形:路径变宽(中段最宽)、边缘毛糙(轻微噪声扰动/粗糙笔刷
20
+ 贴图),首尾略细=起笔收笔
21
+ - 位置:贴字底(bottom 偏移 ≈ -0.1em),中轴微上斜跟随斜体字势
22
+ - 时机:标题完全落定后 +4~8f 起笔——划线是"看完标题后的强调",
23
+ 与标题同动就抢戏
24
+ - 质感(demo):笔画过一道确定性干笔滤镜——低频 feTurbulence 位移(1.8px)做毛糙边、
25
+ 沿笔向拉长的高频噪声阈值做细碎飞白;墨色暖调近黑 multiply 进纸面
26
+ - demo 导出 `MARKER_UNDERLINE_TITLE_DURATION = 75`:标题两行错峰 22f 落定 → f32–42 划线 → 静止 33f
27
+
28
+ ## 参数表
29
+ | 参数 | 典型值 | 调节手感 |
30
+ |------|--------|----------|
31
+ | 划线时长 | 10f(原片实测节奏;14f 版被裁偏慢) | >14f 读作进度条;<6f 看不见笔迹方向 |
32
+ | 字底距离 | ≈-0.1em(从 -40 收到 -20@1080p 才贴住字势) | 离远读作分隔线;碰到字底降部又乱 |
33
+ | 斜向 | 左低右高微上斜(跟斜体) | **画反(左高右低)一眼假**——返工判例 |
34
+ | 笔宽 | 中段 ~0.12em,首尾 ~0.6x | 等宽读作机器线;差异>2x 读作书法 |
35
+ | 毛糙度 | 边缘轻噪声 | 太糙读作故障;全平滑读作 CSS border |
36
+
37
+ ## 已知坑
38
+ - demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,
39
+ 首次实战须以真实素材回验
40
+ - 与 draw-svg-trace 撞领域(有意单列为两卡):那张是通用
41
+ SVG 描画(图标/插画/任意线稿);本卡专做**文字强调**的马克笔
42
+ 质感(变宽+毛糙+跟字势),做图形描画去用那张
43
+ - 斜向判例:v1 左高右低被比对环节抓出——划线斜向必须跟字势,
44
+ 正体字则水平微抖
45
+ - 残余差距:原片(notion-ai)笔头飞白颗粒感更细碎,实战可加
46
+ 更细的笔刷噪点
47
+
48
+ ## 参考实现
49
+ demos/typography/marker-underline-title/
50
+ (MarkerUnderlineTitle.tsx)
51
+ 原片出处:notion-ai.mp4