dsh-drawai 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/LICENSE +4142 -0
  2. package/README.md +43 -10
  3. package/lib/audio-media.js +147 -0
  4. package/lib/audio-service.js +66 -0
  5. package/lib/canvas-format.js +134 -0
  6. package/lib/client.js +5283 -223
  7. package/lib/comfyui-default-workflow.mjs +1825 -0
  8. package/lib/comfyui-workflow.mjs +426 -0
  9. package/lib/document-commands.js +12 -0
  10. package/lib/document-core.js +29 -0
  11. package/lib/drawing-tasks.js +26 -0
  12. package/lib/imagegen.mjs +596 -0
  13. package/lib/index.js +1758 -129
  14. package/lib/media.js +26 -13
  15. package/lib/mgstyle-core.js +75 -0
  16. package/lib/motion/apply.js +180 -0
  17. package/lib/motion/asset-pack-lock.js +10 -0
  18. package/lib/motion/asset-pack.js +335 -0
  19. package/lib/motion/assets.js +290 -0
  20. package/lib/motion/audio.js +103 -0
  21. package/lib/motion/audiolevel.js +63 -0
  22. package/lib/motion/audiomix.js +144 -0
  23. package/lib/motion/beats.js +337 -0
  24. package/lib/motion/builtin-assets.js +62 -0
  25. package/lib/motion/canvas-spec.js +442 -0
  26. package/lib/motion/capture.js +95 -0
  27. package/lib/motion/cards.js +80 -0
  28. package/lib/motion/collect.js +447 -0
  29. package/lib/motion/delivery.js +112 -0
  30. package/lib/motion/edge-speech.py +90 -0
  31. package/lib/motion/entry.jsx +73 -0
  32. package/lib/motion/export.js +200 -0
  33. package/lib/motion/ffmpeg.js +42 -0
  34. package/lib/motion/fonts.js +71 -0
  35. package/lib/motion/jobs.js +113 -0
  36. package/lib/motion/json.js +4 -0
  37. package/lib/motion/media-catalog.js +59 -0
  38. package/lib/motion/mgstyles/BRIEF-TEMPLATE.md +63 -0
  39. package/lib/motion/mgstyles/briefs/01-flat-vector.md +104 -0
  40. package/lib/motion/mgstyles/briefs/02-line-art.md +97 -0
  41. package/lib/motion/mgstyles/briefs/03-isometric.md +108 -0
  42. package/lib/motion/mgstyles/briefs/05-cel-boil.md +145 -0
  43. package/lib/motion/mgstyles/briefs/06-collage.md +149 -0
  44. package/lib/motion/mgstyles/briefs/07-liquid.md +106 -0
  45. package/lib/motion/mgstyles/briefs/08-morph.md +111 -0
  46. package/lib/motion/mgstyles/briefs/09-bauhaus.md +150 -0
  47. package/lib/motion/mgstyles/briefs/10-synthwave.md +151 -0
  48. package/lib/motion/mgstyles/briefs/12-aurora-glass.md +147 -0
  49. package/lib/motion/mgstyles/briefs/18-hanazi.md +140 -0
  50. package/lib/motion/mgstyles/briefs/19-paperclip.md +156 -0
  51. package/lib/motion/mgstyles/briefs/20-pixel.md +118 -0
  52. package/lib/motion/mgstyles/briefs/22-hud.md +118 -0
  53. package/lib/motion/mgstyles/catalog.d/01-flat-vector.json +34 -0
  54. package/lib/motion/mgstyles/catalog.d/02-line-art.json +34 -0
  55. package/lib/motion/mgstyles/catalog.d/03-isometric.json +35 -0
  56. package/lib/motion/mgstyles/catalog.d/05-cel-boil.json +28 -0
  57. package/lib/motion/mgstyles/catalog.d/06-collage.json +28 -0
  58. package/lib/motion/mgstyles/catalog.d/07-liquid.json +28 -0
  59. package/lib/motion/mgstyles/catalog.d/08-morph.json +28 -0
  60. package/lib/motion/mgstyles/catalog.d/09-bauhaus.json +28 -0
  61. package/lib/motion/mgstyles/catalog.d/10-synthwave.json +28 -0
  62. package/lib/motion/mgstyles/catalog.d/12-aurora-glass.json +28 -0
  63. package/lib/motion/mgstyles/catalog.d/18-hanazi.json +28 -0
  64. package/lib/motion/mgstyles/catalog.d/19-paperclip.json +28 -0
  65. package/lib/motion/mgstyles/catalog.d/20-pixel.json +28 -0
  66. package/lib/motion/mgstyles/catalog.d/22-hud.json +28 -0
  67. package/lib/motion/mgstyles/catalog.json +1356 -0
  68. package/lib/motion/mgstyles/upstream/README.md +147 -0
  69. package/lib/motion/mgstyles/upstream/README.zh-CN.md +147 -0
  70. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/cues.json +1 -0
  71. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/index.html +712 -0
  72. package/lib/motion/mgstyles/upstream/demos/02-line-art/cues.json +331 -0
  73. package/lib/motion/mgstyles/upstream/demos/02-line-art/film.js +676 -0
  74. package/lib/motion/mgstyles/upstream/demos/02-line-art/index.html +18 -0
  75. package/lib/motion/mgstyles/upstream/demos/02-line-art/tools/dump_timing.mjs +26 -0
  76. package/lib/motion/mgstyles/upstream/demos/03-isometric/cues.json +109 -0
  77. package/lib/motion/mgstyles/upstream/demos/03-isometric/index.html +25 -0
  78. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/anim.js +82 -0
  79. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/main.js +219 -0
  80. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/night5.js +180 -0
  81. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/render.js +202 -0
  82. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title.js +167 -0
  83. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title5.js +294 -0
  84. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/ui.js +141 -0
  85. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/world.js +1399 -0
  86. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/cues.json +157 -0
  87. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/index.html +34 -0
  88. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/engine.js +326 -0
  89. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/scene.js +2036 -0
  90. package/lib/motion/mgstyles/upstream/demos/06-collage/assets/gen/layout.json +157 -0
  91. package/lib/motion/mgstyles/upstream/demos/06-collage/cues.json +80 -0
  92. package/lib/motion/mgstyles/upstream/demos/06-collage/index.html +889 -0
  93. package/lib/motion/mgstyles/upstream/demos/07-liquid/cues.json +100 -0
  94. package/lib/motion/mgstyles/upstream/demos/07-liquid/index.html +108 -0
  95. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/engine.js +153 -0
  96. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/links.js +64 -0
  97. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/lookdev.js +46 -0
  98. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/scene.js +963 -0
  99. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/shaders.js +647 -0
  100. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/textsdf.js +114 -0
  101. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/type.js +50 -0
  102. package/lib/motion/mgstyles/upstream/demos/08-morph/cues.json +131 -0
  103. package/lib/motion/mgstyles/upstream/demos/08-morph/glyphs.json +1 -0
  104. package/lib/motion/mgstyles/upstream/demos/08-morph/index.html +901 -0
  105. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/cues.json +270 -0
  106. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/film.js +697 -0
  107. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/index.html +12 -0
  108. package/lib/motion/mgstyles/upstream/demos/10-synthwave/cues.json +44 -0
  109. package/lib/motion/mgstyles/upstream/demos/10-synthwave/index.html +1028 -0
  110. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/cues.json +67 -0
  111. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/index.html +16 -0
  112. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/main.js +967 -0
  113. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/shaders.js +468 -0
  114. package/lib/motion/mgstyles/upstream/demos/18-hanazi/cues.json +117 -0
  115. package/lib/motion/mgstyles/upstream/demos/18-hanazi/index.html +541 -0
  116. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/countries-110m.json +1 -0
  117. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/stickers/meta.json +34 -0
  118. package/lib/motion/mgstyles/upstream/demos/19-paperclip/cues.json +285 -0
  119. package/lib/motion/mgstyles/upstream/demos/19-paperclip/index.html +599 -0
  120. package/lib/motion/mgstyles/upstream/demos/20-pixel/cues.json +42 -0
  121. package/lib/motion/mgstyles/upstream/demos/20-pixel/film.js +914 -0
  122. package/lib/motion/mgstyles/upstream/demos/20-pixel/index.html +18 -0
  123. package/lib/motion/mgstyles/upstream/demos/22-hud/cues.json +108 -0
  124. package/lib/motion/mgstyles/upstream/demos/22-hud/index.html +125 -0
  125. package/lib/motion/mgstyles/upstream/demos/22-hud/js/holo.js +275 -0
  126. package/lib/motion/mgstyles/upstream/demos/22-hud/js/hud.js +855 -0
  127. package/lib/motion/mgstyles/upstream/demos/22-hud/js/post.js +150 -0
  128. package/lib/motion/mgstyles/upstream/demos/22-hud/js/util.js +65 -0
  129. package/lib/motion/mgstyles/upstream/demos/22-hud/js/v5.js +142 -0
  130. package/lib/motion/mgstyles/upstream/harness/render.mjs +319 -0
  131. package/lib/motion/mgstyles/upstream/manifest.json +269 -0
  132. package/lib/motion/mgstyles/upstream/prompts/01-flat-vector.md +98 -0
  133. package/lib/motion/mgstyles/upstream/prompts/02-line-art.md +95 -0
  134. package/lib/motion/mgstyles/upstream/prompts/03-isometric.md +97 -0
  135. package/lib/motion/mgstyles/upstream/prompts/05-cel-boil.md +95 -0
  136. package/lib/motion/mgstyles/upstream/prompts/06-collage.md +95 -0
  137. package/lib/motion/mgstyles/upstream/prompts/07-liquid.md +98 -0
  138. package/lib/motion/mgstyles/upstream/prompts/08-morph.md +95 -0
  139. package/lib/motion/mgstyles/upstream/prompts/09-bauhaus.md +96 -0
  140. package/lib/motion/mgstyles/upstream/prompts/10-synthwave.md +95 -0
  141. package/lib/motion/mgstyles/upstream/prompts/12-aurora-glass.md +96 -0
  142. package/lib/motion/mgstyles/upstream/prompts/18-hanazi.md +95 -0
  143. package/lib/motion/mgstyles/upstream/prompts/19-paperclip.md +96 -0
  144. package/lib/motion/mgstyles/upstream/prompts/20-pixel.md +96 -0
  145. package/lib/motion/mgstyles/upstream/prompts/22-hud.md +95 -0
  146. package/lib/motion/mgstyles/upstream/rubric.md +51 -0
  147. package/lib/motion/mgstyles/upstream/template.md +36 -0
  148. package/lib/motion/pixelqa.js +198 -0
  149. package/lib/motion/preview.js +95 -0
  150. package/lib/motion/project.js +395 -0
  151. package/lib/motion/qa.js +290 -0
  152. package/lib/motion/reference-media.jsx +10 -0
  153. package/lib/motion/render-settings.js +112 -0
  154. package/lib/motion/render.js +159 -0
  155. package/lib/motion/scene-kit.js +183 -0
  156. package/lib/motion/sfx.js +232 -0
  157. package/lib/motion/shotcraft/ClipCard.tsx +204 -0
  158. package/lib/motion/shotcraft/catalog.json +2461 -0
  159. package/lib/motion/shotcraft/upstream/SKILL.md +286 -0
  160. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -0
  161. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -0
  162. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -0
  163. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -0
  164. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -0
  165. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -0
  166. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -0
  167. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -0
  168. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -0
  169. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -0
  170. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -0
  171. package/lib/motion/shotcraft/upstream/assets/scripts/__pycache__/sfx-source.cpython-313.pyc +0 -0
  172. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -0
  173. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -0
  174. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -0
  175. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -0
  176. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -0
  177. package/lib/motion/shotcraft/upstream/demos/README.md +120 -0
  178. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -0
  179. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -0
  180. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -0
  181. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -0
  182. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -0
  183. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -0
  184. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +389 -0
  185. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -0
  186. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -0
  187. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -0
  188. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -0
  189. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -0
  190. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -0
  191. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -0
  192. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -0
  193. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -0
  194. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -0
  195. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -0
  196. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -0
  197. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -0
  198. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -0
  199. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -0
  200. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -0
  201. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -0
  202. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -0
  203. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -0
  204. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -0
  205. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -0
  206. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -0
  207. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -0
  208. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -0
  209. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -0
  210. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -0
  211. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -0
  212. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -0
  213. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -0
  214. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -0
  215. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -0
  216. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -0
  217. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -0
  218. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -0
  219. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -0
  220. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -0
  221. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -0
  222. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -0
  223. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -0
  224. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -0
  225. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -0
  226. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -0
  227. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -0
  228. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -0
  229. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -0
  230. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -0
  231. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -0
  232. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -0
  233. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -0
  234. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -0
  235. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -0
  236. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -0
  237. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -0
  238. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -0
  239. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -0
  240. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -0
  241. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -0
  242. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -0
  243. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -0
  244. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -0
  245. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -0
  246. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -0
  247. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -0
  248. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -0
  249. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -0
  250. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -0
  251. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -0
  252. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -0
  253. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -0
  254. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -0
  255. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -0
  256. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -0
  257. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -0
  258. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -0
  259. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -0
  260. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -0
  261. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -0
  262. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -0
  263. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -0
  264. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -0
  265. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -0
  266. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -0
  267. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -0
  268. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -0
  269. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -0
  270. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -0
  271. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -0
  272. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -0
  273. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -0
  274. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -0
  275. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -0
  276. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -0
  277. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -0
  278. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -0
  279. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -0
  280. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -0
  281. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -0
  282. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -0
  283. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -0
  284. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -0
  285. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -0
  286. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -0
  287. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -0
  288. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -0
  289. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -0
  290. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -0
  291. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -0
  292. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -0
  293. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -0
  294. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -0
  295. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -0
  296. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -0
  297. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -0
  298. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -0
  299. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -0
  300. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -0
  301. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -0
  302. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -0
  303. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -0
  304. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -0
  305. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -0
  306. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -0
  307. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -0
  308. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -0
  309. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -0
  310. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -0
  311. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -0
  312. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -0
  313. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -0
  314. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -0
  315. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -0
  316. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -0
  317. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -0
  318. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -0
  319. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -0
  320. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -0
  321. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -0
  322. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -0
  323. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -0
  324. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -0
  325. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -0
  326. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -0
  327. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -0
  328. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -0
  329. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -0
  330. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -0
  331. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -0
  332. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -0
  333. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -0
  334. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -0
  335. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -0
  336. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -0
  337. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -0
  338. package/lib/motion/shotcraft/upstream/manifest.json +2715 -0
  339. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -0
  340. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -0
  341. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -0
  342. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -0
  343. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -0
  344. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -0
  345. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -0
  346. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -0
  347. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -0
  348. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -0
  349. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -0
  350. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -0
  351. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -0
  352. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -0
  353. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -0
  354. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -0
  355. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -0
  356. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -0
  357. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -0
  358. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -0
  359. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -0
  360. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -0
  361. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -0
  362. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -0
  363. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -0
  364. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -0
  365. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -0
  366. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -0
  367. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -0
  368. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -0
  369. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -0
  370. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -0
  371. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -0
  372. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -0
  373. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -0
  374. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -0
  375. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -0
  376. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -0
  377. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -0
  378. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -0
  379. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -0
  380. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -0
  381. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -0
  382. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -0
  383. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -0
  384. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -0
  385. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -0
  386. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -0
  387. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -0
  388. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -0
  389. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -0
  390. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -0
  391. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -0
  392. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -0
  393. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -0
  394. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -0
  395. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -0
  396. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -0
  397. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -0
  398. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -0
  399. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -0
  400. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -0
  401. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -0
  402. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -0
  403. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -0
  404. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -0
  405. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -0
  406. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -0
  407. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -0
  408. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -0
  409. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -0
  410. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -0
  411. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -0
  412. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -0
  413. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -0
  414. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -0
  415. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -0
  416. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -0
  417. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -0
  418. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -0
  419. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -0
  420. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -0
  421. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -0
  422. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -0
  423. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -0
  424. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -0
  425. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -0
  426. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -0
  427. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -0
  428. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -0
  429. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -0
  430. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -0
  431. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -0
  432. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -0
  433. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -0
  434. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -0
  435. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -0
  436. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -0
  437. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -0
  438. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -0
  439. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -0
  440. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -0
  441. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -0
  442. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -0
  443. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -0
  444. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -0
  445. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -0
  446. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -0
  447. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -0
  448. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -0
  449. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -0
  450. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -0
  451. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -0
  452. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -0
  453. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -0
  454. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -0
  455. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -0
  456. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -0
  457. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -0
  458. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -0
  459. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -0
  460. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -0
  461. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -0
  462. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -0
  463. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -0
  464. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -0
  465. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -0
  466. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -0
  467. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -0
  468. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -0
  469. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -0
  470. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -0
  471. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -0
  472. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -0
  473. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -0
  474. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -0
  475. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -0
  476. package/lib/motion/shotcraft/upstream/template/package.json +20 -0
  477. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -0
  478. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -0
  479. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -0
  480. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -0
  481. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -0
  482. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -0
  483. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -0
  484. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -0
  485. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -0
  486. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -0
  487. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -0
  488. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -0
  489. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -0
  490. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -0
  491. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +389 -0
  492. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -0
  493. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -0
  494. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -0
  495. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -0
  496. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -0
  497. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -0
  498. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -0
  499. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -0
  500. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -0
  501. package/lib/motion/spec.js +113 -0
  502. package/lib/motion/style-engine.js +153 -0
  503. package/lib/motion/style-frames.js +268 -0
  504. package/lib/motion/sync.js +214 -0
  505. package/lib/motion/theme.js +121 -0
  506. package/lib/motion/voice.js +417 -0
  507. package/lib/motion-agent-files.js +82 -0
  508. package/lib/motion-agent-protocol.js +66 -0
  509. package/lib/motion-agent-tools.js +196 -0
  510. package/lib/motion-agent.js +171 -0
  511. package/lib/motion-capture.js +92 -0
  512. package/lib/motion-core.js +238 -0
  513. package/lib/motion-film-review.js +71 -0
  514. package/lib/motion-library.js +210 -0
  515. package/lib/motion-planner.js +254 -0
  516. package/lib/motion-project.js +80 -0
  517. package/lib/motion-render-worker.js +145 -0
  518. package/lib/motion-session.js +32 -0
  519. package/lib/motion-source.js +49 -0
  520. package/lib/motion-tasks.js +452 -0
  521. package/lib/motion-vision.js +43 -0
  522. package/lib/mxfile.js +27 -7
  523. package/lib/routing/node-runtime.js +14 -0
  524. package/lib/routing/router.js +211 -0
  525. package/lib/routing/vendor/README.md +96 -0
  526. package/lib/routing/vendor/libavoid-routing.js +753 -0
  527. package/lib/routing/vendor/libavoid.min.js +59 -0
  528. package/lib/shotcard-core.js +39 -0
  529. package/lib/shotcard-reference.js +56 -0
  530. package/lib/style-kernel.js +37 -3
  531. package/lib/task-patches.js +26 -2
  532. package/lib/video-export.js +17 -2
  533. package/package.json +29 -4
