dsh-drawai 0.3.4 → 0.4.1

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 (538) hide show
  1. package/LICENSE +4154 -0
  2. package/README.md +49 -11
  3. package/lib/audio-media.js +150 -0
  4. package/lib/audio-service.js +66 -0
  5. package/lib/canvas-format.js +134 -0
  6. package/lib/client.js +5090 -184
  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-runner.js +6 -4
  12. package/lib/drawing-tasks.js +26 -0
  13. package/lib/ffmpeg-manager.js +1056 -0
  14. package/lib/imagegen.mjs +596 -0
  15. package/lib/index.js +1762 -129
  16. package/lib/media.js +26 -13
  17. package/lib/mgstyle-core.js +75 -0
  18. package/lib/motion/apply.js +181 -0
  19. package/lib/motion/asset-pack-lock.js +10 -0
  20. package/lib/motion/asset-pack.js +335 -0
  21. package/lib/motion/assets.js +291 -0
  22. package/lib/motion/audio.js +103 -0
  23. package/lib/motion/audiolevel.js +63 -0
  24. package/lib/motion/audiomix.js +144 -0
  25. package/lib/motion/beats.js +338 -0
  26. package/lib/motion/builtin-assets.js +62 -0
  27. package/lib/motion/canvas-spec.js +442 -0
  28. package/lib/motion/capture.js +95 -0
  29. package/lib/motion/cards.js +80 -0
  30. package/lib/motion/collect.js +449 -0
  31. package/lib/motion/delivery.js +140 -0
  32. package/lib/motion/edge-speech.py +90 -0
  33. package/lib/motion/entry.jsx +73 -0
  34. package/lib/motion/export.js +200 -0
  35. package/lib/motion/ffmpeg.js +43 -0
  36. package/lib/motion/fonts.js +71 -0
  37. package/lib/motion/jobs.js +117 -0
  38. package/lib/motion/json.js +4 -0
  39. package/lib/motion/media-catalog.js +59 -0
  40. package/lib/motion/mgstyles/BRIEF-TEMPLATE.md +63 -0
  41. package/lib/motion/mgstyles/briefs/01-flat-vector.md +104 -0
  42. package/lib/motion/mgstyles/briefs/02-line-art.md +97 -0
  43. package/lib/motion/mgstyles/briefs/03-isometric.md +108 -0
  44. package/lib/motion/mgstyles/briefs/05-cel-boil.md +145 -0
  45. package/lib/motion/mgstyles/briefs/06-collage.md +149 -0
  46. package/lib/motion/mgstyles/briefs/07-liquid.md +106 -0
  47. package/lib/motion/mgstyles/briefs/08-morph.md +111 -0
  48. package/lib/motion/mgstyles/briefs/09-bauhaus.md +150 -0
  49. package/lib/motion/mgstyles/briefs/10-synthwave.md +151 -0
  50. package/lib/motion/mgstyles/briefs/12-aurora-glass.md +147 -0
  51. package/lib/motion/mgstyles/briefs/18-hanazi.md +140 -0
  52. package/lib/motion/mgstyles/briefs/19-paperclip.md +156 -0
  53. package/lib/motion/mgstyles/briefs/20-pixel.md +118 -0
  54. package/lib/motion/mgstyles/briefs/22-hud.md +118 -0
  55. package/lib/motion/mgstyles/catalog.d/01-flat-vector.json +34 -0
  56. package/lib/motion/mgstyles/catalog.d/02-line-art.json +34 -0
  57. package/lib/motion/mgstyles/catalog.d/03-isometric.json +35 -0
  58. package/lib/motion/mgstyles/catalog.d/05-cel-boil.json +28 -0
  59. package/lib/motion/mgstyles/catalog.d/06-collage.json +28 -0
  60. package/lib/motion/mgstyles/catalog.d/07-liquid.json +28 -0
  61. package/lib/motion/mgstyles/catalog.d/08-morph.json +28 -0
  62. package/lib/motion/mgstyles/catalog.d/09-bauhaus.json +28 -0
  63. package/lib/motion/mgstyles/catalog.d/10-synthwave.json +28 -0
  64. package/lib/motion/mgstyles/catalog.d/12-aurora-glass.json +28 -0
  65. package/lib/motion/mgstyles/catalog.d/18-hanazi.json +28 -0
  66. package/lib/motion/mgstyles/catalog.d/19-paperclip.json +28 -0
  67. package/lib/motion/mgstyles/catalog.d/20-pixel.json +28 -0
  68. package/lib/motion/mgstyles/catalog.d/22-hud.json +28 -0
  69. package/lib/motion/mgstyles/catalog.json +1356 -0
  70. package/lib/motion/mgstyles/upstream/README.md +147 -0
  71. package/lib/motion/mgstyles/upstream/README.zh-CN.md +147 -0
  72. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/cues.json +1 -0
  73. package/lib/motion/mgstyles/upstream/demos/01-flat-vector/index.html +712 -0
  74. package/lib/motion/mgstyles/upstream/demos/02-line-art/cues.json +331 -0
  75. package/lib/motion/mgstyles/upstream/demos/02-line-art/film.js +676 -0
  76. package/lib/motion/mgstyles/upstream/demos/02-line-art/index.html +18 -0
  77. package/lib/motion/mgstyles/upstream/demos/02-line-art/tools/dump_timing.mjs +26 -0
  78. package/lib/motion/mgstyles/upstream/demos/03-isometric/cues.json +109 -0
  79. package/lib/motion/mgstyles/upstream/demos/03-isometric/index.html +25 -0
  80. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/anim.js +82 -0
  81. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/main.js +219 -0
  82. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/night5.js +180 -0
  83. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/render.js +202 -0
  84. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title.js +167 -0
  85. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/title5.js +294 -0
  86. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/ui.js +141 -0
  87. package/lib/motion/mgstyles/upstream/demos/03-isometric/js/world.js +1399 -0
  88. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/cues.json +157 -0
  89. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/index.html +34 -0
  90. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/engine.js +326 -0
  91. package/lib/motion/mgstyles/upstream/demos/05-cel-boil/js/scene.js +2036 -0
  92. package/lib/motion/mgstyles/upstream/demos/06-collage/assets/gen/layout.json +157 -0
  93. package/lib/motion/mgstyles/upstream/demos/06-collage/cues.json +80 -0
  94. package/lib/motion/mgstyles/upstream/demos/06-collage/index.html +889 -0
  95. package/lib/motion/mgstyles/upstream/demos/07-liquid/cues.json +100 -0
  96. package/lib/motion/mgstyles/upstream/demos/07-liquid/index.html +108 -0
  97. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/engine.js +153 -0
  98. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/links.js +64 -0
  99. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/lookdev.js +46 -0
  100. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/scene.js +963 -0
  101. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/shaders.js +647 -0
  102. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/textsdf.js +114 -0
  103. package/lib/motion/mgstyles/upstream/demos/07-liquid/js/type.js +50 -0
  104. package/lib/motion/mgstyles/upstream/demos/08-morph/cues.json +131 -0
  105. package/lib/motion/mgstyles/upstream/demos/08-morph/glyphs.json +1 -0
  106. package/lib/motion/mgstyles/upstream/demos/08-morph/index.html +901 -0
  107. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/cues.json +270 -0
  108. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/film.js +697 -0
  109. package/lib/motion/mgstyles/upstream/demos/09-bauhaus/index.html +12 -0
  110. package/lib/motion/mgstyles/upstream/demos/10-synthwave/cues.json +44 -0
  111. package/lib/motion/mgstyles/upstream/demos/10-synthwave/index.html +1028 -0
  112. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/cues.json +67 -0
  113. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/index.html +16 -0
  114. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/main.js +967 -0
  115. package/lib/motion/mgstyles/upstream/demos/12-aurora-glass/shaders.js +468 -0
  116. package/lib/motion/mgstyles/upstream/demos/18-hanazi/cues.json +117 -0
  117. package/lib/motion/mgstyles/upstream/demos/18-hanazi/index.html +541 -0
  118. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/countries-110m.json +1 -0
  119. package/lib/motion/mgstyles/upstream/demos/19-paperclip/assets/stickers/meta.json +34 -0
  120. package/lib/motion/mgstyles/upstream/demos/19-paperclip/cues.json +285 -0
  121. package/lib/motion/mgstyles/upstream/demos/19-paperclip/index.html +599 -0
  122. package/lib/motion/mgstyles/upstream/demos/20-pixel/cues.json +42 -0
  123. package/lib/motion/mgstyles/upstream/demos/20-pixel/film.js +914 -0
  124. package/lib/motion/mgstyles/upstream/demos/20-pixel/index.html +18 -0
  125. package/lib/motion/mgstyles/upstream/demos/22-hud/cues.json +108 -0
  126. package/lib/motion/mgstyles/upstream/demos/22-hud/index.html +125 -0
  127. package/lib/motion/mgstyles/upstream/demos/22-hud/js/holo.js +275 -0
  128. package/lib/motion/mgstyles/upstream/demos/22-hud/js/hud.js +855 -0
  129. package/lib/motion/mgstyles/upstream/demos/22-hud/js/post.js +150 -0
  130. package/lib/motion/mgstyles/upstream/demos/22-hud/js/util.js +65 -0
  131. package/lib/motion/mgstyles/upstream/demos/22-hud/js/v5.js +142 -0
  132. package/lib/motion/mgstyles/upstream/harness/render.mjs +319 -0
  133. package/lib/motion/mgstyles/upstream/manifest.json +269 -0
  134. package/lib/motion/mgstyles/upstream/prompts/01-flat-vector.md +98 -0
  135. package/lib/motion/mgstyles/upstream/prompts/02-line-art.md +95 -0
  136. package/lib/motion/mgstyles/upstream/prompts/03-isometric.md +97 -0
  137. package/lib/motion/mgstyles/upstream/prompts/05-cel-boil.md +95 -0
  138. package/lib/motion/mgstyles/upstream/prompts/06-collage.md +95 -0
  139. package/lib/motion/mgstyles/upstream/prompts/07-liquid.md +98 -0
  140. package/lib/motion/mgstyles/upstream/prompts/08-morph.md +95 -0
  141. package/lib/motion/mgstyles/upstream/prompts/09-bauhaus.md +96 -0
  142. package/lib/motion/mgstyles/upstream/prompts/10-synthwave.md +95 -0
  143. package/lib/motion/mgstyles/upstream/prompts/12-aurora-glass.md +96 -0
  144. package/lib/motion/mgstyles/upstream/prompts/18-hanazi.md +95 -0
  145. package/lib/motion/mgstyles/upstream/prompts/19-paperclip.md +96 -0
  146. package/lib/motion/mgstyles/upstream/prompts/20-pixel.md +96 -0
  147. package/lib/motion/mgstyles/upstream/prompts/22-hud.md +95 -0
  148. package/lib/motion/mgstyles/upstream/rubric.md +51 -0
  149. package/lib/motion/mgstyles/upstream/template.md +36 -0
  150. package/lib/motion/pixelqa.js +198 -0
  151. package/lib/motion/preview.js +97 -0
  152. package/lib/motion/project.js +395 -0
  153. package/lib/motion/qa.js +290 -0
  154. package/lib/motion/reference-media.jsx +10 -0
  155. package/lib/motion/render-settings.js +112 -0
  156. package/lib/motion/render.js +161 -0
  157. package/lib/motion/runtime/package-lock.json +3058 -0
  158. package/lib/motion/runtime/package.json +16 -0
  159. package/lib/motion/scene-kit.js +183 -0
  160. package/lib/motion/sfx.js +232 -0
  161. package/lib/motion/shotcraft/ClipCard.tsx +204 -0
  162. package/lib/motion/shotcraft/catalog.json +2461 -0
  163. package/lib/motion/shotcraft/upstream/SKILL.md +286 -0
  164. package/lib/motion/shotcraft/upstream/assets/lib/Caption.tsx +54 -0
  165. package/lib/motion/shotcraft/upstream/assets/lib/ClipCard.tsx +200 -0
  166. package/lib/motion/shotcraft/upstream/assets/lib/DigitRoll.tsx +45 -0
  167. package/lib/motion/shotcraft/upstream/assets/lib/FlashCut.tsx +20 -0
  168. package/lib/motion/shotcraft/upstream/assets/lib/FlatPanel.tsx +65 -0
  169. package/lib/motion/shotcraft/upstream/assets/lib/PageCam.tsx +151 -0
  170. package/lib/motion/shotcraft/upstream/assets/lib/VerticalTicker.tsx +129 -0
  171. package/lib/motion/shotcraft/upstream/assets/lib/helpers/camera.tsx +75 -0
  172. package/lib/motion/shotcraft/upstream/assets/lib/helpers/motion.ts +40 -0
  173. package/lib/motion/shotcraft/upstream/assets/lib/helpers/rand.ts +11 -0
  174. package/lib/motion/shotcraft/upstream/assets/lib/helpers/shake.ts +10 -0
  175. package/lib/motion/shotcraft/upstream/assets/scripts/__pycache__/sfx-source.cpython-313.pyc +0 -0
  176. package/lib/motion/shotcraft/upstream/assets/scripts/build-readme-cover.mjs +49 -0
  177. package/lib/motion/shotcraft/upstream/assets/scripts/capture-template.mjs +210 -0
  178. package/lib/motion/shotcraft/upstream/assets/scripts/sfx-source.py +423 -0
  179. package/lib/motion/shotcraft/upstream/assets/scripts/smoke-render-demos.py +170 -0
  180. package/lib/motion/shotcraft/upstream/assets/scripts/test_sfx_source.py +157 -0
  181. package/lib/motion/shotcraft/upstream/demos/README.md +120 -0
  182. package/lib/motion/shotcraft/upstream/demos/_fixtures/Brand.tsx +112 -0
  183. package/lib/motion/shotcraft/upstream/demos/_fixtures/Fixtures.tsx +647 -0
  184. package/lib/motion/shotcraft/upstream/demos/_fixtures/Look.tsx +316 -0
  185. package/lib/motion/shotcraft/upstream/demos/_fixtures/Motion.tsx +82 -0
  186. package/lib/motion/shotcraft/upstream/demos/_fixtures/PageCam2D.tsx +115 -0
  187. package/lib/motion/shotcraft/upstream/demos/_fixtures/Polish.tsx +243 -0
  188. package/lib/motion/shotcraft/upstream/demos/_textures/live-layout.json +389 -0
  189. package/lib/motion/shotcraft/upstream/demos/camera/basic-3d-scene/Basic3DScene.tsx +250 -0
  190. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashImpactReal.tsx +305 -0
  191. package/lib/motion/shotcraft/upstream/demos/camera/crash-zoom-punch/CrashZoomReal.tsx +246 -0
  192. package/lib/motion/shotcraft/upstream/demos/camera/cursor-flyover/CursorFlyover.tsx +390 -0
  193. package/lib/motion/shotcraft/upstream/demos/camera/depth-layer-moves/MultiplaneReal.tsx +138 -0
  194. package/lib/motion/shotcraft/upstream/demos/camera/graze-face-tour/GrazeFaceTour.tsx +542 -0
  195. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/OverheadTabletopDrop.tsx +315 -0
  196. package/lib/motion/shotcraft/upstream/demos/camera/overhead-camera-moves/TiltReveal.tsx +299 -0
  197. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/DroneDiveLanding.tsx +173 -0
  198. package/lib/motion/shotcraft/upstream/demos/camera/space-camera-moves/ExplodedView.tsx +348 -0
  199. package/lib/motion/shotcraft/upstream/demos/camera/steep-tilt-glide/SteepTiltGlide.tsx +366 -0
  200. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/BulletTimeFreezeOrbit.tsx +279 -0
  201. package/lib/motion/shotcraft/upstream/demos/camera/tension-camera-moves/PullBackIsolation.tsx +184 -0
  202. package/lib/motion/shotcraft/upstream/demos/camera/terminal-3d/Terminal3D.tsx +390 -0
  203. package/lib/motion/shotcraft/upstream/demos/data/before-after-slider-scrub/BeforeAfterSliderScrub.tsx +155 -0
  204. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/AxisRescaleShockV2.tsx +303 -0
  205. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/OscilloscopeStreamV2.tsx +290 -0
  206. package/lib/motion/shotcraft/upstream/demos/data/chart-live-moves/UnitDotSwarmRegroupV2.tsx +278 -0
  207. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/NeedleSweepSelftest.tsx +307 -0
  208. package/lib/motion/shotcraft/upstream/demos/data/gauge-readout-moves/TapeScrollFixedPointer.tsx +215 -0
  209. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/BrakeReticleLock.tsx +299 -0
  210. package/lib/motion/shotcraft/upstream/demos/data/scroll-brake-moves/ChangelogScrollBrake.tsx +232 -0
  211. package/lib/motion/shotcraft/upstream/demos/data/timeline-travel/TimelineTravel.tsx +290 -0
  212. package/lib/motion/shotcraft/upstream/demos/effects/assemble-then-type-flyin/AssembleThenTypeFlyin.tsx +273 -0
  213. package/lib/motion/shotcraft/upstream/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx +167 -0
  214. package/lib/motion/shotcraft/upstream/demos/effects/brand-frame-snap/BrandFrameSnap.tsx +536 -0
  215. package/lib/motion/shotcraft/upstream/demos/effects/fui-hud-moves/ReticleLockOn.tsx +164 -0
  216. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/FlylineArc.tsx +175 -0
  217. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/GlowOrbAmbient.tsx +197 -0
  218. package/lib/motion/shotcraft/upstream/demos/effects/glow-flyline-moves/OrbFlylineRelay.tsx +241 -0
  219. package/lib/motion/shotcraft/upstream/demos/effects/icon-performance-moves/AttentionBounce.tsx +279 -0
  220. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/AnimeImpact.tsx +230 -0
  221. package/lib/motion/shotcraft/upstream/demos/effects/impact-feedback/HitCounter.tsx +345 -0
  222. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SheenSweepRetry.tsx +275 -0
  223. package/lib/motion/shotcraft/upstream/demos/effects/light-play-moves/SpotlightSweepReveal.tsx +229 -0
  224. package/lib/motion/shotcraft/upstream/demos/effects/radial-ripple-phone-chips/RadialRipplePhoneChips.tsx +312 -0
  225. package/lib/motion/shotcraft/upstream/demos/effects/riso-print-hits/RisoMisregistrationHit.tsx +222 -0
  226. package/lib/motion/shotcraft/upstream/demos/effects/scan-bracket-sweep/ScanBracketSweep.tsx +295 -0
  227. package/lib/motion/shotcraft/upstream/demos/effects/scanline-annotate-focus/ScanlineAnnotateFocus.tsx +329 -0
  228. package/lib/motion/shotcraft/upstream/demos/effects/scanline-assemble-flyin/ScanlineAssembleFlyin.tsx +315 -0
  229. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ImpactBurstKit.tsx +264 -0
  230. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/KanadaPerspectiveSnap.tsx +260 -0
  231. package/lib/motion/shotcraft/upstream/demos/effects/slam-entrance-moves/ScoreSlam.tsx +263 -0
  232. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/CornerSpotlightReveal.tsx +123 -0
  233. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/GlowWakeSleepPanel.tsx +187 -0
  234. package/lib/motion/shotcraft/upstream/demos/effects/spotlight-sweep-moves/SlideSpotlightPan.tsx +175 -0
  235. package/lib/motion/shotcraft/upstream/demos/interaction/autolayout-gap-dial/AutolayoutGapDial.tsx +305 -0
  236. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/DiagramCascadeBuild.tsx +350 -0
  237. package/lib/motion/shotcraft/upstream/demos/interaction/canvas-materialize-moves/PanelToCanvasMaterialize.tsx +352 -0
  238. package/lib/motion/shotcraft/upstream/demos/interaction/chip-grid-single-select-blackout/ChipGridSingleSelectBlackout.tsx +218 -0
  239. package/lib/motion/shotcraft/upstream/demos/interaction/collab-cursor-moves/CursorCastEnsemble.tsx +297 -0
  240. package/lib/motion/shotcraft/upstream/demos/interaction/glass-pill-dictation-typing/GlassPillDictationTyping.tsx +157 -0
  241. package/lib/motion/shotcraft/upstream/demos/interaction/hashtag-to-pill-materialize/HashtagToPillMaterialize.tsx +218 -0
  242. package/lib/motion/shotcraft/upstream/demos/interaction/picker-carousel-feature-cycle/PickerCarouselFeatureCycle.tsx +202 -0
  243. package/lib/motion/shotcraft/upstream/demos/interaction/segmented-thumb-hero/SegmentedThumbHero.tsx +265 -0
  244. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/PaletteThemeRipple.tsx +457 -0
  245. package/lib/motion/shotcraft/upstream/demos/interaction/theme-switch-moves/ThemeSweepToggle.tsx +446 -0
  246. package/lib/motion/shotcraft/upstream/demos/interaction/type-and-filter/TypeAndFilter.tsx +249 -0
  247. package/lib/motion/shotcraft/upstream/demos/interaction/voice-waveform-live/VoiceWaveformLive.tsx +278 -0
  248. package/lib/motion/shotcraft/upstream/demos/opening/crane-rise-reveal/CraneRiseReveal.tsx +332 -0
  249. package/lib/motion/shotcraft/upstream/demos/opening/dataviz-landscape-open/DatavizLandscapeOpen.tsx +358 -0
  250. package/lib/motion/shotcraft/upstream/demos/opening/fracture/Fracture.tsx +201 -0
  251. package/lib/motion/shotcraft/upstream/demos/opening/icon-field-colorize/IconFieldColorize.tsx +200 -0
  252. package/lib/motion/shotcraft/upstream/demos/opening/letterspace-materialize/LetterspaceMaterialize.tsx +208 -0
  253. package/lib/motion/shotcraft/upstream/demos/opening/magician-card-flourish/MagicianCardFlourish.tsx +341 -0
  254. package/lib/motion/shotcraft/upstream/demos/opening/orbit-ring-title-open/OrbitRingTitleOpen.tsx +389 -0
  255. package/lib/motion/shotcraft/upstream/demos/opening/spotlight-hero-card/SpotlightHeroCard.tsx +293 -0
  256. package/lib/motion/shotcraft/upstream/demos/opening/stroke-segment-build/StrokeSegmentBuild.tsx +183 -0
  257. package/lib/motion/shotcraft/upstream/demos/opening/text-as-mask/TextAsMask.tsx +245 -0
  258. package/lib/motion/shotcraft/upstream/demos/outro/grain-dissolve/GrainDissolve.tsx +222 -0
  259. package/lib/motion/shotcraft/upstream/demos/outro/logo-shrink-wordmark-lockup/LogoShrinkWordmarkLockup.tsx +223 -0
  260. package/lib/motion/shotcraft/upstream/demos/outro/neon-triple-marquee/NeonTripleMarquee.tsx +217 -0
  261. package/lib/motion/shotcraft/upstream/demos/outro/outro-group-photo-launch/OutroGroupPhotoLaunch.tsx +343 -0
  262. package/lib/motion/shotcraft/upstream/demos/outro/ui-strip-away-outro/UiStripAwayOutro.tsx +357 -0
  263. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/IconFlipBloomLogo.tsx +187 -0
  264. package/lib/motion/shotcraft/upstream/demos/outro/ui-to-brand-morph/InputMorphsIntoLogo.tsx +333 -0
  265. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-cut-moves/PaparazziFlash.tsx +274 -0
  266. package/lib/motion/shotcraft/upstream/demos/rhythm/beat-step-list-theme-cycle/BeatStepListThemeCycle.tsx +270 -0
  267. package/lib/motion/shotcraft/upstream/demos/rhythm/panel-grid-moves/ComicPanelSplit.tsx +430 -0
  268. package/lib/motion/shotcraft/upstream/demos/rhythm/quad-split-parallel-scenes/QuadSplitParallelScenes.tsx +252 -0
  269. package/lib/motion/shotcraft/upstream/demos/rhythm/rhythm-interrupt-moves/JumpCutPunchIn.tsx +106 -0
  270. package/lib/motion/shotcraft/upstream/demos/rhythm/sakuga-timing-shift/SakugaTimingShift.tsx +288 -0
  271. package/lib/motion/shotcraft/upstream/demos/rhythm/speed-ramp-freeze/FreezeAnnotateReal.tsx +362 -0
  272. package/lib/motion/shotcraft/upstream/demos/rhythm/trailer-grammar-moves/TrailerBumper.tsx +168 -0
  273. package/lib/motion/shotcraft/upstream/demos/transition/bottom-push-stack-wipe/BottomPushStackWipe.tsx +310 -0
  274. package/lib/motion/shotcraft/upstream/demos/transition/card-flip-reveal/CardFlipReveal.tsx +261 -0
  275. package/lib/motion/shotcraft/upstream/demos/transition/card-flock-tumble/CardFlockTumble.tsx +459 -0
  276. package/lib/motion/shotcraft/upstream/demos/transition/circle-match-iris/CircleMatchIris.tsx +294 -0
  277. package/lib/motion/shotcraft/upstream/demos/transition/gradient-transition/GradientTransition.tsx +161 -0
  278. package/lib/motion/shotcraft/upstream/demos/transition/line-carry-transition/LineCarryTransition.tsx +248 -0
  279. package/lib/motion/shotcraft/upstream/demos/transition/mosaic-reframe/MosaicReframe.tsx +359 -0
  280. package/lib/motion/shotcraft/upstream/demos/transition/page-turn-transitions/BarnDoorSplit.tsx +227 -0
  281. package/lib/motion/shotcraft/upstream/demos/transition/print-texture-transitions/InkBleedReveal.tsx +162 -0
  282. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/PortalWipeV2.tsx +248 -0
  283. package/lib/motion/shotcraft/upstream/demos/transition/shot-transitions/WhipBrakeReal.tsx +186 -0
  284. package/lib/motion/shotcraft/upstream/demos/transition/tear-streak-transitions/GlitchDisplace.tsx +355 -0
  285. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/InvisibleCut.tsx +272 -0
  286. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/LightLeakBurn.tsx +262 -0
  287. package/lib/motion/shotcraft/upstream/demos/transition/transition-hidden-cut/VersusSlam.tsx +217 -0
  288. package/lib/motion/shotcraft/upstream/demos/transition/transition-travel/LetterformZoom.tsx +285 -0
  289. package/lib/motion/shotcraft/upstream/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx +205 -0
  290. package/lib/motion/shotcraft/upstream/demos/transition/wipe-transitions/BlindsSlice.tsx +178 -0
  291. package/lib/motion/shotcraft/upstream/demos/typography/blur-slide/BlurSlide.tsx +147 -0
  292. package/lib/motion/shotcraft/upstream/demos/typography/brace-expand/BraceExpand.tsx +143 -0
  293. package/lib/motion/shotcraft/upstream/demos/typography/brand-ink-open/BrandInkOpen.tsx +134 -0
  294. package/lib/motion/shotcraft/upstream/demos/typography/countdown-arc-scatter/CountdownArcScatter.tsx +217 -0
  295. package/lib/motion/shotcraft/upstream/demos/typography/flying-words/FlyingWords.tsx +198 -0
  296. package/lib/motion/shotcraft/upstream/demos/typography/glitch-cycle/GlitchCycle.tsx +221 -0
  297. package/lib/motion/shotcraft/upstream/demos/typography/gradient-word-sweep/GradientWordSweep.tsx +312 -0
  298. package/lib/motion/shotcraft/upstream/demos/typography/lead-word-zoom-assemble/LeadWordZoomAssemble.tsx +261 -0
  299. package/lib/motion/shotcraft/upstream/demos/typography/marker-underline-title/MarkerUnderlineTitle.tsx +121 -0
  300. package/lib/motion/shotcraft/upstream/demos/typography/outline-word-fill/OutlineWordFill.tsx +153 -0
  301. package/lib/motion/shotcraft/upstream/demos/typography/paper-title-card/PaperTitleCard.tsx +179 -0
  302. package/lib/motion/shotcraft/upstream/demos/typography/pill-chip-slot-cycle-handled/PillChipSlotCycleHandled.tsx +140 -0
  303. package/lib/motion/shotcraft/upstream/demos/typography/pill-slot-cycle/PillSlotCycle.tsx +309 -0
  304. package/lib/motion/shotcraft/upstream/demos/typography/text-column-converge/TextColumnConverge.tsx +191 -0
  305. package/lib/motion/shotcraft/upstream/demos/typography/title-demote-to-label/TitleDemoteToLabel.tsx +292 -0
  306. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/LetterformDriftAssembly.tsx +135 -0
  307. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/SplitTextStagger.tsx +124 -0
  308. package/lib/motion/shotcraft/upstream/demos/typography/type-assembly-moves/TextOnPath.tsx +255 -0
  309. package/lib/motion/shotcraft/upstream/demos/typography/type-entrance-moves/LetterDropPhysics.tsx +173 -0
  310. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/FontWeightPump.tsx +225 -0
  311. package/lib/motion/shotcraft/upstream/demos/typography/type-rhythm-sync/KaraokeFillSync.tsx +141 -0
  312. package/lib/motion/shotcraft/upstream/demos/typography/typewriter-moves/TypewriterErrorRetype.tsx +137 -0
  313. package/lib/motion/shotcraft/upstream/demos/typography/vertical-word-roll-blur-cycle/VerticalWordRollBlurCycle.tsx +147 -0
  314. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-filmstrip/WordRelayFilmstrip.tsx +409 -0
  315. package/lib/motion/shotcraft/upstream/demos/typography/word-relay-geometry/WordRelayGeometry.tsx +280 -0
  316. package/lib/motion/shotcraft/upstream/demos/ui-entrance/avatar-bracket-carousel/AvatarBracketCarousel.tsx +271 -0
  317. package/lib/motion/shotcraft/upstream/demos/ui-entrance/bezier-source-converge-merge/BezierSourceConvergeMerge.tsx +385 -0
  318. package/lib/motion/shotcraft/upstream/demos/ui-entrance/card-stack/CardStack.tsx +312 -0
  319. package/lib/motion/shotcraft/upstream/demos/ui-entrance/carousel-3d/Carousel3D.tsx +303 -0
  320. package/lib/motion/shotcraft/upstream/demos/ui-entrance/clipcard-looping/ClipCardLooping.tsx +77 -0
  321. package/lib/motion/shotcraft/upstream/demos/ui-entrance/cloner-depth-echo/ClonerDepthEcho.tsx +311 -0
  322. package/lib/motion/shotcraft/upstream/demos/ui-entrance/deck-deal-flyin/DeckDealFlyin.tsx +307 -0
  323. package/lib/motion/shotcraft/upstream/demos/ui-entrance/doc-park-left-pill-deal/DocParkLeftPillDeal.tsx +349 -0
  324. package/lib/motion/shotcraft/upstream/demos/ui-entrance/document-typewriter-reveal/DocumentTypewriterReveal.tsx +255 -0
  325. package/lib/motion/shotcraft/upstream/demos/ui-entrance/draw-svg-trace/DrawSvgTrace.tsx +244 -0
  326. package/lib/motion/shotcraft/upstream/demos/ui-entrance/element-body-moves/ContactShadowLift.tsx +217 -0
  327. package/lib/motion/shotcraft/upstream/demos/ui-entrance/integration-hub-map/IntegrationHubMap.tsx +652 -0
  328. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-reveal/ListReveal.tsx +153 -0
  329. package/lib/motion/shotcraft/upstream/demos/ui-entrance/list-stack-press/ListStackPress.tsx +238 -0
  330. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-forerun/NeonFrameForerun.tsx +324 -0
  331. package/lib/motion/shotcraft/upstream/demos/ui-entrance/neon-frame-orbit-drop/NeonFrameForerunOrbit.tsx +354 -0
  332. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/PageWaterfallWall.tsx +101 -0
  333. package/lib/motion/shotcraft/upstream/demos/ui-entrance/page-waterfall-wall/VerticalTicker.tsx +129 -0
  334. package/lib/motion/shotcraft/upstream/demos/ui-entrance/product-card-progressive-assemble/ProductCardProgressiveAssemble.tsx +297 -0
  335. package/lib/motion/shotcraft/upstream/demos/ui-entrance/radial-wave/RadialWave.tsx +57 -0
  336. package/lib/motion/shotcraft/upstream/demos/ui-entrance/research-card-stack-scroll/ResearchCardStackScroll.tsx +155 -0
  337. package/lib/motion/shotcraft/upstream/demos/ui-entrance/row-embed/RowEmbed.tsx +175 -0
  338. package/lib/motion/shotcraft/upstream/demos/ui-entrance/value-stagger-gradient/ValueStaggerGradient.tsx +153 -0
  339. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/BentoLightUp.tsx +146 -0
  340. package/lib/motion/shotcraft/upstream/demos/ui-entrance/wall-reveal-moves/WireframeDrawOn.tsx +226 -0
  341. package/lib/motion/shotcraft/upstream/gallery/api/library.json +1 -0
  342. package/lib/motion/shotcraft/upstream/manifest.json +2715 -0
  343. package/lib/motion/shotcraft/upstream/references/aesthetic-rules.md +193 -0
  344. package/lib/motion/shotcraft/upstream/references/final-review.md +121 -0
  345. package/lib/motion/shotcraft/upstream/references/guided-free-creation.md +199 -0
  346. package/lib/motion/shotcraft/upstream/references/jianying-export.md +183 -0
  347. package/lib/motion/shotcraft/upstream/references/music-beat-sync.md +257 -0
  348. package/lib/motion/shotcraft/upstream/references/pipeline.md +382 -0
  349. package/lib/motion/shotcraft/upstream/references/publish-upload-post.md +111 -0
  350. package/lib/motion/shotcraft/upstream/references/sequences/promo-energy-arc.md +50 -0
  351. package/lib/motion/shotcraft/upstream/references/sfx-sourcing.md +95 -0
  352. package/lib/motion/shotcraft/upstream/references/shots/camera/basic-3d-scene.md +41 -0
  353. package/lib/motion/shotcraft/upstream/references/shots/camera/crash-zoom-punch.md +52 -0
  354. package/lib/motion/shotcraft/upstream/references/shots/camera/cursor-flyover.md +39 -0
  355. package/lib/motion/shotcraft/upstream/references/shots/camera/depth-layer-moves.md +39 -0
  356. package/lib/motion/shotcraft/upstream/references/shots/camera/graze-face-tour.md +57 -0
  357. package/lib/motion/shotcraft/upstream/references/shots/camera/overhead-camera-moves.md +51 -0
  358. package/lib/motion/shotcraft/upstream/references/shots/camera/space-camera-moves.md +46 -0
  359. package/lib/motion/shotcraft/upstream/references/shots/camera/steep-tilt-glide.md +52 -0
  360. package/lib/motion/shotcraft/upstream/references/shots/camera/tension-camera-moves.md +43 -0
  361. package/lib/motion/shotcraft/upstream/references/shots/camera/terminal-3d.md +42 -0
  362. package/lib/motion/shotcraft/upstream/references/shots/data/before-after-slider-scrub.md +48 -0
  363. package/lib/motion/shotcraft/upstream/references/shots/data/chart-live-moves.md +52 -0
  364. package/lib/motion/shotcraft/upstream/references/shots/data/gauge-readout-moves.md +45 -0
  365. package/lib/motion/shotcraft/upstream/references/shots/data/scroll-brake-moves.md +46 -0
  366. package/lib/motion/shotcraft/upstream/references/shots/data/timeline-travel.md +44 -0
  367. package/lib/motion/shotcraft/upstream/references/shots/effects/assemble-then-type-flyin.md +63 -0
  368. package/lib/motion/shotcraft/upstream/references/shots/effects/aurora-bloom-bg-flip.md +54 -0
  369. package/lib/motion/shotcraft/upstream/references/shots/effects/brand-frame-snap.md +58 -0
  370. package/lib/motion/shotcraft/upstream/references/shots/effects/fui-hud-moves.md +35 -0
  371. package/lib/motion/shotcraft/upstream/references/shots/effects/glow-flyline-moves.md +53 -0
  372. package/lib/motion/shotcraft/upstream/references/shots/effects/icon-performance-moves.md +42 -0
  373. package/lib/motion/shotcraft/upstream/references/shots/effects/impact-feedback.md +50 -0
  374. package/lib/motion/shotcraft/upstream/references/shots/effects/light-play-moves.md +46 -0
  375. package/lib/motion/shotcraft/upstream/references/shots/effects/radial-ripple-phone-chips.md +56 -0
  376. package/lib/motion/shotcraft/upstream/references/shots/effects/riso-print-hits.md +49 -0
  377. package/lib/motion/shotcraft/upstream/references/shots/effects/scan-bracket-sweep.md +50 -0
  378. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-annotate-focus.md +53 -0
  379. package/lib/motion/shotcraft/upstream/references/shots/effects/scanline-assemble-flyin.md +53 -0
  380. package/lib/motion/shotcraft/upstream/references/shots/effects/slam-entrance-moves.md +55 -0
  381. package/lib/motion/shotcraft/upstream/references/shots/effects/spotlight-sweep-moves.md +52 -0
  382. package/lib/motion/shotcraft/upstream/references/shots/interaction/autolayout-gap-dial.md +60 -0
  383. package/lib/motion/shotcraft/upstream/references/shots/interaction/canvas-materialize-moves.md +57 -0
  384. package/lib/motion/shotcraft/upstream/references/shots/interaction/chip-grid-single-select-blackout.md +51 -0
  385. package/lib/motion/shotcraft/upstream/references/shots/interaction/collab-cursor-moves.md +41 -0
  386. package/lib/motion/shotcraft/upstream/references/shots/interaction/glass-pill-dictation-typing.md +53 -0
  387. package/lib/motion/shotcraft/upstream/references/shots/interaction/hashtag-to-pill-materialize.md +60 -0
  388. package/lib/motion/shotcraft/upstream/references/shots/interaction/picker-carousel-feature-cycle.md +55 -0
  389. package/lib/motion/shotcraft/upstream/references/shots/interaction/segmented-thumb-hero.md +57 -0
  390. package/lib/motion/shotcraft/upstream/references/shots/interaction/theme-switch-moves.md +47 -0
  391. package/lib/motion/shotcraft/upstream/references/shots/interaction/type-and-filter.md +37 -0
  392. package/lib/motion/shotcraft/upstream/references/shots/interaction/voice-waveform-live.md +54 -0
  393. package/lib/motion/shotcraft/upstream/references/shots/opening/brand-ink-open.md +36 -0
  394. package/lib/motion/shotcraft/upstream/references/shots/opening/crane-rise-reveal.md +56 -0
  395. package/lib/motion/shotcraft/upstream/references/shots/opening/dataviz-landscape-open.md +56 -0
  396. package/lib/motion/shotcraft/upstream/references/shots/opening/fracture.md +40 -0
  397. package/lib/motion/shotcraft/upstream/references/shots/opening/icon-field-colorize.md +60 -0
  398. package/lib/motion/shotcraft/upstream/references/shots/opening/letterspace-materialize.md +57 -0
  399. package/lib/motion/shotcraft/upstream/references/shots/opening/magician-card-flourish.md +73 -0
  400. package/lib/motion/shotcraft/upstream/references/shots/opening/orbit-ring-title-open.md +87 -0
  401. package/lib/motion/shotcraft/upstream/references/shots/opening/spotlight-hero-card.md +55 -0
  402. package/lib/motion/shotcraft/upstream/references/shots/opening/stroke-segment-build.md +50 -0
  403. package/lib/motion/shotcraft/upstream/references/shots/opening/text-as-mask.md +59 -0
  404. package/lib/motion/shotcraft/upstream/references/shots/outro/grain-dissolve.md +38 -0
  405. package/lib/motion/shotcraft/upstream/references/shots/outro/logo-shrink-wordmark-lockup.md +38 -0
  406. package/lib/motion/shotcraft/upstream/references/shots/outro/neon-triple-marquee.md +59 -0
  407. package/lib/motion/shotcraft/upstream/references/shots/outro/outro-group-photo-launch.md +39 -0
  408. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-strip-away-outro.md +61 -0
  409. package/lib/motion/shotcraft/upstream/references/shots/outro/ui-to-brand-morph.md +52 -0
  410. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-cut-moves.md +50 -0
  411. package/lib/motion/shotcraft/upstream/references/shots/rhythm/beat-step-list-theme-cycle.md +66 -0
  412. package/lib/motion/shotcraft/upstream/references/shots/rhythm/panel-grid-moves.md +43 -0
  413. package/lib/motion/shotcraft/upstream/references/shots/rhythm/quad-split-parallel-scenes.md +38 -0
  414. package/lib/motion/shotcraft/upstream/references/shots/rhythm/rhythm-interrupt-moves.md +38 -0
  415. package/lib/motion/shotcraft/upstream/references/shots/rhythm/sakuga-timing-shift.md +56 -0
  416. package/lib/motion/shotcraft/upstream/references/shots/rhythm/speed-ramp-freeze.md +44 -0
  417. package/lib/motion/shotcraft/upstream/references/shots/rhythm/trailer-grammar-moves.md +38 -0
  418. package/lib/motion/shotcraft/upstream/references/shots/transition/bottom-push-stack-wipe.md +63 -0
  419. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flip-reveal.md +57 -0
  420. package/lib/motion/shotcraft/upstream/references/shots/transition/card-flock-tumble.md +63 -0
  421. package/lib/motion/shotcraft/upstream/references/shots/transition/circle-match-iris.md +58 -0
  422. package/lib/motion/shotcraft/upstream/references/shots/transition/gradient-transition.md +45 -0
  423. package/lib/motion/shotcraft/upstream/references/shots/transition/line-carry-transition.md +55 -0
  424. package/lib/motion/shotcraft/upstream/references/shots/transition/mosaic-reframe.md +49 -0
  425. package/lib/motion/shotcraft/upstream/references/shots/transition/page-turn-transitions.md +42 -0
  426. package/lib/motion/shotcraft/upstream/references/shots/transition/print-texture-transitions.md +42 -0
  427. package/lib/motion/shotcraft/upstream/references/shots/transition/shot-transitions.md +45 -0
  428. package/lib/motion/shotcraft/upstream/references/shots/transition/tear-streak-transitions.md +48 -0
  429. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-hidden-cut.md +55 -0
  430. package/lib/motion/shotcraft/upstream/references/shots/transition/transition-travel.md +43 -0
  431. package/lib/motion/shotcraft/upstream/references/shots/transition/white-flash-logo-simplify-cut.md +41 -0
  432. package/lib/motion/shotcraft/upstream/references/shots/transition/wipe-transitions.md +42 -0
  433. package/lib/motion/shotcraft/upstream/references/shots/typography/blur-slide.md +59 -0
  434. package/lib/motion/shotcraft/upstream/references/shots/typography/brace-expand.md +55 -0
  435. package/lib/motion/shotcraft/upstream/references/shots/typography/countdown-arc-scatter.md +65 -0
  436. package/lib/motion/shotcraft/upstream/references/shots/typography/document-typewriter-reveal.md +42 -0
  437. package/lib/motion/shotcraft/upstream/references/shots/typography/flying-words.md +64 -0
  438. package/lib/motion/shotcraft/upstream/references/shots/typography/glitch-cycle.md +64 -0
  439. package/lib/motion/shotcraft/upstream/references/shots/typography/gradient-word-sweep.md +54 -0
  440. package/lib/motion/shotcraft/upstream/references/shots/typography/lead-word-zoom-assemble.md +91 -0
  441. package/lib/motion/shotcraft/upstream/references/shots/typography/marker-underline-title.md +51 -0
  442. package/lib/motion/shotcraft/upstream/references/shots/typography/outline-word-fill.md +66 -0
  443. package/lib/motion/shotcraft/upstream/references/shots/typography/paper-title-card.md +38 -0
  444. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-chip-slot-cycle-handled.md +66 -0
  445. package/lib/motion/shotcraft/upstream/references/shots/typography/pill-slot-cycle.md +58 -0
  446. package/lib/motion/shotcraft/upstream/references/shots/typography/text-column-converge.md +61 -0
  447. package/lib/motion/shotcraft/upstream/references/shots/typography/title-demote-to-label.md +64 -0
  448. package/lib/motion/shotcraft/upstream/references/shots/typography/type-assembly-moves.md +45 -0
  449. package/lib/motion/shotcraft/upstream/references/shots/typography/type-entrance-moves.md +41 -0
  450. package/lib/motion/shotcraft/upstream/references/shots/typography/type-rhythm-sync.md +51 -0
  451. package/lib/motion/shotcraft/upstream/references/shots/typography/typewriter-moves.md +42 -0
  452. package/lib/motion/shotcraft/upstream/references/shots/typography/vertical-word-roll-blur-cycle.md +63 -0
  453. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-filmstrip.md +57 -0
  454. package/lib/motion/shotcraft/upstream/references/shots/typography/word-relay-geometry.md +75 -0
  455. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/avatar-bracket-carousel.md +59 -0
  456. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/bezier-source-converge-merge.md +67 -0
  457. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/card-stack.md +60 -0
  458. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/carousel-3d.md +66 -0
  459. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/cloner-depth-echo.md +40 -0
  460. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/deck-deal-flyin.md +45 -0
  461. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/doc-park-left-pill-deal.md +62 -0
  462. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/draw-svg-trace.md +55 -0
  463. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/element-body-moves.md +37 -0
  464. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/integration-hub-map.md +55 -0
  465. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-reveal.md +50 -0
  466. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/list-stack-press.md +43 -0
  467. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-forerun.md +55 -0
  468. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/neon-frame-orbit-drop.md +51 -0
  469. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/page-waterfall-wall.md +51 -0
  470. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/product-card-progressive-assemble.md +56 -0
  471. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/radial-wave.md +49 -0
  472. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/research-card-stack-scroll.md +57 -0
  473. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/row-embed.md +36 -0
  474. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/value-stagger-gradient.md +64 -0
  475. package/lib/motion/shotcraft/upstream/references/shots/ui-entrance/wall-reveal-moves.md +47 -0
  476. package/lib/motion/shotcraft/upstream/references/sound-design.md +170 -0
  477. package/lib/motion/shotcraft/upstream/references/workbench.md +157 -0
  478. package/lib/motion/shotcraft/upstream/template/TEMPLATE.md +103 -0
  479. package/lib/motion/shotcraft/upstream/template/THEMES.md +44 -0
  480. package/lib/motion/shotcraft/upstream/template/package.json +20 -0
  481. package/lib/motion/shotcraft/upstream/template/remotion.config.ts +6 -0
  482. package/lib/motion/shotcraft/upstream/template/src/Root.tsx +17 -0
  483. package/lib/motion/shotcraft/upstream/template/src/aifl/Caption.tsx +65 -0
  484. package/lib/motion/shotcraft/upstream/template/src/aifl/DigitRoll.tsx +48 -0
  485. package/lib/motion/shotcraft/upstream/template/src/aifl/FlashCut.tsx +24 -0
  486. package/lib/motion/shotcraft/upstream/template/src/aifl/Main.tsx +192 -0
  487. package/lib/motion/shotcraft/upstream/template/src/aifl/PaperTitleCard.tsx +111 -0
  488. package/lib/motion/shotcraft/upstream/template/src/aifl/live/PageCam.tsx +150 -0
  489. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneDetail.tsx +158 -0
  490. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneFlyIn.tsx +468 -0
  491. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOpen.tsx +552 -0
  492. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneOutroLive.tsx +411 -0
  493. package/lib/motion/shotcraft/upstream/template/src/aifl/live/ScenePapers.tsx +200 -0
  494. package/lib/motion/shotcraft/upstream/template/src/aifl/live/SceneWbr.tsx +324 -0
  495. package/lib/motion/shotcraft/upstream/template/src/aifl/live-layout.json +389 -0
  496. package/lib/motion/shotcraft/upstream/template/src/index.ts +4 -0
  497. package/lib/motion/shotcraft/upstream/template/src/themes/ThemedFilm.tsx +7 -0
  498. package/lib/motion/shotcraft/upstream/template/src/themes/manifest.tsx +68 -0
  499. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.json +1 -0
  500. package/lib/motion/shotcraft/upstream/template/src/themes/palette-assets.ts +24 -0
  501. package/lib/motion/shotcraft/upstream/template/src/themes/palettes.json +74 -0
  502. package/lib/motion/shotcraft/upstream/template/src/themes/visual-theme.tsx +91 -0
  503. package/lib/motion/shotcraft/upstream/template/src/workbench.ts +213 -0
  504. package/lib/motion/shotcraft/upstream/template/tsconfig.json +15 -0
  505. package/lib/motion/spec.js +113 -0
  506. package/lib/motion/style-engine.js +153 -0
  507. package/lib/motion/style-frames.js +271 -0
  508. package/lib/motion/sync.js +214 -0
  509. package/lib/motion/theme.js +121 -0
  510. package/lib/motion/video-runtime.js +192 -0
  511. package/lib/motion/voice.js +417 -0
  512. package/lib/motion-agent-files.js +82 -0
  513. package/lib/motion-agent-protocol.js +66 -0
  514. package/lib/motion-agent-tools.js +196 -0
  515. package/lib/motion-agent.js +171 -0
  516. package/lib/motion-capture.js +93 -0
  517. package/lib/motion-core.js +238 -0
  518. package/lib/motion-film-review.js +71 -0
  519. package/lib/motion-library.js +210 -0
  520. package/lib/motion-planner.js +254 -0
  521. package/lib/motion-project.js +87 -0
  522. package/lib/motion-render-worker.js +153 -0
  523. package/lib/motion-session.js +32 -0
  524. package/lib/motion-source.js +49 -0
  525. package/lib/motion-tasks.js +452 -0
  526. package/lib/motion-vision.js +44 -0
  527. package/lib/mxfile.js +27 -7
  528. package/lib/routing/node-runtime.js +14 -0
  529. package/lib/routing/router.js +211 -0
  530. package/lib/routing/vendor/README.md +96 -0
  531. package/lib/routing/vendor/libavoid-routing.js +753 -0
  532. package/lib/routing/vendor/libavoid.min.js +59 -0
  533. package/lib/shotcard-core.js +39 -0
  534. package/lib/shotcard-reference.js +56 -0
  535. package/lib/style-kernel.js +37 -3
  536. package/lib/task-patches.js +26 -2
  537. package/lib/video-export.js +49 -22
  538. package/package.json +34 -4
