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,210 +1,210 @@
1
- // capture-template.mjs — 把真实产品页面变成宣传片素材的三件套采集脚本模板
2
- // 通用页面截图管线模板:BASE/输出目录/路由/选择器全部提升为 CONFIG
3
- //
4
- // 产出三件套(宣传片 3D 页面平面的全部素材来源):
5
- // 1. 每个路由的全页 2x 截图(deviceScaleFactor: 2,供 3D 场景贴图不糊)
6
- // 2. per-element cutout(元素级 PNG,含 omitBackground 透明抠图,供"浮起的 UI 芯片")
7
- // 3. layout.json(每个元素在整页坐标系里的 bbox,供动画按真实版式定位)
8
- //
9
- // 用法:
10
- // node capture-template.mjs
11
- //
12
- // 前置条件(三条都是硬前提):
13
- // 1. 目标产品在本地跑起来(CONFIG.BASE 可访问);
14
- // 2. npm i puppeteer(本脚本唯一依赖);
15
- // 3. 【红线】假数据先注入 —— 截图前页面必须已填充"虚构但真实感"的演示数据。
16
- // 空库/lorem ipsum 截出来的图直接废片;真实客户数据则不能出片。
17
- // 先做数据注入(seed 脚本 / fixture 环境),确认页面肉眼可看后再跑本脚本。
18
- //
19
- // 改造指南:只改下面的 CONFIG。每个 page 条目 = 一个路由;
20
- // boxes 只记坐标(进 layout.json),cutouts 记坐标 + 存元素 PNG。
21
-
22
- import puppeteer from 'puppeteer';
23
- import fs from 'fs';
24
- import path from 'path';
25
- import { fileURLToPath } from 'url';
26
-
27
- // ======================================================================
28
- // CONFIG — 按目标产品修改(下面的值是假想的 "acme-crm" 产品示例)
29
- // ======================================================================
30
- const CONFIG = {
31
- // 目标产品本地地址(先把产品跑起来)
32
- BASE: 'http://localhost:3000',
33
-
34
- // 截图与 layout.json 的输出目录(相对本脚本所在目录;通常指向
35
- // Remotion 项目的 public/textures/live,供 staticFile() 引用)
36
- OUT_DIR: '../../public/textures/live',
37
- LAYOUT_JSON: '../../src/live-layout.json',
38
-
39
- // 视口:1920x1080 @2x 是 3D 页面平面贴图的经验值
40
- VIEWPORT: { width: 1920, height: 1080, deviceScaleFactor: 2 },
41
-
42
- // 每页导航完成后的额外静置毫秒数(等字体/异步数据;见 settle())
43
- SETTLE_MS: 600,
44
-
45
- // 路由清单:每条 = 一个要采集的页面
46
- PAGES: [
47
- {
48
- name: 'home', // layout.json 里的 key,也是全页截图文件名前缀
49
- path: '/', // 相对 BASE 的路由
50
- // waitMs: 1500, // 可选:本页额外等待(如实时协作数据同步)
51
- // 只记坐标不出图的元素(进 layout.<name>.boxes.<key>)
52
- boxes: [
53
- // all: true → 记所有匹配元素的 bbox 数组;否则只记第一个
54
- { key: 'sections', selector: 'main h2', all: true },
55
- ],
56
- // 元素级截图(cutout PNG + bbox)。omitBackground: true 出透明底,
57
- // 用于要"浮"在页面平面上方、自带材质合成的 UI 芯片
58
- cutouts: [
59
- { name: 'nav', selector: 'header, [role="banner"]' },
60
- { name: 'card', selector: 'article', all: true, max: 12 }, // card1.png, card2.png…
61
- { name: 'float-search', selector: 'input', parent: true, omitBackground: true },
62
- { name: 'float-filter', selector: 'main button', omitBackground: true },
63
- ],
64
- // 可选:把某些元素设为 visibility:hidden 后再截一张全页图,
65
- // 作为"元素飞入"镜头的空底板(<name>-empty.png)
66
- hideForEmptyPlate: 'article',
67
- },
68
- {
69
- name: 'detail',
70
- // 详情页路由写死一条演示数据的 id(假想示例;换成你产品里
71
- // 注入的假数据实体 id)
72
- path: '/customers/demo-0001',
73
- boxes: [
74
- { key: 'rows', selector: 'table tbody tr, [role="row"]', all: true, max: 8 },
75
- ],
76
- cutouts: [],
77
- // 可选:截图前在页面里执行的交互(如点开某个 tab),
78
- // 返回后额外等 interactWaitMs 再补一张 <name>-after.png 全页图
79
- interact: () => {
80
- const tab = [...document.querySelectorAll('button, [role="tab"], a')]
81
- .find((e) => /订单/.test(e.textContent ?? ''));
82
- if (tab) { tab.click(); return true; }
83
- return false;
84
- },
85
- interactWaitMs: 800,
86
- },
87
- {
88
- name: 'reports',
89
- path: '/reports/weekly',
90
- waitMs: 1500, // 例:等编辑器/协作文档内容同步进来
91
- boxes: [
92
- { key: 'paras', selector: '.ProseMirror > p', all: true },
93
- ],
94
- cutouts: [],
95
- },
96
- ],
97
- };
98
- // ======================================================================
99
- // 以下为通用采集逻辑,一般无需修改
100
- // ======================================================================
101
-
102
- const here = path.dirname(fileURLToPath(import.meta.url));
103
- const outDir = path.resolve(here, CONFIG.OUT_DIR);
104
- const layoutPath = path.resolve(here, CONFIG.LAYOUT_JSON);
105
- fs.mkdirSync(outDir, { recursive: true });
106
- fs.mkdirSync(path.dirname(layoutPath), { recursive: true });
107
-
108
- const browser = await puppeteer.launch();
109
- const page = await browser.newPage();
110
- await page.setViewport(CONFIG.VIEWPORT);
111
-
112
- // 等字体加载完再静置片刻——避免截到 FOUT/骨架屏
113
- const settle = async () => {
114
- await page.evaluate(() => document.fonts.ready);
115
- await new Promise((r) => setTimeout(r, CONFIG.SETTLE_MS));
116
- };
117
-
118
- // 元素 bbox 换算到整页坐标系(fullPage 截图的坐标系)
119
- const pageBox = (el) =>
120
- el.evaluate((e) => {
121
- const r = e.getBoundingClientRect();
122
- return { x: r.x + window.scrollX, y: r.y + window.scrollY, w: r.width, h: r.height };
123
- });
124
-
125
- const layout = { pageW: CONFIG.VIEWPORT.width };
126
-
127
- for (const pg of CONFIG.PAGES) {
128
- await page.goto(`${CONFIG.BASE}${pg.path}`, { waitUntil: 'networkidle0' });
129
- await settle();
130
- if (pg.waitMs) await new Promise((r) => setTimeout(r, pg.waitMs));
131
-
132
- const entry = { pageH: await page.evaluate(() => document.documentElement.scrollHeight) };
133
- layout[pg.name] = entry;
134
-
135
- // ---- 1. 全页 2x 截图 ----
136
- await page.screenshot({ path: `${outDir}/${pg.name}-full.png`, fullPage: true });
137
- console.log(`captured ${pg.name}-full`, entry.pageH);
138
-
139
- // ---- 2. boxes:只记坐标 ----
140
- entry.boxes = {};
141
- for (const b of pg.boxes ?? []) {
142
- const els = await page.$$(b.selector);
143
- const picked = b.all ? els.slice(0, b.max ?? els.length) : els.slice(0, 1);
144
- const boxes = [];
145
- for (const el of picked) boxes.push(await pageBox(el));
146
- entry.boxes[b.key] = b.all ? boxes : boxes[0] ?? null;
147
- console.log(` boxes.${b.key}:`, boxes.length);
148
- }
149
-
150
- // ---- 3. cutouts:元素 PNG + bbox ----
151
- entry.cutouts = [];
152
- for (const c of pg.cutouts ?? []) {
153
- let els = await page.$$(c.selector);
154
- if (c.parent) {
155
- // 取匹配元素的父容器(如 input 的圆角外壳)
156
- const parents = [];
157
- for (const el of els) {
158
- const h = await el.evaluateHandle((e) => e.parentElement);
159
- const p = h.asElement();
160
- if (p) parents.push(p);
161
- }
162
- els = parents;
163
- }
164
- const picked = c.all ? els.slice(0, c.max ?? els.length) : els.slice(0, 1);
165
- for (let i = 0; i < picked.length; i++) {
166
- const file = c.all ? `${c.name}${i + 1}.png` : `${c.name}.png`;
167
- const bb = await pageBox(picked[i]);
168
- try {
169
- await picked[i].screenshot({
170
- path: `${outDir}/${file}`,
171
- omitBackground: !!c.omitBackground,
172
- });
173
- } catch (e) {
174
- console.log(` cutout miss ${file}:`, e.message);
175
- continue;
176
- }
177
- entry.cutouts.push({ file, ...bb });
178
- console.log(` captured ${file}`, bb);
179
- }
180
- if (picked.length === 0) console.log(` cutout miss ${c.name} (no match: ${c.selector})`);
181
- }
182
-
183
- // ---- 4. 页内交互后的补充全页图(可选) ----
184
- if (pg.interact) {
185
- const did = await page.evaluate(pg.interact);
186
- if (did) {
187
- await new Promise((r) => setTimeout(r, pg.interactWaitMs ?? 800));
188
- await page.screenshot({ path: `${outDir}/${pg.name}-after.png`, fullPage: true });
189
- entry.afterPageH = await page.evaluate(() => document.documentElement.scrollHeight);
190
- console.log(`captured ${pg.name}-after`);
191
- }
192
- }
193
-
194
- // ---- 5. 空底板(可选):隐藏元素后再截一张,供飞入镜头 ----
195
- if (pg.hideForEmptyPlate) {
196
- await page.evaluate((sel) => {
197
- document.querySelectorAll(sel).forEach((el) => { el.style.visibility = 'hidden'; });
198
- }, pg.hideForEmptyPlate);
199
- await page.screenshot({ path: `${outDir}/${pg.name}-empty.png`, fullPage: true });
200
- console.log(`captured ${pg.name}-empty`);
201
- // 复原,避免影响同页后续步骤(当前实现里本步骤已是该页最后一步)
202
- await page.evaluate((sel) => {
203
- document.querySelectorAll(sel).forEach((el) => { el.style.visibility = ''; });
204
- }, pg.hideForEmptyPlate);
205
- }
206
- }
207
-
208
- fs.writeFileSync(layoutPath, JSON.stringify(layout, null, 1));
209
- console.log('wrote', layoutPath);
210
- await browser.close();
1
+ // capture-template.mjs — 把真实产品页面变成宣传片素材的三件套采集脚本模板
2
+ // 通用页面截图管线模板:BASE/输出目录/路由/选择器全部提升为 CONFIG
3
+ //
4
+ // 产出三件套(宣传片 3D 页面平面的全部素材来源):
5
+ // 1. 每个路由的全页 2x 截图(deviceScaleFactor: 2,供 3D 场景贴图不糊)
6
+ // 2. per-element cutout(元素级 PNG,含 omitBackground 透明抠图,供"浮起的 UI 芯片")
7
+ // 3. layout.json(每个元素在整页坐标系里的 bbox,供动画按真实版式定位)
8
+ //
9
+ // 用法:
10
+ // node capture-template.mjs
11
+ //
12
+ // 前置条件(三条都是硬前提):
13
+ // 1. 目标产品在本地跑起来(CONFIG.BASE 可访问);
14
+ // 2. npm i puppeteer(本脚本唯一依赖);
15
+ // 3. 【红线】假数据先注入 —— 截图前页面必须已填充"虚构但真实感"的演示数据。
16
+ // 空库/lorem ipsum 截出来的图直接废片;真实客户数据则不能出片。
17
+ // 先做数据注入(seed 脚本 / fixture 环境),确认页面肉眼可看后再跑本脚本。
18
+ //
19
+ // 改造指南:只改下面的 CONFIG。每个 page 条目 = 一个路由;
20
+ // boxes 只记坐标(进 layout.json),cutouts 记坐标 + 存元素 PNG。
21
+
22
+ import puppeteer from 'puppeteer';
23
+ import fs from 'fs';
24
+ import path from 'path';
25
+ import { fileURLToPath } from 'url';
26
+
27
+ // ======================================================================
28
+ // CONFIG — 按目标产品修改(下面的值是假想的 "acme-crm" 产品示例)
29
+ // ======================================================================
30
+ const CONFIG = {
31
+ // 目标产品本地地址(先把产品跑起来)
32
+ BASE: 'http://localhost:3000',
33
+
34
+ // 截图与 layout.json 的输出目录(相对本脚本所在目录;通常指向
35
+ // Remotion 项目的 public/textures/live,供 staticFile() 引用)
36
+ OUT_DIR: '../../public/textures/live',
37
+ LAYOUT_JSON: '../../src/live-layout.json',
38
+
39
+ // 视口:1920x1080 @2x 是 3D 页面平面贴图的经验值
40
+ VIEWPORT: { width: 1920, height: 1080, deviceScaleFactor: 2 },
41
+
42
+ // 每页导航完成后的额外静置毫秒数(等字体/异步数据;见 settle())
43
+ SETTLE_MS: 600,
44
+
45
+ // 路由清单:每条 = 一个要采集的页面
46
+ PAGES: [
47
+ {
48
+ name: 'home', // layout.json 里的 key,也是全页截图文件名前缀
49
+ path: '/', // 相对 BASE 的路由
50
+ // waitMs: 1500, // 可选:本页额外等待(如实时协作数据同步)
51
+ // 只记坐标不出图的元素(进 layout.<name>.boxes.<key>)
52
+ boxes: [
53
+ // all: true → 记所有匹配元素的 bbox 数组;否则只记第一个
54
+ { key: 'sections', selector: 'main h2', all: true },
55
+ ],
56
+ // 元素级截图(cutout PNG + bbox)。omitBackground: true 出透明底,
57
+ // 用于要"浮"在页面平面上方、自带材质合成的 UI 芯片
58
+ cutouts: [
59
+ { name: 'nav', selector: 'header, [role="banner"]' },
60
+ { name: 'card', selector: 'article', all: true, max: 12 }, // card1.png, card2.png…
61
+ { name: 'float-search', selector: 'input', parent: true, omitBackground: true },
62
+ { name: 'float-filter', selector: 'main button', omitBackground: true },
63
+ ],
64
+ // 可选:把某些元素设为 visibility:hidden 后再截一张全页图,
65
+ // 作为"元素飞入"镜头的空底板(<name>-empty.png)
66
+ hideForEmptyPlate: 'article',
67
+ },
68
+ {
69
+ name: 'detail',
70
+ // 详情页路由写死一条演示数据的 id(假想示例;换成你产品里
71
+ // 注入的假数据实体 id)
72
+ path: '/customers/demo-0001',
73
+ boxes: [
74
+ { key: 'rows', selector: 'table tbody tr, [role="row"]', all: true, max: 8 },
75
+ ],
76
+ cutouts: [],
77
+ // 可选:截图前在页面里执行的交互(如点开某个 tab),
78
+ // 返回后额外等 interactWaitMs 再补一张 <name>-after.png 全页图
79
+ interact: () => {
80
+ const tab = [...document.querySelectorAll('button, [role="tab"], a')]
81
+ .find((e) => /订单/.test(e.textContent ?? ''));
82
+ if (tab) { tab.click(); return true; }
83
+ return false;
84
+ },
85
+ interactWaitMs: 800,
86
+ },
87
+ {
88
+ name: 'reports',
89
+ path: '/reports/weekly',
90
+ waitMs: 1500, // 例:等编辑器/协作文档内容同步进来
91
+ boxes: [
92
+ { key: 'paras', selector: '.ProseMirror > p', all: true },
93
+ ],
94
+ cutouts: [],
95
+ },
96
+ ],
97
+ };
98
+ // ======================================================================
99
+ // 以下为通用采集逻辑,一般无需修改
100
+ // ======================================================================
101
+
102
+ const here = path.dirname(fileURLToPath(import.meta.url));
103
+ const outDir = path.resolve(here, CONFIG.OUT_DIR);
104
+ const layoutPath = path.resolve(here, CONFIG.LAYOUT_JSON);
105
+ fs.mkdirSync(outDir, { recursive: true });
106
+ fs.mkdirSync(path.dirname(layoutPath), { recursive: true });
107
+
108
+ const browser = await puppeteer.launch();
109
+ const page = await browser.newPage();
110
+ await page.setViewport(CONFIG.VIEWPORT);
111
+
112
+ // 等字体加载完再静置片刻——避免截到 FOUT/骨架屏
113
+ const settle = async () => {
114
+ await page.evaluate(() => document.fonts.ready);
115
+ await new Promise((r) => setTimeout(r, CONFIG.SETTLE_MS));
116
+ };
117
+
118
+ // 元素 bbox 换算到整页坐标系(fullPage 截图的坐标系)
119
+ const pageBox = (el) =>
120
+ el.evaluate((e) => {
121
+ const r = e.getBoundingClientRect();
122
+ return { x: r.x + window.scrollX, y: r.y + window.scrollY, w: r.width, h: r.height };
123
+ });
124
+
125
+ const layout = { pageW: CONFIG.VIEWPORT.width };
126
+
127
+ for (const pg of CONFIG.PAGES) {
128
+ await page.goto(`${CONFIG.BASE}${pg.path}`, { waitUntil: 'networkidle0' });
129
+ await settle();
130
+ if (pg.waitMs) await new Promise((r) => setTimeout(r, pg.waitMs));
131
+
132
+ const entry = { pageH: await page.evaluate(() => document.documentElement.scrollHeight) };
133
+ layout[pg.name] = entry;
134
+
135
+ // ---- 1. 全页 2x 截图 ----
136
+ await page.screenshot({ path: `${outDir}/${pg.name}-full.png`, fullPage: true });
137
+ console.log(`captured ${pg.name}-full`, entry.pageH);
138
+
139
+ // ---- 2. boxes:只记坐标 ----
140
+ entry.boxes = {};
141
+ for (const b of pg.boxes ?? []) {
142
+ const els = await page.$$(b.selector);
143
+ const picked = b.all ? els.slice(0, b.max ?? els.length) : els.slice(0, 1);
144
+ const boxes = [];
145
+ for (const el of picked) boxes.push(await pageBox(el));
146
+ entry.boxes[b.key] = b.all ? boxes : boxes[0] ?? null;
147
+ console.log(` boxes.${b.key}:`, boxes.length);
148
+ }
149
+
150
+ // ---- 3. cutouts:元素 PNG + bbox ----
151
+ entry.cutouts = [];
152
+ for (const c of pg.cutouts ?? []) {
153
+ let els = await page.$$(c.selector);
154
+ if (c.parent) {
155
+ // 取匹配元素的父容器(如 input 的圆角外壳)
156
+ const parents = [];
157
+ for (const el of els) {
158
+ const h = await el.evaluateHandle((e) => e.parentElement);
159
+ const p = h.asElement();
160
+ if (p) parents.push(p);
161
+ }
162
+ els = parents;
163
+ }
164
+ const picked = c.all ? els.slice(0, c.max ?? els.length) : els.slice(0, 1);
165
+ for (let i = 0; i < picked.length; i++) {
166
+ const file = c.all ? `${c.name}${i + 1}.png` : `${c.name}.png`;
167
+ const bb = await pageBox(picked[i]);
168
+ try {
169
+ await picked[i].screenshot({
170
+ path: `${outDir}/${file}`,
171
+ omitBackground: !!c.omitBackground,
172
+ });
173
+ } catch (e) {
174
+ console.log(` cutout miss ${file}:`, e.message);
175
+ continue;
176
+ }
177
+ entry.cutouts.push({ file, ...bb });
178
+ console.log(` captured ${file}`, bb);
179
+ }
180
+ if (picked.length === 0) console.log(` cutout miss ${c.name} (no match: ${c.selector})`);
181
+ }
182
+
183
+ // ---- 4. 页内交互后的补充全页图(可选) ----
184
+ if (pg.interact) {
185
+ const did = await page.evaluate(pg.interact);
186
+ if (did) {
187
+ await new Promise((r) => setTimeout(r, pg.interactWaitMs ?? 800));
188
+ await page.screenshot({ path: `${outDir}/${pg.name}-after.png`, fullPage: true });
189
+ entry.afterPageH = await page.evaluate(() => document.documentElement.scrollHeight);
190
+ console.log(`captured ${pg.name}-after`);
191
+ }
192
+ }
193
+
194
+ // ---- 5. 空底板(可选):隐藏元素后再截一张,供飞入镜头 ----
195
+ if (pg.hideForEmptyPlate) {
196
+ await page.evaluate((sel) => {
197
+ document.querySelectorAll(sel).forEach((el) => { el.style.visibility = 'hidden'; });
198
+ }, pg.hideForEmptyPlate);
199
+ await page.screenshot({ path: `${outDir}/${pg.name}-empty.png`, fullPage: true });
200
+ console.log(`captured ${pg.name}-empty`);
201
+ // 复原,避免影响同页后续步骤(当前实现里本步骤已是该页最后一步)
202
+ await page.evaluate((sel) => {
203
+ document.querySelectorAll(sel).forEach((el) => { el.style.visibility = ''; });
204
+ }, pg.hideForEmptyPlate);
205
+ }
206
+ }
207
+
208
+ fs.writeFileSync(layoutPath, JSON.stringify(layout, null, 1));
209
+ console.log('wrote', layoutPath);
210
+ await browser.close();