@@ -0,0 +1,2461 @@
1
+ {
2
+ "commit": "1266a3ec4831289c4d893d42dd5102723658039a",
3
+ "categories": {
4
+ "opening": {
5
+ "zh": "开场与品牌",
6
+ "en": "Opening & Brand"
7
+ },
8
+ "typography": {
9
+ "zh": "文字与字卡",
10
+ "en": "Typography & Title Cards"
11
+ },
12
+ "ui-entrance": {
13
+ "zh": "界面登场与陈列",
14
+ "en": "UI Entrance & Showcase"
15
+ },
16
+ "camera": {
17
+ "zh": "运镜与空间",
18
+ "en": "Camera & Space"
19
+ },
20
+ "data": {
21
+ "zh": "数据与指标",
22
+ "en": "Data & Metrics"
23
+ },
24
+ "interaction": {
25
+ "zh": "交互与功能演示",
26
+ "en": "Interaction & Feature Demo"
27
+ },
28
+ "transition": {
29
+ "zh": "转场",
30
+ "en": "Transitions"
31
+ },
32
+ "rhythm": {
33
+ "zh": "节奏与蒙太奇",
34
+ "en": "Rhythm & Montage"
35
+ },
36
+ "effects": {
37
+ "zh": "光效与强调",
38
+ "en": "Light & Emphasis"
39
+ },
40
+ "outro": {
41
+ "zh": "收尾",
42
+ "en": "Outro"
43
+ }
44
+ },
45
+ "cards": [
46
+ {
47
+ "id": "assemble-then-type-flyin",
48
+ "category": "effects",
49
+ "summary": "空的暗底网格上,无文字的组件骨架先从四面八方飞入贴合;随后各处文字逐字从 3D 空间旋转着飞来落位,先大标题后小标注,全部落位后页面成形",
50
+ "use": "页面/海报\"自己长出来\"的开场;排版类产品的能力展示;从骨架到成稿的两段式叙事",
51
+ "duration": "约5.6s(168f@30fps)",
52
+ "energy": "中高(骨架段稀疏、文字段密集,能量单调上升到收尾)",
53
+ "source": "references/shots/effects/assemble-then-type-flyin.md",
54
+ "styles": [
55
+ {
56
+ "key": "assemble-then-type-flyin",
57
+ "label": "assemble-then-type-flyin",
58
+ "description": "空的暗底网格上,无文字的组件骨架先从四面八方飞入贴合;随后各处文字逐字从 3D 空间旋转着飞来落位,先大标题后小标注,全部落位后页面成形",
59
+ "demo": "demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx",
60
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/assemble-then-type-flyin.mp4?v=1790980736765"
61
+ }
62
+ ]
63
+ },
64
+ {
65
+ "id": "aurora-bloom-bg-flip",
66
+ "category": "effects",
67
+ "summary": "浅灰底从底部升起紫橙柔焦 blob,随后整个底色在约 0.36s 内压暗到近黑、blob 压成余晖;文案同步 blur-out 换句 blur-in,换句间留空档不 cross-fade",
68
+ "use": "叙事转折点(\"多年以来…→一切都变了\");品牌片从铺垫拉到重音的那一拍;深浅色系之间的段落切换",
69
+ "duration": "约5.2s(156f@30fps)",
70
+ "energy": "由低到高(前 2/3 是酝酿,压暗那一瞬是全片重音)",
71
+ "source": "references/shots/effects/aurora-bloom-bg-flip.md",
72
+ "styles": [
73
+ {
74
+ "key": "aurora-bloom-bg-flip",
75
+ "label": "aurora-bloom-bg-flip",
76
+ "description": "浅灰底从底部升起紫橙柔焦 blob,随后整个底色在约 0.36s 内压暗到近黑、blob 压成余晖;文案同步 blur-out 换句 blur-in,换句间留空档不 cross-fade",
77
+ "demo": "demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx",
78
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/aurora-bloom-bg-flip.mp4?v=1790980736766"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "id": "autolayout-gap-dial",
84
+ "category": "interaction",
85
+ "summary": "间距拨盘驱动布局——一排链接块带框选描边+缝隙间距标注,徽章数字逐格跳动、块被参数实时推开再弹簧回弹归位;\"参数驱动布局\"的可视化",
86
+ "use": "设计工具/低代码产品的\"改一个数、界面跟着动\"卖点镜头;\"用设计工具语义做包装\"的品类语言",
87
+ "duration": "~5s(150f:框选入场 + 预备回收 10f + 拉松 34f + 屏息 hold 20f + 弹簧回弹 + 落定 hold)",
88
+ "energy": "中(工具理性型,爽点在数字与位移的锁定同步)",
89
+ "source": "references/shots/interaction/autolayout-gap-dial.md",
90
+ "styles": [
91
+ {
92
+ "key": "autolayout-gap-dial",
93
+ "label": "autolayout-gap-dial",
94
+ "description": "间距拨盘驱动布局——一排链接块带框选描边+缝隙间距标注,徽章数字逐格跳动、块被参数实时推开再弹簧回弹归位;\"参数驱动布局\"的可视化",
95
+ "demo": "demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx",
96
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/autolayout-gap-dial.mp4?v=1790980736767"
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ "id": "avatar-bracket-carousel",
102
+ "category": "ui-entrance",
103
+ "summary": "\"Your ___ agent\" 填空排版,四角对焦框钉在句中不动,头像队列在框内垂直 spring 轮换三次,入框放大清晰、出框按距离缩小淡化模糊,角色标签同步更换,切换瞬间对焦框呼吸 7%",
104
+ "use": "\"一个位置,多种角色\"的能力枚举;团队/身份/预设/人格类产品的核心一句话镜头",
105
+ "duration": "约 5.2s(156f@30fps)",
106
+ "energy": "中(三次等距切换构成稳定节拍器,对焦框脉冲是唯一装饰性动作)",
107
+ "source": "references/shots/ui-entrance/avatar-bracket-carousel.md",
108
+ "styles": [
109
+ {
110
+ "key": "avatar-bracket-carousel",
111
+ "label": "avatar-bracket-carousel",
112
+ "description": "\"Your ___ agent\" 填空排版,四角对焦框钉在句中不动,头像队列在框内垂直 spring 轮换三次,入框放大清晰、出框按距离缩小淡化模糊,角色标签同步更换,切换瞬间对焦框呼吸 7%",
113
+ "demo": "demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx",
114
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/avatar-bracket-carousel.mp4?v=1790980736768"
115
+ }
116
+ ]
117
+ },
118
+ {
119
+ "id": "basic-3d-scene",
120
+ "category": "camera",
121
+ "summary": "impress.js 式空间演示:卡片以不同位置/旋转/缩放散布 3D 空间,相机取各步姿态之逆依次飞行对齐,末步拉到 OVERVIEW 总览",
122
+ "use": "概念/路线图/三步法的空间化讲述;替代平面 slides 的\"每一步都换个空间视角\"",
123
+ "duration": "约 7.5s(225f@30fps;四站,三段飞行 28/32/32f,每站停留 ≥30f)",
124
+ "energy": "中(每次转场有空间惊喜,停留段安静读卡)",
125
+ "source": "references/shots/camera/basic-3d-scene.md",
126
+ "styles": [
127
+ {
128
+ "key": "basic-3d-scene",
129
+ "label": "basic-3d-scene",
130
+ "description": "impress.js 式空间演示:卡片以不同位置/旋转/缩放散布 3D 空间,相机取各步姿态之逆依次飞行对齐,末步拉到 OVERVIEW 总览",
131
+ "demo": "demos/camera/basic-3d-scene/Basic3DScene.tsx",
132
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/basic-3d-scene.mp4?v=1790980736769"
133
+ }
134
+ ]
135
+ },
136
+ {
137
+ "id": "beat-cut-moves",
138
+ "category": "rhythm",
139
+ "summary": "硬切当节拍乐器——连闪定格:三次白闪各硬切同一画面的一个裁切(全景→卡片→特写),快门余韵沉降后停在特写收束",
140
+ "use": "高光段落把\"切\"本身打成鼓点;颁奖连拍式的仪式感、关键信息的加冕",
141
+ "duration": "全程 140f ≈4.7s(活素材 30f + 三闪 + hold 70f)",
142
+ "energy": "高",
143
+ "source": "references/shots/rhythm/beat-cut-moves.md",
144
+ "styles": [
145
+ {
146
+ "key": "paparazzi-flash",
147
+ "label": "paparazzi-flash 连闪定格",
148
+ "description": "硬切当节拍乐器——连闪定格:三次白闪各硬切同一画面的一个裁切(全景→卡片→特写),快门余韵沉降后停在特写收束",
149
+ "demo": "demos/rhythm/beat-cut-moves/PaparazziFlash.tsx",
150
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/paparazzi-flash.mp4?v=1790980736770"
151
+ }
152
+ ]
153
+ },
154
+ {
155
+ "id": "beat-step-list-theme-cycle",
156
+ "category": "rhythm",
157
+ "summary": "三通道节拍器——深色场形容词列表逐拍上移一行,视口中央固定胶囊\"接住\"下一个词并换色,整场底色同拍跟换;行、色、场三通道锁死同一拍点",
158
+ "use": "\"同一产品多种气质/多主题展示\"段落(modern/playful/expressive 式形容词连打);全片节奏最密的一段;音乐段对拍",
159
+ "duration": "铺垫 30f + 每拍 18f × 拍数 + 收尾 hold;4 拍约 4.7s(demo 140f)",
160
+ "energy": "高(0.6s 一拍三通道齐跳,密度型高能)",
161
+ "source": "references/shots/rhythm/beat-step-list-theme-cycle.md",
162
+ "styles": [
163
+ {
164
+ "key": "beat-step-list-theme-cycle",
165
+ "label": "beat-step-list-theme-cycle",
166
+ "description": "三通道节拍器——深色场形容词列表逐拍上移一行,视口中央固定胶囊\"接住\"下一个词并换色,整场底色同拍跟换;行、色、场三通道锁死同一拍点",
167
+ "demo": "demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx",
168
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/beat-step-list-theme-cycle.mp4?v=1790980736771"
169
+ }
170
+ ]
171
+ },
172
+ {
173
+ "id": "before-after-slider-scrub",
174
+ "category": "data",
175
+ "summary": "前后对比拉杆——\"处理前/后\"两版叠放,分割杆先猛甩后慢扫,杆过处新版\"显影\"揭出",
176
+ "use": "AI 增强/优化/重构类功能的效果对比段落(\"用前 vs 用后\"一镜讲清)",
177
+ "duration": "4–5s",
178
+ "energy": "中(快甩是打击点,慢扫是阅读期)",
179
+ "source": "references/shots/data/before-after-slider-scrub.md",
180
+ "styles": [
181
+ {
182
+ "key": "before-after-slider-scrub",
183
+ "label": "before-after-slider-scrub",
184
+ "description": "前后对比拉杆——\"处理前/后\"两版叠放,分割杆先猛甩后慢扫,杆过处新版\"显影\"揭出",
185
+ "demo": "demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx",
186
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/before-after-slider-scrub.mp4?v=1790980736772"
187
+ }
188
+ ]
189
+ },
190
+ {
191
+ "id": "bezier-source-converge-merge",
192
+ "category": "ui-entrance",
193
+ "summary": "左侧四个来源节点各有一条细贝塞尔曲线连向右侧同一汇聚点,曲线先错峰由左向右 draw-on,节点沿自己的曲线滑向汇聚点并三段式加速缩小到消失,强调色数据包全程沿路径滑行,吞并完成后曲线从左端反向擦除只留品牌标志(demo:白瓷圆片托 video-shotcraft 镜刻标志)",
194
+ "use": "\"多源整合/统一接入/数据汇聚\"的核心机制镜头;集成、聚合、单一入口类产品的说明段落",
195
+ "duration": "约 5.6s(168f@30fps)",
196
+ "energy": "中(长镜慢速推进,靠数据包滑行维持活性;吞并瞬间是唯一小高点)",
197
+ "source": "references/shots/ui-entrance/bezier-source-converge-merge.md",
198
+ "styles": [
199
+ {
200
+ "key": "bezier-source-converge-merge",
201
+ "label": "bezier-source-converge-merge",
202
+ "description": "左侧四个来源节点各有一条细贝塞尔曲线连向右侧同一汇聚点,曲线先错峰由左向右 draw-on,节点沿自己的曲线滑向汇聚点并三段式加速缩小到消失,强调色数据包全程沿路径滑行,吞并完成后曲线从左端反向擦除只留品牌标志(demo:白瓷圆片托 video-shotcraft 镜刻标志)",
203
+ "demo": "demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx",
204
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/bezier-source-converge-merge.mp4?v=1790980736773"
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ "id": "blur-slide",
210
+ "category": "typography",
211
+ "summary": "标题逐词入场,y 0.38em→0 + blur 18→0 + opacity 0→1 三通道走同一条 ease-out 同步收敛,词间隔约 4f;副标题在标题收完前就错峰跟进",
212
+ "use": "几乎所有标题/副标题成对出现的场合;产品页首屏文案、章节小标题;需要\"专业但不抢戏\"的默认文字 reveal",
213
+ "duration": "约 4.0s(120f@30fps)",
214
+ "energy": "低(一次性收敛,无峰值无循环)",
215
+ "source": "references/shots/typography/blur-slide.md",
216
+ "styles": [
217
+ {
218
+ "key": "blur-slide",
219
+ "label": "blur-slide",
220
+ "description": "标题逐词入场,y 0.38em→0 + blur 18→0 + opacity 0→1 三通道走同一条 ease-out 同步收敛,词间隔约 4f;副标题在标题收完前就错峰跟进",
221
+ "demo": "demos/typography/blur-slide/BlurSlide.tsx",
222
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/blur-slide.mp4?v=1790980736774"
223
+ }
224
+ ]
225
+ },
226
+ {
227
+ "id": "bottom-push-stack-wipe",
228
+ "category": "transition",
229
+ "summary": "底边上推换章——新场景连底色整屏从底边向上推入,把旧场景物理顶出画外,连推数章各配一种饱和底色,内容钉死在各自色底坐标系里随底色走",
230
+ "use": "多章节产品片的换章骨架(每章一个卖点一种底色);需要\"翻页节奏感\"贯穿全片的段落切换",
231
+ "duration": "demo 三连推 170f(~5.7s);单次推入 26f + 章内 hold ~1.2s",
232
+ "energy": "中",
233
+ "source": "references/shots/transition/bottom-push-stack-wipe.md",
234
+ "styles": [
235
+ {
236
+ "key": "bottom-push-stack-wipe",
237
+ "label": "bottom-push-stack-wipe",
238
+ "description": "底边上推换章——新场景连底色整屏从底边向上推入,把旧场景物理顶出画外,连推数章各配一种饱和底色,内容钉死在各自色底坐标系里随底色走",
239
+ "demo": "demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx",
240
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/bottom-push-stack-wipe.mp4?v=1790980736775"
241
+ }
242
+ ]
243
+ },
244
+ {
245
+ "id": "brace-expand",
246
+ "category": "typography",
247
+ "summary": "一对紧贴的小花括号先在正中出现,随即带一次过冲向左右弹开并放大到标题级,文字 clip 宽度严格绑括号内缘、像被拉开幕布般从中间揭示,落定后字距再细微松弛",
248
+ "use": "开发者/技术产品的标题字卡;章节开场;需要\"一个符号完成揭示\"的极简一拍",
249
+ "duration": "约 4s(120f@30fps:光标 0–6f → 6f 小括号硬切 → 14f 弹开 → 40–64f 字距松弛 → 副标 → hold)",
250
+ "energy": "中(单次过冲是唯一峰值,其余静止)",
251
+ "source": "references/shots/typography/brace-expand.md",
252
+ "styles": [
253
+ {
254
+ "key": "brace-expand",
255
+ "label": "brace-expand",
256
+ "description": "一对紧贴的小花括号先在正中出现,随即带一次过冲向左右弹开并放大到标题级,文字 clip 宽度严格绑括号内缘、像被拉开幕布般从中间揭示,落定后字距再细微松弛",
257
+ "demo": "demos/typography/brace-expand/BraceExpand.tsx",
258
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/brace-expand.mp4?v=1790980736776"
259
+ }
260
+ ]
261
+ },
262
+ {
263
+ "id": "brand-frame-snap",
264
+ "category": "effects",
265
+ "summary": "品牌色画框语法——一圈粗纯色画框先于内容长出包住全屏,录屏窗口落进框内;模式切换时整圈画框同帧硬翻色+窗内布局同帧换,一个 borderColor 干完章节导航/状态提示/品牌露出三件事",
266
+ "use": "双模式/双章节产品片的全片包装层(蓝=模式A、绿=模式B 颜色编码);真实录屏素材的品牌化包裹",
267
+ "duration": "单次翻色 ~4.7s(140f);画框本身可全片驻场",
268
+ "energy": "中(翻色瞬间高,其余时间是安静的包装层)",
269
+ "source": "references/shots/effects/brand-frame-snap.md",
270
+ "styles": [
271
+ {
272
+ "key": "brand-frame-snap",
273
+ "label": "brand-frame-snap",
274
+ "description": "品牌色画框语法——一圈粗纯色画框先于内容长出包住全屏,录屏窗口落进框内;模式切换时整圈画框同帧硬翻色+窗内布局同帧换,一个 borderColor 干完章节导航/状态提示/品牌露出三件事",
275
+ "demo": "demos/effects/brand-frame-snap/BrandFrameSnap.tsx",
276
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/brand-frame-snap.mp4?v=1790980736777"
277
+ }
278
+ ]
279
+ },
280
+ {
281
+ "id": "brand-ink-open",
282
+ "category": "opening",
283
+ "summary": "墨线十字准星描画→字标逐字压印→打字机副标→满一秒静止再上浮消散",
284
+ "use": "品牌开场;任何\"先立名号再进产品\"的片头",
285
+ "duration": "约 2.8s(83f)",
286
+ "energy": "低(起步位,为后续镜头留爬升空间)",
287
+ "source": "references/shots/opening/brand-ink-open.md",
288
+ "styles": [
289
+ {
290
+ "key": "brand-ink-open",
291
+ "label": "brand-ink-open",
292
+ "description": "墨线十字准星描画→字标逐字压印→打字机副标→满一秒静止再上浮消散",
293
+ "demo": "demos/typography/brand-ink-open/BrandInkOpen.tsx",
294
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/brand-ink-open.mp4?v=1790980736778"
295
+ }
296
+ ]
297
+ },
298
+ {
299
+ "id": "canvas-materialize-moves",
300
+ "category": "interaction",
301
+ "summary": "内容\"物化上画布\"两式——panel-to-canvas 行倒卡(面板表格行沿弧线飞出、跨容器变形成画布卡片)与 diagram-cascade 级联生成树(prompt 打字后节点逐层弹出、连线先于节点生长)",
302
+ "use": "AI/协作工具\"生成结果落到画布上\"的叙事段落;A 式讲\"已有内容换了个存在形态\",B 式讲\"从一句话长出一棵结构\"",
303
+ "duration": "A ~5s(150f)/ B ~6s(180f)",
304
+ "energy": "中",
305
+ "source": "references/shots/interaction/canvas-materialize-moves.md",
306
+ "styles": [
307
+ {
308
+ "key": "panel-to-canvas",
309
+ "label": "panel-to-canvas 行倒卡",
310
+ "description": "复选框逐个自动打勾→按钮按下→三行沿上抛弧线错峰飞出,途中行形态与卡形态交叉淡化,落位带随机倾角;面板行槽塌陷成虚线留白",
311
+ "demo": "demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx",
312
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/panel-to-canvas.mp4?v=1790980736779"
313
+ },
314
+ {
315
+ "key": "diagram-cascade",
316
+ "label": "diagram-cascade 级联生成树",
317
+ "description": "prompt 逐字敲出(敲完描边变深确认)→根(深色)→2 子→4 孙逐层弹出,折角连线描线先行 8f,成树后整棵呼吸一拍",
318
+ "demo": "demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx",
319
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/diagram-cascade.mp4?v=1790980736780"
320
+ }
321
+ ]
322
+ },
323
+ {
324
+ "id": "card-flip-reveal",
325
+ "category": "transition",
326
+ "summary": "功能卡 3D 翻面揭示——卡片沿 Y 轴翻 180°,正面 UI 翻到侧棱最薄处掠过一道随角度移动的受光,背面揭出大号结论数字,逐张错峰扫过整排",
327
+ "use": "\"功能→成果\"的成对叙事:一排功能卡逐张翻出各自的指标/结论;元素级转场卡",
328
+ "duration": "全程 150f(~5s,含 hold);单卡 4f 预备 + 16f 翻 + ~10f 弹簧落定,三卡错峰 12f",
329
+ "energy": "中高",
330
+ "source": "references/shots/transition/card-flip-reveal.md",
331
+ "styles": [
332
+ {
333
+ "key": "card-flip-reveal",
334
+ "label": "card-flip-reveal",
335
+ "description": "功能卡 3D 翻面揭示——卡片沿 Y 轴翻 180°,正面 UI 翻到侧棱最薄处掠过一道随角度移动的受光,背面揭出大号结论数字,逐张错峰扫过整排",
336
+ "demo": "demos/transition/card-flip-reveal/CardFlipReveal.tsx",
337
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/card-flip-reveal.mp4?v=1790980736781"
338
+ }
339
+ ]
340
+ },
341
+ {
342
+ "id": "card-flock-tumble",
343
+ "category": "transition",
344
+ "summary": "三张 UI 页卡从侧棱薄边 3D 翻飞成阶梯站定(全程清晰、样条连续丝滑),站定后保持慢转不停,快速收束吸入中心,炸出单个湍流烟雾环扩散,巨字横贯收场",
345
+ "use": "能量高潮段(功能页群→品牌口号的爆点转场);霓虹/极光暗场调性;\"多页面能力\"收束成一句话的段落",
346
+ "duration": "翻飞 ~1.5s + 慢转展示 ~0.3s + 收束 0.3s + 烟环+巨字 ~2s;全段 4.5s",
347
+ "energy": "极高(全片能量顶点用)",
348
+ "source": "references/shots/transition/card-flock-tumble.md",
349
+ "styles": [
350
+ {
351
+ "key": "card-flock-tumble",
352
+ "label": "card-flock-tumble",
353
+ "description": "三张 UI 页卡从侧棱薄边 3D 翻飞成阶梯站定(全程清晰、样条连续丝滑),站定后保持慢转不停,快速收束吸入中心,炸出单个湍流烟雾环扩散,巨字横贯收场",
354
+ "demo": "demos/transition/card-flock-tumble/CardFlockTumble.tsx",
355
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/card-flock-tumble.mp4?v=1790980736782"
356
+ }
357
+ ]
358
+ },
359
+ {
360
+ "id": "card-stack",
361
+ "category": "ui-entrance",
362
+ "summary": "一组模板卡(demo 9 张)从屏幕下方逐张 spring 弹入、越落越快叠成一摞,全员落位后整摞一次性展成扇面——每张按序号偏转 6.5°、横移 138px,最后中心卡被抽出",
363
+ "use": "需要交代\"我们有一组东西\"的产品段落;卡片墙/模板库/方案列表的建立镜头,也能当 logo 前的一拍蓄势",
364
+ "duration": "约 5.0s(150f@30fps)",
365
+ "energy": "中高(入场是连续小爆发,展开段收成一次平滑的整体动作)",
366
+ "source": "references/shots/ui-entrance/card-stack.md",
367
+ "styles": [
368
+ {
369
+ "key": "card-stack",
370
+ "label": "card-stack",
371
+ "description": "一组模板卡(demo 9 张)从屏幕下方逐张 spring 弹入、越落越快叠成一摞,全员落位后整摞一次性展成扇面——每张按序号偏转 6.5°、横移 138px,最后中心卡被抽出",
372
+ "demo": "demos/ui-entrance/card-stack/CardStack.tsx",
373
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/card-stack.mp4?v=1790980736783"
374
+ }
375
+ ]
376
+ },
377
+ {
378
+ "id": "carousel-3d",
379
+ "category": "ui-entrance",
380
+ "summary": "8 张卡排成圆环整环自转一圈(匀速底 + 每 45° 一次停靠的分步),每卡只绕 Y 公转、自身 billboard 朝外,正反两层同向贴图配 backface-visibility:hidden 保证任何时刻都正立不倒置,正前方卡被点亮、环下字幕随之换字,相机全程钉在浅俯角",
381
+ "use": "作品集/模板库/集成清单的循环展示;需要无缝 loop 的背景拍或落地页 hero",
382
+ "duration": "约 5.6s(168f@30fps)",
383
+ "energy": "中(可无限循环的稳态运动,每 45° 一次停靠给出节拍)",
384
+ "source": "references/shots/ui-entrance/carousel-3d.md",
385
+ "styles": [
386
+ {
387
+ "key": "carousel-3d",
388
+ "label": "carousel-3d",
389
+ "description": "8 张卡排成圆环整环自转一圈(匀速底 + 每 45° 一次停靠的分步),每卡只绕 Y 公转、自身 billboard 朝外,正反两层同向贴图配 backface-visibility:hidden 保证任何时刻都正立不倒置,正前方卡被点亮、环下字幕随之换字,相机全程钉在浅俯角",
390
+ "demo": "demos/ui-entrance/carousel-3d/Carousel3D.tsx",
391
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/carousel-3d.mp4?v=1790980736784"
392
+ }
393
+ ]
394
+ },
395
+ {
396
+ "id": "chart-live-moves",
397
+ "category": "data",
398
+ "summary": "活体图表三式——oscilloscope-stream 示波流线(曲线右端实时写入+突发尖峰)、unit-dot-swarm-regroup 点阵重组(点群三幕迁徙聚成数字)、axis-rescale-shock 轴爆表重标(新值冲出画框逼 y 轴重标)",
399
+ "use": "数据叙事段落;分别讲\"实时性\"、\"每个数字是一个人\"、\"增长装不下\"",
400
+ "duration": "各 165–192f(5.5–6.4s)",
401
+ "energy": "中高(数据即剧情)",
402
+ "source": "references/shots/data/chart-live-moves.md",
403
+ "styles": [
404
+ {
405
+ "key": "oscilloscope-stream",
406
+ "label": "oscilloscope-stream",
407
+ "description": "采样窗平移 8px/f + 余弦包络尖峰 + 刹停真静止",
408
+ "demo": "demos/data/chart-live-moves/OscilloscopeStreamV2.tsx",
409
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/oscilloscope-stream.mp4?v=1790980736785"
410
+ },
411
+ {
412
+ "key": "unit-dot-swarm-regroup",
413
+ "label": "unit-dot-swarm-regroup",
414
+ "description": "三幕 spring 错峰迁徙(stiffness 150、错峰 8f),终幕点阵拼数字",
415
+ "demo": "demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx",
416
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/unit-dot-swarm-regroup.mp4?v=1790980736786"
417
+ },
418
+ {
419
+ "key": "axis-rescale-shock",
420
+ "label": "axis-rescale-shock",
421
+ "description": "冲出框 220px + 重标三联动(刻度换/网格密/旧线压扁)+ 震 8px",
422
+ "demo": "demos/data/chart-live-moves/AxisRescaleShockV2.tsx",
423
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/axis-rescale-shock.mp4?v=1790980736787"
424
+ }
425
+ ]
426
+ },
427
+ {
428
+ "id": "chip-grid-single-select-blackout",
429
+ "category": "interaction",
430
+ "summary": "五个选项 chip 以 3+2 居中排布逐个淡入;选中帧先插一帧灰色按压块,紧接数帧内底色变墨黑、文字变白并做 1→1.04→1 极轻回弹,其余 chip 淡到 18% 但位置锁死;随后余项归零,黑 chip 上移收窄,下方升起结算价格",
431
+ "use": "单选/套餐/档位选择的交互演示;\"选了它之后会怎样\"的因果镜头;价格/参数结算类链路",
432
+ "duration": "约5.5s(165f@30fps)",
433
+ "energy": "中低(唯一的爆点是那一帧灰闪,其余都在收)",
434
+ "source": "references/shots/interaction/chip-grid-single-select-blackout.md",
435
+ "styles": [
436
+ {
437
+ "key": "chip-grid-single-select-blackout",
438
+ "label": "chip-grid-single-select-blackout",
439
+ "description": "五个选项 chip 以 3+2 居中排布逐个淡入;选中帧先插一帧灰色按压块,紧接数帧内底色变墨黑、文字变白并做 1→1.04→1 极轻回弹,其余 chip 淡到 18% 但位置锁死;随后余项归零,黑 chip 上移收窄,下方升起结算价格",
440
+ "demo": "demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx",
441
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/chip-grid-single-select-blackout.mp4?v=1790980736788"
442
+ }
443
+ ]
444
+ },
445
+ {
446
+ "id": "circle-match-iris",
447
+ "category": "transition",
448
+ "summary": "圆心匹配光圈切——光圈从页面上圆形元素的圆心炸开,圈内新页的圆形图表接在同一个圆上;匹配剪辑给光圈一个语义锚点",
449
+ "use": "前景有圆形元素(头像/图标/圆钮)、后景有圆形主体(donut 图/圆环进度)的接缝;转场技法卡",
450
+ "duration": "5.5s / 165f(入场+定睛 40f + 蓄力 7f + 接圆开圈 37f + sweep 58f + 静止 47f)",
451
+ "energy": "中高",
452
+ "source": "references/shots/transition/circle-match-iris.md",
453
+ "styles": [
454
+ {
455
+ "key": "circle-match-iris",
456
+ "label": "circle-match-iris",
457
+ "description": "圆心匹配光圈切——光圈从页面上圆形元素的圆心炸开,圈内新页的圆形图表接在同一个圆上;匹配剪辑给光圈一个语义锚点",
458
+ "demo": "demos/transition/circle-match-iris/CircleMatchIris.tsx",
459
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/circle-match-iris.mp4?v=1790980736789"
460
+ }
461
+ ]
462
+ },
463
+ {
464
+ "id": "cloner-depth-echo",
465
+ "category": "ui-entrance",
466
+ "summary": "克隆纵队——主卡瞬间\"复印\"出 7 个半透明分身沿斜向纵深排开成队,停一拍后全体加速吸回本体合一+弹跳",
467
+ "use": "\"多副本/多租户/规模感/批量处理\"卖点;一镜讲完\"一个=很多\"",
468
+ "duration": "138f(约 4.6s)",
469
+ "energy": "中(陈列-收束型)",
470
+ "source": "references/shots/ui-entrance/cloner-depth-echo.md",
471
+ "styles": [
472
+ {
473
+ "key": "cloner-depth-echo",
474
+ "label": "cloner-depth-echo",
475
+ "description": "克隆纵队——主卡瞬间\"复印\"出 7 个半透明分身沿斜向纵深排开成队,停一拍后全体加速吸回本体合一+弹跳",
476
+ "demo": "demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx",
477
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/cloner-depth-echo.mp4?v=1790980736790"
478
+ }
479
+ ]
480
+ },
481
+ {
482
+ "id": "collab-cursor-moves",
483
+ "category": "interaction",
484
+ "summary": "协作光标当演员——cast-ensemble 五光标群演氛围层(错峰飞入+正弦漂移+打字 cameo+聚拢围观)",
485
+ "use": "协作/多人主题的画布场景,给画面铺\"团队在场\"体温",
486
+ "duration": "A ~5.2s(156f)",
487
+ "energy": "A 低中(氛围层,可垫任何时长)",
488
+ "source": "references/shots/interaction/collab-cursor-moves.md",
489
+ "styles": [
490
+ {
491
+ "key": "cast-ensemble",
492
+ "label": "cast-ensemble",
493
+ "description": "协作光标当演员——cast-ensemble 五光标群演氛围层(错峰飞入+正弦漂移+打字 cameo+聚拢围观)",
494
+ "demo": "demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx",
495
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/cast-ensemble.mp4?v=1790980736791"
496
+ }
497
+ ]
498
+ },
499
+ {
500
+ "id": "countdown-arc-scatter",
501
+ "category": "typography",
502
+ "summary": "纸面表盘 9 个等大数字沿大弧切向排布,整盘扫过 96° 后减速急停,\"5\" 停在弧顶随即平移落位成标题首字符,其余数字带 blur 原地散去,标题逐词模糊淡入、末词转强调色",
503
+ "use": "倒计时/时长承诺类文案(\"5 min to install\");数据揭晓的一拍;需要\"仪表盘\"语汇的浅底短镜",
504
+ "duration": "约 3.3s(100f@30fps:扫动 ~30f + 落位 20f + 标题成句 + hold 22f;最短可压到 33f 单拍)",
505
+ "energy": "高(96° 大幅扫动压进 ~20 帧,纯冲击)",
506
+ "source": "references/shots/typography/countdown-arc-scatter.md",
507
+ "styles": [
508
+ {
509
+ "key": "countdown-arc-scatter",
510
+ "label": "countdown-arc-scatter",
511
+ "description": "纸面表盘 9 个等大数字沿大弧切向排布,整盘扫过 96° 后减速急停,\"5\" 停在弧顶随即平移落位成标题首字符,其余数字带 blur 原地散去,标题逐词模糊淡入、末词转强调色",
512
+ "demo": "demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx",
513
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/countdown-arc-scatter.mp4?v=1790980736792"
514
+ }
515
+ ]
516
+ },
517
+ {
518
+ "id": "crane-rise-reveal",
519
+ "category": "opening",
520
+ "summary": "升降臂拉升揭示——开场怼在一行数据特写,相机沿 Y 轴减速升起后拉,行行涌入直到整面 dashboard 铺满全幅",
521
+ "use": "\"从细节到全局\"的开场定场;与 drone-dive-landing(全局→单点俯冲)互为反向",
522
+ "duration": "5.5s(165f:特写 hold 24f + 拉升 102f + 落定/余波/静止 39f)",
523
+ "energy": "中高(持续单向运动,无冲击拍)",
524
+ "source": "references/shots/opening/crane-rise-reveal.md",
525
+ "styles": [
526
+ {
527
+ "key": "crane-rise-reveal",
528
+ "label": "crane-rise-reveal",
529
+ "description": "升降臂拉升揭示——开场怼在一行数据特写,相机沿 Y 轴减速升起后拉,行行涌入直到整面 dashboard 铺满全幅",
530
+ "demo": "demos/opening/crane-rise-reveal/CraneRiseReveal.tsx",
531
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/crane-rise-reveal.mp4?v=1790980736793"
532
+ }
533
+ ]
534
+ },
535
+ {
536
+ "id": "crash-zoom-punch",
537
+ "category": "camera",
538
+ "summary": "全景一拍急推到目标特写(6f),落位二选一——过冲回弹(弹性)或撞停震屏(重量)",
539
+ "use": "功能段\"点名\"镜头——把观众视线一拍按到目标卡/模块上;强调级用撞停",
540
+ "duration": "约 0.5s 动作 + 前后 hold(动作 6–11f,前 hold ≥30f 建立全景、后 hold ≥45f 读特写)",
541
+ "energy": "高(瞬时冲击,非持续高能)",
542
+ "source": "references/shots/camera/crash-zoom-punch.md",
543
+ "styles": [
544
+ {
545
+ "key": "crash-zoom-punch",
546
+ "label": "crash-zoom-punch",
547
+ "description": "全景一拍急推到目标特写(6f),落位二选一——过冲回弹(弹性)或撞停震屏(重量)",
548
+ "demo": "demos/camera/crash-zoom-punch/CrashZoomReal.tsx",
549
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/crash-zoom-punch.mp4?v=1790980736794"
550
+ }
551
+ ]
552
+ },
553
+ {
554
+ "id": "cursor-flyover",
555
+ "category": "camera",
556
+ "summary": "整页俯瞰后,相机依次飞到四个功能区 zoom-in 特写,SVG 光标先一步到位指点、点击留下涟漪并触发界面响应,最后拉回俯瞰",
557
+ "use": "单页产品的功能巡览:一镜带观众看完四个功能区,光标当\"导游手指\"",
558
+ "duration": "约 8.0s(240f@30fps;俯瞰 22f · 四站各 44f(飞行 20f + 停留 24f)· 拉回 24f · hold 18f)",
559
+ "energy": "中(等距巡航,节奏靠点击涟漪打点)",
560
+ "source": "references/shots/camera/cursor-flyover.md",
561
+ "styles": [
562
+ {
563
+ "key": "cursor-flyover",
564
+ "label": "cursor-flyover",
565
+ "description": "整页俯瞰后,相机依次飞到四个功能区 zoom-in 特写,SVG 光标先一步到位指点、点击留下涟漪并触发界面响应,最后拉回俯瞰",
566
+ "demo": "demos/camera/cursor-flyover/CursorFlyover.tsx",
567
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/cursor-flyover.mp4?v=1790980736795"
568
+ }
569
+ ]
570
+ },
571
+ {
572
+ "id": "dataviz-landscape-open",
573
+ "category": "opening",
574
+ "summary": "暗场支流线束地景开场——多条流线汇入主干、虚构 ID 标签浮在线上、相机重景深低速飞越",
575
+ "use": "品牌级抽象开场(\"数据宇宙\"隐喻),接亮场产品段或字标;与 glow-flyline-moves 分工:那卡是段落内卡片之间的连线叙事,本卡是开场专用的全画幅地景",
576
+ "duration": "5–8s(开场氛围段,一支片 ≤1 次;demo 180f)",
577
+ "energy": "低开缓升(起步位,为后续爬升留空间)",
578
+ "source": "references/shots/opening/dataviz-landscape-open.md",
579
+ "styles": [
580
+ {
581
+ "key": "dataviz-landscape-open",
582
+ "label": "dataviz-landscape-open",
583
+ "description": "暗场支流线束地景开场——多条流线汇入主干、虚构 ID 标签浮在线上、相机重景深低速飞越",
584
+ "demo": "demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx",
585
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/dataviz-landscape-open.mp4?v=1790980736796"
586
+ }
587
+ ]
588
+ },
589
+ {
590
+ "id": "deck-deal-flyin",
591
+ "category": "ui-entrance",
592
+ "summary": "暗色石墨桌面上的实体牌堆特写环绕开局,灯从牌堆亮到旁边的页面板,一摞卡像发牌一样硬加速甩进网格,相机追着发牌升起后仰、落在整块满板的跑道式俯瞰上定格",
593
+ "use": "展示\"内容量大/源源不断汇入\"的列表页与卡片墙;建立信息密度的第一印象",
594
+ "duration": "150f(约 5s:0–36 牌堆特写 + 预备,36–~101 发牌,108–150 满板 hold)",
595
+ "energy": "高(节奏爬升段主力,不放开场第一镜)",
596
+ "source": "references/shots/ui-entrance/deck-deal-flyin.md",
597
+ "styles": [
598
+ {
599
+ "key": "deck-deal-flyin",
600
+ "label": "deck-deal-flyin",
601
+ "description": "暗色石墨桌面上的实体牌堆特写环绕开局,灯从牌堆亮到旁边的页面板,一摞卡像发牌一样硬加速甩进网格,相机追着发牌升起后仰、落在整块满板的跑道式俯瞰上定格",
602
+ "demo": "demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx",
603
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/deck-deal-flyin.mp4?v=1790980736797"
604
+ }
605
+ ]
606
+ },
607
+ {
608
+ "id": "depth-layer-moves",
609
+ "category": "camera",
610
+ "summary": "分层深度运镜——多层视差滑轨:3 层速度梯度横移出纵深,滑轨落定时主角浮起",
611
+ "use": "平面截图要\"有厚度\"的段落:卡组 / 列表 / 整页的横向巡览",
612
+ "duration": "4–5.5s 持续(demo 165f)",
613
+ "energy": "中(质感型)",
614
+ "source": "references/shots/camera/depth-layer-moves.md",
615
+ "styles": [
616
+ {
617
+ "key": "multiplane",
618
+ "label": "multiplane",
619
+ "description": "分层深度运镜——多层视差滑轨:3 层速度梯度横移出纵深,滑轨落定时主角浮起",
620
+ "demo": "demos/camera/depth-layer-moves/MultiplaneReal.tsx",
621
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/multiplane.mp4?v=1790980736798"
622
+ }
623
+ ]
624
+ },
625
+ {
626
+ "id": "doc-park-left-pill-deal",
627
+ "category": "ui-entrance",
628
+ "summary": "文档不淡出而是向左滑出只露约 35% 宽并微缩到 0.92,右侧按旁白节奏慢速发牌三张白底描边药丸(outBack 弹入),每张落定后其下方字幕逐词加深、下一张到来前整句淡出,左侧文档全程极缓慢自动滚动保持\"正在被读\"",
629
+ "use": "旁白驱动的\"分析结论逐条给出\"段落;文档理解、推荐理由、审阅意见类产品的核心说明镜头",
630
+ "duration": "约 5.8s(174f@30fps)",
631
+ "energy": "低(慢发牌节奏,全片无峰值;靠自动滚动维持活性)",
632
+ "source": "references/shots/ui-entrance/doc-park-left-pill-deal.md",
633
+ "styles": [
634
+ {
635
+ "key": "doc-park-left-pill-deal",
636
+ "label": "doc-park-left-pill-deal",
637
+ "description": "文档不淡出而是向左滑出只露约 35% 宽并微缩到 0.92,右侧按旁白节奏慢速发牌三张白底描边药丸(outBack 弹入),每张落定后其下方字幕逐词加深、下一张到来前整句淡出,左侧文档全程极缓慢自动滚动保持\"正在被读\"",
638
+ "demo": "demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx",
639
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/doc-park-left-pill-deal.mp4?v=1790980736799"
640
+ }
641
+ ]
642
+ },
643
+ {
644
+ "id": "document-typewriter-reveal",
645
+ "category": "typography",
646
+ "summary": "悬浮在暗场里的整页真排版文档窗口在光标后自己\"写\"出来、侧栏跟进、历史条目逐个落入轨道,相机从斜侧标题特写一路后撤到全窗",
647
+ "use": "文档/报告/笔记类功能镜头;信息密度最高的一拍",
648
+ "duration": "150f(约 5s,含 history-list-stack 尾段与标语 hold)",
649
+ "energy": "低中(信息密度最高,节奏放稳让观众读字)",
650
+ "source": "references/shots/typography/document-typewriter-reveal.md",
651
+ "styles": [
652
+ {
653
+ "key": "document-typewriter-reveal",
654
+ "label": "document-typewriter-reveal",
655
+ "description": "悬浮在暗场里的整页真排版文档窗口在光标后自己\"写\"出来、侧栏跟进、历史条目逐个落入轨道,相机从斜侧标题特写一路后撤到全窗",
656
+ "demo": "demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx",
657
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/document-typewriter-reveal.mp4?v=1790980736800"
658
+ }
659
+ ]
660
+ },
661
+ {
662
+ "id": "draw-svg-trace",
663
+ "category": "ui-entrance",
664
+ "summary": "描边生长圈注——一条带笔头的墨线沿元素轮廓跑一圈把它\"画\"出来,闭合瞬间闪黑交棒、内容淡入;同套路可给标题画下划线",
665
+ "use": "单个卡片/图表/标题的被点名入场;元素级手法(整页级蓝图描线归 wall-reveal-moves B 式)",
666
+ "duration": "132f(预告 10f + 描边 40f + 闪黑交棒 16f + 下划线 18f + hold 40f,约 4.4s)",
667
+ "energy": "中",
668
+ "source": "references/shots/ui-entrance/draw-svg-trace.md",
669
+ "styles": [
670
+ {
671
+ "key": "draw-svg-trace",
672
+ "label": "draw-svg-trace",
673
+ "description": "描边生长圈注——一条带笔头的墨线沿元素轮廓跑一圈把它\"画\"出来,闭合瞬间闪黑交棒、内容淡入;同套路可给标题画下划线",
674
+ "demo": "demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx",
675
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/draw-svg-trace.mp4?v=1790980736801"
676
+ }
677
+ ]
678
+ },
679
+ {
680
+ "id": "element-body-moves",
681
+ "category": "ui-entrance",
682
+ "summary": "元素身体感——contact-shadow-lift 接触阴影离面抬升:卡抬起时桌上的阴影同步放大变淡,纸片离桌被阴影证明",
683
+ "use": "给\"位置在变\"之外补\"身体在变\":卡片点名给悬浮证据;配 2.5D 运镜与逐张点名",
684
+ "duration": "A 150f 5s",
685
+ "energy": "A 低中",
686
+ "source": "references/shots/ui-entrance/element-body-moves.md",
687
+ "styles": [
688
+ {
689
+ "key": "contact-shadow-lift",
690
+ "label": "contact-shadow-lift",
691
+ "description": "元素身体感——contact-shadow-lift 接触阴影离面抬升:卡抬起时桌上的阴影同步放大变淡,纸片离桌被阴影证明",
692
+ "demo": "demos/ui-entrance/element-body-moves/ContactShadowLift.tsx",
693
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/contact-shadow-lift.mp4?v=1790980736802"
694
+ }
695
+ ]
696
+ },
697
+ {
698
+ "id": "flying-words",
699
+ "category": "typography",
700
+ "summary": "22 个关键词按黄金角铺在扁椭圆截面上,沿 z 轴从远处飞到相机前擦身而过,透明度走 [0,1,0.5,0.2,0] 生命曲线,跑满 2 整圈首尾无缝",
701
+ "use": "关键词云/能力清单的动态背景;片头片尾的\"信息量\"垫底层;需要纵深穿越感的转场",
702
+ "duration": "约 6.0s(180f@30fps,2 个完整循环,可无缝接续)",
703
+ "energy": "高(全屏持续 3D 位移,画面无一刻静止)",
704
+ "source": "references/shots/typography/flying-words.md",
705
+ "styles": [
706
+ {
707
+ "key": "flying-words",
708
+ "label": "flying-words",
709
+ "description": "22 个关键词按黄金角铺在扁椭圆截面上,沿 z 轴从远处飞到相机前擦身而过,透明度走 [0,1,0.5,0.2,0] 生命曲线,跑满 2 整圈首尾无缝",
710
+ "demo": "demos/typography/flying-words/FlyingWords.tsx",
711
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/flying-words.mp4?v=1790980736803"
712
+ }
713
+ ]
714
+ },
715
+ {
716
+ "id": "fracture",
717
+ "category": "opening",
718
+ "summary": "5×5 瓦片从 3D 碎片态按中心波纹逐圈聚合成整面海报,停一拍亮字,随后全部碎片背离中心加速旋转飞出画面",
719
+ "use": "开场第一镜\"从混沌到成形\"的品牌/海报揭示;倒放或只取后半可作硬转场",
720
+ "duration": "约 5.2s(156f@30fps;聚合 0–2.6s · hold 1s · 飞散 1.5s)",
721
+ "energy": "高(两头高能、中段静止,适合压 BGM 重音起收)",
722
+ "source": "references/shots/opening/fracture.md",
723
+ "styles": [
724
+ {
725
+ "key": "fracture",
726
+ "label": "fracture",
727
+ "description": "5×5 瓦片从 3D 碎片态按中心波纹逐圈聚合成整面海报,停一拍亮字,随后全部碎片背离中心加速旋转飞出画面",
728
+ "demo": "demos/opening/fracture/Fracture.tsx",
729
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/fracture.mp4?v=1790980736804"
730
+ }
731
+ ]
732
+ },
733
+ {
734
+ "id": "fui-hud-moves",
735
+ "category": "effects",
736
+ "summary": "FUI/HUD 准星咬合——reticle-lock-on 四个 L 形角标组成的取景框从画外飞入、超调回弹后咬合锁定目标",
737
+ "use": "任何\"看这里\"的目标点名(替代箭头圈红,画面不冻结)",
738
+ "duration": "2–3s(demo 90f)",
739
+ "energy": "中高(咬合帧是打击点)",
740
+ "source": "references/shots/effects/fui-hud-moves.md",
741
+ "styles": [
742
+ {
743
+ "key": "reticle-lock-on",
744
+ "label": "reticle-lock-on",
745
+ "description": "FUI/HUD 准星咬合——reticle-lock-on 四个 L 形角标组成的取景框从画外飞入、超调回弹后咬合锁定目标",
746
+ "demo": "demos/effects/fui-hud-moves/ReticleLockOn.tsx",
747
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/reticle-lock-on.mp4?v=1790980736805"
748
+ }
749
+ ]
750
+ },
751
+ {
752
+ "id": "gauge-readout-moves",
753
+ "category": "data",
754
+ "summary": "仪表读数两式——needle-sweep-selftest 满弧扫针(点火自检指针甩满全弧再回落真值)与 tape-scroll-fixed-pointer 滚带定针(针不动刻度带滚过+冲刺刹车)",
755
+ "use": "dashboard 开场仪式/性能指标揭晓;A 多表盘开机感,B 单指标大跳变",
756
+ "duration": "A 140f(4.7s)/ B 150f(5s)",
757
+ "energy": "中高(机械仪式型)",
758
+ "source": "references/shots/data/gauge-readout-moves.md",
759
+ "styles": [
760
+ {
761
+ "key": "needle-sweep-selftest",
762
+ "label": "needle-sweep-selftest",
763
+ "description": "指针去程 ~12f ease-out 甩满弧,回程 ~20f 带 5-8° 过冲回摆落真值;多表错峰 3-5f;落定同帧盘下数值弹出",
764
+ "demo": "demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx",
765
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/needle-sweep-selftest.mp4?v=1790980736806"
766
+ },
767
+ {
768
+ "key": "tape-scroll-fixed-pointer",
769
+ "label": "tape-scroll-fixed-pointer",
770
+ "description": "长刻度带 translate:慢爬段→45px/f 冲刺 ~25f→spring 刹车过冲回摆停位;窗内读数同步刷新",
771
+ "demo": "demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx",
772
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/tape-scroll-fixed-pointer.mp4?v=1790980736807"
773
+ }
774
+ ]
775
+ },
776
+ {
777
+ "id": "glass-pill-dictation-typing",
778
+ "category": "interaction",
779
+ "summary": "一条定宽玻璃胶囊以约 1.25 倍略大弹出后缓落到位,内部自左淡到右浓铺一层强调色暖光;光标先行、随后匀速打出听写句,光(连同胶囊背后的环境光)随打字进度渐渐退去,收尾成一条中性的磨砂玻璃条",
780
+ "use": "语音/AI 输入框的登场;\"跟它说话\"的交互提示镜头;高能段之间的一个安静过渡拍",
781
+ "duration": "约3.3s(100f@30fps)",
782
+ "energy": "低(全片最安静的一拍,只有光在退)",
783
+ "source": "references/shots/interaction/glass-pill-dictation-typing.md",
784
+ "styles": [
785
+ {
786
+ "key": "glass-pill-dictation-typing",
787
+ "label": "glass-pill-dictation-typing",
788
+ "description": "一条定宽玻璃胶囊以约 1.25 倍略大弹出后缓落到位,内部自左淡到右浓铺一层强调色暖光;光标先行、随后匀速打出听写句,光(连同胶囊背后的环境光)随打字进度渐渐退去,收尾成一条中性的磨砂玻璃条",
789
+ "demo": "demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx",
790
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/glass-pill-dictation-typing.mp4?v=1790980736808"
791
+ }
792
+ ]
793
+ },
794
+ {
795
+ "id": "glitch-cycle",
796
+ "category": "typography",
797
+ "summary": "同一行等宽槽位循环轮播 4 条状态短语,每条头尾按概率关键帧 [1,0,0,0.1,0,0,1] 全乱码、中段偶发单字抖动,切换瞬间叠 RGB 分离与整行位移;末条概率收 0 保证收尾干净",
798
+ "use": "加载/构建/部署过程的状态播报;技术型片头的\"系统自述\";需要机器口吻推进时间的一段垫底",
799
+ "duration": "约 5.6s(168f@30fps;demo 每条短语 38f,末条延续到片尾作收尾 hold)",
800
+ "energy": "中高(持续的高频噪声脉冲,切换点是峰值)",
801
+ "source": "references/shots/typography/glitch-cycle.md",
802
+ "styles": [
803
+ {
804
+ "key": "glitch-cycle",
805
+ "label": "glitch-cycle",
806
+ "description": "同一行等宽槽位循环轮播 4 条状态短语,每条头尾按概率关键帧 [1,0,0,0.1,0,0,1] 全乱码、中段偶发单字抖动,切换瞬间叠 RGB 分离与整行位移;末条概率收 0 保证收尾干净",
807
+ "demo": "demos/typography/glitch-cycle/GlitchCycle.tsx",
808
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/glitch-cycle.mp4?v=1790980736809"
809
+ }
810
+ ]
811
+ },
812
+ {
813
+ "id": "glow-flyline-moves",
814
+ "category": "effects",
815
+ "summary": "暗场光斑与飞线三式——glow-orb-ambient 光斑底噪、flyline-arc 飞线连接、orb-flyline-relay 同帧共振组合",
816
+ "use": "全片唯一暗场段落的氛围与数据叙事:铺底噪用 A、讲数据流向用 B、要背景给前景搭腔用 C;Linear 官网味",
817
+ "duration": "A 170f(~5.7s)/ B 140f(~4.7s)/ C 165f(5.5s)",
818
+ "energy": "A 低(底噪级)/ B 中 / C 中高",
819
+ "source": "references/shots/effects/glow-flyline-moves.md",
820
+ "styles": [
821
+ {
822
+ "key": "glow-orb-ambient",
823
+ "label": "glow-orb-ambient",
824
+ "description": "三团 500-700px radial 光斑 + blur(100px),双正弦漂移;卡缘辉光按光斑距离 [180,720]px→[1,0] 加权取 max 驱动",
825
+ "demo": "demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx",
826
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/glow-orb-ambient.mp4?v=1790980736810"
827
+ },
828
+ {
829
+ "key": "flyline-arc",
830
+ "label": "flyline-arc",
831
+ "description": "手写 bezier 100 段采样,22f out-cubic 生长;光头条件挂载领跑,段 opacity 按离头距离渐隐;落点描边脉冲,可接力",
832
+ "demo": "demos/effects/glow-flyline-moves/FlylineArc.tsx",
833
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/flyline-arc.mp4?v=1790980736811"
834
+ },
835
+ {
836
+ "key": "orb-flyline-relay",
837
+ "label": "orb-flyline-relay",
838
+ "description": "A+B 焊接:光斑 surge 与卡脉冲共用落点帧,涨亮 1+1.6×surge、5f 起升 15f 消散",
839
+ "demo": "demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx",
840
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/orb-flyline-relay.mp4?v=1790980736812"
841
+ }
842
+ ]
843
+ },
844
+ {
845
+ "id": "gradient-transition",
846
+ "category": "transition",
847
+ "summary": "背景在 linear、radial、conic 三类 CSS 渐变间平滑过渡——角度、色标、中心、半径逐参数插值,段间交叉淡化换类型",
848
+ "use": "氛围底/章节底色的连续变奏;给静态排版段落提供\"活着\"的背景层",
849
+ "duration": "约 6.7s(200f@30fps;linear 0–2.3s · radial 1.9–4.4s · conic 3.9–6.7s)",
850
+ "energy": "低(纯背景运动,为前景内容让路)",
851
+ "source": "references/shots/transition/gradient-transition.md",
852
+ "styles": [
853
+ {
854
+ "key": "gradient-transition",
855
+ "label": "gradient-transition",
856
+ "description": "背景在 linear、radial、conic 三类 CSS 渐变间平滑过渡——角度、色标、中心、半径逐参数插值,段间交叉淡化换类型",
857
+ "demo": "demos/transition/gradient-transition/GradientTransition.tsx",
858
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/gradient-transition.mp4?v=1790980736813"
859
+ }
860
+ ]
861
+ },
862
+ {
863
+ "id": "gradient-word-sweep",
864
+ "category": "typography",
865
+ "summary": "黑底标语里关键词被渐变彩光从左到右快速扫过\"充能\"——波前字符辉光最强向后衰减,填满后字符间勾连细紫红闪电、整词稳态泛光呼吸",
866
+ "use": "标语里给单个动词/卖点词充能(Supercharged/faster/AI…);能量高潮段的文字戏;黑场品牌片的口号帧",
867
+ "duration": "扫充 ~15–20f(要快)+ 稳态闪电呼吸 1–2s;全段 2.5–3.5s",
868
+ "energy": "高(一词爆点,前后都该让位)",
869
+ "source": "references/shots/typography/gradient-word-sweep.md",
870
+ "styles": [
871
+ {
872
+ "key": "gradient-word-sweep",
873
+ "label": "gradient-word-sweep",
874
+ "description": "黑底标语里关键词被渐变彩光从左到右快速扫过\"充能\"——波前字符辉光最强向后衰减,填满后字符间勾连细紫红闪电、整词稳态泛光呼吸",
875
+ "demo": "demos/typography/gradient-word-sweep/GradientWordSweep.tsx",
876
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/gradient-word-sweep.mp4?v=1790980736814"
877
+ }
878
+ ]
879
+ },
880
+ {
881
+ "id": "grain-dissolve",
882
+ "category": "outro",
883
+ "summary": "整行字爆裂成沸腾颗粒噪点并浮现斜纹选区框,噪点云急速凝聚成更大号发光短字标,位移衰减归零定格",
884
+ "use": "收尾\"XX. Now Live\"式上线宣告;长句信息压缩成品牌短标的能量聚合拍",
885
+ "duration": "约 2.0s(60f@30fps;砂化 0.26–0.56s · 凝聚 1.2–1.42s · 凝固回落收尾)",
886
+ "energy": "中高(短促、一次性的能量脉冲,天然的 outro 卡点)",
887
+ "source": "references/shots/outro/grain-dissolve.md",
888
+ "styles": [
889
+ {
890
+ "key": "grain-dissolve",
891
+ "label": "grain-dissolve",
892
+ "description": "整行字爆裂成沸腾颗粒噪点并浮现斜纹选区框,噪点云急速凝聚成更大号发光短字标,位移衰减归零定格",
893
+ "demo": "demos/outro/grain-dissolve/GrainDissolve.tsx",
894
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/grain-dissolve.mp4?v=1790980736815"
895
+ }
896
+ ]
897
+ },
898
+ {
899
+ "id": "graze-face-tour",
900
+ "category": "camera",
901
+ "summary": "大倾角贴面游走特写——镜头贴着 UI 表面低飞掠过(侧栏树/顶栏/列表当地形),页面文字初始悬浮在界面上空带同形软影,随镜头行进先后加速贴落回界面",
902
+ "use": "功能区巡礼(把 UI 当地景飞掠);配合暗场+霓虹缘光做产品\"内部世界\"段落;界面内容逐区登场",
903
+ "duration": "单段 4–5s;可多段接力延长",
904
+ "energy": "中高(运镜持续推进+元素连续落位,信息密度高)",
905
+ "source": "references/shots/camera/graze-face-tour.md",
906
+ "styles": [
907
+ {
908
+ "key": "graze-face-tour",
909
+ "label": "graze-face-tour",
910
+ "description": "大倾角贴面游走特写——镜头贴着 UI 表面低飞掠过(侧栏树/顶栏/列表当地形),页面文字初始悬浮在界面上空带同形软影,随镜头行进先后加速贴落回界面",
911
+ "demo": "demos/camera/graze-face-tour/GrazeFaceTour.tsx",
912
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/graze-face-tour.mp4?v=1790980736816"
913
+ }
914
+ ]
915
+ },
916
+ {
917
+ "id": "hashtag-to-pill-materialize",
918
+ "category": "interaction",
919
+ "summary": "话题词打字实体化——居中打出 \"#word\"(红实心光标恒亮),1 帧硬切变成宽大胶囊标签,hold 后缩小左移落到页面标签位,再 1 帧硬切揭示成品页;\"两次硬切一次滑动\"的节奏骨架",
920
+ "use": "标签/分类/关键词功能的演示段(笔记 app 打 tag、话题聚合);\"输入 → 变成 UI 实体 → 归位到成品\"的三段式叙事",
921
+ "duration": "120f(4s)——打字 ~40f + 硬切胶囊 hold ~18f + 缩移 ~14f + 硬切揭示后静置 ~1.2s(原片 18–21.5s)",
922
+ "energy": "中(干脆利落,靠硬切给劲,不靠弹跳)",
923
+ "source": "references/shots/interaction/hashtag-to-pill-materialize.md",
924
+ "styles": [
925
+ {
926
+ "key": "hashtag-to-pill-materialize",
927
+ "label": "hashtag-to-pill-materialize",
928
+ "description": "话题词打字实体化——居中打出 \"#word\"(红实心光标恒亮),1 帧硬切变成宽大胶囊标签,hold 后缩小左移落到页面标签位,再 1 帧硬切揭示成品页;\"两次硬切一次滑动\"的节奏骨架",
929
+ "demo": "demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx",
930
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/hashtag-to-pill-materialize.mp4?v=1790980736817"
931
+ }
932
+ ]
933
+ },
934
+ {
935
+ "id": "icon-field-colorize",
936
+ "category": "opening",
937
+ "summary": "灰阶小图标点阵错峰浮现铺满全屏,停一拍后多道品牌色横带波纹极快向下扫翻全场——\"功能全景先摆满,品牌一瞬间点亮\"的开场/收束卡",
938
+ "use": "开场铺陈产品能力面(图标=功能宇宙)再一举打上品牌色;功能集合页、生态/集成规模展示、片头 logo 前垫场",
939
+ "duration": "浮现 ~45f 错峰 + 静置 ~10f + 翻色 12–45f + 终态静置;全段 3–6s(demo 170f:翻色走 30f 档 + 标题落版 + 终态 hold 1s)",
940
+ "energy": "中(浮现是铺垫,翻色瞬间是唯一爆点)",
941
+ "source": "references/shots/opening/icon-field-colorize.md",
942
+ "styles": [
943
+ {
944
+ "key": "icon-field-colorize",
945
+ "label": "icon-field-colorize",
946
+ "description": "灰阶小图标点阵错峰浮现铺满全屏,停一拍后多道品牌色横带波纹极快向下扫翻全场——\"功能全景先摆满,品牌一瞬间点亮\"的开场/收束卡",
947
+ "demo": "demos/opening/icon-field-colorize/IconFieldColorize.tsx",
948
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/icon-field-colorize.mp4?v=1790980736818"
949
+ }
950
+ ]
951
+ },
952
+ {
953
+ "id": "icon-performance-moves",
954
+ "category": "effects",
955
+ "summary": "图标表演——attention-bounce 求关注弹跳(图标连跳递增+落地压扁+镜头被吸引)",
956
+ "use": "半屏级 icon 特写段落;新功能引出",
957
+ "duration": "156f(5.2s)",
958
+ "energy": "蓄势引入",
959
+ "source": "references/shots/effects/icon-performance-moves.md",
960
+ "styles": [
961
+ {
962
+ "key": "attention-bounce",
963
+ "label": "attention-bounce",
964
+ "description": "图标表演——attention-bounce 求关注弹跳(图标连跳递增+落地压扁+镜头被吸引)",
965
+ "demo": "demos/effects/icon-performance-moves/AttentionBounce.tsx",
966
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/attention-bounce.mp4?v=1790980736819"
967
+ }
968
+ ]
969
+ },
970
+ {
971
+ "id": "impact-feedback",
972
+ "category": "effects",
973
+ "summary": "命中反馈两式——hit-counter 连招计数(顿帧+伤害数字+combo 跳字)、anime-impact 动漫打击帧(负片+集中线+色散)",
974
+ "use": "元素落位/撞击的\"命中一瞬\"——给砸入、撞停加游戏级手感;按强度阶梯选式",
975
+ "duration": "n/a(元素级技法,寄生在落位动作上;各式占用帧数见参数表)",
976
+ "energy": "高(瞬时冲击)",
977
+ "source": "references/shots/effects/impact-feedback.md",
978
+ "styles": [
979
+ {
980
+ "key": "hit-counter",
981
+ "label": "hit-counter 连招计数",
982
+ "description": "三卡接连砸入,每命中 = 顿帧 2f + 伤害数字上浮 + ×N 计数跳字逐次加码",
983
+ "demo": "demos/effects/impact-feedback/HitCounter.tsx",
984
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/hit-counter.mp4?v=1790980736820"
985
+ },
986
+ {
987
+ "key": "anime-impact",
988
+ "label": "anime-impact 打击帧",
989
+ "description": "crash-zoom 撞停的 3f 整幅负片反色 + 放射集中线 + 红青色散,第 4f 全撤",
990
+ "demo": "demos/effects/impact-feedback/AnimeImpact.tsx",
991
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/anime-impact.mp4?v=1790980736821"
992
+ }
993
+ ]
994
+ },
995
+ {
996
+ "id": "integration-hub-map",
997
+ "category": "ui-entrance",
998
+ "summary": "旧页面一次性快翻 180°(侧棱瞬间亮闪)落成新中枢页,五个集成 app 图标同帧弹现、随即五条彩虹光管同帧齐连,光管内输送脉冲持续流动——\"翻开新一页,生态一齐接入\"",
999
+ "use": "集成/生态能力段(一个产品连一切);版本翻新叙事(旧页翻成新页);暗场霓虹调性的功能高潮",
1000
+ "duration": "前摇 ~0.5s + 快翻 ~1.2s + 图标齐现 → 光管齐连两拍 ~0.7s + 输送呼吸 ≥1.5s;全段 4.5–5s",
1001
+ "energy": "中高(翻面是爆点,输送段是余韵)",
1002
+ "source": "references/shots/ui-entrance/integration-hub-map.md",
1003
+ "styles": [
1004
+ {
1005
+ "key": "integration-hub-map",
1006
+ "label": "integration-hub-map",
1007
+ "description": "旧页面一次性快翻 180°(侧棱瞬间亮闪)落成新中枢页,五个集成 app 图标同帧弹现、随即五条彩虹光管同帧齐连,光管内输送脉冲持续流动——\"翻开新一页,生态一齐接入\"",
1008
+ "demo": "demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx",
1009
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/integration-hub-map.mp4?v=1790980736822"
1010
+ }
1011
+ ]
1012
+ },
1013
+ {
1014
+ "id": "lead-word-zoom-assemble",
1015
+ "category": "typography",
1016
+ "summary": "首词以 2.3 倍字号占据画面中央、hold 期间继续推近 6%,随后一条曲线同时完成「缩回终字号」与「整行左滑归位」,后续词各自从槽位右侧 0.5em 被推进来;支点横向钉首词中心、纵向钉基线(挂载时实测),整行上移的同一时窗副行浮出,停一拍后整幕 crash-zoom 推近失焦交棒",
1017
+ "use": "品牌名/产品名的 Introducing 字卡;发布会式开场第二镜;一句话主张需要\"先让一个词占满画面、再把整句补齐\"的场合",
1018
+ "duration": "约 2.8s(84f@30fps;组句 f36 完成、上移与副行 f32–46、静止 26f、末 12f crash)",
1019
+ "energy": "中高(起手就是满画面的大字,但全程只有一次运动,没有二次冲击)",
1020
+ "source": "references/shots/typography/lead-word-zoom-assemble.md",
1021
+ "styles": [
1022
+ {
1023
+ "key": "lead-word-zoom-assemble",
1024
+ "label": "lead-word-zoom-assemble",
1025
+ "description": "首词以 2.3 倍字号占据画面中央、hold 期间继续推近 6%,随后一条曲线同时完成「缩回终字号」与「整行左滑归位」,后续词各自从槽位右侧 0.5em 被推进来;支点横向钉首词中心、纵向钉基线(挂载时实测),整行上移的同一时窗副行浮出,停一拍后整幕 crash-zoom 推近失焦交棒",
1026
+ "demo": "demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx",
1027
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/lead-word-zoom-assemble.mp4?v=1790980736823"
1028
+ }
1029
+ ]
1030
+ },
1031
+ {
1032
+ "id": "letterspace-materialize",
1033
+ "category": "opening",
1034
+ "summary": "大字距字标全字符并行连续描画结晶——所有字母同帧起笔、笔画像手写一样连续生长、同帧齐收成词;氛围底景上的品牌字标显影",
1035
+ "use": "片尾/片头品牌字标登场(大字距细骨架字标;demo 为 video-shotcraft 全小写);章节题字;needs 静谧/高级感的收束帧",
1036
+ "duration": "静置 ~15f + 描画 ~50f + 终态静置 ≥30f;全段 3–4s",
1037
+ "energy": "低(静谧仪式感,一次呼吸完成)",
1038
+ "source": "references/shots/opening/letterspace-materialize.md",
1039
+ "styles": [
1040
+ {
1041
+ "key": "letterspace-materialize",
1042
+ "label": "letterspace-materialize",
1043
+ "description": "大字距字标全字符并行连续描画结晶——所有字母同帧起笔、笔画像手写一样连续生长、同帧齐收成词;氛围底景上的品牌字标显影",
1044
+ "demo": "demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx",
1045
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/letterspace-materialize.mp4?v=1790980736824"
1046
+ }
1047
+ ]
1048
+ },
1049
+ {
1050
+ "id": "light-play-moves",
1051
+ "category": "effects",
1052
+ "summary": "光效两式——spotlight-sweep 聚光扫字、sheen 单点扫光",
1053
+ "use": "把光当另一种笔触(扫/擦):暗场标题揭示(A)、主角卡加冕(B)",
1054
+ "duration": "A 170f ~5.7s / B 150f ~5s",
1055
+ "energy": "A 中 / B 低",
1056
+ "source": "references/shots/effects/light-play-moves.md",
1057
+ "styles": [
1058
+ {
1059
+ "key": "spotlight-sweep",
1060
+ "label": "spotlight-sweep",
1061
+ "description": "双层同文本:暗版 0.07 常驻,亮版 radial mask 随光斑走,锥形光摆两个来回后全亮定格",
1062
+ "demo": "demos/effects/light-play-moves/SpotlightSweepReveal.tsx",
1063
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/spotlight-sweep.mp4?v=1790980736825"
1064
+ },
1065
+ {
1066
+ "key": "sheen-sweep",
1067
+ "label": "sheen-sweep",
1068
+ "description": "深墨卡上 45° 高光带 translateX 扫一次,overflow hidden 圆角裁剪",
1069
+ "demo": "demos/effects/light-play-moves/SheenSweepRetry.tsx",
1070
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/sheen-sweep.mp4?v=1790980736826"
1071
+ }
1072
+ ]
1073
+ },
1074
+ {
1075
+ "id": "line-carry-transition",
1076
+ "category": "transition",
1077
+ "summary": "线条接力横移转场——场景 A 的进度条延伸出画,镜头跟线横移,线在移动中拐角围出场景 B 的卡框,全程无剪切",
1078
+ "use": "两个有图形亲缘的场景之间(进度条→卡框、下划线→图表轴);一支片子的招牌转场位,Catch Me If You Can 片头的图形接力",
1079
+ "duration": "~6.3s / 190f(进度条走满 36f + 冲出 10f + 横移 56f + 收框 24f + 框内海报 30f + 静止 24f)",
1080
+ "energy": "中",
1081
+ "source": "references/shots/transition/line-carry-transition.md",
1082
+ "styles": [
1083
+ {
1084
+ "key": "line-carry-transition",
1085
+ "label": "line-carry-transition",
1086
+ "description": "线条接力横移转场——场景 A 的进度条延伸出画,镜头跟线横移,线在移动中拐角围出场景 B 的卡框,全程无剪切",
1087
+ "demo": "demos/transition/line-carry-transition/LineCarryTransition.tsx",
1088
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/line-carry-transition.mp4?v=1790980736827"
1089
+ }
1090
+ ]
1091
+ },
1092
+ {
1093
+ "id": "list-reveal",
1094
+ "category": "ui-entrance",
1095
+ "summary": "垂直菜单 6 项按 10f 的间隔依次 scale 找位、软 back 轻微过冲落定,同时整个列表容器全程匀速上移——逐项入场与整体漂移是两层不相干的运动",
1096
+ "use": "导航/侧边栏/设置面板的入场;任何\"界面自己长出来\"的 UI 段落,也适合做旁白铺垫时的低能量底",
1097
+ "duration": "约 4s(120f@30fps)",
1098
+ "energy": "低(稳定节拍,无峰值;靠漂移维持画面不死)",
1099
+ "source": "references/shots/ui-entrance/list-reveal.md",
1100
+ "styles": [
1101
+ {
1102
+ "key": "list-reveal",
1103
+ "label": "list-reveal",
1104
+ "description": "垂直菜单 6 项按 10f 的间隔依次 scale 找位、软 back 轻微过冲落定,同时整个列表容器全程匀速上移——逐项入场与整体漂移是两层不相干的运动",
1105
+ "demo": "demos/ui-entrance/list-reveal/ListReveal.tsx",
1106
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/list-reveal.mp4?v=1790980736828"
1107
+ }
1108
+ ]
1109
+ },
1110
+ {
1111
+ "id": "list-stack-press",
1112
+ "category": "ui-entrance",
1113
+ "summary": "列表卡从画面底部逐张飞上摞起,每张落地压弹整摞、计数器同步跳一格",
1114
+ "use": "feed/雷达/收件箱类\"每天有新东西\"的镜头;强调持续积累的资产列表",
1115
+ "duration": "约 3s(18–88f)",
1116
+ "energy": "中",
1117
+ "source": "references/shots/ui-entrance/list-stack-press.md",
1118
+ "styles": [
1119
+ {
1120
+ "key": "list-stack-press",
1121
+ "label": "list-stack-press",
1122
+ "description": "列表卡从画面底部逐张飞上摞起,每张落地压弹整摞、计数器同步跳一格",
1123
+ "demo": "demos/ui-entrance/list-stack-press/ListStackPress.tsx",
1124
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/list-stack-press.mp4?v=1790980736829"
1125
+ }
1126
+ ]
1127
+ },
1128
+ {
1129
+ "id": "logo-shrink-wordmark-lockup",
1130
+ "category": "outro",
1131
+ "summary": "霓虹切口大环快速收束成中央实心小白 O、过冲刹车时换成 video-shotcraft 标志,图标左移让位,字标字母逐个滑入完成 lockup,强调色标语收尾",
1132
+ "use": "片尾品牌定妆:从满屏图形能量收束到\"图标+字标+标语\"的标准 lockup",
1133
+ "duration": "约 4.4s(132f@30fps;收束 0.1–1.2s · 让位 1.5–2.1s · 字母 2–2.7s · 标语 3.2–3.7s)",
1134
+ "energy": "中(收束段有冲击力,整体是沉稳的落定节奏)",
1135
+ "source": "references/shots/outro/logo-shrink-wordmark-lockup.md",
1136
+ "styles": [
1137
+ {
1138
+ "key": "logo-shrink-wordmark-lockup",
1139
+ "label": "logo-shrink-wordmark-lockup",
1140
+ "description": "霓虹切口大环快速收束成中央实心小白 O、过冲刹车时换成 video-shotcraft 标志,图标左移让位,字标字母逐个滑入完成 lockup,强调色标语收尾",
1141
+ "demo": "demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx",
1142
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/logo-shrink-wordmark-lockup.mp4?v=1790980736830"
1143
+ }
1144
+ ]
1145
+ },
1146
+ {
1147
+ "id": "magician-card-flourish",
1148
+ "category": "opening",
1149
+ "summary": "午夜蓝暗场上蓝色星芒闪现 0.3s(X 形针状光束旋转 90°+中心辉光放射小光芒),卡片从闪光点弹射而出——极速自旋弧线飞向镜头、自旋随靠近衰减、瞬间硬定格(卡高 86% 画高)、光脉冲 + sheen 扫光,右侧文案随后逐行揭示",
1150
+ "use": "单张卡片/海报/封面的魔术性登场(片头主视觉、产品卡揭晓);纯黑暗场;需要\"变出来\"仪式感的爆点",
1151
+ "duration": "156f(闪光 0.3s + 飞行 1.6s + 定格/扫光/文案揭示 + hold 3.3s;全段 5.2s)",
1152
+ "energy": "高(一次性爆点,定格后即静)",
1153
+ "source": "references/shots/opening/magician-card-flourish.md",
1154
+ "styles": [
1155
+ {
1156
+ "key": "magician-card-flourish",
1157
+ "label": "magician-card-flourish",
1158
+ "description": "午夜蓝暗场上蓝色星芒闪现 0.3s(X 形针状光束旋转 90°+中心辉光放射小光芒),卡片从闪光点弹射而出——极速自旋弧线飞向镜头、自旋随靠近衰减、瞬间硬定格(卡高 86% 画高)、光脉冲 + sheen 扫光,右侧文案随后逐行揭示",
1159
+ "demo": "demos/opening/magician-card-flourish/MagicianCardFlourish.tsx",
1160
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/magician-card-flourish.mp4?v=1790980736831"
1161
+ }
1162
+ ]
1163
+ },
1164
+ {
1165
+ "id": "marker-underline-title",
1166
+ "category": "typography",
1167
+ "summary": "大标题落定后,关键词下方马克笔下划线从左到右快速描画——变宽笔形、毛糙边缘、微上斜跟随斜体字势,贴着字底",
1168
+ "use": "标题里强调单个关键词(new/free/AI…);手写感/人味的品牌调性;正文标注式强调",
1169
+ "duration": "标题落定 +4~8f 后起笔,划线 8–12f,总 1–1.5s",
1170
+ "energy": "低(一笔点睛,不抢标题的戏)",
1171
+ "source": "references/shots/typography/marker-underline-title.md",
1172
+ "styles": [
1173
+ {
1174
+ "key": "marker-underline-title",
1175
+ "label": "marker-underline-title",
1176
+ "description": "大标题落定后,关键词下方马克笔下划线从左到右快速描画——变宽笔形、毛糙边缘、微上斜跟随斜体字势,贴着字底",
1177
+ "demo": "demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx",
1178
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/marker-underline-title.mp4?v=1790980736832"
1179
+ }
1180
+ ]
1181
+ },
1182
+ {
1183
+ "id": "mosaic-reframe",
1184
+ "category": "transition",
1185
+ "summary": "12 张瓦片在规则网格、feature mosaic、对角瀑布串三种排版间连续变形,位置宽高各自插值、逐片微错峰,段间留 hold",
1186
+ "use": "\"同一批内容多种看法\"的陈列转场:作品集/模板库/相册产品的布局能力展示",
1187
+ "duration": "约 7.1s(214f@30fps;浮现 0–22f · hold A · A→B 56–92f · hold B · B→C 132–176f · hold C 至 214f)",
1188
+ "energy": "中(连续流动的重排,无爆点,气质从容)",
1189
+ "source": "references/shots/transition/mosaic-reframe.md",
1190
+ "styles": [
1191
+ {
1192
+ "key": "mosaic-reframe",
1193
+ "label": "mosaic-reframe",
1194
+ "description": "12 张瓦片在规则网格、feature mosaic、对角瀑布串三种排版间连续变形,位置宽高各自插值、逐片微错峰,段间留 hold",
1195
+ "demo": "demos/transition/mosaic-reframe/MosaicReframe.tsx",
1196
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/mosaic-reframe.mp4?v=1790980736833"
1197
+ }
1198
+ ]
1199
+ },
1200
+ {
1201
+ "id": "neon-frame-forerun",
1202
+ "category": "ui-entrance",
1203
+ "summary": "强透视直角霓虹框自左缘两头奔画先行成型,页面在框内由暗转亮,同时框内组件/文字从 3D 上空带同形软影错峰贴落、随页面点亮同步完成贴合,背景霓虹群(demo 为同形框纵深回声隧道)终段熄灭让位",
1204
+ "use": "暗场品牌片里给 UI 面板做\"登场仪式\"(框先到、内容后落);功能区首次亮相;霓虹/赛博调性的段落开场",
1205
+ "duration": "框奔画 ~0.7s + 点亮&贴落 ~2.7s + 背景熄灭收束 ~1s;全段 4–4.7s(demo 140f)",
1206
+ "energy": "中高(三层动作叠进,但都服务同一次登场)",
1207
+ "source": "references/shots/ui-entrance/neon-frame-forerun.md",
1208
+ "styles": [
1209
+ {
1210
+ "key": "neon-frame-forerun",
1211
+ "label": "neon-frame-forerun",
1212
+ "description": "强透视直角霓虹框自左缘两头奔画先行成型,页面在框内由暗转亮,同时框内组件/文字从 3D 上空带同形软影错峰贴落、随页面点亮同步完成贴合,背景霓虹群(demo 为同形框纵深回声隧道)终段熄灭让位",
1213
+ "demo": "demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx",
1214
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/neon-frame-forerun.mp4?v=1790980736834"
1215
+ }
1216
+ ]
1217
+ },
1218
+ {
1219
+ "id": "neon-frame-orbit-drop",
1220
+ "category": "ui-entrance",
1221
+ "summary": "霓虹框先行描框后,镜头绕页面左→右弧线旋转,页面全部组件/文字**同帧**从空中往下贴合(同形软影同步收敛)——整体登场式的框内安放",
1222
+ "use": "单页 UI 的一次性隆重登场(与巡礼/逐区亮相相对);暗场霓虹调性段落的主视觉揭幕;neon-frame-forerun 的姊妹镜",
1223
+ "duration": "描框 ~0.5s + 旋转&同时贴落 ~2.5s + 落定 ~1s;全段 ~4.7s(140f,旋转到 128f 收住后留落定)",
1224
+ "energy": "中高(一次性的大动作,落定即静)",
1225
+ "source": "references/shots/ui-entrance/neon-frame-orbit-drop.md",
1226
+ "styles": [
1227
+ {
1228
+ "key": "neon-frame-orbit-drop",
1229
+ "label": "neon-frame-orbit-drop",
1230
+ "description": "霓虹框先行描框后,镜头绕页面左→右弧线旋转,页面全部组件/文字**同帧**从空中往下贴合(同形软影同步收敛)——整体登场式的框内安放",
1231
+ "demo": "demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx",
1232
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/neon-frame-orbit-drop.mp4?v=1790980736835"
1233
+ }
1234
+ ]
1235
+ },
1236
+ {
1237
+ "id": "neon-triple-marquee",
1238
+ "category": "outro",
1239
+ "summary": "三行对向霓虹跑马灯 recap——三连词空心霓虹灯管巨字上中下排满一面斜拍的砖墙,奇偶行反向匀速无限横滚,三行按 1/3 相位轮流点亮,结尾逐行断电",
1240
+ "use": "片尾主题词复读机段落;三连词口号的\"余韵\"拍法;音乐段无旁白铺陈",
1241
+ "duration": "4–5s(demo 150f:18f 逐行点火上电 + 循环体 + 18f 逐行断电 + 8f 熄灯 hold)",
1242
+ "energy": "中高(持续流动 + 逐行脉冲,无瞬时冲击)",
1243
+ "source": "references/shots/outro/neon-triple-marquee.md",
1244
+ "styles": [
1245
+ {
1246
+ "key": "neon-triple-marquee",
1247
+ "label": "neon-triple-marquee",
1248
+ "description": "三行对向霓虹跑马灯 recap——三连词空心霓虹灯管巨字上中下排满一面斜拍的砖墙,奇偶行反向匀速无限横滚,三行按 1/3 相位轮流点亮,结尾逐行断电",
1249
+ "demo": "demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx",
1250
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/neon-triple-marquee.mp4?v=1790980736836"
1251
+ }
1252
+ ]
1253
+ },
1254
+ {
1255
+ "id": "orbit-ring-title-open",
1256
+ "category": "opening",
1257
+ "summary": "石墨暗场上八张 16:9 暗色内容卡按 45° 均布在 720×380 椭圆上匀速公转(卡身永不倾斜,纵深只由 sin θ 给出 ±12% 缩放、z 序与远处压暗失焦),环撑开期间卡内容冻结首帧、f24 之后八张一起开播;居中两级标题逐字解糊下沉落定,关键词到位那一刻荧光马克块自左横扫铺满、扫过处字反白为墨,mono 副行随后浮出;可选末段整行失焦淡出、环继续转着交棒下一镜",
1258
+ "use": "开场第一镜 = 「这个产品有一整套东西」;素材库/模板库/功能矩阵/案例集的门面拍;需要用真实运动的产品画面托住一句主张,而不是把截图摆成静态九宫格",
1259
+ "duration": "150f(5s@30fps;马克块 f64 落定后 2.9s 稳态巡回 + 极缓推近;开 HANDOFF_EXIT 时 f118 起退场交棒)",
1260
+ "energy": "中(唯一的持续运动是匀速公转,全片只有马克块横扫一次冲击)",
1261
+ "source": "references/shots/opening/orbit-ring-title-open.md",
1262
+ "styles": [
1263
+ {
1264
+ "key": "orbit-ring-title-open",
1265
+ "label": "orbit-ring-title-open",
1266
+ "description": "石墨暗场上八张 16:9 暗色内容卡按 45° 均布在 720×380 椭圆上匀速公转(卡身永不倾斜,纵深只由 sin θ 给出 ±12% 缩放、z 序与远处压暗失焦),环撑开期间卡内容冻结首帧、f24 之后八张一起开播;居中两级标题逐字解糊下沉落定,关键词到位那一刻荧光马克块自左横扫铺满、扫过处字反白为墨,mono 副行随后浮出;可选末段整行失焦淡出、环继续转着交棒下一镜",
1267
+ "demo": "demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx",
1268
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/orbit-ring-title-open.mp4?v=1790980736837"
1269
+ }
1270
+ ]
1271
+ },
1272
+ {
1273
+ "id": "outline-word-fill",
1274
+ "category": "typography",
1275
+ "summary": "空心词(细暖灰描边、500 字重)从 3.2 倍急缓收缩落位,虚线大圆随后从 2.8 倍收到字周围并缓慢自转,左右水平虚线从画框边缘内伸;描边先微微增亮,实心白热字在一帧内硬切点亮,一闪辉光即定格",
1276
+ "use": "单词式利益点/口号的重锤一拍;节奏卡点上的\"钉子\"镜;深底品牌片的强调帧",
1277
+ "duration": "约 3.0s(90f@30fps,短促单拍 + 36f 落定)",
1278
+ "energy": "高(3.2 倍收缩 + 瞬时点亮,短时高冲击)",
1279
+ "source": "references/shots/typography/outline-word-fill.md",
1280
+ "styles": [
1281
+ {
1282
+ "key": "outline-word-fill",
1283
+ "label": "outline-word-fill",
1284
+ "description": "空心词(细暖灰描边、500 字重)从 3.2 倍急缓收缩落位,虚线大圆随后从 2.8 倍收到字周围并缓慢自转,左右水平虚线从画框边缘内伸;描边先微微增亮,实心白热字在一帧内硬切点亮,一闪辉光即定格",
1285
+ "demo": "demos/typography/outline-word-fill/OutlineWordFill.tsx",
1286
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/outline-word-fill.mp4?v=1790980736838"
1287
+ }
1288
+ ]
1289
+ },
1290
+ {
1291
+ "id": "outro-group-photo-launch",
1292
+ "category": "outro",
1293
+ "summary": "全片元素从四面八方飞来围住字标合影,crane 落机位+舞台光+金尘做成发布会收场",
1294
+ "use": "outro/品牌收尾;多功能产品的\"全家福\"式终镜",
1295
+ "duration": "约 4.8s(145f)",
1296
+ "energy": "峰值(全片最高点)",
1297
+ "source": "references/shots/outro/outro-group-photo-launch.md",
1298
+ "styles": [
1299
+ {
1300
+ "key": "outro-group-photo-launch",
1301
+ "label": "outro-group-photo-launch",
1302
+ "description": "全片元素从四面八方飞来围住字标合影,crane 落机位+舞台光+金尘做成发布会收场",
1303
+ "demo": "demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx",
1304
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/outro-group-photo-launch.mp4?v=1790980736839"
1305
+ }
1306
+ ]
1307
+ },
1308
+ {
1309
+ "id": "overhead-camera-moves",
1310
+ "category": "camera",
1311
+ "summary": "俯拍揭示两式——tilt-reveal 俯仰抬正揭示、overhead-tabletop-drop 桌面卡阵横滑骤降扎入",
1312
+ "use": "用\"俯仰角\"讲故事的开场/转场:单页 establishing 用 A,多页巡视择一扎入用 B",
1313
+ "duration": "A 120f(4s)/ B 140f(4.7s)",
1314
+ "energy": "A 中 / B 中高",
1315
+ "source": "references/shots/camera/overhead-camera-moves.md",
1316
+ "styles": [
1317
+ {
1318
+ "key": "tilt-reveal",
1319
+ "label": "tilt-reveal",
1320
+ "description": "perspective 容器内整页 rotateX -80° 平躺,~43f 抬正,rotateX/scale/translateY 共用 out-cubic,末端轻过冲",
1321
+ "demo": "demos/camera/overhead-camera-moves/TiltReveal.tsx",
1322
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/tilt-reveal.mp4?v=1790980736840"
1323
+ },
1324
+ {
1325
+ "key": "overhead-tabletop-drop",
1326
+ "label": "overhead-tabletop-drop",
1327
+ "description": "卡阵平躺 rotateX 62°,pan 段只动 translateX 横滑掠过,drop 段角度/缩放/位移三通道同跑扎入落版",
1328
+ "demo": "demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx",
1329
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/overhead-tabletop-drop.mp4?v=1790980736841"
1330
+ }
1331
+ ]
1332
+ },
1333
+ {
1334
+ "id": "page-turn-transitions",
1335
+ "category": "transition",
1336
+ "summary": "整页体块转场——barn-door-split 对开门裂幕(旧页裂两半滑出、新页迎上)",
1337
+ "use": "章节级换页:新旧交替的两个大段落之间的\"翻篇\"仪式;与 shot-transitions 系(镜头交棒)分工——那是\"航拍机移过去\",这是\"页面自己是实体\"",
1338
+ "duration": "单式 150f(前态建立 30–40f + 转场 24–40f + 跟随与收尾 ≥70f),约 5.0s",
1339
+ "energy": "中高",
1340
+ "source": "references/shots/transition/page-turn-transitions.md",
1341
+ "styles": [
1342
+ {
1343
+ "key": "barn-door-split",
1344
+ "label": "barn-door-split",
1345
+ "description": "整页体块转场——barn-door-split 对开门裂幕(旧页裂两半滑出、新页迎上)",
1346
+ "demo": "demos/transition/page-turn-transitions/BarnDoorSplit.tsx",
1347
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/barn-door-split.mp4?v=1790980736842"
1348
+ }
1349
+ ]
1350
+ },
1351
+ {
1352
+ "id": "page-waterfall-wall",
1353
+ "category": "ui-entrance",
1354
+ "summary": "页面瀑布墙——真实页面截图切成 3–4 列在 3D 后仰墙面上差速反向无限滚动,视差 + 镜头缓推做\"内容多到流不完\"的一览",
1355
+ "use": "\"多页面/多功能/多模板\"体量感段落;montage 中段铺陈或 intro 后的产品广度镜头",
1356
+ "duration": "4–6s(无限循环体,时长由段落需要裁)",
1357
+ "energy": "中(流动陈列型)",
1358
+ "source": "references/shots/ui-entrance/page-waterfall-wall.md",
1359
+ "styles": [
1360
+ {
1361
+ "key": "page-waterfall-wall",
1362
+ "label": "page-waterfall-wall",
1363
+ "description": "页面瀑布墙——真实页面截图切成 3–4 列在 3D 后仰墙面上差速反向无限滚动,视差 + 镜头缓推做\"内容多到流不完\"的一览",
1364
+ "demo": "demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx",
1365
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/page-waterfall-wall.mp4?v=1790980736843"
1366
+ }
1367
+ ]
1368
+ },
1369
+ {
1370
+ "id": "panel-grid-moves",
1371
+ "category": "rhythm",
1372
+ "summary": "分格节奏——comic-panel-split 漫画斜格劈出同一主体的三个机位,咔咔咔三格定格后末格斜边吃屏成海报",
1373
+ "use": "把\"格子\"当节奏器:同主体多机位定格并列,逐格踩拍劈出;吃拍点",
1374
+ "duration": "156f ≈5.2s(全屏侧拍 20f + 三刀分格定格 + 吃屏 + 海报 hold)",
1375
+ "energy": "中高",
1376
+ "source": "references/shots/rhythm/panel-grid-moves.md",
1377
+ "styles": [
1378
+ {
1379
+ "key": "comic-panel-split",
1380
+ "label": "comic-panel-split",
1381
+ "description": "分格节奏——comic-panel-split 漫画斜格劈出同一主体的三个机位,咔咔咔三格定格后末格斜边吃屏成海报",
1382
+ "demo": "demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx",
1383
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/comic-panel-split.mp4?v=1790980736844"
1384
+ }
1385
+ ]
1386
+ },
1387
+ {
1388
+ "id": "paper-title-card",
1389
+ "category": "typography",
1390
+ "summary": "一句话逐词压印上纸、一个词标强调色斜体、短划线收束",
1391
+ "use": "章节转场/价值主张字卡;重要功能出场前的引导卡;全片呼吸位",
1392
+ "duration": "1.7–1.8s(50–55f)",
1393
+ "energy": "低(呼吸位,隔开两段高能镜头)",
1394
+ "source": "references/shots/typography/paper-title-card.md",
1395
+ "styles": [
1396
+ {
1397
+ "key": "paper-title-card",
1398
+ "label": "paper-title-card",
1399
+ "description": "一句话逐词压印上纸、一个词标强调色斜体、短划线收束",
1400
+ "demo": "demos/typography/paper-title-card/PaperTitleCard.tsx",
1401
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/paper-title-card.mp4?v=1790980736845"
1402
+ }
1403
+ ]
1404
+ },
1405
+ {
1406
+ "id": "picker-carousel-feature-cycle",
1407
+ "category": "interaction",
1408
+ "summary": "移动端风竖向选择器——焦点药丸不动、内容穿过它,每项带明显 outQuint 减速吸附后完全静止,按到中心距离分层控制透明度/字号/灰度,落定时药丸做 scaleY 极轻呼吸",
1409
+ "use": "逐个念出功能名/场景名的列表镜头;\"选一个\"的交互演示;移动端产品的 picker 类控件展示",
1410
+ "duration": "约3.6s(108f@30fps)",
1411
+ "energy": "中(每一次吸附都是一个节拍点,5 拍匀速推进)",
1412
+ "source": "references/shots/interaction/picker-carousel-feature-cycle.md",
1413
+ "styles": [
1414
+ {
1415
+ "key": "picker-carousel-feature-cycle",
1416
+ "label": "picker-carousel-feature-cycle",
1417
+ "description": "移动端风竖向选择器——焦点药丸不动、内容穿过它,每项带明显 outQuint 减速吸附后完全静止,按到中心距离分层控制透明度/字号/灰度,落定时药丸做 scaleY 极轻呼吸",
1418
+ "demo": "demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx",
1419
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/picker-carousel-feature-cycle.mp4?v=1790980736846"
1420
+ }
1421
+ ]
1422
+ },
1423
+ {
1424
+ "id": "pill-chip-slot-cycle-handled",
1425
+ "category": "typography",
1426
+ "summary": "白底句式 \"Your `chip` Handled\" 里深色胶囊内词竖向滚轮轮换,胶囊宽度按预量文本宽插值平滑伸缩、两侧文字被自然挤开收拢,胶囊上下露出 13% 透明度的灰色幽灵项",
1427
+ "use": "\"我们替你搞定 ___\" 这类句式卖点;SaaS 功能列举的一句话收口;浅底品牌片主视觉一拍",
1428
+ "duration": "约 5.0s(150f@30fps:静置 → 3 次切换(0.25/0.47/0.69)→ 尾部静置)",
1429
+ "energy": "中(三拍稳定节拍,宽度伸缩是唯一的连续运动)",
1430
+ "source": "references/shots/typography/pill-chip-slot-cycle-handled.md",
1431
+ "styles": [
1432
+ {
1433
+ "key": "pill-chip-slot-cycle-handled",
1434
+ "label": "pill-chip-slot-cycle-handled",
1435
+ "description": "白底句式 \"Your `chip` Handled\" 里深色胶囊内词竖向滚轮轮换,胶囊宽度按预量文本宽插值平滑伸缩、两侧文字被自然挤开收拢,胶囊上下露出 13% 透明度的灰色幽灵项",
1436
+ "demo": "demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx",
1437
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/pill-chip-slot-cycle-handled.mp4?v=1790980736847"
1438
+ }
1439
+ ]
1440
+ },
1441
+ {
1442
+ "id": "pill-slot-cycle",
1443
+ "category": "typography",
1444
+ "summary": "句中词槽轮换——固定句干钉死不动,句尾 pill 徽章每 ~0.7s 老虎机滚一格(旧的上飞加速淡出、新的从下带模糊滑入),连换 N 个功能词后落成完整句子收束",
1445
+ "use": "\"功能列举\"类文案的最优雅解法(比逐条列表快、比字符级滚动有语义);一句话卖点 + 多个动词短语的段落",
1446
+ "duration": "入场 12f + 每拍 21f × 词数 + 收束 14f + hold;6 词约 6.7s(demo 200f,含 48f 完整句 hold)",
1447
+ "energy": "中(稳定节拍器,无峰值)",
1448
+ "source": "references/shots/typography/pill-slot-cycle.md",
1449
+ "styles": [
1450
+ {
1451
+ "key": "pill-slot-cycle",
1452
+ "label": "pill-slot-cycle",
1453
+ "description": "句中词槽轮换——固定句干钉死不动,句尾 pill 徽章每 ~0.7s 老虎机滚一格(旧的上飞加速淡出、新的从下带模糊滑入),连换 N 个功能词后落成完整句子收束",
1454
+ "demo": "demos/typography/pill-slot-cycle/PillSlotCycle.tsx",
1455
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/pill-slot-cycle.mp4?v=1790980736848"
1456
+ }
1457
+ ]
1458
+ },
1459
+ {
1460
+ "id": "print-texture-transitions",
1461
+ "category": "transition",
1462
+ "summary": "印刷质感转场——ink-bleed-reveal 墨渗揭示(须状渗边洇开吃掉旧景)",
1463
+ "use": "换景接缝的纸墨审美款;与交棒三式/穿越式并列的第三族——\"介质显影\"型转场",
1464
+ "duration": "4–4.5s(洇开段 55–80f + 静止收尾 ≥30f)",
1465
+ "energy": "中(渐进显形,无冲击拍)",
1466
+ "source": "references/shots/transition/print-texture-transitions.md",
1467
+ "styles": [
1468
+ {
1469
+ "key": "ink-bleed-reveal",
1470
+ "label": "ink-bleed-reveal 墨渗揭示",
1471
+ "description": "印刷质感转场——ink-bleed-reveal 墨渗揭示(须状渗边洇开吃掉旧景)",
1472
+ "demo": "demos/transition/print-texture-transitions/InkBleedReveal.tsx",
1473
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/ink-bleed-reveal.mp4?v=1790980736849"
1474
+ }
1475
+ ]
1476
+ },
1477
+ {
1478
+ "id": "product-card-progressive-assemble",
1479
+ "category": "ui-entrance",
1480
+ "summary": "详情卡像被逐字段抓取般自建——一枚\"填充光标\"领先跳格,图→标题→分类 pill 依次 pop→原价出现后被划线降级、强调色新价 spring 跳出→正文逐行揭示且高亮块由左向右刷过→色卡点亮→按钮填满,整卡全程极慢 scale 前推",
1481
+ "use": "商品/条目详情页的能力展示;\"结构化抽取\"\"自动填充\"\"数据自己长出来\"类叙事的主镜头",
1482
+ "duration": "约 5.7s(172f@30fps)",
1483
+ "energy": "中(连续小事件密集排布,无单点爆发;靠前推保持推进感)",
1484
+ "source": "references/shots/ui-entrance/product-card-progressive-assemble.md",
1485
+ "styles": [
1486
+ {
1487
+ "key": "product-card-progressive-assemble",
1488
+ "label": "product-card-progressive-assemble",
1489
+ "description": "详情卡像被逐字段抓取般自建——一枚\"填充光标\"领先跳格,图→标题→分类 pill 依次 pop→原价出现后被划线降级、强调色新价 spring 跳出→正文逐行揭示且高亮块由左向右刷过→色卡点亮→按钮填满,整卡全程极慢 scale 前推",
1490
+ "demo": "demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx",
1491
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/product-card-progressive-assemble.mp4?v=1790980736850"
1492
+ }
1493
+ ]
1494
+ },
1495
+ {
1496
+ "id": "quad-split-parallel-scenes",
1497
+ "category": "rhythm",
1498
+ "summary": "画面硬切 2×2 四宫格,四个象限并行跑各自的微场景(打字、急推、逐词、交互链),关键节拍错开 3–6 帧制造信息轰炸",
1499
+ "use": "节奏段\"功能很多、同时发生\"的蒙太奇拍;预告片中段的密度峰值",
1500
+ "duration": "90f(3s@30fps:0–62f 并行轰炸 + 28f 终态 hold,全程无转场)",
1501
+ "energy": "高(四线并行 + 错拍冲击,标准的 BGM 副歌位)",
1502
+ "source": "references/shots/rhythm/quad-split-parallel-scenes.md",
1503
+ "styles": [
1504
+ {
1505
+ "key": "quad-split-parallel-scenes",
1506
+ "label": "quad-split-parallel-scenes",
1507
+ "description": "画面硬切 2×2 四宫格,四个象限并行跑各自的微场景(打字、急推、逐词、交互链),关键节拍错开 3–6 帧制造信息轰炸",
1508
+ "demo": "demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx",
1509
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/quad-split-parallel-scenes.mp4?v=1790980736851"
1510
+ }
1511
+ ]
1512
+ },
1513
+ {
1514
+ "id": "radial-ripple-phone-chips",
1515
+ "category": "effects",
1516
+ "summary": "暖沙底四层同心圆错相呼吸如水波,中央手机 mockup 屏内 feed 自动缓滚,两侧白色 chip 先后 spring pop 入场并悬浮",
1517
+ "use": "移动端产品的\"这就是它\"定格镜头;功能点分列两侧的介绍段;片头/片尾的产品全景",
1518
+ "duration": "约5.6s(168f@30fps)",
1519
+ "energy": "低(安静、有呼吸感,靠同心圆的持续起伏撑住不冷场)",
1520
+ "source": "references/shots/effects/radial-ripple-phone-chips.md",
1521
+ "styles": [
1522
+ {
1523
+ "key": "radial-ripple-phone-chips",
1524
+ "label": "radial-ripple-phone-chips",
1525
+ "description": "暖沙底四层同心圆错相呼吸如水波,中央手机 mockup 屏内 feed 自动缓滚,两侧白色 chip 先后 spring pop 入场并悬浮",
1526
+ "demo": "demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx",
1527
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/radial-ripple-phone-chips.mp4?v=1790980736852"
1528
+ }
1529
+ ]
1530
+ },
1531
+ {
1532
+ "id": "radial-wave",
1533
+ "category": "ui-entrance",
1534
+ "summary": "17×9 圆点阵列按到波源的欧氏距离错峰点亮,每点 scale 过冲到 1.5 再落回常亮,第一道波扫完后第二道亮蓝脉冲从外圈反向收拢回中心",
1535
+ "use": "产品/品牌开场的\"系统上电\"一拍;也用作数据网格、节点地图、覆盖范围类叙事的建立镜头",
1536
+ "duration": "约 3.8s(114f@30fps)",
1537
+ "energy": "中高(起手爆发一次,波前过后转为常亮低能量底子)",
1538
+ "source": "references/shots/ui-entrance/radial-wave.md",
1539
+ "styles": [
1540
+ {
1541
+ "key": "radial-wave",
1542
+ "label": "radial-wave",
1543
+ "description": "17×9 圆点阵列按到波源的欧氏距离错峰点亮,每点 scale 过冲到 1.5 再落回常亮,第一道波扫完后第二道亮蓝脉冲从外圈反向收拢回中心",
1544
+ "demo": "demos/ui-entrance/radial-wave/RadialWave.tsx",
1545
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/radial-wave.mp4?v=1790980736853"
1546
+ }
1547
+ ]
1548
+ },
1549
+ {
1550
+ "id": "research-card-stack-scroll",
1551
+ "category": "ui-entrance",
1552
+ "summary": "深色论文卡每 12 帧一张沿右下轴线飞入中心叠压,落位带 1 帧压缩,只有最上一张全清晰渲染标题+作者+摘要,下方卡按堆积深度递增模糊变暗只露标题条,背景横向 grid 同步下移做速度参照",
1553
+ "use": "\"读了大量资料/处理了海量文档\"的量级交代;研究类、检索类、批处理类产品的能力镜头",
1554
+ "duration": "约 4.8s(144f@30fps)",
1555
+ "energy": "中高(匀速高频,无爆发但持续压迫)",
1556
+ "source": "references/shots/ui-entrance/research-card-stack-scroll.md",
1557
+ "styles": [
1558
+ {
1559
+ "key": "research-card-stack-scroll",
1560
+ "label": "research-card-stack-scroll",
1561
+ "description": "深色论文卡每 12 帧一张沿右下轴线飞入中心叠压,落位带 1 帧压缩,只有最上一张全清晰渲染标题+作者+摘要,下方卡按堆积深度递增模糊变暗只露标题条,背景横向 grid 同步下移做速度参照",
1562
+ "demo": "demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx",
1563
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/research-card-stack-scroll.mp4?v=1790980736854"
1564
+ }
1565
+ ]
1566
+ },
1567
+ {
1568
+ "id": "rhythm-interrupt-moves",
1569
+ "category": "rhythm",
1570
+ "summary": "打断节奏——jump-cut-punch-in 三级跳切推近:同构图三次无补间硬跳放大,逐级逼近目标",
1571
+ "use": "用\"打断连续性\"本身当节奏器:顿挫推近(A);与 beat-cut-moves(切点排布)互补",
1572
+ "duration": "A 135f ≈4.5s",
1573
+ "energy": "A 中",
1574
+ "source": "references/shots/rhythm/rhythm-interrupt-moves.md",
1575
+ "styles": [
1576
+ {
1577
+ "key": "jump-cut-punch-in",
1578
+ "label": "jump-cut-punch-in",
1579
+ "description": "打断节奏——jump-cut-punch-in 三级跳切推近:同构图三次无补间硬跳放大,逐级逼近目标",
1580
+ "demo": "demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx",
1581
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/jump-cut-punch-in.mp4?v=1790980736855"
1582
+ }
1583
+ ]
1584
+ },
1585
+ {
1586
+ "id": "riso-print-hits",
1587
+ "category": "effects",
1588
+ "summary": "套印错位冲击帧——riso-misregistration-hit 单发:标题撞停瞬间裂成双色 riso 印版,抖两下\"啪\"地套准",
1589
+ "use": "标题/卡片的命中强调,纸墨审美版的\"故障闪\";全片 1–2 次的单发高潮",
1590
+ "duration": "4s(120f,单发)",
1591
+ "energy": "高",
1592
+ "source": "references/shots/effects/riso-print-hits.md",
1593
+ "styles": [
1594
+ {
1595
+ "key": "misregistration-hit",
1596
+ "label": "misregistration-hit 单发",
1597
+ "description": "套印错位冲击帧——riso-misregistration-hit 单发:标题撞停瞬间裂成双色 riso 印版,抖两下\"啪\"地套准",
1598
+ "demo": "demos/effects/riso-print-hits/RisoMisregistrationHit.tsx",
1599
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/misregistration-hit.mp4?v=1790980736856"
1600
+ }
1601
+ ]
1602
+ },
1603
+ {
1604
+ "id": "row-embed",
1605
+ "category": "ui-entrance",
1606
+ "summary": "内容行像卡片一样从空中降下、rotateX 收平、嵌入瞬间底边亮一道强调色的缝",
1607
+ "use": "\"结构化数据长进页面\"的详情页/列表镜头;行级内容的批量入场",
1608
+ "duration": "约 2s(12–68f)",
1609
+ "energy": "中",
1610
+ "source": "references/shots/ui-entrance/row-embed.md",
1611
+ "styles": [
1612
+ {
1613
+ "key": "row-embed",
1614
+ "label": "row-embed",
1615
+ "description": "内容行像卡片一样从空中降下、rotateX 收平、嵌入瞬间底边亮一道强调色的缝",
1616
+ "demo": "demos/ui-entrance/row-embed/RowEmbed.tsx",
1617
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/row-embed.mp4?v=1790980736857"
1618
+ }
1619
+ ]
1620
+ },
1621
+ {
1622
+ "id": "sakuga-timing-shift",
1623
+ "category": "rhythm",
1624
+ "summary": "一拍三转一拍一——元素先以每 3 帧一步的手翻书顿挫移动,高潮瞬间切成逐帧丝滑冲刺,帧率量化的突变本身就是看点",
1625
+ "use": "单元素的强调性位移(卡片入场、指标冲线);需要\"手工感→高潮爆发\"反差的段落",
1626
+ "duration": "150f(5s)",
1627
+ "energy": "中高",
1628
+ "source": "references/shots/rhythm/sakuga-timing-shift.md",
1629
+ "styles": [
1630
+ {
1631
+ "key": "sakuga-timing-shift",
1632
+ "label": "sakuga-timing-shift",
1633
+ "description": "一拍三转一拍一——元素先以每 3 帧一步的手翻书顿挫移动,高潮瞬间切成逐帧丝滑冲刺,帧率量化的突变本身就是看点",
1634
+ "demo": "demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx",
1635
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/sakuga-timing-shift.mp4?v=1790980736858"
1636
+ }
1637
+ ]
1638
+ },
1639
+ {
1640
+ "id": "scan-bracket-sweep",
1641
+ "category": "effects",
1642
+ "summary": "文档弹到中央,四角落下 L 形取景括号,一条扫描光带拖着渐变尾迹在文档上往复扫 5 趟——文档全程静止,只有光在读它",
1643
+ "use": "\"正在解析/校验这份内容\"的过程镜头;文档类产品的能力演示;上传→分析链路的中段",
1644
+ "duration": "约5.0s(150f@30fps)",
1645
+ "energy": "中低(机械、克制,节奏全在往复扫掠的呼吸上)",
1646
+ "source": "references/shots/effects/scan-bracket-sweep.md",
1647
+ "styles": [
1648
+ {
1649
+ "key": "scan-bracket-sweep",
1650
+ "label": "scan-bracket-sweep",
1651
+ "description": "文档弹到中央,四角落下 L 形取景括号,一条扫描光带拖着渐变尾迹在文档上往复扫 5 趟——文档全程静止,只有光在读它",
1652
+ "demo": "demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx",
1653
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/scan-bracket-sweep.mp4?v=1790980736859"
1654
+ }
1655
+ ]
1656
+ },
1657
+ {
1658
+ "id": "scanline-annotate-focus",
1659
+ "category": "effects",
1660
+ "summary": "一条扫描线自上而下匀速掠过已存在的页面,越过哪块区块的下缘,哪块就被四角取景框从外扩处弹簧收拢对准(一次过冲),随后贴出一枚逐字打出的机器标签,顶部状态行同步计数 00/06→06/06",
1661
+ "use": "\"AI 正在读你的页面/品牌\"的分析镜头;设计系统/品牌规范的拆解介绍;产品能力的自我说明段",
1662
+ "duration": "约5s(150f@30fps)",
1663
+ "energy": "中(机械冷静,节奏由扫描线匀速推动,标注是节拍点)",
1664
+ "source": "references/shots/effects/scanline-annotate-focus.md",
1665
+ "styles": [
1666
+ {
1667
+ "key": "scanline-annotate-focus",
1668
+ "label": "scanline-annotate-focus",
1669
+ "description": "一条扫描线自上而下匀速掠过已存在的页面,越过哪块区块的下缘,哪块就被四角取景框从外扩处弹簧收拢对准(一次过冲),随后贴出一枚逐字打出的机器标签,顶部状态行同步计数 00/06→06/06",
1670
+ "demo": "demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx",
1671
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/scanline-annotate-focus.mp4?v=1790980736860"
1672
+ }
1673
+ ]
1674
+ },
1675
+ {
1676
+ "id": "scanline-assemble-flyin",
1677
+ "category": "effects",
1678
+ "summary": "页面开场是一张只有网格与虚线槽位的蓝图画板,一条亮扫描线自上而下掠过;扫到每个槽位,该处组件就从画外飞入过冲贴合,带方向性残影模糊与落位咬合角标——扫完整页恰好装配完成",
1679
+ "use": "\"页面自己生成\"的开场;AI 建站/自动排版类产品的核心演示;从空白到成品的能力叙事",
1680
+ "duration": "约5.2s(156f@30fps)",
1681
+ "energy": "中高(扫描线是稳的,但每次组件飞入都是一个爆点,密度递进)",
1682
+ "source": "references/shots/effects/scanline-assemble-flyin.md",
1683
+ "styles": [
1684
+ {
1685
+ "key": "scanline-assemble-flyin",
1686
+ "label": "scanline-assemble-flyin",
1687
+ "description": "页面开场是一张只有网格与虚线槽位的蓝图画板,一条亮扫描线自上而下掠过;扫到每个槽位,该处组件就从画外飞入过冲贴合,带方向性残影模糊与落位咬合角标——扫完整页恰好装配完成",
1688
+ "demo": "demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx",
1689
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/scanline-assemble-flyin.mp4?v=1790980736861"
1690
+ }
1691
+ ]
1692
+ },
1693
+ {
1694
+ "id": "scroll-brake-moves",
1695
+ "category": "data",
1696
+ "summary": "长卷急刹两式——changelog-scroll-brake 基本款(高速长卷指数减速精准停位+目标抬升)与 brake-reticle-lock 组合款(急刹帧同帧准星咬合)",
1697
+ "use": "changelog/发布史/长列表段落:\"一直在发货,今天这条最大\";要给停点更强打击感用 B",
1698
+ "duration": "A 4–5s / B 5s",
1699
+ "energy": "高开中收(速度对比型)",
1700
+ "source": "references/shots/data/scroll-brake-moves.md",
1701
+ "styles": [
1702
+ {
1703
+ "key": "changelog-scroll-brake",
1704
+ "label": "changelog-scroll-brake",
1705
+ "description": "translateY 扫 ~2400px(out exp 指数减速 ~50f),blur 由帧间位移差分驱动(0-6px 自动清零);停点行 scale 1.03 抬升+阴影+3px 描边,其余 opacity 退 0.38",
1706
+ "demo": "demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx",
1707
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/changelog-scroll-brake.mp4?v=1790980736862"
1708
+ },
1709
+ {
1710
+ "key": "brake-reticle-lock",
1711
+ "label": "brake-reticle-lock",
1712
+ "description": "滚动三段:sin-in 加速→cubic-out 猛减速冲过头 +30px→回弹落定;blur=v×0.12 封顶 24px;角标从 ±620/±320 画外 Easing.back(2.4) 飞入咬合,高亮 6f 内完成、标签 back(2.6) 弹出",
1713
+ "demo": "demos/data/scroll-brake-moves/BrakeReticleLock.tsx",
1714
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/brake-reticle-lock.mp4?v=1790980736863"
1715
+ }
1716
+ ]
1717
+ },
1718
+ {
1719
+ "id": "segmented-thumb-hero",
1720
+ "category": "interaction",
1721
+ "summary": "分段控件 thumb 位移当主角特写——超大胶囊 segmented control 弹簧浮入,描边箭头光标画外滑入按下,白 thumb 8f ease-out 滑到另一段,到位瞬间新图标 spring 弹出、旧图标收起",
1722
+ "use": "\"模式切换/二选一\"功能的宣告镜头(demo 的 video-shotcraft Prompt→Film、Chat→Agent 式);一个 UI 微交互撑一整镜的特写拍法",
1723
+ "duration": "~3.5s(demo 110f:浮入 18f + 光标 24f + 点击 + 滑动 8f + 图标弹出 + hold)",
1724
+ "energy": "中(微交互特写,精致不轰)",
1725
+ "source": "references/shots/interaction/segmented-thumb-hero.md",
1726
+ "styles": [
1727
+ {
1728
+ "key": "segmented-thumb-hero",
1729
+ "label": "segmented-thumb-hero",
1730
+ "description": "分段控件 thumb 位移当主角特写——超大胶囊 segmented control 弹簧浮入,描边箭头光标画外滑入按下,白 thumb 8f ease-out 滑到另一段,到位瞬间新图标 spring 弹出、旧图标收起",
1731
+ "demo": "demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx",
1732
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/segmented-thumb-hero.mp4?v=1790980736864"
1733
+ }
1734
+ ]
1735
+ },
1736
+ {
1737
+ "id": "shot-transitions",
1738
+ "category": "transition",
1739
+ "summary": "镜头交棒三式——推进流白、whip-pan 甩镜(急刹款)、mask-wipe 穿窗(纵深款),按能量落差与接缝语义选型",
1740
+ "use": "任何两镜衔接处(技法卡,分镜阶段排完镜头后逐个接缝选一式)",
1741
+ "duration": "n/a(技法卡;各式占用帧数见参数表,从相邻镜头预算里划)",
1742
+ "energy": "n/a(技法卡,不占能量位)",
1743
+ "source": "references/shots/transition/shot-transitions.md",
1744
+ "styles": [
1745
+ {
1746
+ "key": "flash-cut",
1747
+ "label": "推进流白 flash-cut",
1748
+ "description": "前镜相机推进,切点跨骑一层白闪盖住换页",
1749
+ "demo": "assets/lib/FlashCut.tsx",
1750
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/flash-cut.mp4?v=1784437314733"
1751
+ },
1752
+ {
1753
+ "key": "whip-pan",
1754
+ "label": "whip-pan 甩镜",
1755
+ "description": "机位一拍横甩到下一场景,中段运动模糊糊到不可辨,借糊帧换景",
1756
+ "demo": "demos/transition/shot-transitions/WhipBrakeReal.tsx",
1757
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/whip-pan.mp4?v=1790980736865"
1758
+ },
1759
+ {
1760
+ "key": "mask-wipe",
1761
+ "label": "mask-wipe 穿窗",
1762
+ "description": "页面内真实元素(卡片)放大成全屏窗口,新场景从窗内长出接管",
1763
+ "demo": "demos/transition/shot-transitions/PortalWipeV2.tsx",
1764
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/mask-wipe.mp4?v=1790980736866"
1765
+ }
1766
+ ]
1767
+ },
1768
+ {
1769
+ "id": "slam-entrance-moves",
1770
+ "category": "effects",
1771
+ "summary": "高能砸入三式——kanada-perspective-snap 金田透视急停、score-slam 比分砸落、impact-burst-kit 落点冲击套件(波及邻卡)",
1772
+ "use": "主角卡/KPI 卡的重拳入场;impact-feedback 管落位后的反馈,本卡管入场本身就是冲击",
1773
+ "duration": "单式动作段 6–22f + 冲击余波 ~16f + hold ≥45f(demo:A 120f / B 135f / C 140f)",
1774
+ "energy": "高",
1775
+ "source": "references/shots/effects/slam-entrance-moves.md",
1776
+ "styles": [
1777
+ {
1778
+ "key": "kanada-perspective-snap",
1779
+ "label": "kanada-perspective-snap",
1780
+ "description": "perspective 300→1500px + rotate3d 58°→0 + scale 1.7→1 甩入 18f,末 4f 过冲 +5° 弹平,长斜影收正",
1781
+ "demo": "demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx",
1782
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/kanada-perspective-snap.mp4?v=1790980736867"
1783
+ },
1784
+ {
1785
+ "key": "score-slam",
1786
+ "label": "score-slam",
1787
+ "description": "卡从 scale 2.5/rotate 5° 六帧 Easing.in(quad) 砸落,落点帧圆环扩散+尘点飞散+震屏同帧",
1788
+ "demo": "demos/effects/slam-entrance-moves/ScoreSlam.tsx",
1789
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/score-slam.mp4?v=1790980736868"
1790
+ },
1791
+ {
1792
+ "key": "impact-burst-kit",
1793
+ "label": "impact-burst-kit",
1794
+ "description": "B 三件套 + 冲击波前沿按半径-距离精算扫过邻卡帧,邻卡外推 30px + rotate ±3° 阻尼弹回",
1795
+ "demo": "demos/effects/slam-entrance-moves/ImpactBurstKit.tsx",
1796
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/impact-burst-kit.mp4?v=1790980736869"
1797
+ }
1798
+ ]
1799
+ },
1800
+ {
1801
+ "id": "space-camera-moves",
1802
+ "category": "camera",
1803
+ "summary": "3D 空间化运镜两式——exploded-view 爆炸分解(构件沿 Z 炸开再合体)、drone-dive-landing 无人机俯冲降落",
1804
+ "use": "把平面页面当 3D 实体拍的高光段落;两式都是\"大动作\",一支片合计 ≤2 次",
1805
+ "duration": "A 170f(5.7s,炸开-悬停-合体-收尾标题全程);C 105f(3.5s,俯冲 69f + 落定 hold 36f)单向俯冲",
1806
+ "energy": "高",
1807
+ "source": "references/shots/camera/space-camera-moves.md",
1808
+ "styles": [
1809
+ {
1810
+ "key": "exploded-view",
1811
+ "label": "exploded-view",
1812
+ "description": "整页 3D 倾斜后构件沿 Z 轴错峰炸开悬停,一拍后逆序合体震屏收口",
1813
+ "demo": "demos/camera/space-camera-moves/ExplodedView.tsx",
1814
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/exploded-view.mp4?v=1790980736870"
1815
+ },
1816
+ {
1817
+ "key": "drone-dive-landing",
1818
+ "label": "drone-dive-landing",
1819
+ "description": "近垂直俯角悬停 → 猛扎俯冲 → 气垫减速停在 hero 卡特写",
1820
+ "demo": "demos/camera/space-camera-moves/DroneDiveLanding.tsx",
1821
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/drone-dive-landing.mp4?v=1790980736871"
1822
+ }
1823
+ ]
1824
+ },
1825
+ {
1826
+ "id": "speed-ramp-freeze",
1827
+ "category": "rhythm",
1828
+ "summary": "帧号非线性 remap 的节奏手法——定格标注(流动→定格圈注→解冻)",
1829
+ "use": "卡片流/长横移中把一个重点\"停下给人看\";教学解说、评审语境",
1830
+ "duration": "定格标注全程 158f(≈5.3s,定格段 67f ≥45f)",
1831
+ "energy": "中高(速度反差本身即energy beat)",
1832
+ "source": "references/shots/rhythm/speed-ramp-freeze.md",
1833
+ "styles": [
1834
+ {
1835
+ "key": "freeze-annotate",
1836
+ "label": "freeze-annotate",
1837
+ "description": "帧号非线性 remap 的节奏手法——定格标注(流动→定格圈注→解冻)",
1838
+ "demo": "demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx",
1839
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/freeze-annotate.mp4?v=1790980736872"
1840
+ }
1841
+ ]
1842
+ },
1843
+ {
1844
+ "id": "spotlight-hero-card",
1845
+ "category": "opening",
1846
+ "summary": "关灯的剧场里一束钨丝聚光(带体积光柱)扫过页面锁定一张卡,斜侧推进后卡片弹起悬浮、香槟色光束沿轮廓两圈、连同 3D 注记一起贴回原位",
1847
+ "use": "\"单一主角\"式产品开场;把一个核心对象(卡片/条目/模块)立成全片主角",
1848
+ "duration": "172f(约 5.7s;锁定 f34 → 触地 f142 → 30f 真静止 hold)",
1849
+ "energy": "中(质感最高的一镜,节奏慢而稳)",
1850
+ "source": "references/shots/opening/spotlight-hero-card.md",
1851
+ "styles": [
1852
+ {
1853
+ "key": "spotlight-hero-card",
1854
+ "label": "spotlight-hero-card",
1855
+ "description": "关灯的剧场里一束钨丝聚光(带体积光柱)扫过页面锁定一张卡,斜侧推进后卡片弹起悬浮、香槟色光束沿轮廓两圈、连同 3D 注记一起贴回原位",
1856
+ "demo": "demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx",
1857
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/spotlight-hero-card.mp4?v=1790980736873"
1858
+ }
1859
+ ]
1860
+ },
1861
+ {
1862
+ "id": "spotlight-sweep-moves",
1863
+ "category": "effects",
1864
+ "summary": "暗场聚光显影三式——A 醒睡扫过(光到即亮光走即暗)、B 贴边泛光横摇(紫光贴 UI 边缘渗入+聚光匀速右移)、C 角落匀速显影(径向聚光从角落匀速扩张点亮全屏);黑场里\"光即叙事\"的 UI 展示",
1865
+ "use": "暗色调品牌片里逐个介绍 UI 面板/功能区;黑场开场把界面\"点亮\"登场;段落间光转场",
1866
+ "duration": "单式 3.5–4.5s;A/B 可串联成巡礼段",
1867
+ "energy": "中低(克制、神秘感,爆点在\"亮起\"瞬间)",
1868
+ "source": "references/shots/effects/spotlight-sweep-moves.md",
1869
+ "styles": [
1870
+ {
1871
+ "key": "glow-wake-sleep-panel",
1872
+ "label": "glow-wake-sleep-panel",
1873
+ "description": "醒睡扫过:radial 显影罩跟随光头从左向右匀速移动,贴顶边紫色光线三层辉光同行,经过 logo 描光、到右缘点亮竖直残光,尾段面板沉回黑暗",
1874
+ "demo": "demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx",
1875
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/glow-wake-sleep-panel.mp4?v=1790980736874"
1876
+ },
1877
+ {
1878
+ "key": "slide-spotlight-pan",
1879
+ "label": "slide-spotlight-pan",
1880
+ "description": "贴边泛光横摇:光线先绕左上角竖缘、转角后沿顶边横走,紫光晕染渗入 UI 顶部内侧;聚光头匀速右移显影 + 面板匀速左滑=相机右摇感",
1881
+ "demo": "demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx",
1882
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/slide-spotlight-pan.mp4?v=1790980736875"
1883
+ },
1884
+ {
1885
+ "key": "corner-spotlight-reveal",
1886
+ "label": "corner-spotlight-reveal",
1887
+ "description": "角落匀速显影:左上角径向聚光半径严格 linear 扩张,照到显影照不到沉黑,最终全屏亮起——光即转场",
1888
+ "demo": "demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx",
1889
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/corner-spotlight-reveal.mp4?v=1790980736876"
1890
+ }
1891
+ ]
1892
+ },
1893
+ {
1894
+ "id": "steep-tilt-glide",
1895
+ "category": "camera",
1896
+ "summary": "固定镜头下直立页面以 60° 强透视侧立(右近左远),页面自身沿其 3D 横面方向滑移掠过镜头(物动镜不动),滑移带速度重影、文字组件悬空贴落、由暗揭亮",
1897
+ "use": "长页面/多区块 UI 的炫技巡览(内容依次滑过固定机位);暗场霓虹调性;与贴面运镜卡互补的\"侧掠\"机位",
1898
+ "duration": "4s(120f)单镜;页面越宽越可拉长",
1899
+ "energy": "中高(透视炫技+持续运动,但节奏是匀的)",
1900
+ "source": "references/shots/camera/steep-tilt-glide.md",
1901
+ "styles": [
1902
+ {
1903
+ "key": "steep-tilt-glide",
1904
+ "label": "steep-tilt-glide",
1905
+ "description": "固定镜头下直立页面以 60° 强透视侧立(右近左远),页面自身沿其 3D 横面方向滑移掠过镜头(物动镜不动),滑移带速度重影、文字组件悬空贴落、由暗揭亮",
1906
+ "demo": "demos/camera/steep-tilt-glide/SteepTiltGlide.tsx",
1907
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/steep-tilt-glide.mp4?v=1790980736877"
1908
+ }
1909
+ ]
1910
+ },
1911
+ {
1912
+ "id": "stroke-segment-build",
1913
+ "category": "opening",
1914
+ "summary": "断笔成字——标题拆成十几段互不相连的笔画乱序逐段点亮,前 70% 不可读,末段落位瞬间语义\"啪\"地成立",
1915
+ "use": "开场吊悬念的产品名/大数字揭晓;一支片 ≤1 次;与 type-assembly/draw-svg-trace 分工:那些是\"看着字被组装/描画\",本卡是\"意义延迟揭晓\"",
1916
+ "duration": "165f(5.5s;揭晓 f105 后 hold 2s)",
1917
+ "energy": "低起中收(悬念型,落位帧是能量点)",
1918
+ "source": "references/shots/opening/stroke-segment-build.md",
1919
+ "styles": [
1920
+ {
1921
+ "key": "stroke-segment-build",
1922
+ "label": "stroke-segment-build",
1923
+ "description": "断笔成字——标题拆成十几段互不相连的笔画乱序逐段点亮,前 70% 不可读,末段落位瞬间语义\"啪\"地成立",
1924
+ "demo": "demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx",
1925
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/stroke-segment-build.mp4?v=1790980736878"
1926
+ }
1927
+ ]
1928
+ },
1929
+ {
1930
+ "id": "tear-streak-transitions",
1931
+ "category": "transition",
1932
+ "summary": "撕裂转场——glitch-displace 噪声撕裂(16 横条错位抖动中硬切),数字故障语义的条带级撕裂",
1933
+ "use": "高能换页:数字故障/断裂语义;页面完整性不破、能量拉满的条带级撕裂",
1934
+ "duration": "前态 ≥40f + 撕裂 16–24f + 收尾 ≥40f,约 4.5s(135f)",
1935
+ "energy": "高",
1936
+ "source": "references/shots/transition/tear-streak-transitions.md",
1937
+ "styles": [
1938
+ {
1939
+ "key": "glitch-displace",
1940
+ "label": "glitch-displace",
1941
+ "description": "撕裂转场——glitch-displace 噪声撕裂(16 横条错位抖动中硬切),数字故障语义的条带级撕裂",
1942
+ "demo": "demos/transition/tear-streak-transitions/GlitchDisplace.tsx",
1943
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/glitch-displace.mp4?v=1790980736879"
1944
+ }
1945
+ ]
1946
+ },
1947
+ {
1948
+ "id": "tension-camera-moves",
1949
+ "category": "camera",
1950
+ "summary": "情绪运镜两式——bullet-time 冻结环绕、pull-back 拉远孤立,相机替观众\"感受\"而非\"看\"",
1951
+ "use": "情绪节点(震撼/收束)的运镜语言;与 space-camera-moves 的\"炫技大动作\"互补——这两式动作小、情绪重",
1952
+ "duration": "单式 5–6s(150–170f);全片合计 ≤2 式(各 ≤1 次)",
1953
+ "energy": "A 高 / B 低收",
1954
+ "source": "references/shots/camera/tension-camera-moves.md",
1955
+ "styles": [
1956
+ {
1957
+ "key": "bullet-time-freeze-orbit",
1958
+ "label": "bullet-time-freeze-orbit 冻结环绕",
1959
+ "description": "图表生长到一半全冻住,相机绕悬停的 UI 平面 rotateY 扫 55° 再回,时间恢复接着长完",
1960
+ "demo": "demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx",
1961
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/bullet-time-freeze-orbit.mp4?v=1790980736880"
1962
+ },
1963
+ {
1964
+ "key": "pull-back-isolation",
1965
+ "label": "pull-back-isolation 拉远孤立",
1966
+ "description": "从发光主卡特写后拉,兄弟卡按距离错峰熄灭、背景沉黑,孤卡悬在暗场中央",
1967
+ "demo": "demos/camera/tension-camera-moves/PullBackIsolation.tsx",
1968
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/pull-back-isolation.mp4?v=1790980736881"
1969
+ }
1970
+ ]
1971
+ },
1972
+ {
1973
+ "id": "terminal-3d",
1974
+ "category": "camera",
1975
+ "summary": "三个终端窗散布 3D 空间,相机窗间飞行、途中正弦拉远,每到一窗打字机敲命令、结果逐行滑出——命令执行的空间叙事流",
1976
+ "use": "开发者产品的 CLI/工作流演示:把\"三步命令\"拍成三站空间旅程",
1977
+ "duration": "约 8.2s(246f@30fps;三站各约 2–3s 停留 + 两段 30f 飞行)",
1978
+ "energy": "中(飞行给动感、打字给节奏,整体是沉稳的技术叙事;收在 ● READY 一记亮点)",
1979
+ "source": "references/shots/camera/terminal-3d.md",
1980
+ "styles": [
1981
+ {
1982
+ "key": "terminal-3d",
1983
+ "label": "terminal-3d",
1984
+ "description": "三个终端窗散布 3D 空间,相机窗间飞行、途中正弦拉远,每到一窗打字机敲命令、结果逐行滑出——命令执行的空间叙事流",
1985
+ "demo": "demos/camera/terminal-3d/Terminal3D.tsx",
1986
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/terminal-3d.mp4?v=1790980736882"
1987
+ }
1988
+ ]
1989
+ },
1990
+ {
1991
+ "id": "text-as-mask",
1992
+ "category": "opening",
1993
+ "summary": "文字视频遮罩——瓷白舞台上切出超粗大标题字,字内部透出缓慢平移的暗色实时产品面板,结尾吸一口气后字形指数冲入放大 46 倍溢出、内部画面接管全屏",
1994
+ "use": "品牌词/口号与产品画面二合一的开场或章节卡;字是门、产品在门里",
1995
+ "duration": "165f(入场 18f + 字内漂移 78f + 吸气 8f + 冲入接管 24f + 落定/hold 37f)",
1996
+ "energy": "中高(漂移段沉稳,接管段一次爆发)",
1997
+ "source": "references/shots/opening/text-as-mask.md",
1998
+ "styles": [
1999
+ {
2000
+ "key": "text-as-mask",
2001
+ "label": "text-as-mask",
2002
+ "description": "文字视频遮罩——瓷白舞台上切出超粗大标题字,字内部透出缓慢平移的暗色实时产品面板,结尾吸一口气后字形指数冲入放大 46 倍溢出、内部画面接管全屏",
2003
+ "demo": "demos/opening/text-as-mask/TextAsMask.tsx",
2004
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/text-as-mask.mp4?v=1790980736883"
2005
+ }
2006
+ ]
2007
+ },
2008
+ {
2009
+ "id": "text-column-converge",
2010
+ "category": "typography",
2011
+ "summary": "双词对峙合拢——左\"NEW\"右特性词钉死在等屏边距两侧硬切轮换、全程零收缩,换到最后一词才唯一一次 ease-in-out 滑到居中咬合成短语,下方小字近乎硬切浮现;收尾揭晓型文字卡",
2012
+ "use": "特性清单收束到产品名/口号的段落(\"NEW × 一串特性 → NEW <产品名>\"式);发布会式 recap、版本号揭晓",
2013
+ "duration": "轮换 7–16f/词 × 8–9 词 + 合拢 ~36f + 小字后静置;全段约 5–6s",
2014
+ "energy": "中低(机器节奏、小字规格清单气质,不是砸字)",
2015
+ "source": "references/shots/typography/text-column-converge.md",
2016
+ "styles": [
2017
+ {
2018
+ "key": "text-column-converge",
2019
+ "label": "text-column-converge",
2020
+ "description": "双词对峙合拢——左\"NEW\"右特性词钉死在等屏边距两侧硬切轮换、全程零收缩,换到最后一词才唯一一次 ease-in-out 滑到居中咬合成短语,下方小字近乎硬切浮现;收尾揭晓型文字卡",
2021
+ "demo": "demos/typography/text-column-converge/TextColumnConverge.tsx",
2022
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/text-column-converge.mp4?v=1790980736884"
2023
+ }
2024
+ ]
2025
+ },
2026
+ {
2027
+ "id": "theme-switch-moves",
2028
+ "category": "interaction",
2029
+ "summary": "主题切换两式——theme-sweep 斜向扫场(边界扫过处就地换肤)与 palette-ripple 组合款(⌘K 面板收缩成点、涟漪从点荡开换肤)",
2030
+ "use": "深色模式/主题功能的叙事段落;同一 UI \"在你眼前变色\"而非切到新场景",
2031
+ "duration": "A 140f(4.7s)/ B 156f(5.2s)",
2032
+ "energy": "A 中 / B 中高(组合款有完整因果链)",
2033
+ "source": "references/shots/interaction/theme-switch-moves.md",
2034
+ "styles": [
2035
+ {
2036
+ "key": "theme-sweep-toggle",
2037
+ "label": "theme-sweep-toggle",
2038
+ "description": "深色版 clip-path polygon 15° 斜边扫场(out poly3 先快后缓 ~38f),边界 4px 白亮线+18px 辉光,扫完 2f 淡出;深版 scale 1→0.995→1 坐实",
2039
+ "demo": "demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx",
2040
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/theme-sweep-toggle.mp4?v=1790980736885"
2041
+ },
2042
+ {
2043
+ "key": "palette-theme-ripple",
2044
+ "label": "palette-theme-ripple",
2045
+ "description": "面板 back(1.9) 弹落→逐字输入→回车面板 ease-in 收缩到 0 + 白色高光核钉住位置→圆形 clip 半径 12→1250px cubic-out 荡开,边缘 5px 白环双向辉光",
2046
+ "demo": "demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx",
2047
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/palette-theme-ripple.mp4?v=1790980736886"
2048
+ }
2049
+ ]
2050
+ },
2051
+ {
2052
+ "id": "timeline-travel",
2053
+ "category": "data",
2054
+ "summary": "时间轴横移——镜头沿水平刻度轴加速掠过版本刻度,每过一格卡片弹立短停,末刻度急停推近",
2055
+ "use": "changelog/里程碑/发展史段落(\"我们一直在发货\"的另一种拍法);与 scroll-brake-moves 分工:那卡是纵向列表急刹,本卡是横向时间旅行",
2056
+ "duration": "4–5s",
2057
+ "energy": "中高(加速→急刹的节奏型镜头)",
2058
+ "source": "references/shots/data/timeline-travel.md",
2059
+ "styles": [
2060
+ {
2061
+ "key": "timeline-travel",
2062
+ "label": "timeline-travel",
2063
+ "description": "时间轴横移——镜头沿水平刻度轴加速掠过版本刻度,每过一格卡片弹立短停,末刻度急停推近",
2064
+ "demo": "demos/data/timeline-travel/TimelineTravel.tsx",
2065
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/timeline-travel.mp4?v=1790980736887"
2066
+ }
2067
+ ]
2068
+ },
2069
+ {
2070
+ "id": "title-demote-to-label",
2071
+ "category": "typography",
2072
+ "summary": "大标题降格为节标签两式——A 大标题居中显影站稳一拍后连续缩小 0.3x 平移到左上角落成小节标签、内容区在其下生长;B 同套路但登场时带文本选中态高亮块扫入再撤掉",
2073
+ "use": "章节开场(标题先当主角再让位给内容);教程/功能演示片的小节交接;B 式给\"文字/编辑\"类产品加身份暗示",
2074
+ "duration": "A ~3.7s(112f)/ B ~4.5s(134f);demo 两式串播 246f",
2075
+ "energy": "低中(版式变换型,氛围镜头)",
2076
+ "source": "references/shots/typography/title-demote-to-label.md",
2077
+ "styles": [
2078
+ {
2079
+ "key": "title-demote-to-label",
2080
+ "label": "title-demote-to-label",
2081
+ "description": "大标题降格为节标签两式——A 大标题居中显影站稳一拍后连续缩小 0.3x 平移到左上角落成小节标签、内容区在其下生长;B 同套路但登场时带文本选中态高亮块扫入再撤掉",
2082
+ "demo": "demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx",
2083
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/title-demote-to-label.mp4?v=1790980736888"
2084
+ }
2085
+ ]
2086
+ },
2087
+ {
2088
+ "id": "trailer-grammar-moves",
2089
+ "category": "rhythm",
2090
+ "summary": "预告片语法一式——trailer-bumper 前置速剪钩子:三镜 9f 速剪 + 黑场静默一拍,再开场标题",
2091
+ "use": "预告片的开场钩子(cold open):正片前先塞三个最抓眼的镜头,再静默一拍正式开场",
2092
+ "duration": "A ~4.7s(140f)",
2093
+ "energy": "A 高",
2094
+ "source": "references/shots/rhythm/trailer-grammar-moves.md",
2095
+ "styles": [
2096
+ {
2097
+ "key": "trailer-bumper",
2098
+ "label": "trailer-bumper",
2099
+ "description": "预告片语法一式——trailer-bumper 前置速剪钩子:三镜 9f 速剪 + 黑场静默一拍,再开场标题",
2100
+ "demo": "demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx",
2101
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/trailer-bumper.mp4?v=1790980736889"
2102
+ }
2103
+ ]
2104
+ },
2105
+ {
2106
+ "id": "transition-hidden-cut",
2107
+ "category": "transition",
2108
+ "summary": "藏切点转场三式——前景遮挡隐形切、对撞开屏、暖色漏光,硬切藏进遮挡/撞击/光峰的 1-3 帧里,观众看不见剪刀",
2109
+ "use": "两镜衔接处需要\"无痕换景\"或\"仪式感开屏\"时(技法卡,与 shot-transitions 三式同层选型)",
2110
+ "duration": "n/a(技法卡;各式占用帧数见参数表,从相邻镜头预算里划)",
2111
+ "energy": "n/a(技法卡,不占能量位)",
2112
+ "source": "references/shots/transition/transition-hidden-cut.md",
2113
+ "styles": [
2114
+ {
2115
+ "key": "invisible-cut",
2116
+ "label": "invisible-cut 前景遮挡隐形切",
2117
+ "description": "一张超画幅卡片带重运动模糊贴脸横扫,糊满全屏的遮挡帧内背景 A→B 硬切,卡片飞出观众以为还是同一镜",
2118
+ "demo": "demos/transition/transition-hidden-cut/InvisibleCut.tsx",
2119
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/invisible-cut.mp4?v=1790980736890"
2120
+ },
2121
+ {
2122
+ "key": "versus-slam",
2123
+ "label": "versus-slam 对撞开屏",
2124
+ "description": "左右两半屏带斜切边从画外加速对冲撞合,撞击帧白闪+震屏+VS 盖章,切点就是撞击本身",
2125
+ "demo": "demos/transition/transition-hidden-cut/VersusSlam.tsx",
2126
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/versus-slam.mp4?v=1790980736891"
2127
+ },
2128
+ {
2129
+ "key": "light-leak-burn",
2130
+ "label": "light-leak-burn 琥珀漏光",
2131
+ "description": "三团琥珀柔光沿对角线斜扫,光峰帧吞掉旧页约七成时硬切新页,光退散时新页已就位",
2132
+ "demo": "demos/transition/transition-hidden-cut/LightLeakBurn.tsx",
2133
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/light-leak-burn.mp4?v=1790980736892"
2134
+ }
2135
+ ]
2136
+ },
2137
+ {
2138
+ "id": "transition-travel",
2139
+ "category": "transition",
2140
+ "summary": "穿越式转场——字腔穿越:巨型章节标题的字形就是一扇窗,镜头钻进字形笔画完成换景",
2141
+ "use": "前后两镜存在\"元素/容器\"级空间关系的接缝(技法卡,与 shot-transitions 三式互补选用)",
2142
+ "duration": "n/a(技法卡;demo 150f,主推动作段 52f,前后 hold 另计,帧数从相邻镜头预算里划)",
2143
+ "energy": "n/a(技法卡,不占能量位)",
2144
+ "source": "references/shots/transition/transition-travel.md",
2145
+ "styles": [
2146
+ {
2147
+ "key": "letterform-zoom",
2148
+ "label": "字腔穿越 letterform-zoom",
2149
+ "description": "穿越式转场——字腔穿越:巨型章节标题的字形就是一扇窗,镜头钻进字形笔画完成换景",
2150
+ "demo": "demos/transition/transition-travel/LetterformZoom.tsx",
2151
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/letterform-zoom.mp4?v=1790980736893"
2152
+ }
2153
+ ]
2154
+ },
2155
+ {
2156
+ "id": "type-and-filter",
2157
+ "category": "interaction",
2158
+ "summary": "真实 UI 上打字搜索、网格自己收敛成一张卡、点击穿透进详情页",
2159
+ "use": "功能演示的\"操作叙事\"段;搜索/筛选/进入详情的任何交互链路",
2160
+ "duration": "约 2.5s(118–190f)",
2161
+ "energy": "中(发牌高能段之后的从容一拍)",
2162
+ "source": "references/shots/interaction/type-and-filter.md",
2163
+ "styles": [
2164
+ {
2165
+ "key": "type-and-filter",
2166
+ "label": "type-and-filter",
2167
+ "description": "真实 UI 上打字搜索、网格自己收敛成一张卡、点击穿透进详情页",
2168
+ "demo": "demos/interaction/type-and-filter/TypeAndFilter.tsx",
2169
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/type-and-filter.mp4?v=1790980736894"
2170
+ }
2171
+ ]
2172
+ },
2173
+ {
2174
+ "id": "type-assembly-moves",
2175
+ "category": "typography",
2176
+ "summary": "文字集结三式——split-text-stagger 逐字裂升、letterform-drift-assembly 漂移合拢、text-on-path 沿线流入",
2177
+ "use": "大标题/标语的入场;与 type-entrance-moves、document-typewriter-reveal 同属标题入场大品类,全片 ≤2 种",
2178
+ "duration": "单式 4–5.5s(动作段 A ~56f / B ~104f / C ~110f;demo 全长含 hold:A 130f / B 150f / C 160f,各自导出 `*_DURATION`)",
2179
+ "energy": "A 中 / B 中高 / C 中",
2180
+ "source": "references/shots/typography/type-assembly-moves.md",
2181
+ "styles": [
2182
+ {
2183
+ "key": "split-text-stagger",
2184
+ "label": "split-text-stagger 裂升",
2185
+ "description": "每字 overflow 盒内 translateY(115%→0) 带 10% 过冲,delay i×2f,基线同步生长",
2186
+ "demo": "demos/typography/type-assembly-moves/SplitTextStagger.tsx",
2187
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/split-text-stagger.mp4?v=1790980736895"
2188
+ },
2189
+ {
2190
+ "key": "drift-assembly",
2191
+ "label": "drift-assembly 漂移合拢",
2192
+ "description": "字符 seed 方向 ±300px + blur 8px 漂入错峰归位,锁定帧加深脉冲,合体后整词呼吸 1.04",
2193
+ "demo": "demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx",
2194
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/drift-assembly.mp4?v=1790980736896"
2195
+ },
2196
+ {
2197
+ "key": "text-on-path",
2198
+ "label": "text-on-path 沿线流入",
2199
+ "description": "字符沿贝塞尔曲线鱼贯滑入(切线角旋转),到达后 12f 摆正水平",
2200
+ "demo": "demos/typography/type-assembly-moves/TextOnPath.tsx",
2201
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/text-on-path.mp4?v=1790980736897"
2202
+ }
2203
+ ]
2204
+ },
2205
+ {
2206
+ "id": "type-entrance-moves",
2207
+ "category": "typography",
2208
+ "summary": "标题文字入场一式——letter-drop-physics 字符坠落(重力砸落、弹跳、歪斜站定,最后一拍集体立正归位)",
2209
+ "use": "大标题/章节字卡的入场;与 type-assembly-moves(集结系)、document-typewriter-reveal(打字机)同品类互斥选用",
2210
+ "duration": "单式 5s(含 hold 与静止收尾;动作段 ~116f,demo 150f)",
2211
+ "energy": "中高(物理趣味)",
2212
+ "source": "references/shots/typography/type-entrance-moves.md",
2213
+ "styles": [
2214
+ {
2215
+ "key": "letter-drop-physics",
2216
+ "label": "letter-drop-physics 字符坠落",
2217
+ "description": "标题文字入场一式——letter-drop-physics 字符坠落(重力砸落、弹跳、歪斜站定,最后一拍集体立正归位)",
2218
+ "demo": "demos/typography/type-entrance-moves/LetterDropPhysics.tsx",
2219
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/letter-drop-physics.mp4?v=1790980736898"
2220
+ }
2221
+ ]
2222
+ },
2223
+ {
2224
+ "id": "type-rhythm-sync",
2225
+ "category": "typography",
2226
+ "summary": "文字随声同步两式——font-weight-pump 字重脉冲(笔画随鼓点变粗弹回)与 karaoke-fill-sync 卡拉OK填色(词随旁白逐个点亮)",
2227
+ "use": "标题/标语与音轨强绑定的段落;A 绑节拍(鼓点),B 绑语音(旁白逐词)",
2228
+ "duration": "A FontWeightPump 165f / B KaraokeFillSync 150f;A 128 BPM 每拍 14f、衰减窗 9–13f,B 每词按语速 18–33f",
2229
+ "energy": "A 高(蹦迪感)/ B 中(跟读引导)",
2230
+ "source": "references/shots/typography/type-rhythm-sync.md",
2231
+ "styles": [
2232
+ {
2233
+ "key": "font-weight-pump",
2234
+ "label": "font-weight-pump 字重脉冲",
2235
+ "description": "命中帧笔画瞬间变粗(stroke+字重跳变),~10f 衰减弹回;重音拍额外撑宽 8%",
2236
+ "demo": "demos/typography/type-rhythm-sync/FontWeightPump.tsx",
2237
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/font-weight-pump.mp4?v=1790980736899"
2238
+ },
2239
+ {
2240
+ "key": "karaoke-fill-sync",
2241
+ "label": "karaoke-fill-sync 填色随读",
2242
+ "description": "每词深色从左到右填亮,进度跟语速,读完保持;活跃词下带读指下划线",
2243
+ "demo": "demos/typography/type-rhythm-sync/KaraokeFillSync.tsx",
2244
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/karaoke-fill-sync.mp4?v=1790980736900"
2245
+ }
2246
+ ]
2247
+ },
2248
+ {
2249
+ "id": "typewriter-moves",
2250
+ "category": "typography",
2251
+ "summary": "打字机 error-retype——误删重打的\"改口\"三幕剧:打出平庸词 → 犹豫 → 退格删掉 → 更快打出卖点词",
2252
+ "use": "slogan/卖点字卡、否定式文案;文字自带时间性的入场",
2253
+ "duration": "~5.3s(160f)",
2254
+ "energy": "中低",
2255
+ "source": "references/shots/typography/typewriter-moves.md",
2256
+ "styles": [
2257
+ {
2258
+ "key": "error-retype",
2259
+ "label": "error-retype",
2260
+ "description": "打字机 error-retype——误删重打的\"改口\"三幕剧:打出平庸词 → 犹豫 → 退格删掉 → 更快打出卖点词",
2261
+ "demo": "demos/typography/typewriter-moves/TypewriterErrorRetype.tsx",
2262
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/error-retype.mp4?v=1790980736901"
2263
+ }
2264
+ ]
2265
+ },
2266
+ {
2267
+ "id": "ui-strip-away-outro",
2268
+ "category": "outro",
2269
+ "summary": "减法式收尾——点击 Publish 后整个编辑器 UI 从外围到中心层层错峰蒸发,黑场上只剩那颗按钮滑到屏心放大,按钮再淡出交棒字标定版",
2270
+ "use": "\"发布/完成\"语义的 outro;想讲\"一键之后一切复杂性消失\"的产品收尾",
2271
+ "duration": "~4.8s(144f:光标就位 34f → 蒸发 ~40f → 按钮独占 → 字标接棒 → 字标 hold ≥1s)",
2272
+ "energy": "中(前段安静操作,中段持续退场,无瞬时冲击)",
2273
+ "source": "references/shots/outro/ui-strip-away-outro.md",
2274
+ "styles": [
2275
+ {
2276
+ "key": "ui-strip-away-outro",
2277
+ "label": "ui-strip-away-outro",
2278
+ "description": "减法式收尾——点击 Publish 后整个编辑器 UI 从外围到中心层层错峰蒸发,黑场上只剩那颗按钮滑到屏心放大,按钮再淡出交棒字标定版",
2279
+ "demo": "demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx",
2280
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/ui-strip-away-outro.mp4?v=1790980736902"
2281
+ }
2282
+ ]
2283
+ },
2284
+ {
2285
+ "id": "ui-to-brand-morph",
2286
+ "category": "outro",
2287
+ "summary": "UI 变品牌两式——icon-flip-bloom 图标 Y 轴翻扁成竖线、从竖线撑开成品牌标志(琥珀斜切随后划入)+ wordmark 逐字落定,与 input-morph-assemble 输入框收缩成取景框竖笔、三块图元落进构造槽位拼成完整标志",
2288
+ "use": "品牌收尾/outro 前最后一拍;\"你每天用的那个 UI 就是这个品牌\"的视觉论证",
2289
+ "duration": "A ~4.3s(130f)/ B ~5.6s(168f)",
2290
+ "energy": "中高(收尾点睛,一次完整变形讲完)",
2291
+ "source": "references/shots/outro/ui-to-brand-morph.md",
2292
+ "styles": [
2293
+ {
2294
+ "key": "icon-flip-bloom",
2295
+ "label": "icon-flip-bloom",
2296
+ "description": "图标 anticipation 晃两下→Y 轴 scaleX 压扁成竖线(双层拖影+blur)→最薄处实体交换、spring 展开成 video-shotcraft「镜刻」标志、琥珀斜切第二拍划入→标志左移让位、字标逐字落定",
2297
+ "demo": "demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx",
2298
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/icon-flip-bloom.mp4?v=1790980736903"
2299
+ },
2300
+ {
2301
+ "key": "input-morph-assemble",
2302
+ "label": "input-morph-assemble",
2303
+ "description": "光标点发送→文字飞走→输入框 x/y/w/h/r 五量 spring 插值成标志的竖框→上下横条与琥珀斜切从虚线构造框里依次落位拼成「镜刻」标志→左移让位、字标逐字落定",
2304
+ "demo": "demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx",
2305
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/input-morph-assemble.mp4?v=1790980736904"
2306
+ }
2307
+ ]
2308
+ },
2309
+ {
2310
+ "id": "value-stagger-gradient",
2311
+ "category": "ui-entrance",
2312
+ "summary": "16 根柱入场时 delay 是时间错峰,同时高度/色相/位移/模糊四个属性各自铺成从首到末的数值梯度;第二拍把错峰原点换成中心,脉冲幅度以中心为最大重新铺开",
2313
+ "use": "技法演示与参数化能力的展示镜头;也可直接当数据/频谱/均衡器类界面的入场",
2314
+ "duration": "约 5.0s(150f@30fps)",
2315
+ "energy": "中高(第一拍是连续铺开,第二拍中心脉冲是明确的一次峰值)",
2316
+ "source": "references/shots/ui-entrance/value-stagger-gradient.md",
2317
+ "styles": [
2318
+ {
2319
+ "key": "value-stagger-gradient",
2320
+ "label": "value-stagger-gradient",
2321
+ "description": "16 根柱入场时 delay 是时间错峰,同时高度/色相/位移/模糊四个属性各自铺成从首到末的数值梯度;第二拍把错峰原点换成中心,脉冲幅度以中心为最大重新铺开",
2322
+ "demo": "demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx",
2323
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/value-stagger-gradient.mp4?v=1790980736905"
2324
+ }
2325
+ ]
2326
+ },
2327
+ {
2328
+ "id": "vertical-word-roll-blur-cycle",
2329
+ "category": "typography",
2330
+ "summary": "句尾词换成竖向滚轮,3 次换词各 0.55s(outQuint 七成 + outBack 三成,前快后极慢带微过冲),相邻行按距离上垂直 blur 与灰度,中心词落定瞬间从灰染成强调色",
2331
+ "use": "\"Crafted for ___\" / \"Built for ___\" 这类句干 + 受众/对象列举的一句话卖点;浅底品牌片的干净一拍",
2332
+ "duration": "约 5.0s(150f@30fps:静置 → 3 次换词 → 尾部整组淡出)",
2333
+ "energy": "中(稳定三拍,无峰值)",
2334
+ "source": "references/shots/typography/vertical-word-roll-blur-cycle.md",
2335
+ "styles": [
2336
+ {
2337
+ "key": "vertical-word-roll-blur-cycle",
2338
+ "label": "vertical-word-roll-blur-cycle",
2339
+ "description": "句尾词换成竖向滚轮,3 次换词各 0.55s(outQuint 七成 + outBack 三成,前快后极慢带微过冲),相邻行按距离上垂直 blur 与灰度,中心词落定瞬间从灰染成强调色",
2340
+ "demo": "demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx",
2341
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/vertical-word-roll-blur-cycle.mp4?v=1790980736906"
2342
+ }
2343
+ ]
2344
+ },
2345
+ {
2346
+ "id": "voice-waveform-live",
2347
+ "category": "interaction",
2348
+ "summary": "录音胶囊实时声纹——64 根细竖条随\"说话\"起伏,说话时中部高耸、停顿缩成点线,波形从右往左滚动;说→停→说→提交塌缩的完整表演",
2349
+ "use": "语音输入/AI 助手\"正在听你说\"的功能镜头;无 UI 内容可展示但需要持续活性撑画面的段落",
2350
+ "duration": "172f(~5.7s:入场 14f + 说 1.4s + 停 0.8s + 说 1.4s + 提交塌缩 / 收进气泡 0.8s + hold 0.7s)",
2351
+ "energy": "中(功能性活性,不是炫技)",
2352
+ "source": "references/shots/interaction/voice-waveform-live.md",
2353
+ "styles": [
2354
+ {
2355
+ "key": "voice-waveform-live",
2356
+ "label": "voice-waveform-live",
2357
+ "description": "录音胶囊实时声纹——64 根细竖条随\"说话\"起伏,说话时中部高耸、停顿缩成点线,波形从右往左滚动;说→停→说→提交塌缩的完整表演",
2358
+ "demo": "demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx",
2359
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/voice-waveform-live.mp4?v=1790980736907"
2360
+ }
2361
+ ]
2362
+ },
2363
+ {
2364
+ "id": "wall-reveal-moves",
2365
+ "category": "ui-entrance",
2366
+ "summary": "整墙批量入场两式——bento 逐格点亮、蓝图描线成形,全部原位显形不位移,与 deck-deal-flyin 的飞入位移型互补成品类矩阵",
2367
+ "use": "功能墙/卡片墙/整页界面的整体亮相;内容已在原位、要\"显形\"而非\"涌入\"的段落",
2368
+ "duration": "单式约 5s(A 150f / B 150f @30fps,含建立 hold 与静止收尾)",
2369
+ "energy": "中",
2370
+ "source": "references/shots/ui-entrance/wall-reveal-moves.md",
2371
+ "styles": [
2372
+ {
2373
+ "key": "bento-light-up",
2374
+ "label": "bento-light-up 逐格点亮",
2375
+ "description": "暗场 3×2 bento 墙压暗待命,琥珀流光逐格描边一圈、内容随即提亮上浮,全亮后镜头缓推收住",
2376
+ "demo": "demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx",
2377
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/bento-light-up.mp4?v=1790980736908"
2378
+ },
2379
+ {
2380
+ "key": "wireframe-draw-on",
2381
+ "label": "wireframe-draw-on 蓝图描线成形",
2382
+ "description": "界面先以 SVG 细线蓝图分组描画,再一条琥珀发光竖线左→右扫过,扫过处线框实体化成真实界面",
2383
+ "demo": "demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx",
2384
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/wireframe-draw-on.mp4?v=1790980736909"
2385
+ }
2386
+ ]
2387
+ },
2388
+ {
2389
+ "id": "white-flash-logo-simplify-cut",
2390
+ "category": "transition",
2391
+ "summary": "液态金属质感的彩色词标静置流光,蓄力后从字心炸出一记白闪过曝,曝光回落时同一位置已是扁平版字标——一次闪白完成质感降维",
2392
+ "use": "品牌段落收束(华丽演绎→干净定妆);情绪从炫技切换到正式宣告的转场拍",
2393
+ "duration": "约 4s(120f@30fps;演出 0–34f · 蓄力 34–46f · 冲白 44–54f · 曝光回落 54–76f · 锁定 72–96f · hold 至 120f)",
2394
+ "energy": "中高(一次脉冲式重音,前后都是静场)",
2395
+ "source": "references/shots/transition/white-flash-logo-simplify-cut.md",
2396
+ "styles": [
2397
+ {
2398
+ "key": "white-flash-logo-simplify-cut",
2399
+ "label": "white-flash-logo-simplify-cut",
2400
+ "description": "液态金属质感的彩色词标静置流光,蓄力后从字心炸出一记白闪过曝,曝光回落时同一位置已是扁平版字标——一次闪白完成质感降维",
2401
+ "demo": "demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx",
2402
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/white-flash-logo-simplify-cut.mp4?v=1790980736910"
2403
+ }
2404
+ ]
2405
+ },
2406
+ {
2407
+ "id": "wipe-transitions",
2408
+ "category": "transition",
2409
+ "summary": "几何擦除转场——blinds-slice 百叶窗切条(12 根 3D 叶片错峰翻面成波,波扫过后整页由 A 换成 B)",
2410
+ "use": "新旧页都不动、一条几何边界扫过完成交接的通用转场;不依赖构图里有合适元素,哪儿都能用",
2411
+ "duration": "前态 ≥20f + 擦除 ~56f + 收尾 ≥40f,约 4.4s(132f)",
2412
+ "energy": "中",
2413
+ "source": "references/shots/transition/wipe-transitions.md",
2414
+ "styles": [
2415
+ {
2416
+ "key": "blinds-slice",
2417
+ "label": "blinds-slice",
2418
+ "description": "几何擦除转场——blinds-slice 百叶窗切条(12 根 3D 叶片错峰翻面成波,波扫过后整页由 A 换成 B)",
2419
+ "demo": "demos/transition/wipe-transitions/BlindsSlice.tsx",
2420
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/blinds-slice.mp4?v=1790980736911"
2421
+ }
2422
+ ]
2423
+ },
2424
+ {
2425
+ "id": "word-relay-filmstrip",
2426
+ "category": "typography",
2427
+ "summary": "左列黑白相间等高页面卡步进滚动(焦点卡全亮、邻卡离焦压暗)、右侧衬线大词原位接力(名词恒定+动词轮换)——切词瞬间才滚动一格,词块垂直中心与当前页面卡中点精确对齐",
2428
+ "use": "\"一个主体 × 多种能力\"的枚举段(Shotcraft frames/builds/ships…);作品集/案例流展示;产品多场景巡礼",
2429
+ "duration": "每词期 ~1.5–2s × 3–4 词;demo 180f(6s)",
2430
+ "energy": "中低(编辑部气质,节奏靠切词的\"咔哒\"感)",
2431
+ "source": "references/shots/typography/word-relay-filmstrip.md",
2432
+ "styles": [
2433
+ {
2434
+ "key": "word-relay-filmstrip",
2435
+ "label": "word-relay-filmstrip",
2436
+ "description": "左列黑白相间等高页面卡步进滚动(焦点卡全亮、邻卡离焦压暗)、右侧衬线大词原位接力(名词恒定+动词轮换)——切词瞬间才滚动一格,词块垂直中心与当前页面卡中点精确对齐",
2437
+ "demo": "demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx",
2438
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/word-relay-filmstrip.mp4?v=1790980736912"
2439
+ }
2440
+ ]
2441
+ },
2442
+ {
2443
+ "id": "word-relay-geometry",
2444
+ "category": "typography",
2445
+ "summary": "三个利益词各带一套专属几何接力——虚线大圆减速自转 + 彗星弧飞跑 → 三实线圆 trim 依次生长后收拢咬紧 → 镀铬金属 sheen 扫过后一拍收成纯白;旧词缩到 0.86 淡出,新词描边→填充揭示",
2446
+ "use": "三点式利益陈述(更快/更好/更强);品牌价值观段落;需要\"一词一世界\"的中段推进",
2447
+ "duration": "约 6.0s(180f@30fps:三段各 ≈60f,段间重叠 6f)",
2448
+ "energy": "中高(三拍推进 + 全程几何运动 + 背景粒子,无静止帧)",
2449
+ "source": "references/shots/typography/word-relay-geometry.md",
2450
+ "styles": [
2451
+ {
2452
+ "key": "word-relay-geometry",
2453
+ "label": "word-relay-geometry",
2454
+ "description": "三个利益词各带一套专属几何接力——虚线大圆减速自转 + 彗星弧飞跑 → 三实线圆 trim 依次生长后收拢咬紧 → 镀铬金属 sheen 扫过后一拍收成纯白;旧词缩到 0.86 淡出,新词描边→填充揭示",
2455
+ "demo": "demos/typography/word-relay-geometry/WordRelayGeometry.tsx",
2456
+ "previewUrl": "https://vincentwei1021.github.io/video-shotcraft/media/word-relay-geometry.mp4?v=1790980736913"
2457
+ }
2458
+ ]
2459
+ }
2460
+ ]
2461
+ }