@@ -0,0 +1,382 @@
1
+ # pipeline — 八阶段制作流水线
2
+
3
+ 八阶段,方向性问题不进昂贵的逐镜头阶段。
4
+ 实证细节来自多支已交付宣传片的复盘(模板片见 `template/`)。
5
+
6
+ ## 目录
7
+
8
+ - 阶段 0:产品理解与执行约束
9
+ - 阶段 1:视觉方向与 styleframe
10
+ - 阶段 2:功能到镜头映射
11
+ - 阶段 3:分镜与制作放行
12
+ - 阶段 4:最终素材采集
13
+ - 阶段 5:逐镜头实现
14
+ - 阶段 6:声音设计
15
+ - 阶段 7:独立终检与交付
16
+
17
+ 本文件是**自主自由创作**的完整流水线:阶段 0–3 的判断由 Agent 根据项目内容
18
+ 自主完成并记录,不逐阶段等待用户确认,然后连续进入阶段 4–7。用户已给出的
19
+ 用途、受众、功能、画幅、音频或数据要求都是硬约束。
20
+
21
+ 直接使用 Ink Press 模板不进入本流水线,按 `template/TEMPLATE.md` 的原有替换
22
+ 流程执行;模板文档引用阶段 4 时只借用其中的素材采集方法。
23
+
24
+ **共同创作从 `guided-free-creation.md` 进入本文件时,不要从头重跑。** 该流程
25
+ 已经完成并确认阶段 0–3;直接从阶段 4 最终素材采集继续,不重新询问或重新设计。
26
+
27
+ 两处执行原则(实战复盘已吸收):
28
+
29
+ 1. **最终设计 spec 与分镜共同构成制作放行。** 分镜表长在设计 spec 里
30
+ (`| # | 时间 | 镜头 | 关键动效 |` 四列);确认放行不重新打开已确认的
31
+ 业务或创意问题,只补实现必要的未决项。
32
+ 2. **验收贯穿全程,不是最后一个阶段。** 每个镜头任务以 `npx remotion still`
33
+ 静帧肉眼验收收尾(产物按版本归档 `out/qa/`),每轮反馈修改后整片重渲。
34
+ 阶段 7 只是把这套贯穿动作升级为对照 aesthetic-rules.md 的正式自检报告。
35
+
36
+ 另注顺序弹性:styleframe 可以先用 HTML 与少量安全预检素材;重要的是**逐镜头
37
+ 实现开始前最终素材必须依据已定案的分镜采集**——素材方向错误拖到逐镜头阶段后
38
+ 才暴露,代价是整套场景报废。
39
+
40
+ ---
41
+
42
+ ## 阶段 0:产品理解与执行约束
43
+
44
+ 在写视频代码或采集最终素材前,只读检查项目的定位、主要功能、页面状态、视觉
45
+ tokens、启动方式和数据风险。根据项目证据和用户已有描述,生成产品简报与需求到
46
+ 执行决策表,明确用途、受众、核心卖点、必须展示功能、时长/画幅/语言、音频和
47
+ 数据口径对本片的实际影响。
48
+
49
+ 自主自由创作由 Agent 对缺省项作动态判断并写入设计 spec,不暂停要求用户确认。
50
+ 用户指定了 BGM 时,先按 `references/music-beat-sync.md` 分析节奏;未指定时由 Agent
51
+ 根据产品与发布场景在阶段 6 选型。公开演示数据可在确认其公开属性后使用;客户、
52
+ 个人、内部、密钥、实时或其他敏感数据一律先虚构、脱敏或冻结。
53
+
54
+ **产出**:产品简报;需求到执行决策表;明确的数据与音频约束。
55
+
56
+ ---
57
+
58
+ ## 阶段 1:视觉方向与 styleframe
59
+
60
+ **目标**:用最便宜的产物锁定全片色板、字体、光感与运镜气质,
61
+ 让所有方向性争论发生在写第一行 Remotion 代码之前。
62
+
63
+ **具体操作**:
64
+
65
+ 1. 根据当前项目生成最多 3 个文字方向。每个方向附一组**动效性格 tokens**
66
+ (推导法见下方“品牌→动效参数”表),但不要把 Ink Press 作为固定选项。
67
+ 2. Agent 依据产品视觉、用途和受众自主选择最合适的方向,并把选择与取舍写入
68
+ 设计 spec;不暂停等待用户选择。
69
+ 3. 对选定方向**不渲染视频、不写 Remotion 代码**,写一个纯 HTML/CSS
70
+ styleframe 页,包含 2–3 张 1920×1080 静态关键画面。
71
+ 4. 用 Playwright/Puppeteer 截图验证字体、色板、材质、构图、光感与信息密度;
72
+ 缓动和运镜速度仍以 tokens、Gallery 样片或短运动测试判断。若已有严格品牌规范
73
+ 或明确参考片,可记录理由后跳过 styleframe。
74
+ 5. 若用户给了参考片:下载后 ffmpeg 抽帧(`select=eq(n,…)` 抽 ~100 帧、
75
+ `tile=4x5` 拼 contact sheet),逐个动画/转场/特效做 motion breakdown,
76
+ 写成"手法|参考片实现|取舍"三列表进设计 spec——**选择性适配,
77
+ 不强行套用**。图片参考同理:它描述的是"某一类镜头"的感觉,
78
+ 不是全片风格令。
79
+
80
+ **品牌→动效参数推导**。不凭手感挑 easing/时长,先把品牌放到两根轴上,
81
+ 再从最近的预设起步:
82
+
83
+ - **能量轴**:低(沉稳/premium/机构感)↔ 高(运动/startup/娱乐)——
84
+ 决定时长、过冲、squash 幅度;
85
+ - **调性轴**:严肃(金融/医疗/enterprise)↔ 活泼(消费/社交/儿童)——
86
+ 决定路径曲直、次级动作多寡。产品视觉本身是证据(锐利几何形→工程感,
87
+ 圆角+亮色→柔和活泼);用户口述的品牌词覆盖视觉推断。
88
+
89
+ | 预设(品类) | 主时长@30fps | 入场 easing | 过冲 | squash |
90
+ |---|---|---|---|---|
91
+ | 专业信赖(fintech/enterprise/B2B)| ~21f | bezier(0,0,0.2,1) | 1.0 不弹 | 0 |
92
+ | 精致高端(奢侈品/时尚)| ~48f | bezier(0.4,0,0.6,1) | ≤1.02 | 0 |
93
+ | 活力大胆(体育/游戏/startup)| ~18f | bezier(0.16,1,0.3,1) | 1.12 | 0.25 |
94
+ | 活泼愉悦(消费/社交)| ~27f | bezier(0.34,1.56,0.64,1) | 1.08 | 0.18 |
95
+ | 平静关怀(健康/教育)| ~42f | ease-in-out 对称 | 1.0 | ≤0.04 |
96
+ | 亲和友好(小微/社区)| ~26f | bezier(0.25,0.46,0.45,0.94) | 1.04 | 0.08 |
97
+
98
+ 用法:定预设 → 按两轴微调 → tokens 写进设计 spec。自检两条:
99
+ ①用三个词描述成片动效,与品牌词对得上吗;②同一套 tokens 必须同时管
100
+ 入场/转场/hold 节奏——一个品牌一种动效嗓音,混用两套读作拼盘。
101
+ 注意预设值与库内硬判例冲突时判例赢:落地要弹的场合 y1 必须 >1,
102
+ "专业信赖不弹"指的是无落地隐喻的淡入/推移类动作。
103
+
104
+ **产出**:选定方向的 styleframe;色板/字体/光感 tokens + 动效性格 tokens;
105
+ (有参考片时)motion breakdown 表。
106
+
107
+ **常见坑**:
108
+
109
+ - 用渲染视频做风格提案:太贵,改方向的心理成本也高。静态帧足够定调。
110
+ - 参考驱动的风格 move 全局一刀切:风格化机位逐镜头决定(信息密集的
111
+ 列表/堆叠镜头正视更可读)。
112
+
113
+ ---
114
+
115
+ ## 阶段 2:功能到镜头映射
116
+
117
+ **目标**:为每个必须展示的功能选定合适的运动语法,不在此阶段提前写完整分镜。
118
+
119
+ **具体操作**:
120
+
121
+ 1. **先列产品功能清单,逐一对应镜头**。核心功能漏拍等于返工;
122
+ 一种动画手法(飞入/堆叠/翻页)全片只当一次主角,同质化即返工信号。
123
+ 2. 扫描 `references/shots/` 全部卡片的 frontmatter,根据用途、能量、建议时长、
124
+ 限制和所需页面状态,为每项功能选择首选与备选卡;Agent 自主定案并记录依据。
125
+ 3. 完整读取选中卡片,并按“参考实现”定位准确 demo 源码。没有合适卡片时可新写,
126
+ 但必须在设计 spec 中说明范围与验证风险。
127
+
128
+ **产出**:功能到镜头映射表;选中卡名、变体、demo 源码和参考样片定位。
129
+
130
+ ---
131
+
132
+ ## 阶段 3:分镜与制作放行
133
+
134
+ **目标**:把已定案的功能与镜头映射排成有能量曲线的完整镜头序列,并转成帧级
135
+ 实施计划。自主自由创作由 Agent 自行放行,不暂停等待确认。
136
+
137
+ **具体操作**:
138
+
139
+ 1. 先查 `references/sequences/` 有无适用的桥段模板;有则按其填空流程分配段位
140
+ 与帧预算,再把映射好的镜头排成低能量开场→功能段与呼吸位交替→高能量收尾。
141
+ 2. **已有指定 BGM 时**:先出音乐结构表(满能量起点/breakdown 拍号,
142
+ 见 music-beat-sync.md §2),镜头边界全部锚到拍号,最强 hit 分给
143
+ 全片 2–3 个大 slam;breakdown 段天然是品牌呼吸位。
144
+ 3. 写完整分镜表:镜头顺序、时长、功能信息、具体页面状态、镜头卡与变体、主动作、
145
+ 素材来源、字幕、转场和 SFX。每镜只讲一个主要动效。
146
+ 4. 排时间线时**预留 hold/rest 帧预算**:品牌字标落定 hold ≥1s(30f)、
147
+ 批量动效收尾 0.5s 静止、开场主体动作 ≥3s。节奏返工是单向的——
148
+ 过快必返工、放慢从未被否。
149
+ 5. Agent 检查分镜与产品简报、需求决策、视觉方向和镜头映射一致后自行放行,
150
+ 把分镜转译成帧级时间轴进实施计划:
151
+ `| shot | from | duration | 内容 |`(卡点片则 from/to 全用 `beatF(n)`
152
+ 表达),并给每镜头指定源文件与验收帧号。
153
+
154
+ **产出**:设计 spec(含风格 tokens + motion breakdown + 分镜表);
155
+ 帧级时间轴。
156
+
157
+ **常见坑**:
158
+
159
+ - 没对功能清单,凭手感排镜头:核心功能漏拍、动画手法同质化,两种都返工。
160
+ - 开场贪多:开场信息宁少而聚焦,一个主角、一条完整动作弧。
161
+ - 时长预算不含呼吸位:动效排满每一帧,后期逐镜头补 hold 等于全线挪帧。
162
+
163
+ ---
164
+
165
+ ## 阶段 4:最终素材采集
166
+
167
+ **前置条件**:最终设计 spec 与分镜已经放行。共同创作以用户确认作为放行;自主
168
+ 自由创作以 Agent 完成一致性检查并记录为放行。此前为 styleframe 采过的少量安全
169
+ 截图只能作为方向验证,不得直接替代最终素材。
170
+
171
+ **目标**:严格按最终分镜拿到全部镜头所需的真实页面素材,包括全页纹理、元素
172
+ 切片和坐标表,为 2.5D 运镜与页面空间动画打地基。
173
+
174
+ **具体操作**:
175
+
176
+ 1. 起产品本地 dev server(桌面端产品则用窗口截图工具,同样出三件套)。
177
+ 2. 复制 `assets/scripts/capture-template.mjs` 进项目,改 BASE_URL 与选择器,
178
+ 跑一次产出三件套:
179
+ - **全页 2x 截图**:viewport 1920×1080、`deviceScaleFactor: 2`;截图前
180
+ `document.fonts.ready` + 600ms settle,实时同步页额外再等 1.5–2s。
181
+ - **per-element cutout**:按语义选择器逐元素截图;悬浮件用透明底,需要
182
+ “卡片飞入空板”的镜头则额外截空 backplate。
183
+ - **layout.json**:记录每个元素在整页坐标系下的 `{x,y,w,h}` bbox 与每页
184
+ `pageH`,供飞行目标位、遮罩位置和入场区域直接使用。
185
+ 3. 支持按页/按元素增量重采。活数据源先按阶段 0 的数据口径冻结、虚构或脱敏,
186
+ 再进行最终采集。
187
+
188
+ **产出**:`public/textures/` 全页图、元素切片与空 backplate;`layout.json`;
189
+ 可重跑的 capture 脚本。
190
+
191
+ **常见坑**:
192
+
193
+ - 在分镜放行前做全量采集:页面状态和素材范围尚未确定,会造成重复采集。
194
+ - 手搓 HTML 复刻既有页面:复刻默认走真实截图;手搓 UI 只用于非复刻场景。
195
+ - 活数据源不锁定,或只截整页不记录 layout 坐标。
196
+
197
+ ---
198
+
199
+ ## 阶段 5:逐镜头实现
200
+
201
+ **前置条件**:需已有可跑的 Remotion 项目(30fps、1920×1080,`src/index.ts`
202
+ 注册 Composition;新项目可 `npx create-video@latest` 初始化后把
203
+ `assets/lib/` 组件 copy 进去;走模板路线则直接从 `template/` 起步)。
204
+
205
+ **目标**:按帧级时间轴逐镜头落地,每镜头完成即自证质量——
206
+ 验收在这个阶段就开始,不留到最后。
207
+
208
+ **具体操作**:
209
+
210
+ 1. **每镜头先解析再三读**(硬规则,不可跳):用
211
+ `gallery/api/library.json` 校验卡名和 `style-key` → 读对应配方卡全文 →
212
+ 按卡片“参考实现”定位并读准确的 demo TSX 全文 → copy `assets/lib/`
213
+ 对应组件进项目。同时保存该 style 的 Gallery 参考样片路径,供实现对照和终检。
214
+ 标为“仅供参考,需要自定义实现”的样式不默认推荐,用户明确点名后才可实现并
215
+ 标注风险;标为“缺少预览”的样式不得声称已按动态样片复刻。
216
+ demo 代码是调校过的参数真相(缓动、时值配比、
217
+ 摘罩时机、已知坑的规避写法都在里面)——允许按目标产品做适配性
218
+ 改动,但配方卡"已知坑/命门"标注的参数不得降档,质量标准只升不降。
219
+ 凭卡名和理解新写=放弃全部调校积累,实测质感差一档。
220
+ 2. **PageCam 是一切"真实页面"镜头的地基**:整页纹理 + 关键帧 2.5D 相机 +
221
+ 页面空间 overlay,children 按页面 CSS px 定位、与 layout.json 共坐标系。
222
+ 3. **静帧验收(最高频动作)**:每镜头在计划里写死 2 个验收帧号,
223
+ 完成即跑 `npx remotion still src/index.ts <Comp> out/qa/<name>.png
224
+ --frame=<N>`,自己肉眼检查构图/穿帮/文字锐度后才算完成。
225
+ 静帧产物按迭代版本归档 `out/qa/`,用户贴帧反馈时可直接对号。
226
+ 4. **每轮修改后整片渲染**:`npx remotion render src/index.ts <Comp>
227
+ out/promo.mp4`,再用 `ffmpeg -i out/promo.mp4 -vf "select=eq(n,…)"`
228
+ 从成片抽关键帧回看。实际形态是"改哪个镜头就 still 哪几帧,
229
+ 然后整片重渲",成本可接受且杜绝接缝意外。
230
+ 5. 像素级自检备小工具:裁剪放大看文字锐度(crop)、两帧像素 diff、
231
+ 量元素 bbox 对构图。
232
+ 6. **确定性渲染铁律**:禁 `Date.now()` / `Math.random()` / 无参 `new Date()`。
233
+ 一切伪随机用固定种子(mulberry32/哈希函数,seed 从 index 派生),
234
+ 保证逐帧可复现、渲染间零抖动。
235
+ 7. 对照 `references/aesthetic-rules.md` 边做边自检(不等阶段 7):
236
+ 落地要弹的缓动 y1 必须 >1、光效裁进圆角、3D 下文字糊先查
237
+ 栅格化路径(CSS `zoom` 布局级放大,而非 transform scale)而不是调 DoF。
238
+ 8. 指代含糊的用户反馈("第一个标题")先确认对象再动手;改错立即整
239
+ commit revert 重来,不在错误版本上打补丁——每个改动独立 commit
240
+ 以便干净回滚。
241
+ 9. **为交付后的动效工作台留好接口**(`references/workbench.md` §2–3):时间表只写一份
242
+ (`SHOTS` 是唯一事实源,字幕表 / SFX 钉帧 / 转场点从它派生并 `export`);镜头的语境级
243
+ 参数(文案 / 颜色 / 字号 / 位置)做成带默认值的 props,节奏命门保持常量;
244
+ `src/workbench.ts` 里 import 这些表、给每个单元补 `component` / `props` / `schema`。
245
+ 模板路线已自带(`template/src/workbench.ts`),自由创作在时间线定稿后补写,
246
+ 交付前 `cd workbench && npm run parity` 证明拆解无损。
247
+
248
+ **产出**:逐镜头 commit;`out/qa/` 静帧档案;每轮全片渲染 mp4;`src/workbench.ts` 清单。
249
+
250
+ **阶段输出**:整片渲染视频(每轮迭代一版)+ 关键静帧。自主自由创作不因该输出
251
+ 暂停等待确认;用户主动反馈时再纳入下一轮。
252
+ 用户可能以"从成片截帧贴图"方式给反馈,双方基于帧评审。
253
+
254
+ **常见坑**:
255
+
256
+ - 首检交给用户:交付前必须自己抽帧看片,"镜头视角很差,
257
+ 而且有小抖动"这种问题不该由用户发现。
258
+ - 跳过 demo 代码直接写:参数是几轮真实裁决调校出来的,
259
+ 新写的版本几乎必然回踩已知坑。
260
+ - 产品宣传片默认不加手持 shake;相机噪声只在明确追求纪实感时用。
261
+ - 装饰性 glint/泛光群发:批量元素入场靠运动本身。单点高质量光效可做,
262
+ 群发即廉价。
263
+ - 3D 推进下文字发糊:根因是纹理源分辨率/栅格化路径,先查素材链路
264
+ (2x 纹理 + CSS zoom + 关键元素 4x 单独截图),别先动相机和景深。
265
+ - 飞入动画终点悬空:元素必须落进页面布局的真实槽位(嵌入、归位、
266
+ 排进滚动流),悬浮在页面上方不落地会显得假。
267
+
268
+ ---
269
+
270
+ ## 阶段 6:声音设计
271
+
272
+ **目标**:BGM 定全片能量骨架,SFX 逐拍钉在动效关键帧上,
273
+ 音色符合"产品宣传片"片种而非 UI 事件语义。
274
+
275
+ **前置条件(最贵的顺序教训)**:**画面时间线锁定后才开始。**
276
+ 画面每动一次,钉帧表就要全体重对。若画面确实又改了,收尾动作固定
277
+ 包含"全表 SFX 帧号重对",音画错位是必查项。
278
+
279
+ **具体操作**(细节与判例见 `references/sound-design.md`):
280
+
281
+ 1. 读 `references/sound-design.md` 与 `references/sfx-sourcing.md`,根据分镜里的
282
+ 动作、材质、时长和音色从 Freesound 搜索 SFX。新项目不从模板或共享本地库挑音。
283
+ 默认 CC0,允许署名时可选 CC BY;相关性与声源匹配优先,下载量/评分人数仅作辅助。
284
+ 2. 用 `assets/scripts/sfx-source.py get` 下载到工程 `public/audio/sfx/`,核对详情页许可,
285
+ 保存 `audio-manifest.json` 与 `FREESOUND-CREDITS.md`。脚本下载的是 MP3 预览,
286
+ 不当成原始无损音频;原音质要求按素材页支持的流程获取并重新测量。
287
+ 3. **BGM**:已指定则沿用前期节奏分析;未指定则结合产品方向选择,可使用
288
+ `assets/audio/bgm/` 备选。候选必须垫进成片试听,音量按实测给 SFX/配音留空间。
289
+ BGM 独立受 `bgm` inputProp 控制,从同一时间线交付带 BGM / 无 BGM(保留 SFX)两版。
290
+ 4. 音色按片种和实际声源判断:运镜 whoosh、落地 impact、铺垫 riser、光效 sparkle、
291
+ 转场 transition;点击/开关/碎裂要有拟音。合成反馈提示音只在有明确叙事理由时使用。
292
+ 5. **中央 SFX 表 + 相对钉帧**:`{ from, src, volume }[]`,逐条注释动作,
293
+ `from` 用 `SHOTS.x.from + offset` 或 `beatF(n)`,不写裸绝对帧号;
294
+ 按 sound-design §4.6 扣除音源峰值与输出音轨偏移。Remotion 使用工程内固定文件。
295
+ 6. 下载时的分析记录用于确定播放窗口、增益和候选峰值。>5s 动作样本显式给
296
+ `durationInFrames`,环境声按段落铺,impact 混响保留自然尾音。处理后重新分析并更新
297
+ 文件哈希与修改记录;10ms 能量峰不是 LUFS/true peak,也不自动等于语义落点。
298
+ 7. 连发防机枪感:不同样本交替、音量递减、间隔贴动画加速,密集段收成 swoosh。
299
+ 强鼓点片只给画面独有动作配 SFX,重音留给分镜中的少量峰值。
300
+ 8. 在成片语境里试听并验峰,确认拟音可听见、不削波、不盖住必要人声。
301
+ 元数据和测量不能冒充试听结论;候选尚未试听时如实记录。
302
+ 9. 若分镜采用结尾三拍句式,用 Freesound 的 riser→impact→sparkle 贴实际动作,
303
+ 不照抄模板音源名/帧号。下载失败不静默用旧库替代,按结果只重试失败项。
304
+
305
+ **产出**:带声整片;SFX 相对钉帧表;工程内固定音频、来源许可清单、署名文件与分析记录。
306
+ CC BY 素材的署名随交付提供,发布时进入说明或成片署名。
307
+
308
+ **阶段输出**:带声整片渲染。自主自由创作继续进入终检,不暂停等待确认。
309
+
310
+ **常见坑**:
311
+
312
+ - 画面未锁定就精确钉音,后续变更漏掉 SFX 复核。
313
+ - 只看下载量选到不匹配的声源,或把合成提示音当成真实 UI 拟音。
314
+ - 长样本不设播放窗口,或照抄增益而忽略素材本身峰值。
315
+ - 将 MP3 预览当原始无损音频、许可只留搜索标签、CC BY 署名只留在工程中。
316
+ - 直接在渲染时间线引用远程 URL,网络变化导致成片不可复现。
317
+
318
+ ---
319
+
320
+ ## 阶段 7:验收
321
+
322
+ **目标**:把贯穿全程的静帧/整片自检升级为一次正式的全片过检,
323
+ 同时验证成片是否忠实执行当前模式下确认或记录的产品简报、需求到执行决策表、视觉方向、镜头映射和分镜,
324
+ 对照终检与审美准则逐条出报告,然后终渲交付。
325
+
326
+ **具体操作**:
327
+
328
+ 1. 全片渲染最新版,ffmpeg 抽全部关键帧(每镜头至少:入场中、
329
+ 动作峰值、落定后三帧)。配了 BGM 的片子在此处就渲出两版——带 BGM 版
330
+ 和无 BGM 版(保留 SFX),无 BGM 版靠阶段 6 预留的 `bgm` inputProp
331
+ 从同一时间线渲出:写一个 `props-nobgm.json`(内容 `{"bgm":false}`)
332
+ 然后 `npx remotion render … --props=props-nobgm.json`(跨平台可靠;
333
+ macOS/Linux 也可内联 `--props='{"bgm":false}'`,Windows shell 会剥掉
334
+ 内联 JSON 的双引号,必须走文件)。不另建工程、不用 ffmpeg 后期抽轨。
335
+ 命名区分(如 `promo.mp4` / `promo-nobgm.mp4`)。
336
+ 2. **独立终检(必做)**:派一个干净上下文的 subagent 做第三方审查。
337
+ 不给它制作过程中的辩解、修改历史或“应该通过”的暗示,只提供:最新版成片
338
+ (配 BGM 的片子含两版,供 A8 校验)、
339
+ 抽出的关键帧、创作模式、产品简报、需求到执行决策表、确认或记录的视觉方向/tokens、styleframe 或跳过理由、
340
+ 功能到镜头映射、
341
+ Gallery 卡名与具体变体、`library.json` 中对应记录、卡片文档定位到的准确
342
+ demo TSX、Gallery 参考样片或从中抽出的关键帧、最终分镜、选中的镜头卡、
343
+ `references/final-review.md` 和 `references/aesthetic-rules.md`。
344
+ 3. 审查 Agent 按 `final-review.md` 检查产品目标、功能完整性、视觉方向一致性、
345
+ 镜头卡/变体还原度、分镜一致性、数据安全、音画同步和视觉技术质量。逐镜头
346
+ 看帧+看片,给出 "F2 ✗(第 340 帧缺少已确认的知识图谱功能)" 或
347
+ "Q2 ✗(第 615 帧文字发糊)" 式结论,每条问题附可复核帧号/截图。
348
+ 镜头卡适配不要求和 Gallery 样片像素级相同,但必须保留动作语法、关键时值、
349
+ 已知坑/命门参数和用户点名的具体变体。
350
+ 4. 内容级自查:每个镜头问"给了什么新信息",重复镜头/重复 tagline 删;
351
+ 文案按最终画面重写一遍,纯动画段落也要有解说 caption,不留哑巴段落。
352
+ 5. 音画对齐终检:逐条 SFX 对帧回放,确认无错位(时间线若在阶段 6 后
353
+ 还动过,先重对再验)。卡点片按 music-beat-sync.md §5 做渲后回测,
354
+ 全部切点误差 ≤3f 才算过。
355
+ 6. 审查报告的修复项回到阶段 3/5/6 小循环:方案或分镜偏差回阶段 3,画面实现
356
+ 问题回阶段 5,声音问题回阶段 6;直到 checklist 通过后终渲出片。
357
+ 终渲重复步骤 1 的双版本渲染——配 BGM 的片子交付带 BGM / 无 BGM 两版,
358
+ 无 BGM 版方便用户后期自配音乐或平台配乐。
359
+
360
+ **产出**:独立审查报告(final-review + aesthetic-rules checklist + 帧号证据)
361
+ + 终渲成片(带 BGM / 无 BGM 两版)。
362
+
363
+ **交付物**:审查报告 + 成片两版(带 BGM + 无 BGM)。
364
+
365
+ 交付后先 `node workbench/scripts/open.mjs <工程目录>` 主动打开动效工作台(浏览器自动
366
+ 把成片拆成多轨,用户可视化微调后直接导出;见 `references/workbench.md`),再在最后按
367
+ 1-2-3 依次说三件事:① 发布时推荐(非强制)在简介 @ 一下
368
+ skill 作者(三个平台账号都带链接);② 邀请把成片放到作品展示页(用日常语言
369
+ 说,可留自己的账号);③ 可以导出剪映工程文件(需要则读
370
+ `references/jianying-export.md` 执行)。逐条口径与账号链接见 `SKILL.md`
371
+ 「交付收尾」。
372
+
373
+ **常见坑**:
374
+
375
+ - 把验收当"最后才做的事":本阶段只是收口。若前五阶段没做静帧自检,
376
+ 这里堆积的问题量会让 checklist 失去意义——验收贯穿全程是定式。
377
+ - 自检报告流于"全部 ✓":用户会读清屏幕上每个字、会自己截帧对比——
378
+ 报告里每条结论都应附可复核的帧号/截图。
379
+ - 制作 agent 自己出审查报告:确认偏差不可避免,独立 subagent 审查
380
+ 不可省略。
381
+ - 只查“好不好看”不查“是否符合当前模式的制作基准”:功能漏拍、视觉方向漂移、
382
+ 镜头变体用错和未经确认的数据都属于终检失败。
@@ -0,0 +1,111 @@
1
+ # 发布到社交平台:成片 → TikTok / Instagram / YouTube / LinkedIn / X …
2
+
3
+ 把交付的 MP4 一次发到 TikTok、Instagram(Reels 或 Stories)、YouTube(含 Shorts)、
4
+ LinkedIn、Facebook、X、Threads、Pinterest、Bluesky,可立即发布或定时发布。
5
+ 脚本 `publish/upload_post.py`,通过 [Upload-Post](https://upload-post.com) API 完成,
6
+ 只用 Python 标准库(无需 venv / pip)。
7
+
8
+ **触发时机**:只在用户**主动要求**把成片发到社交平台时执行(例如"帮我发到
9
+ TikTok 和 YouTube")。它不是交付收尾 1-2-3 之外的第 4 条推荐,不要主动推销。
10
+ 发布是公开且难以撤回的操作,**必须先让用户确认文案和平台清单**,再真正发布。
11
+
12
+ > **说明**:Upload-Post 是第三方托管服务。免费版每月 10 次上传,覆盖上面除
13
+ > TikTok 以外的全部平台(TikTok 需付费版)。只有用户配置了自己的 API key 时
14
+ > 本流程才会联网。
15
+
16
+ ## 1. 一次性准备(用户操作)
17
+
18
+ 1. 在 https://upload-post.com 注册,创建一个 profile,把要发的社交账号连到这个 profile。
19
+ 2. 在后台创建 API key。
20
+ 3. 设置环境变量(或写进用户自己的 shell 配置):
21
+
22
+ ```bash
23
+ export UPLOAD_POST_API_KEY=...
24
+ export UPLOAD_POST_USER=<profile 名>
25
+ ```
26
+
27
+ 缺这两个变量时,告诉用户以上三步,停下等待,不要尝试发布。
28
+
29
+ ## 2. 选文件与准备文案
30
+
31
+ - **文件**:用交付的成片。配了 BGM 的片子有两版(带 BGM / 无 BGM),默认发
32
+ **带 BGM 版**;用户另有要求按用户的来。
33
+ - **画幅**:TikTok、Reels、Shorts 要竖屏 9:16。成片是横屏 16:9 时如实告诉用户
34
+ (这些平台会加黑边或裁切),建议改发 YouTube / LinkedIn / X / Facebook,或另渲
35
+ 一版竖屏。
36
+ - **文案 `--title`**:在 TikTok / Instagram / X / Threads 上就是正文,按社交文案写
37
+ (钩子一句 + 2–4 个话题标签),不要写成 YouTube 标题。含 YouTube 时 ≤100 字符。
38
+ 交付收尾第 1 条里用户若同意 @ 作者,把那句放进文案。
39
+ - **长描述 `--description`**:YouTube / LinkedIn / Facebook / Pinterest 用。
40
+ - **AI 声明 `--ai-generated`**:询问用户是否标注 AI 生成内容。成片由 Agent 以代码
41
+ 渲染,一般不属于"逼真的合成影像",默认不标;用了 AI 生成画面或 AI 配音时建议标。
42
+
43
+ 把「文案 + 描述 + 平台清单 + 定时(如有)+ 各平台隐私设置」整理给用户,
44
+ **得到明确确认后**再进入下一步。
45
+
46
+ ## 3. 先 dry-run(不发布)
47
+
48
+ ```bash
49
+ python3 publish/upload_post.py --video out/promo.mp4 --title "<文案>" \
50
+ --description "<长描述>" --platforms tiktok,instagram,youtube --dry-run --json-out
51
+ ```
52
+
53
+ 检查输出:`authOk` 为 `true`;`missingPlatforms` 非空说明这些平台没连到 profile,
54
+ 会被跳过,告诉用户去后台连接,或从清单里去掉。
55
+
56
+ ## 4. 发布
57
+
58
+ 去掉 `--dry-run` 重跑。脚本等待各平台结果(默认最多 10 分钟),逐平台输出链接或错误。
59
+
60
+ - **每条发布命令只跑一次。** 无论超时、断网、报错还是 `status: "unknown"`,都**不要
61
+ 重跑发布命令**,重跑会生成新的 request_id,同一视频会被发两次。只能查询:
62
+ `python3 publish/upload_post.py --status <requestId> --json-out`
63
+ - 脚本如何区分:只有 **400 / 401 / 403 / 422**(服务端受理前明确拒绝)才判失败,此时
64
+ 没有任何东西被发出去,修正参数后可以再发。5xx、网关错误、超时、断网、2xx 却无有效
65
+ JSON 都属于"不确定",视频可能已被受理。脚本会自动用同一个 request_id 查询:查到就
66
+ 照常继续;仍无法确认则输出 `status: "unknown"`(退出码 2)、`requestId` 和
67
+ `statusCommand`,并带 `doNotRerun: true`。
68
+ - 脚本在**发送之前**就把 `request_id` 和对应的 `--status` 命令打到 stderr。进程中途
69
+ 被中断时,用这条命令查询,不要重跑发布。
70
+ - 定时发布(`--schedule 2026-10-01T09:00:00 --timezone Asia/Shanghai`)立即返回
71
+ `jobId` + `requestId` 和 `statusCommand`。定时任务按 **`jobId`** 查询:
72
+ `python3 publish/upload_post.py --status <jobId> --json-out`(输出里的 `statusCommand`
73
+ 就是这条命令)。
74
+
75
+ ## 5. 向用户汇报
76
+
77
+ 每个平台一行:链接、或原因。
78
+
79
+ | 平台结果 | 含义 |
80
+ |---|---|
81
+ | `completed` + `url` | 已发布。私密发布没有公开链接:YouTube 仍给出本人可看的链接,其他平台给 `postId` + `note` |
82
+ | `skipped` | profile 没连这个平台,没有发 |
83
+ | `failed` / `retryable` | `error` 是平台给的原因(如账号授权过期,去后台重新连接);`retryable` 会由服务端自动重试 |
84
+ | TikTok `inbox: true` | TikTok 把视频放进了草稿箱,需要用户在 TikTok App 里点发布 |
85
+ | 整体 `status: "unknown"` | 无法确认是否已受理。原样告诉用户 `requestId`,稍后用 `statusCommand` 查询;**不要重跑发布命令** |
86
+
87
+ ## 6. 参数速查
88
+
89
+ | 参数 | 说明 |
90
+ |---|---|
91
+ | `--video` / `--title` | 成片路径 / 各平台共用文案 |
92
+ | `--description` / `--description-file` | 长描述 |
93
+ | `--platforms` | `tiktok,instagram,youtube,linkedin,facebook,x,threads,pinterest,bluesky`(别名 `twitter` `reels` `shorts`) |
94
+ | `--user` | profile 名,默认 `$UPLOAD_POST_USER` |
95
+ | `--schedule` + `--timezone` | 定时发布(≤365 天),IANA 时区,默认 UTC |
96
+ | `--first-comment` | 发布后自动发第一条评论 |
97
+ | `--ai-generated` | AI 生成内容声明(TikTok / Instagram / YouTube / X) |
98
+ | `--thumbnail` | 自定义封面(YouTube、LinkedIn) |
99
+ | `--youtube-privacy` | `private`(默认)/ `unlisted` / `public` |
100
+ | `--tags` | YouTube 标签,逗号分隔 |
101
+ | `--tiktok-privacy` / `--tiktok-draft` | TikTok 隐私(默认沿用账号设置)/ 只存草稿 |
102
+ | `--instagram-story` | 发 Stories 而非 Reels |
103
+ | `--facebook-page-id` / `--linkedin-page-id` | 指定 Facebook 主页 / 以 LinkedIn 公司页发布 |
104
+ | `--pinterest-board` | Pinterest 必填 |
105
+ | `--status ID` | 查询之前的发布:即时发布用 request_id,定时发布用 job_id |
106
+ | `--dry-run` / `--json-out` | 只校验不发布 / 输出一行 JSON |
107
+
108
+ 错误类型(`errorType`):`auth`(key 缺失或错误)、`validation`(参数错误,或所选平台都没连接)、
109
+ `forbidden`(套餐不支持,如免费版发 TikTok)、`quota`(频率或套餐上限)、`http`(网络 / 服务端)。
110
+
111
+ 离线单测:`python3 -m unittest publish/test_upload_post.py -v`
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: promo-energy-arc
3
+ 一句话: 全片能量骨架——低开品牌 → 单主角立传 → 字卡呼吸间隔的功能爬升段 → 发布会峰值收场
4
+ 适用: 30–60s 多功能 web 产品宣传片的默认全片结构(分镜阶段先填骨架再挑卡)
5
+ 段数: 4 段位 + 2–4 张呼吸字卡
6
+ ---
7
+
8
+ ## 意图
9
+
10
+ 把散落在 R1–R3/Q5/Q8/P4 的节奏规则合成一条可直接填空的全片曲线。
11
+ 模板片成片(1085f)与两次独立复现(各 900f)三次成表均收敛到同一
12
+ 骨架——它是默认项,不是令:逐项目可有意识偏离,偏离写进项目 spec。
13
+
14
+ ## 段位表
15
+
16
+ | 段位 | 时长占比 | 能量 | 职责 | 候选配方卡 |
17
+ |------|----------|------|------|------------|
18
+ | ① 品牌开场 | 8–12%(30s 片);开场+立传合计可达 20%(模板片) | 低 | 字标压印 + hold ≥1s(R1),交棒产品页面 | brand-ink-open |
19
+ | ② 单主角立传 | 12–15% | 中(质感最高、节奏最慢) | 一个主角、一条完整动作弧 ≥3s(Q5/R3),立出产品原子单位 | spotlight-hero-card(+aesthetic-rules.md Q2 高清 rasterize 技法) |
20
+ | ③ 功能爬升段 | 55–65% | 中高⇄低交替 | 每镜绑一个独特功能、一种手法只当一次主角(P4);镜与镜之间按需插呼吸字卡 | deck-deal-flyin / type-and-filter / list-stack-press / row-embed / document-typewriter-reveal |
21
+ | ④ 发布会收场 | 13–16% | 峰值(全片最高) | 已展示功能各出代表元素合影围住字标(Q8),sign-off hold ≥1s(R1) | outro-group-photo-launch |
22
+
23
+ 呼吸字卡(paper-title-card)规则:每 1–2 个功能镜头后插一张,单张
24
+ 50–55f(≈1.8s),全片 2–4 张;重要功能出场前用作引导字卡(C2)。
25
+ 模板片 10 镜里字卡占 4 席,两次复现各 2 席——密度按功能镜头数取。
26
+
27
+ ## 填空流程(替代 ad-hoc 推导)
28
+
29
+ 1. 列产品功能清单(P4),数出功能镜头数 N。
30
+ 2. 按段位表分配总帧数:先扣 ①②④ 与字卡的预算,剩余给 ③ 均分。
31
+ 每镜预算内**先划走 hold/rest 帧**(R1 落定 ≥30f、批量收尾 15f,R3)
32
+ 再排动效——不是排完动效再找空隙。
33
+ 3. ③ 段能量交替:高能量镜(发牌/堆叠)与稳节奏镜(交互/读字段)
34
+ 间隔排列,信息密度最高的镜头(文档/报告类)放在峰值收场之前——
35
+ 模板片与两次复现均把文档/报告类镜头排在倒数第 2–3 位。
36
+ 4. 逐槽位扫 shots/ frontmatter 挑卡,选中的卡读全文。
37
+ 5. 镜头排定后逐接缝选转场式(shot-transitions 技法卡三式选型),
38
+ 写进分镜表"关键动效"列——转场帧从相邻镜头预算划走。
39
+
40
+ ## 已知坑
41
+
42
+ - 骨架当风格令全局硬套:段位占比是模板片单例实证(标注:单例判例),
43
+ 15s 短片或单功能产品应大胆合并段位,但 ①hold/④峰值两端不可省。
44
+ - ③ 段只堆高能量镜:连续高能量读作嘈杂,交替与字卡就是节奏本身。
45
+ - 呼吸字卡写成第二遍 tagline:字卡与 outro 文案重复即删(P4 判例:
46
+ outro tagline 去重)。
47
+
48
+ ## 参考实现
49
+
50
+ template/src/aifl/Main.tsx AIFL_SHOTS 段位表(sum=1085f)。
@@ -0,0 +1,95 @@
1
+ # Freesound 音效选材
2
+
3
+ 新制作与换音直接从 [Freesound](https://freesound.org) 获取 SFX,不再使用共享本地音效库。
4
+ 用户指定的音源仍优先。BGM 沿用独立选曲流程,见 [sound-design.md](sound-design.md) §2。
5
+ 本模块负责选材、下载与来源记录;钉帧、混音、输出偏移补偿继续按 sound-design 执行。
6
+
7
+ ## 1. 把画面写成声音需求
8
+
9
+ 每个 cue 记录:对应镜头/动作、声源或材质、目标时长、攻击/尾音、音色和许可要求。
10
+ 例如纸卡滑入:`paper slide`,0.2–0.8s,干燥、单次、无长尾、CC0。
11
+ 以声源匹配为先,再比较时长、录音描述与热度;不要只搜索抽象情绪或宽泛的 `click`。
12
+
13
+ - 单击/滑动不要选混有多个动作的长段录音,除非能明确裁出所需动作。
14
+ - 下载量与评分人数用于辅助排序,不能替代匹配度;大量评分的 4.4 分通常比 6 人评出的
15
+ 4.9 分更有参考性。推荐时引用实际数据,缺失值保留未知,不能编造。
16
+ - 上传者描述提供声源、设备、处理方式线索;优先清晰且匹配的实际声源。
17
+ 名牌设备不保证质量,口技或内置麦克风也不自动意味着不可用,按项目质感判断。
18
+ - UI 动作的拟音与合成提示音分开判断,遵守 aesthetic-rules S1/S4。
19
+
20
+ ## 2. 搜索
21
+
22
+ 脚本独立实现,Python 3.9+ 标准库,无需 Freesound API key;下载/分析需 ffmpeg、ffprobe。
23
+ 从 skill 根目录执行;路径含空格时加引号。安装在其他位置时用脚本绝对路径。
24
+
25
+ ```bash
26
+ python3 assets/scripts/sfx-source.py search "paper slide" --max-duration 1 --limit 5 --output /path/to/video/audio-search.json
27
+ python3 assets/scripts/sfx-source.py search "short cinematic impact" --license by --max-duration 3 --pages 2
28
+ ```
29
+
30
+ 输出 JSON 含 ID、标题、作者、素材页、预览地址、描述、时长、下载量、评分和人数。
31
+ 保留搜索相关性顺序,并在本地再次过滤许可与时长。`--pages` 最多 3 页,先缩窄关键词,
32
+ 不以抓取更多页面代替选材。搜索输出只用于比较,不作为下载时的许可凭据。
33
+
34
+ 许可默认 `cc0`;`by` 允许 CC0 和 CC BY。商用产品片不接受 BY-NC、Sampling+ 或未知许可。
35
+ 用户愿意接受署名时可用 `--license by`,无需对每条声音重复询问。
36
+
37
+ ## 3. 下载到当前视频工程
38
+
39
+ 把 ID 换成本次搜索返回的候选;`get` 也支持已知 ID,不依赖全局缓存。
40
+
41
+ ```bash
42
+ python3 assets/scripts/sfx-source.py get fs:12345 fs:67890 --out-dir /path/to/video/public/audio/sfx
43
+ ```
44
+
45
+ 需要 CC BY 时在 `get` 上同样传 `--license by`。下载前重新读取各素材的详情页、
46
+ 核对实际许可 URL 与版本,再有界并发下载。不会修改网络代理,也不会自动切换其他音源。
47
+
48
+ 产物:
49
+
50
+ - `fs-<id>.mp3`:Freesound 的高质量 **有损 MP3 预览**,不是上传者的原始 WAV。
51
+ - `audio-manifest.json`:来源、作者、素材页、许可 URL/版本、预览标记、下载时间、
52
+ SHA-256、修改记录与实际音频分析。
53
+ - `FREESOUND-CREDITS.md`:可随工程交付的来源与署名清单;CC BY 条目需进入发布页说明
54
+ 或成片署名,不能仅留在工程文件中。剪辑、变速、归一化等改动需补写 `changes`。
55
+
56
+ 重复下载会核对文件哈希,不覆盖自行修改或来源不明的同名文件。每个输出目录同一时间
57
+ 只运行一个 `get`。部分下载失败时成功项仍保留清单,命令退出非零;根据逐条结果只重试失败 ID。
58
+ 无匹配候选时调整查询;网站超时/限流/页面结构变化时停止该来源的自动调用,说明具体问题。
59
+ 可给出素材页供人工下载,再按同样字段记录来源;不能用 HTML 错误页冒充音频。
60
+
61
+ 原音质或无损处理有明确要求时,从素材页走 Freesound 支持的登录/下载流程取得原文件;
62
+ 不能把预览转 WAV 后标成“原始无损素材”。记录真实文件种类、地址、哈希并重新分析。
63
+
64
+ ## 4. 分析、试听与接入
65
+
66
+ `get` 自动用 ffprobe 与 ffmpeg 解码验收,记录实际格式/采样率/声道、时长、sample peak、
67
+ 整体 RMS、10ms RMS 能量峰和相对峰值 -40dB 的活动区间。这些不是 LUFS、true peak 或精确动作起点。
68
+ 多个动作的录音需要选择正确的峰值,不能直接将全文件最大峰用于所有 cue。
69
+
70
+ 单独分析处理后的文件:
71
+
72
+ ```bash
73
+ python3 assets/scripts/sfx-source.py analyze /path/to/video/public/audio/sfx/fs-12345.mp3 --output /path/to/video/audio-analysis.json
74
+ ```
75
+
76
+ 处理后更新 manifest 的文件名、SHA-256、`analysis` 和 `changes`;原文件与处理后文件的
77
+ 峰值时间分开记录。浏览器试听或把候选垫入片段检查音色、底噪、尾音与音乐的关系。
78
+ 工具只有元数据/测量能力时,明确写“未试听”,不要将下载数、波形或 ffmpeg 分析描述成听感。
79
+ 自主创作可基于证据选定并继续;用户要求听候选时给素材页或支持的本地音频预览。
80
+
81
+ 随后将固定文件接入中央 SFX 表,`from` 从 `SHOTS`/`beatF` 派生,并根据
82
+ sound-design §4.6 补偿音源峰值与输出偏移。下载文件必须随工程保存,不能只引用远程 URL。
83
+ 工作台显示工程音频;新增下载后重新运行 `node workbench/scripts/open.mjs <工程目录>` 更新索引。
84
+
85
+ ## 5. 模板与交付
86
+
87
+ `template/public/audio/` 的历史文件保留供原样运行与验证,不作为新项目的选材池。
88
+ 用模板为新产品制作时,沿用 SFX 的动作语义和钉帧结构,从 Freesound 选音后重新测量、对齐;
89
+ 用户明确要求复现原声音时保留该要求,并按模板授权记录核实音源。
90
+ 共享 SFX 目录移除前的完整记录可从 Git 历史查询,BGM 授权仍在 `assets/audio/ATTRIBUTION.md`。
91
+
92
+ 交付音频文件、manifest、署名清单和 SFX 时间表。终检见 [final-review.md](final-review.md) A10。
93
+
94
+ 选材方法参考 [vibe-motion/sound](https://github.com/vibe-motion/sound)(查阅版本 `01f81d6`);
95
+ 本仓库的 CLI 为独立实现,未引入其脚本或个人 Clash 配置。