@prestyj/cli 5.27.0 → 5.28.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.
- package/README.md +9 -7
- package/assets/motion/BRAG-LICENSE +21 -0
- package/assets/motion/HYPERFRAMES-LICENSE +190 -0
- package/assets/motion/THIRD-PARTY.md +52 -0
- package/assets/motion/assets/music/README.md +20 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.json +3846 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-1-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.json +1826 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-10-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.json +2266 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-11-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.json +2806 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-12-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.json +2796 -0
- package/assets/motion/assets/music/cues/happy-beats-business-moves-vol-9-by-ende-dot-app.music-cues.md +35 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-1-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-10-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-11-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-12-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/music/happy-beats-business-moves-vol-9-by-ende-dot-app.mp3 +0 -0
- package/assets/motion/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-place-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/assets/motion/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/assets/motion/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/assets/motion/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/assets/motion/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/assets/motion/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/bong_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_003.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/click_005.ogg +0 -0
- package/assets/motion/assets/sfx/interface/drop_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/drop_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/drop_003.ogg +0 -0
- package/assets/motion/assets/sfx/interface/error_005.ogg +0 -0
- package/assets/motion/assets/sfx/interface/error_006.ogg +0 -0
- package/assets/motion/assets/sfx/interface/glitch_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/glitch_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/select_008.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_001.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_002.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_004.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_005.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_006.ogg +0 -0
- package/assets/motion/assets/sfx/interface/switch_007.ogg +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/assets/motion/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/assets/motion/assets/sfx/sfx-analysis.json +15584 -0
- package/assets/motion/assets/sfx/sfx-analysis.md +75 -0
- package/assets/motion/assets/sfx/ui/click1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click2.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click3.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click4.ogg +0 -0
- package/assets/motion/assets/sfx/ui/click5.ogg +0 -0
- package/assets/motion/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover2.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover4.ogg +0 -0
- package/assets/motion/assets/sfx/ui/rollover5.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch1.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch10.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch11.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch12.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch13.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch14.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch15.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch16.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch17.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch18.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch19.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch2.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch20.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch21.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch22.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch23.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch24.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch25.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch26.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch27.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch28.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch29.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch3.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch30.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch31.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch32.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch33.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch34.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch35.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch36.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch37.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch38.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch4.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch5.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch6.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch7.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch8.ogg +0 -0
- package/assets/motion/assets/sfx/ui/switch9.ogg +0 -0
- package/assets/motion/bin/contact-sheet.mjs +87 -0
- package/assets/motion/bin/flash-check.mjs +314 -0
- package/assets/motion/bin/fonts.mjs +111 -0
- package/assets/motion/bin/hyperframes.mjs +122 -0
- package/assets/motion/bin/library.mjs +210 -0
- package/assets/motion/bin/media-binaries.mjs +49 -0
- package/assets/motion/bin/motion-check.mjs +256 -0
- package/assets/motion/bin/pdf-extract.mjs +133 -0
- package/assets/motion/bin/reveal.mjs +76 -0
- package/assets/motion/bin/review-frames.mjs +328 -0
- package/assets/motion/bin/score-synth.mjs +486 -0
- package/assets/motion/bin/three.mjs +55 -0
- package/assets/motion/fonts/anybody/OFL.txt +93 -0
- package/assets/motion/fonts/anybody/anybody-normal.woff2 +0 -0
- package/assets/motion/fonts/archivo/OFL.txt +93 -0
- package/assets/motion/fonts/archivo/archivo-normal.woff2 +0 -0
- package/assets/motion/fonts/big-shoulders/OFL.txt +93 -0
- package/assets/motion/fonts/big-shoulders/big-shoulders-normal.woff2 +0 -0
- package/assets/motion/fonts/bricolage-grotesque/OFL.txt +93 -0
- package/assets/motion/fonts/bricolage-grotesque/bricolage-grotesque-normal.woff2 +0 -0
- package/assets/motion/fonts/doto/OFL.txt +93 -0
- package/assets/motion/fonts/doto/doto-normal.woff2 +0 -0
- package/assets/motion/fonts/finger-paint/OFL.txt +93 -0
- package/assets/motion/fonts/finger-paint/finger-paint-normal.woff2 +0 -0
- package/assets/motion/fonts/fonts.json +265 -0
- package/assets/motion/fonts/fraunces/OFL.txt +93 -0
- package/assets/motion/fonts/fraunces/fraunces-italic.woff2 +0 -0
- package/assets/motion/fonts/fraunces/fraunces-normal.woff2 +0 -0
- package/assets/motion/fonts/funnel-display/OFL.txt +93 -0
- package/assets/motion/fonts/funnel-display/funnel-display-normal.woff2 +0 -0
- package/assets/motion/fonts/gloock/OFL.txt +93 -0
- package/assets/motion/fonts/gloock/gloock-normal.woff2 +0 -0
- package/assets/motion/fonts/host-grotesk/OFL.txt +93 -0
- package/assets/motion/fonts/host-grotesk/host-grotesk-normal.woff2 +0 -0
- package/assets/motion/fonts/hubot-sans/OFL.txt +93 -0
- package/assets/motion/fonts/hubot-sans/hubot-sans-normal.woff2 +0 -0
- package/assets/motion/fonts/martian-mono/OFL.txt +93 -0
- package/assets/motion/fonts/martian-mono/martian-mono-normal.woff2 +0 -0
- package/assets/motion/fonts/mona-sans/OFL.txt +93 -0
- package/assets/motion/fonts/mona-sans/mona-sans-normal.woff2 +0 -0
- package/assets/motion/fonts/newsreader/OFL.txt +93 -0
- package/assets/motion/fonts/newsreader/newsreader-italic.woff2 +0 -0
- package/assets/motion/fonts/newsreader/newsreader-normal.woff2 +0 -0
- package/assets/motion/fonts/schibsted-grotesk/OFL.txt +93 -0
- package/assets/motion/fonts/schibsted-grotesk/schibsted-grotesk-normal.woff2 +0 -0
- package/assets/motion/fonts/short-stack/OFL.txt +94 -0
- package/assets/motion/fonts/short-stack/short-stack-normal.woff2 +0 -0
- package/assets/motion/fonts/sora/OFL.txt +93 -0
- package/assets/motion/fonts/sora/sora-normal.woff2 +0 -0
- package/assets/motion/fonts/specimen.jpg +0 -0
- package/assets/motion/fonts/unbounded/OFL.txt +93 -0
- package/assets/motion/fonts/unbounded/unbounded-normal.woff2 +0 -0
- package/assets/motion/fonts/young-serif/OFL.txt +93 -0
- package/assets/motion/fonts/young-serif/young-serif-normal.woff2 +0 -0
- package/assets/motion/library/README.md +106 -0
- package/assets/motion/library/library.json +1384 -0
- package/assets/motion/library/looks/acid-poster/look.md +82 -0
- package/assets/motion/library/looks/acid-poster/meta.json +11 -0
- package/assets/motion/library/looks/acid-poster/preview.jpg +0 -0
- package/assets/motion/library/looks/acid-poster/sample.html +177 -0
- package/assets/motion/library/looks/acid-poster/tokens.css +16 -0
- package/assets/motion/library/looks/blueprint/look.md +22 -0
- package/assets/motion/library/looks/blueprint/meta.json +11 -0
- package/assets/motion/library/looks/blueprint/preview.jpg +0 -0
- package/assets/motion/library/looks/blueprint/sample.html +301 -0
- package/assets/motion/library/looks/blueprint/tokens.css +16 -0
- package/assets/motion/library/looks/dark-studio/look.md +85 -0
- package/assets/motion/library/looks/dark-studio/meta.json +11 -0
- package/assets/motion/library/looks/dark-studio/preview.jpg +0 -0
- package/assets/motion/library/looks/dark-studio/sample.html +324 -0
- package/assets/motion/library/looks/dark-studio/tokens.css +16 -0
- package/assets/motion/library/looks/data-desk/look.md +19 -0
- package/assets/motion/library/looks/data-desk/meta.json +9 -0
- package/assets/motion/library/looks/data-desk/preview.jpg +0 -0
- package/assets/motion/library/looks/data-desk/sample.html +17 -0
- package/assets/motion/library/looks/data-desk/tokens.css +15 -0
- package/assets/motion/library/looks/duotone-broadcast/look.md +53 -0
- package/assets/motion/library/looks/duotone-broadcast/meta.json +11 -0
- package/assets/motion/library/looks/duotone-broadcast/preview.jpg +0 -0
- package/assets/motion/library/looks/duotone-broadcast/sample.html +45 -0
- package/assets/motion/library/looks/duotone-broadcast/tokens.css +16 -0
- package/assets/motion/library/looks/editorial-ink/look.md +80 -0
- package/assets/motion/library/looks/editorial-ink/meta.json +11 -0
- package/assets/motion/library/looks/editorial-ink/preview.jpg +0 -0
- package/assets/motion/library/looks/editorial-ink/sample.html +203 -0
- package/assets/motion/library/looks/editorial-ink/tokens.css +16 -0
- package/assets/motion/library/looks/mono-luxe/look.md +19 -0
- package/assets/motion/library/looks/mono-luxe/meta.json +9 -0
- package/assets/motion/library/looks/mono-luxe/preview.jpg +0 -0
- package/assets/motion/library/looks/mono-luxe/sample.html +12 -0
- package/assets/motion/library/looks/mono-luxe/tokens.css +15 -0
- package/assets/motion/library/looks/soft-light-ad/look.md +63 -0
- package/assets/motion/library/looks/soft-light-ad/meta.json +39 -0
- package/assets/motion/library/looks/soft-light-ad/preview.jpg +0 -0
- package/assets/motion/library/looks/soft-light-ad/sample.html +44 -0
- package/assets/motion/library/looks/soft-light-ad/tokens.css +17 -0
- package/assets/motion/library/looks/sunlit-consumer/look.md +19 -0
- package/assets/motion/library/looks/sunlit-consumer/meta.json +9 -0
- package/assets/motion/library/looks/sunlit-consumer/preview.jpg +0 -0
- package/assets/motion/library/looks/sunlit-consumer/sample.html +12 -0
- package/assets/motion/library/looks/sunlit-consumer/tokens.css +15 -0
- package/assets/motion/library/looks/swiss-grid/look.md +81 -0
- package/assets/motion/library/looks/swiss-grid/meta.json +11 -0
- package/assets/motion/library/looks/swiss-grid/preview.jpg +0 -0
- package/assets/motion/library/looks/swiss-grid/sample.html +209 -0
- package/assets/motion/library/looks/swiss-grid/tokens.css +16 -0
- package/assets/motion/library/looks/terminal-phosphor/look.md +77 -0
- package/assets/motion/library/looks/terminal-phosphor/meta.json +11 -0
- package/assets/motion/library/looks/terminal-phosphor/preview.jpg +0 -0
- package/assets/motion/library/looks/terminal-phosphor/sample.html +182 -0
- package/assets/motion/library/looks/terminal-phosphor/tokens.css +16 -0
- package/assets/motion/library/pieces/animated-beam/LICENSE +21 -0
- package/assets/motion/library/pieces/animated-beam/meta.json +16 -0
- package/assets/motion/library/pieces/animated-beam/piece.html +273 -0
- package/assets/motion/library/pieces/animated-beam/preview.jpg +0 -0
- package/assets/motion/library/pieces/animated-list/LICENSE +21 -0
- package/assets/motion/library/pieces/animated-list/meta.json +16 -0
- package/assets/motion/library/pieces/animated-list/piece.html +189 -0
- package/assets/motion/library/pieces/animated-list/preview.jpg +0 -0
- package/assets/motion/library/pieces/before-after-split/meta.json +12 -0
- package/assets/motion/library/pieces/before-after-split/piece.html +262 -0
- package/assets/motion/library/pieces/before-after-split/preview.jpg +0 -0
- package/assets/motion/library/pieces/blueprint-grid/meta.json +12 -0
- package/assets/motion/library/pieces/blueprint-grid/piece.html +209 -0
- package/assets/motion/library/pieces/blueprint-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/broadcast-frame/meta.json +12 -0
- package/assets/motion/library/pieces/broadcast-frame/piece.html +100 -0
- package/assets/motion/library/pieces/broadcast-frame/preview.jpg +0 -0
- package/assets/motion/library/pieces/browser-window/meta.json +12 -0
- package/assets/motion/library/pieces/browser-window/piece.html +331 -0
- package/assets/motion/library/pieces/browser-window/preview.jpg +0 -0
- package/assets/motion/library/pieces/chapter-card/meta.json +6 -0
- package/assets/motion/library/pieces/chapter-card/piece.html +12 -0
- package/assets/motion/library/pieces/chapter-card/preview.jpg +0 -0
- package/assets/motion/library/pieces/chat-thread/meta.json +12 -0
- package/assets/motion/library/pieces/chat-thread/piece.html +272 -0
- package/assets/motion/library/pieces/chat-thread/preview.jpg +0 -0
- package/assets/motion/library/pieces/clay-drop-3d/meta.json +13 -0
- package/assets/motion/library/pieces/clay-drop-3d/piece.html +224 -0
- package/assets/motion/library/pieces/clay-drop-3d/preview.jpg +0 -0
- package/assets/motion/library/pieces/color-flip-field/meta.json +12 -0
- package/assets/motion/library/pieces/color-flip-field/piece.html +81 -0
- package/assets/motion/library/pieces/color-flip-field/preview.jpg +0 -0
- package/assets/motion/library/pieces/color-wipe/meta.json +6 -0
- package/assets/motion/library/pieces/color-wipe/piece.html +10 -0
- package/assets/motion/library/pieces/color-wipe/preview.jpg +0 -0
- package/assets/motion/library/pieces/command-palette/meta.json +12 -0
- package/assets/motion/library/pieces/command-palette/piece.html +339 -0
- package/assets/motion/library/pieces/command-palette/preview.jpg +0 -0
- package/assets/motion/library/pieces/comparison-bars/meta.json +12 -0
- package/assets/motion/library/pieces/comparison-bars/piece.html +191 -0
- package/assets/motion/library/pieces/comparison-bars/preview.jpg +0 -0
- package/assets/motion/library/pieces/counter-number/meta.json +12 -0
- package/assets/motion/library/pieces/counter-number/piece.html +131 -0
- package/assets/motion/library/pieces/counter-number/preview.jpg +0 -0
- package/assets/motion/library/pieces/cursor-click/meta.json +12 -0
- package/assets/motion/library/pieces/cursor-click/piece.html +242 -0
- package/assets/motion/library/pieces/cursor-click/preview.jpg +0 -0
- package/assets/motion/library/pieces/dock-magnify/LICENSE +21 -0
- package/assets/motion/library/pieces/dock-magnify/meta.json +16 -0
- package/assets/motion/library/pieces/dock-magnify/piece.html +234 -0
- package/assets/motion/library/pieces/dock-magnify/preview.jpg +0 -0
- package/assets/motion/library/pieces/donut-fill/meta.json +12 -0
- package/assets/motion/library/pieces/donut-fill/piece.html +156 -0
- package/assets/motion/library/pieces/donut-fill/preview.jpg +0 -0
- package/assets/motion/library/pieces/dot-grid-field/meta.json +12 -0
- package/assets/motion/library/pieces/dot-grid-field/piece.html +61 -0
- package/assets/motion/library/pieces/dot-grid-field/preview.jpg +0 -0
- package/assets/motion/library/pieces/ease-curve/meta.json +12 -0
- package/assets/motion/library/pieces/ease-curve/piece.html +103 -0
- package/assets/motion/library/pieces/ease-curve/preview.jpg +0 -0
- package/assets/motion/library/pieces/end-card/meta.json +6 -0
- package/assets/motion/library/pieces/end-card/piece.html +11 -0
- package/assets/motion/library/pieces/end-card/preview.jpg +0 -0
- package/assets/motion/library/pieces/film-grain/meta.json +12 -0
- package/assets/motion/library/pieces/film-grain/piece.html +93 -0
- package/assets/motion/library/pieces/film-grain/preview.jpg +0 -0
- package/assets/motion/library/pieces/flickering-grid/LICENSE +21 -0
- package/assets/motion/library/pieces/flickering-grid/meta.json +16 -0
- package/assets/motion/library/pieces/flickering-grid/piece.html +112 -0
- package/assets/motion/library/pieces/flickering-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/flow-nodes/meta.json +12 -0
- package/assets/motion/library/pieces/flow-nodes/piece.html +230 -0
- package/assets/motion/library/pieces/flow-nodes/preview.jpg +0 -0
- package/assets/motion/library/pieces/highlight-sweep/meta.json +12 -0
- package/assets/motion/library/pieces/highlight-sweep/piece.html +132 -0
- package/assets/motion/library/pieces/highlight-sweep/preview.jpg +0 -0
- package/assets/motion/library/pieces/iris-circle/meta.json +6 -0
- package/assets/motion/library/pieces/iris-circle/piece.html +6 -0
- package/assets/motion/library/pieces/iris-circle/preview.jpg +0 -0
- package/assets/motion/library/pieces/kinetic-letters/meta.json +12 -0
- package/assets/motion/library/pieces/kinetic-letters/piece.html +103 -0
- package/assets/motion/library/pieces/kinetic-letters/preview.jpg +0 -0
- package/assets/motion/library/pieces/light-leak-soft/meta.json +12 -0
- package/assets/motion/library/pieces/light-leak-soft/piece.html +102 -0
- package/assets/motion/library/pieces/light-leak-soft/preview.jpg +0 -0
- package/assets/motion/library/pieces/line-stack-reveal/meta.json +12 -0
- package/assets/motion/library/pieces/line-stack-reveal/piece.html +98 -0
- package/assets/motion/library/pieces/line-stack-reveal/preview.jpg +0 -0
- package/assets/motion/library/pieces/lower-third/meta.json +6 -0
- package/assets/motion/library/pieces/lower-third/piece.html +11 -0
- package/assets/motion/library/pieces/lower-third/preview.jpg +0 -0
- package/assets/motion/library/pieces/marquee-strip/meta.json +12 -0
- package/assets/motion/library/pieces/marquee-strip/piece.html +132 -0
- package/assets/motion/library/pieces/marquee-strip/preview.jpg +0 -0
- package/assets/motion/library/pieces/mesh-gradient/meta.json +12 -0
- package/assets/motion/library/pieces/mesh-gradient/piece.html +131 -0
- package/assets/motion/library/pieces/mesh-gradient/preview.jpg +0 -0
- package/assets/motion/library/pieces/orbiting-circles/LICENSE +21 -0
- package/assets/motion/library/pieces/orbiting-circles/meta.json +16 -0
- package/assets/motion/library/pieces/orbiting-circles/piece.html +185 -0
- package/assets/motion/library/pieces/orbiting-circles/preview.jpg +0 -0
- package/assets/motion/library/pieces/phone-frame/meta.json +12 -0
- package/assets/motion/library/pieces/phone-frame/piece.html +252 -0
- package/assets/motion/library/pieces/phone-frame/preview.jpg +0 -0
- package/assets/motion/library/pieces/pricing-toggle/meta.json +6 -0
- package/assets/motion/library/pieces/pricing-toggle/piece.html +18 -0
- package/assets/motion/library/pieces/pricing-toggle/preview.jpg +0 -0
- package/assets/motion/library/pieces/retro-grid/LICENSE +21 -0
- package/assets/motion/library/pieces/retro-grid/meta.json +16 -0
- package/assets/motion/library/pieces/retro-grid/piece.html +139 -0
- package/assets/motion/library/pieces/retro-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/scale-through-word/meta.json +12 -0
- package/assets/motion/library/pieces/scale-through-word/piece.html +139 -0
- package/assets/motion/library/pieces/scale-through-word/preview.jpg +0 -0
- package/assets/motion/library/pieces/serif-quote/meta.json +12 -0
- package/assets/motion/library/pieces/serif-quote/piece.html +145 -0
- package/assets/motion/library/pieces/serif-quote/preview.jpg +0 -0
- package/assets/motion/library/pieces/slam-word/meta.json +12 -0
- package/assets/motion/library/pieces/slam-word/piece.html +72 -0
- package/assets/motion/library/pieces/slam-word/preview.jpg +0 -0
- package/assets/motion/library/pieces/soft-light-field/meta.json +12 -0
- package/assets/motion/library/pieces/soft-light-field/piece.html +83 -0
- package/assets/motion/library/pieces/soft-light-field/preview.jpg +0 -0
- package/assets/motion/library/pieces/sparkline-draw/meta.json +12 -0
- package/assets/motion/library/pieces/sparkline-draw/piece.html +204 -0
- package/assets/motion/library/pieces/sparkline-draw/preview.jpg +0 -0
- package/assets/motion/library/pieces/stack-layers/meta.json +12 -0
- package/assets/motion/library/pieces/stack-layers/piece.html +239 -0
- package/assets/motion/library/pieces/stack-layers/preview.jpg +0 -0
- package/assets/motion/library/pieces/stat-grid/meta.json +12 -0
- package/assets/motion/library/pieces/stat-grid/piece.html +200 -0
- package/assets/motion/library/pieces/stat-grid/preview.jpg +0 -0
- package/assets/motion/library/pieces/studio-backdrop/meta.json +12 -0
- package/assets/motion/library/pieces/studio-backdrop/piece.html +83 -0
- package/assets/motion/library/pieces/studio-backdrop/preview.jpg +0 -0
- package/assets/motion/library/pieces/tile-flip/meta.json +6 -0
- package/assets/motion/library/pieces/tile-flip/piece.html +6 -0
- package/assets/motion/library/pieces/tile-flip/preview.jpg +0 -0
- package/assets/motion/library/pieces/timeline-track/meta.json +12 -0
- package/assets/motion/library/pieces/timeline-track/piece.html +227 -0
- package/assets/motion/library/pieces/timeline-track/preview.jpg +0 -0
- package/assets/motion/library/pieces/toast-stack/meta.json +12 -0
- package/assets/motion/library/pieces/toast-stack/piece.html +185 -0
- package/assets/motion/library/pieces/toast-stack/preview.jpg +0 -0
- package/assets/motion/library/pieces/typewriter-caption/meta.json +12 -0
- package/assets/motion/library/pieces/typewriter-caption/piece.html +112 -0
- package/assets/motion/library/pieces/typewriter-caption/preview.jpg +0 -0
- package/assets/motion/library/pieces/ui-stack-3d/meta.json +12 -0
- package/assets/motion/library/pieces/ui-stack-3d/piece.html +236 -0
- package/assets/motion/library/pieces/ui-stack-3d/preview.jpg +0 -0
- package/assets/motion/library/pieces/vignette/meta.json +12 -0
- package/assets/motion/library/pieces/vignette/piece.html +85 -0
- package/assets/motion/library/pieces/vignette/preview.jpg +0 -0
- package/assets/motion/library/pieces/word-swap/meta.json +12 -0
- package/assets/motion/library/pieces/word-swap/piece.html +122 -0
- package/assets/motion/library/pieces/word-swap/preview.jpg +0 -0
- package/assets/motion/library/sheets/3d.jpg +0 -0
- package/assets/motion/library/sheets/background.jpg +0 -0
- package/assets/motion/library/sheets/data.jpg +0 -0
- package/assets/motion/library/sheets/diagram.jpg +0 -0
- package/assets/motion/library/sheets/frame.jpg +0 -0
- package/assets/motion/library/sheets/looks.jpg +0 -0
- package/assets/motion/library/sheets/texture.jpg +0 -0
- package/assets/motion/library/sheets/transition.jpg +0 -0
- package/assets/motion/library/sheets/type.jpg +0 -0
- package/assets/motion/library/sheets/ui.jpg +0 -0
- package/assets/motion/plugin.json +5 -0
- package/assets/motion/references/README.md +20 -0
- package/assets/motion/references/index.json +25 -0
- package/assets/motion/references/motion-language.md +128 -0
- package/assets/motion/references/runtime/data-attributes.md +78 -0
- package/assets/motion/references/runtime/determinism-rules.md +53 -0
- package/assets/motion/references/runtime/doctor-browser.md +57 -0
- package/assets/motion/references/runtime/gsap-easing-and-stagger.md +199 -0
- package/assets/motion/references/runtime/gsap-timeline-and-labels.md +96 -0
- package/assets/motion/references/runtime/gsap-transforms-and-perf.md +129 -0
- package/assets/motion/references/runtime/gsap.md +105 -0
- package/assets/motion/references/runtime/inputs-and-assets.md +62 -0
- package/assets/motion/references/runtime/lint-validate-inspect.md +131 -0
- package/assets/motion/references/runtime/minimal-composition.md +75 -0
- package/assets/motion/references/runtime/preview-render.md +156 -0
- package/assets/motion/references/runtime/sub-compositions.md +176 -0
- package/assets/motion/references/runtime/tracks-and-clips.md +87 -0
- package/assets/motion/references/runtime/variables-and-media.md +107 -0
- package/assets/motion/references/signal-study.html +39 -0
- package/assets/motion/references/signal-temporal.jpg +0 -0
- package/assets/motion/references/type-temporal.jpg +0 -0
- package/assets/motion/skills/brand-kit/SKILL.md +71 -0
- package/assets/motion/skills/motion/SKILL.md +178 -0
- package/assets/motion/skills/source-ingest/SKILL.md +45 -0
- package/assets/motion/skills/video-qa/SKILL.md +89 -0
- package/assets/motion/vendor/three/LICENSE +21 -0
- package/assets/motion/vendor/three/addons/environments/RoomEnvironment.js +182 -0
- package/assets/motion/vendor/three/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/assets/motion/vendor/three/addons/geometries/TextGeometry.js +84 -0
- package/assets/motion/vendor/three/addons/lights/RectAreaLightTexturesLib.js +127 -0
- package/assets/motion/vendor/three/addons/lights/RectAreaLightUniformsLib.js +40 -0
- package/assets/motion/vendor/three/addons/loaders/FontLoader.js +260 -0
- package/assets/motion/vendor/three/addons/loaders/GLTFLoader.js +4892 -0
- package/assets/motion/vendor/three/addons/loaders/HDRLoader.js +486 -0
- package/assets/motion/vendor/three/addons/loaders/SVGLoader.js +3267 -0
- package/assets/motion/vendor/three/addons/math/SimplexNoise.js +470 -0
- package/assets/motion/vendor/three/addons/objects/Reflector.js +338 -0
- package/assets/motion/vendor/three/addons/postprocessing/BokehPass.js +218 -0
- package/assets/motion/vendor/three/addons/postprocessing/EffectComposer.js +363 -0
- package/assets/motion/vendor/three/addons/postprocessing/FilmPass.js +113 -0
- package/assets/motion/vendor/three/addons/postprocessing/MaskPass.js +195 -0
- package/assets/motion/vendor/three/addons/postprocessing/OutputPass.js +139 -0
- package/assets/motion/vendor/three/addons/postprocessing/Pass.js +191 -0
- package/assets/motion/vendor/three/addons/postprocessing/RenderPass.js +183 -0
- package/assets/motion/vendor/three/addons/postprocessing/ShaderPass.js +135 -0
- package/assets/motion/vendor/three/addons/postprocessing/UnrealBloomPass.js +494 -0
- package/assets/motion/vendor/three/addons/renderers/CSS3DRenderer.js +454 -0
- package/assets/motion/vendor/three/addons/shaders/BokehShader.js +151 -0
- package/assets/motion/vendor/three/addons/shaders/CopyShader.js +52 -0
- package/assets/motion/vendor/three/addons/shaders/FilmShader.js +72 -0
- package/assets/motion/vendor/three/addons/shaders/LuminosityHighPassShader.js +68 -0
- package/assets/motion/vendor/three/addons/shaders/OutputShader.js +103 -0
- package/assets/motion/vendor/three/addons/utils/BufferGeometryUtils.js +1435 -0
- package/assets/motion/vendor/three/build/three.core.min.js +6 -0
- package/assets/motion/vendor/three/build/three.module.min.js +6 -0
- package/assets/motion/vendor/three/three.json +54 -0
- package/dist/app-sidecar-sessions.js +5 -0
- package/dist/app-sidecar-sessions.js.map +1 -1
- package/dist/app-sidecar.js +52 -16
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +39 -3
- package/dist/core/agent-session.js +148 -12
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/agents.js +12 -3
- package/dist/core/agents.js.map +1 -1
- package/dist/core/auth-providers.js +6 -6
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/autopilot-verdict.d.ts +5 -1
- package/dist/core/autopilot-verdict.js +30 -13
- package/dist/core/autopilot-verdict.js.map +1 -1
- package/dist/core/completion-review.d.ts +24 -0
- package/dist/core/completion-review.js +2 -0
- package/dist/core/completion-review.js.map +1 -0
- package/dist/core/context-limits.d.ts +6 -0
- package/dist/core/context-limits.js +8 -0
- package/dist/core/context-limits.js.map +1 -1
- package/dist/core/fast-apply-benchmark.d.ts +1 -1
- package/dist/core/fast-apply-benchmark.js +2 -2
- package/dist/core/fast-apply-benchmark.js.map +1 -1
- package/dist/core/ideal-review-subagent.d.ts +16 -2
- package/dist/core/ideal-review-subagent.js +19 -2
- package/dist/core/ideal-review-subagent.js.map +1 -1
- package/dist/core/lsp/pool.d.ts +2 -0
- package/dist/core/lsp/pool.js +4 -0
- package/dist/core/lsp/pool.js.map +1 -1
- package/dist/core/network-guard.d.ts +2 -0
- package/dist/core/network-guard.js +37 -0
- package/dist/core/network-guard.js.map +1 -1
- package/dist/core/nolan-context.d.ts +7 -5
- package/dist/core/nolan-context.js +106 -16
- package/dist/core/nolan-context.js.map +1 -1
- package/dist/core/nolan-prompt.js +24 -21
- package/dist/core/nolan-prompt.js.map +1 -1
- package/dist/core/project-discovery.js +80 -26
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/semantic-search-benchmark.d.ts +1 -1
- package/dist/core/semantic-search-benchmark.js +2 -2
- package/dist/core/semantic-search-benchmark.js.map +1 -1
- package/dist/core/session-export.d.ts +2 -2
- package/dist/core/session-export.js +6 -2
- package/dist/core/session-export.js.map +1 -1
- package/dist/core/skills.d.ts +15 -0
- package/dist/core/skills.js +48 -4
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagent-manager.d.ts +3 -1
- package/dist/core/subagent-manager.js +3 -1
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-policy.js +1 -1
- package/dist/core/subagent-policy.js.map +1 -1
- package/dist/core/verification-evidence.js +7 -2
- package/dist/core/verification-evidence.js.map +1 -1
- package/dist/core/worktree-setup.d.ts +23 -0
- package/dist/core/worktree-setup.js +128 -9
- package/dist/core/worktree-setup.js.map +1 -1
- package/dist/core/worktree.d.ts +20 -2
- package/dist/core/worktree.js +74 -31
- package/dist/core/worktree.js.map +1 -1
- package/dist/modes/json-mode.js +11 -2
- package/dist/modes/json-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +36 -1
- package/dist/modes/subagent-worker-mode.js +68 -38
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/motion-agent/motion-agent.d.ts +35 -0
- package/dist/motion-agent/motion-agent.js +117 -0
- package/dist/motion-agent/motion-agent.js.map +1 -0
- package/dist/motion-agent/motion-check-tool.d.ts +35 -0
- package/dist/motion-agent/motion-check-tool.js +514 -0
- package/dist/motion-agent/motion-check-tool.js.map +1 -0
- package/dist/motion-agent/motion-prompt.d.ts +2 -0
- package/dist/motion-agent/motion-prompt.js +44 -0
- package/dist/motion-agent/motion-prompt.js.map +1 -0
- package/dist/motion-agent/motion-review-coverage.d.ts +12 -0
- package/dist/motion-agent/motion-review-coverage.js +33 -0
- package/dist/motion-agent/motion-review-coverage.js.map +1 -0
- package/dist/motion-agent/motion-review-gate.d.ts +48 -0
- package/dist/motion-agent/motion-review-gate.js +88 -0
- package/dist/motion-agent/motion-review-gate.js.map +1 -0
- package/dist/motion-agent/motion-review-session.d.ts +65 -0
- package/dist/motion-agent/motion-review-session.js +418 -0
- package/dist/motion-agent/motion-review-session.js.map +1 -0
- package/dist/motion-agent/motion-review.d.ts +76 -0
- package/dist/motion-agent/motion-review.js +225 -0
- package/dist/motion-agent/motion-review.js.map +1 -0
- package/dist/motion-agent/motion-studio-context.d.ts +44 -0
- package/dist/motion-agent/motion-studio-context.js +65 -0
- package/dist/motion-agent/motion-studio-context.js.map +1 -0
- package/dist/system-prompt.d.ts +5 -1
- package/dist/system-prompt.js +17 -4
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash.js +66 -2
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.js +1 -1
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/goals.d.ts +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.js +2 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/read-tracker.d.ts +30 -2
- package/dist/tools/read-tracker.js +92 -5
- package/dist/tools/read-tracker.js.map +1 -1
- package/dist/tools/read.js +36 -5
- package/dist/tools/read.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +19 -0
- package/dist/tools/subagent-shared.js +30 -0
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/web-fetch.js +38 -32
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-search.js +2 -2
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/write.js +4 -3
- package/dist/tools/write.js.map +1 -1
- package/dist/ui/components/Footer.js +2 -3
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/render.d.ts +2 -0
- package/dist/ui/render.js +3 -0
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/text.d.ts +12 -0
- package/dist/utils/text.js +11 -0
- package/dist/utils/text.js.map +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# preview, play, render, publish
|
|
2
|
+
|
|
3
|
+
Serve, render, and share commands.
|
|
4
|
+
|
|
5
|
+
## preview
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
hf preview # foreground on a TTY; persistent in agent shells
|
|
9
|
+
hf preview --background # explicit persistent session
|
|
10
|
+
hf preview --foreground --json # ready JSON, then remain attached
|
|
11
|
+
hf preview --background --port 4567 # agent-safe custom port (default 3002)
|
|
12
|
+
hf preview --selection --json # print the current Studio selection and exit
|
|
13
|
+
hf preview --context --json # print compact agent context from Studio
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Hot-reloads on file changes. Opens Studio in the browser automatically — the full timeline editor, where the user can play the video and edit anything by hand before rendering. This is the review surface, not just a viewer.
|
|
17
|
+
|
|
18
|
+
When handing a project back to the user, use the Studio project URL, not the source `index.html` path:
|
|
19
|
+
|
|
20
|
+
```text
|
|
21
|
+
http://localhost:<port>/#project/<project-name>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Use the actual port and project directory name; treat `index.html` as source-code context, not the preview surface. For example, after `hf preview --background --port 3017` in `codex-openai-video`, report `http://localhost:3017/#project/codex-openai-video`.
|
|
25
|
+
|
|
26
|
+
Two ways a handed URL turns out dead — check both before handing it back: the URL is missing its `#project/<project-name>` hash (Studio loads but has no project to open), or the server is not actually running. Bare `preview` automatically creates a managed persistent session in a non-TTY agent shell; `--background` remains the clearest explicit form. Verify the printed URL returns HTTP 200, keep it alive for the whole review, and stop it explicitly with `hf preview --stop` afterward. Use the printed URL as-is: HyperFrames URL-encodes project names that contain route metacharacters.
|
|
27
|
+
|
|
28
|
+
### Agent context from Studio selection
|
|
29
|
+
|
|
30
|
+
`preview --context` and `preview --selection` are the agent bridge into a running Studio session. They do **not** start a new server; they find the active preview server for the current project, read agent-useful state from Studio, print it, and exit.
|
|
31
|
+
|
|
32
|
+
Use it when the user gives deictic edit instructions like "change this", "move the selected element", "make the card I clicked bigger", or "fix the current selection":
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
hf preview --context --json --context-fields selection
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The compact context payload includes the selected element's source file, composition path, current timeline time, `data-hf-id` / selector target, bounding box, text content, and a thumbnail URL for the selected element. Prefer `selection.target.hfId` when present; fall back to `selection.target.selector` only when no stable `data-hf-id` exists. If `selection` is `null`, inspect `errors.selection.code` (for example, `no-selection`).
|
|
39
|
+
|
|
40
|
+
Keep agent context small by asking only for the slices you need:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
hf preview --context --json --context-fields selection
|
|
44
|
+
hf preview --context --json --context-fields lint
|
|
45
|
+
hf preview --context --json --context-fields selection,lint
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Use `--context-detail full` only when the edit genuinely needs heavy selection fields such as `computedStyles`, `inlineStyles`, `dataAttributes`, or editable text-field metadata:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
hf preview --context --json --context-fields selection --context-detail full
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
`preview --selection --json` remains available when you explicitly want the full selected-element payload and do not need lint/server context.
|
|
55
|
+
|
|
56
|
+
Failure modes:
|
|
57
|
+
|
|
58
|
+
| Code | Meaning |
|
|
59
|
+
| -------------------------- | -------------------------------------------------------------------------- |
|
|
60
|
+
| `preview-not-running` | Start Studio first with `hf preview --background`. |
|
|
61
|
+
| `ambiguous-preview-server` | Multiple matching Studio servers are open; rerun with one listed `--port`. |
|
|
62
|
+
| `preview-port-mismatch` | The requested `--port` is not one of the matching Studio servers. |
|
|
63
|
+
| `no-selection` | Studio is open, but the user has not selected an element yet. |
|
|
64
|
+
| `selection-unavailable` | The running preview server does not expose selection context cleanly. |
|
|
65
|
+
|
|
66
|
+
If there is no selection, ask the user to click the target element in Studio and rerun the command. If the server error lists candidate ports, rerun the same command with `--port <candidate>`. Do not infer the target from a screenshot when the CLI can give a stable element target.
|
|
67
|
+
|
|
68
|
+
## play (lightweight player)
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
hf play # current project, port 3003
|
|
72
|
+
hf play ./my-video # specific project
|
|
73
|
+
hf play --port 8080 # custom port
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`play` serves the composition through the embeddable `<hyperframes-player>` web component instead of the full Studio UI. Use it when sharing a preview link or when Studio is heavier than needed (no editor, no panels). `play` reports the plain `http://localhost:<port>` URL — no `#project/<name>` fragment (that's a Studio routing convention only `preview` uses).
|
|
77
|
+
|
|
78
|
+
The player's `playback-rate` attribute (preview speed control, drives the timeline's `timeScale`) is clamped to `[0.1, 5]`; values `≤ 0` or non-finite fall back to `1`. This is a preview/playback knob, not a composition `data-*` attribute — authored motion still renders at `1×`.
|
|
79
|
+
|
|
80
|
+
### Launching with an external browser (preview + play)
|
|
81
|
+
|
|
82
|
+
Both `preview` and `play` can open inside an explicit Chromium-compatible browser instead of the OS default. Two use cases: isolated Chromium profile, or external CDP attach (DevTools / Playwright / Puppeteer / browser-MCP). **HyperFrames itself does not own CDP automation** — this only exposes the endpoint; whatever connects to it is your problem. Not to be confused with `--browser-gpu` (a `render` flag controlling Chrome GPU access during capture).
|
|
83
|
+
|
|
84
|
+
| Flag | Type | Notes |
|
|
85
|
+
| ------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
86
|
+
| `--browser-path` | path | Absolute path to a Chromium-compatible executable (`/usr/bin/chromium`, `/Applications/Brave Browser.app/...`). |
|
|
87
|
+
| `--user-data-dir` | path | Chromium-compatible profile directory. Requires `--browser-path`. Use a throwaway directory to keep state out of your main profile. |
|
|
88
|
+
| `--remote-debugging-port` | integer 1-65535 | Open a Chromium CDP endpoint on the given port. **Requires both** `--browser-path` and `--user-data-dir` — refused otherwise, so a CDP endpoint cannot leak into your main profile by accident. |
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Open preview in an isolated Chromium profile
|
|
92
|
+
hf preview --background --browser-path /usr/bin/chromium --user-data-dir /tmp/hf-profile
|
|
93
|
+
|
|
94
|
+
# Same plus a CDP endpoint on :9222 (attach DevTools / Playwright / etc.)
|
|
95
|
+
hf play --browser-path /usr/bin/chromium --user-data-dir /tmp/hf-profile --remote-debugging-port 9222
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Validation runs before any server boots, so an invalid value exits cleanly without leaving a listening socket behind.
|
|
99
|
+
|
|
100
|
+
## render
|
|
101
|
+
|
|
102
|
+
> A clear video request authorizes a new, versioned local render. Preview is available when useful, not a mandatory approval checkpoint. Ask only for unresolved inputs, material choices or permission to overwrite an existing export; check the result once through `motion_check`.
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
hf render # standard MP4 from cwd
|
|
106
|
+
hf render ./my-video --output ./out.mp4 # render from outside the project dir
|
|
107
|
+
hf render --output final.mp4 # named output (no timestamp)
|
|
108
|
+
hf render -c compositions/intro.html -o intro.mp4 # render a specific sub-composition file
|
|
109
|
+
hf render --quality draft # fast iteration
|
|
110
|
+
hf render --quality looks # first real encode (default)
|
|
111
|
+
hf render --fps 60 --quality delivery # final delivery
|
|
112
|
+
hf render --format webm # transparent WebM
|
|
113
|
+
hf render --docker # byte-identical
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
> Default `--output` is `renders/<project-name>_<YYYY-MM-DD>_<HH-MM-SS>.<ext>` — timestamped per render so successive runs don't clobber each other. Pass `--output` to get a stable name.
|
|
117
|
+
|
|
118
|
+
| Flag | Options | Default | Notes |
|
|
119
|
+
| ------------------------------------ | -------------------------------------------------------------------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
120
|
+
| `dir` (positional) | path | cwd | Project directory. Omit to use current working directory. |
|
|
121
|
+
| `--composition`, `-c` | path to composition file | `index.html` | Render a specific composition file (e.g. `compositions/intro.html`) instead of the project's `index.html`. |
|
|
122
|
+
| `--output`, `-o` | path | `renders/<project>_<ts>.<ext>` | Output path. Default is timestamped (`<project-name>_YYYY-MM-DD_HH-MM-SS.<ext>`). |
|
|
123
|
+
| `--fps` | 24, 30, 60 | 30 | 60fps doubles render time |
|
|
124
|
+
| `--quality` | draft, looks, delivery, standard, high | looks | `looks` is CRF 16 on the standard preset. `delivery` is `high`. draft for iterating |
|
|
125
|
+
| `--format` | mp4, webm, mov, gif, png-sequence, hls | mp4 | WebM/MOV render with transparency; gif for inline autoplay in GitHub PRs/READMEs/docs (two-pass palette encode, fps capped at 30 — prefer `--fps 15` — no audio, 1-bit transparency only, HDR falls back to SDR); png-sequence writes RGBA frames to a directory (AE/Nuke/Fusion ingest); hls writes an HLS VOD directory (master.m3u8 + video/audio playlists + MPEG-TS segments), SDR only, rejects `--gpu`, unavailable on lambda/cloudrun |
|
|
126
|
+
| `--gif-loop` | 0-65535 | 0 | GIF loop count; `0` loops forever. Only with `--format gif`. |
|
|
127
|
+
| `--hls-segment-seconds` | 1-60 | 4 | HLS target segment length in whole seconds; also locks the encoder GOP so every segment starts on a keyframe. Only with `--format hls`. |
|
|
128
|
+
| `--resolution` | landscape, portrait, landscape-4k, portrait-4k, square, square-4k (+ aliases `1080p`, `4k`, `uhd`) | — | Supersample via Chrome `deviceScaleFactor`. Aspect ratio must match composition; scale must be an integer. Not with `--hdr`. |
|
|
129
|
+
| `--crf` | 0-51 | — | Encoder CRF (lower = higher quality). Mutually exclusive with `--video-bitrate`. |
|
|
130
|
+
| `--video-bitrate` | e.g. `10M`, `5000k` | — | Target bitrate. Mutually exclusive with `--crf`. |
|
|
131
|
+
| `--hdr` | flag | off | Force HDR output even with SDR sources. MP4 only. |
|
|
132
|
+
| `--sdr` | flag | off | Force SDR even with HDR sources. |
|
|
133
|
+
| `--workers` | number or `auto` | auto | Each worker spawns Chrome (~256 MB) |
|
|
134
|
+
| `--docker` | flag | off | Reproducible output across hosts |
|
|
135
|
+
| `--gpu` | flag | off | GPU-accelerated FFmpeg encoding (NVENC / VideoToolbox / VAAPI / QSV) |
|
|
136
|
+
| `--browser-gpu` / `--no-browser-gpu` | flag | auto (local), off (docker) | Host GPU for Chrome/WebGL capture |
|
|
137
|
+
| `--browser-timeout` | seconds (0.001–86400) | 60 | Puppeteer page-navigation timeout for the entry HTML. Raise when heavy compositions (many videos / fonts / remote assets) can't reach `domcontentloaded` within the 60s default. |
|
|
138
|
+
| `--quiet` | flag | off | Suppress verbose output |
|
|
139
|
+
| `--strict` | flag | off | Fail on lint errors |
|
|
140
|
+
| `--strict-all` | flag | off | Fail on lint errors AND warnings |
|
|
141
|
+
| `--variables` | JSON object | — | Override values declared in `data-composition-variables` |
|
|
142
|
+
| `--variables-file` | path | — | JSON file with variable values (alternative to `--variables`) |
|
|
143
|
+
| `--strict-variables` | flag | off | Fail render on undeclared keys or type mismatches in `--variables` |
|
|
144
|
+
|
|
145
|
+
**Quality guidance:** `draft` while iterating, `looks` (the default) for the first real encode, `delivery` for final delivery. `standard` and `high` still work.
|
|
146
|
+
|
|
147
|
+
**Read the summary's second line.** After the output path and size, `render` prints the capture path, GPU mode, and per-stage timings, e.g. `beginframe capture · software gpu · compile 0.7s · setup 1.1s · capture 8.1s · encode 5.8s`. `capture` is the frame loop and `setup` is calibration plus session init; the capture path reads `a|b` when parallel workers diverged, and `encode (during capture)` means the streaming encoder overlapped the loop, so do not add it to the wall time. Local GPU `auto` (the default) requests BeginFrame. If the line still says `screenshot capture` with `software gpu` on Linux, a hint under it says BeginFrame did not run (needs chrome-headless-shell, no `--resolution` upscale). It only appears when the GPU was auto-probed, never under `--docker` or `--no-browser-gpu`, where software GL is the point. Heavy compositions can stall on software GL. Do not reach for `--debug` just to learn which path ran.
|
|
148
|
+
|
|
149
|
+
**Parametrized renders:** the composition declares its variables on the `<html>` root with **`data-composition-variables`** — a JSON **array of declarations** (`{id, type, label, default}` per entry) that defines the schema. Scripts inside read the resolved values via `window.__hyperframes.getVariables()`. The CLI `--variables '{"title":"Q4 Report"}'` is a JSON **object keyed by id** that overrides those declared defaults for one render; missing keys fall through, so the same composition runs unchanged in dev preview and in production. Sub-comp hosts can also override per-instance with `data-variable-values`. See the `hyperframes-core` skill for the full pattern.
|
|
150
|
+
|
|
151
|
+
## GG delivery boundary
|
|
152
|
+
|
|
153
|
+
Keep renders and diagnostics local. Feedback submission, issue filing, publishing
|
|
154
|
+
and cloud rendering are not automatic completion steps. They require explicit
|
|
155
|
+
user authorization; do not send source files, private assets or logs upstream.
|
|
156
|
+
Use GG's `reveal.mjs` to select the delivered local file.
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# Sub-Compositions
|
|
2
|
+
|
|
3
|
+
A sub-composition is a separate HTML file embedded in a host composition. HyperFrames loads it, seeks it independently, and composites the result into the host at `data-start`.
|
|
4
|
+
|
|
5
|
+
## Host Wiring
|
|
6
|
+
|
|
7
|
+
In the host composition, the sub-composition appears as a clip with `data-composition-src`:
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<div
|
|
11
|
+
id="chart"
|
|
12
|
+
data-composition-id="data-chart"
|
|
13
|
+
data-composition-src="compositions/data-chart.html"
|
|
14
|
+
data-start="2"
|
|
15
|
+
data-duration="8"
|
|
16
|
+
data-track-index="2"
|
|
17
|
+
data-width="1920"
|
|
18
|
+
data-height="1080"
|
|
19
|
+
></div>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- `data-composition-id` on the host must match the internal `data-composition-id` of the file at `data-composition-src`.
|
|
23
|
+
- The host clip needs its own `data-start`, `data-duration`, `data-track-index`, `data-width`, `data-height`.
|
|
24
|
+
|
|
25
|
+
## Sub-Composition File Structure
|
|
26
|
+
|
|
27
|
+
### Mental model — what the runtime actually does
|
|
28
|
+
|
|
29
|
+
When a host loads a sub-composition via `data-composition-src`, the runtime:
|
|
30
|
+
|
|
31
|
+
1. `fetch`es the HTML file.
|
|
32
|
+
2. Parses it with `DOMParser`.
|
|
33
|
+
3. **Finds the `<template>` element and clones ONLY its contents into the host slot.**
|
|
34
|
+
4. Everything **outside** the `<template>` (including the entire `<head>`) is **discarded**.
|
|
35
|
+
|
|
36
|
+
So `<template>` is not just a wrapper — it is the **transport container**. If a node needs to exist in the live render, it must be inside `<template>`. Full stop.
|
|
37
|
+
|
|
38
|
+
### File shape
|
|
39
|
+
|
|
40
|
+
```html
|
|
41
|
+
<!doctype html>
|
|
42
|
+
<html>
|
|
43
|
+
<head>
|
|
44
|
+
<meta charset="UTF-8" />
|
|
45
|
+
<!-- head is metadata for the source file only; the runtime ignores it -->
|
|
46
|
+
</head>
|
|
47
|
+
<body>
|
|
48
|
+
<template>
|
|
49
|
+
<!-- EVERYTHING the runtime needs goes here: styles, markup, scripts -->
|
|
50
|
+
<style>
|
|
51
|
+
/* Root: style by #root, never a class. lint: subcomposition_root_styled_by_class. See Pitfall 3. */
|
|
52
|
+
#root {
|
|
53
|
+
position: absolute;
|
|
54
|
+
inset: 0;
|
|
55
|
+
color: #fff;
|
|
56
|
+
}
|
|
57
|
+
/* .label, #bar, … — descendants, plain selectors */
|
|
58
|
+
</style>
|
|
59
|
+
|
|
60
|
+
<div id="root" data-composition-id="data-chart" data-width="1920" data-height="1080">
|
|
61
|
+
<!-- sub-composition markup -->
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
<script>
|
|
65
|
+
const tl = gsap.timeline({ paused: true });
|
|
66
|
+
// ... build timeline ...
|
|
67
|
+
window.__timelines["data-chart"] = tl;
|
|
68
|
+
</script>
|
|
69
|
+
</template>
|
|
70
|
+
</body>
|
|
71
|
+
</html>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Contrast with **standalone** compositions, which put the root directly in `<body>` with no `<template>` wrapper.
|
|
75
|
+
|
|
76
|
+
## Common pitfalls that pass static checks but break at render
|
|
77
|
+
|
|
78
|
+
Static file checks cannot prove the **cross-file mount contract**. These failures appear only when the runtime mounts the sub-composition.
|
|
79
|
+
|
|
80
|
+
### Pitfall 1 — `<style>` in `<head>` instead of inside `<template>`
|
|
81
|
+
|
|
82
|
+
```html
|
|
83
|
+
<!-- ❌ WRONG — looks normal, ships catastrophically broken -->
|
|
84
|
+
<head>
|
|
85
|
+
<style>
|
|
86
|
+
#root { font-size: 88px; ... }
|
|
87
|
+
</style>
|
|
88
|
+
</head>
|
|
89
|
+
<body>
|
|
90
|
+
<template>
|
|
91
|
+
<div id="root" data-composition-id="data-chart" ...>...</div>
|
|
92
|
+
</template>
|
|
93
|
+
</body>
|
|
94
|
+
|
|
95
|
+
<!-- ✅ RIGHT — styles are inside the template, root styled by #root (see Pitfall 3) -->
|
|
96
|
+
<head></head>
|
|
97
|
+
<body>
|
|
98
|
+
<template>
|
|
99
|
+
<style>
|
|
100
|
+
#root { font-size: 88px; ... }
|
|
101
|
+
</style>
|
|
102
|
+
<div id="root" data-composition-id="data-chart" ...>...</div>
|
|
103
|
+
</template>
|
|
104
|
+
</body>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Why this happens:** standard HTML conventions tell you to put `<style>` in `<head>`. In a standalone HTML file that's correct. In a HyperFrames sub-composition it is **not** — the runtime only clones `<template>` contents, so `<head><style>` is dropped on the floor.
|
|
108
|
+
|
|
109
|
+
**Symptom:** isolated checks pass and the render completes, but every text element appears as tiny unstyled default text in the top-left and SVGs expand to canvas size because no CSS reached the live DOM. The same trap applies to `<script>` blocks, `<link rel="stylesheet">`, and custom-element registrations: anything that must execute or apply in the render belongs inside `<template>`.
|
|
110
|
+
|
|
111
|
+
### Pitfall 2 — Host `data-composition-id` ≠ inner template `data-composition-id`
|
|
112
|
+
|
|
113
|
+
```html
|
|
114
|
+
<!-- ❌ WRONG — host renames the slot; runtime can't find the timeline -->
|
|
115
|
+
<!-- host file (e.g. index.html) -->
|
|
116
|
+
<div data-composition-id="chart-mount" data-composition-src="compositions/chart.html" ...></div>
|
|
117
|
+
|
|
118
|
+
<!-- chart.html -->
|
|
119
|
+
<template>
|
|
120
|
+
<div data-composition-id="data-chart" ...>...</div>
|
|
121
|
+
<script>
|
|
122
|
+
window.__timelines["data-chart"] = tl;
|
|
123
|
+
</script>
|
|
124
|
+
</template>
|
|
125
|
+
|
|
126
|
+
<!-- ✅ RIGHT — both ids match, and the timeline key matches them too -->
|
|
127
|
+
<div data-composition-id="data-chart" data-composition-src="compositions/chart.html" ...></div>
|
|
128
|
+
<!-- chart.html template root: data-composition-id="data-chart" -->
|
|
129
|
+
<!-- timeline: window.__timelines["data-chart"] = tl; -->
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**Why this happens:** it feels natural to give the host slot a different name like `chart-mount` ("the mount point") vs `data-chart` ("the actual chart"). HyperFrames does not work that way — **the host's `data-composition-id` is the lookup key the framework uses to find the registered timeline**. Lint passes because each file's ids are individually valid; the cross-file mismatch only blows up at render.
|
|
133
|
+
|
|
134
|
+
**Symptom:** the render logs `Sub-composition timelines not registered after 45000ms: <host-id>` for every mismatched slot, waits 45s per scene, then captures static initial-state frames (so the video is full-length but no animation plays).
|
|
135
|
+
|
|
136
|
+
### Pitfall 3 — Styling the root by a class instead of `#root`
|
|
137
|
+
|
|
138
|
+
`lint` still errors (`subcomposition_root_styled_by_class`) if a sub-composition styles the host root's own class. Style the root with `#root`.
|
|
139
|
+
|
|
140
|
+
## What HyperFrames Does With the Sub-Composition
|
|
141
|
+
|
|
142
|
+
- Loads the file and registers its timeline under its internal `data-composition-id`.
|
|
143
|
+
- Seeks the sub-composition's timeline independently from the host's playhead.
|
|
144
|
+
- Plays the sub-composition's content from `data-start` of the host clip, for `data-duration` seconds.
|
|
145
|
+
|
|
146
|
+
**Do not** manually `master.add(child)` a sub-composition timeline into the host timeline. HyperFrames already drives them independently — nesting them in GSAP causes double-seeks.
|
|
147
|
+
|
|
148
|
+
### The host clip's `data-duration` is the slot's visible window
|
|
149
|
+
|
|
150
|
+
`data-duration` on the host clip defines **how long the slot is visible**, and it takes precedence over the sub-composition's internal GSAP timeline length. Two consequences follow:
|
|
151
|
+
|
|
152
|
+
- **Internal timeline shorter than the slot → the slot holds.** If the sub-composition's GSAP timeline finishes before `data-duration` elapses, the slot keeps showing its final frame for the rest of the window. You do **not** need to pad the timeline with empty tweens.
|
|
153
|
+
- **`data-duration` shorter than the host composition → the slot ends (and goes blank) when its own `data-duration` elapses.** This is intended: the clip is a fixed-length window on the timeline, not "fill until the composition ends." To keep a sub-composition visible for the whole composition, set its `data-duration` to span the host window (or add another clip to cover the remaining time). Leaving a single full-bleed sub-composition shorter than the composition is almost always a mistake — the linter flags it as `subcomposition_blanks_before_host`.
|
|
154
|
+
|
|
155
|
+
## Animations Inside Sub-Compositions
|
|
156
|
+
|
|
157
|
+
Prefer `gsap.fromTo()` over `gsap.from()` for entrance tweens. The host re-seeks the sub-composition every time its clip becomes visible; `gsap.from()` records the starting state at registration and can desync on seek-back, while `gsap.fromTo()` declares both endpoints explicitly and replays cleanly.
|
|
158
|
+
|
|
159
|
+
## Per-Instance Variables
|
|
160
|
+
|
|
161
|
+
If the sub-composition declares variables on its `<html>` element (`data-composition-variables`), the host can override values per instance:
|
|
162
|
+
|
|
163
|
+
```html
|
|
164
|
+
<div
|
|
165
|
+
data-composition-id="data-chart"
|
|
166
|
+
data-composition-src="compositions/data-chart.html"
|
|
167
|
+
data-variable-values='{"title":"Q4 Revenue","accent":"#66d9ef"}'
|
|
168
|
+
data-start="2"
|
|
169
|
+
data-duration="8"
|
|
170
|
+
data-track-index="2"
|
|
171
|
+
data-width="1920"
|
|
172
|
+
data-height="1080"
|
|
173
|
+
></div>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The host can render the same sub-composition multiple times with different `data-variable-values` to produce per-instance variations. See `variables-and-media.md` for variable declaration syntax.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Tracks and Clips
|
|
2
|
+
|
|
3
|
+
Clips are timed elements inside a composition. Tracks are a Studio display concept: the render never reads them.
|
|
4
|
+
|
|
5
|
+
## What is a Clip
|
|
6
|
+
|
|
7
|
+
A clip is any DOM element with `data-start` and, where required, `data-duration`. `data-track-index` is optional. Common kinds:
|
|
8
|
+
|
|
9
|
+
- **Visual `<div>` clips** — scenes, cards, overlays. Always require `data-duration`.
|
|
10
|
+
- **Sub-composition hosts** — `<div>` with `data-composition-src`. Always require `data-duration`.
|
|
11
|
+
- **Video clips** — `<video>` with `muted` and `playsinline`. Duration can default to media length.
|
|
12
|
+
- **Audio clips** — `<audio>`. Duration can default to media length.
|
|
13
|
+
- **Image clips** — `<img>`. `data-duration` is optional and defaults to 3 seconds; write it only for another length.
|
|
14
|
+
|
|
15
|
+
Add `class="clip"` to authored visual clips. The runtime does not read it, but the scaffold's shared `.clip { position: absolute; inset: 0 }` rule is what gives a scene its full-frame box, Studio treats it as an edit hint, and `lint` warns without it.
|
|
16
|
+
|
|
17
|
+
## Tracks Are a Display Lane
|
|
18
|
+
|
|
19
|
+
`data-track-index` is the row a clip occupies in Studio's timeline. It is **not** read by the render, and it constrains nothing:
|
|
20
|
+
|
|
21
|
+
- **Two clips on the same track may overlap in time.** Nothing rejects it and the render is well defined: both are visible, painted in CSS order.
|
|
22
|
+
- **Visual layering (front/back)** is controlled by CSS `z-index`, not by track index.
|
|
23
|
+
- **Omitting it is fine.** The parser defaults it, and Studio then lays out one lane per clip.
|
|
24
|
+
|
|
25
|
+
A clip on track `5` is not "above" a clip on track `1`. Use CSS for layering, `data-start`/`data-duration` for sequencing.
|
|
26
|
+
|
|
27
|
+
The one place the value carries meaning: two `<audio>` elements that share a track index **and** overlap in time raise a `lint` warning (`duplicate_audio_track`), which is a useful nudge that you are about to double up a bed.
|
|
28
|
+
|
|
29
|
+
## Picking a Track Index
|
|
30
|
+
|
|
31
|
+
Purely a readability choice for whoever opens the file in Studio. Common patterns, owned by `/hyperframes-studio` (one caption track, one element kind per track).
|
|
32
|
+
|
|
33
|
+
When adding a clip to an existing composition, set its `data-start`/`data-duration` against the clips around it. You do not need to hunt for a free lane, and you never need to renumber tracks after a retime.
|
|
34
|
+
|
|
35
|
+
## Clip Time Inside the Composition
|
|
36
|
+
|
|
37
|
+
`data-start` is in seconds, measured from the start of the _composition_. For sub-compositions, the sub-composition's internal timeline (its own `data-duration` and child clips) runs from `data-start` to `data-start + data-duration` of the host.
|
|
38
|
+
|
|
39
|
+
`data-media-start` (on `<video>`/`<audio>`) is an offset _into the source media_. Use it to skip the first few seconds of a media file without trimming the file itself.
|
|
40
|
+
|
|
41
|
+
## Cut one source into multiple ranges
|
|
42
|
+
|
|
43
|
+
For a hard cut, trim, splice, or reorder, duplicate the same video source into
|
|
44
|
+
multiple clip elements. Each copy selects its source range with
|
|
45
|
+
`data-media-start` plus `data-duration`, and places that range on the authored
|
|
46
|
+
timeline with `data-start`. Change the source offsets and placement order; do
|
|
47
|
+
not try to keyframe source cutting.
|
|
48
|
+
|
|
49
|
+
Separately authored audio gives each audio copy the identical source range and
|
|
50
|
+
timing as its matching video clip (`data-media-start`, `data-duration`, and
|
|
51
|
+
`data-start`). Video stays muted; the separate audio elements carry sound.
|
|
52
|
+
|
|
53
|
+
## Relative Timing
|
|
54
|
+
|
|
55
|
+
`data-start` accepts a clip ID instead of a number, meaning "start when that clip ends". Add `+ N` / `- N` to offset; negative produces overlap (useful for crossfades).
|
|
56
|
+
|
|
57
|
+
```html
|
|
58
|
+
<video id="intro" data-start="0" data-duration="10" data-track-index="0" src="..."></video>
|
|
59
|
+
<video id="main" data-start="intro" data-duration="20" data-track-index="0" src="..."></video>
|
|
60
|
+
<video
|
|
61
|
+
id="scene-a"
|
|
62
|
+
data-start="intro + 2"
|
|
63
|
+
data-duration="20"
|
|
64
|
+
data-track-index="0"
|
|
65
|
+
src="..."
|
|
66
|
+
></video>
|
|
67
|
+
<video
|
|
68
|
+
id="scene-b"
|
|
69
|
+
data-start="intro - 0.5"
|
|
70
|
+
data-duration="20"
|
|
71
|
+
data-track-index="1"
|
|
72
|
+
src="..."
|
|
73
|
+
></video>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Rules, and three ways this fails **silently**. Nothing in `lint` checks any of them, so read them before you use a reference:
|
|
77
|
+
|
|
78
|
+
- **Spaces around the operator are required.** `data-start="intro - 0.5"` means "0.5s before `intro` ends". `data-start="intro-0.5"` (no spaces) is parsed as a reference to an element whose id is literally `intro-0.5`; that element does not exist, so the clip silently starts at 0.
|
|
79
|
+
- **An unresolved reference resolves to 0**, it does not error. A typo'd id, or a target that is not in the document, puts the clip at the start of the composition.
|
|
80
|
+
- **If the target has no resolvable duration, the reference lands on the target's START, not its end.** So `data-start="hero"` where `hero` has no `data-duration` and no known media length silently means "same time as `hero`" rather than "after `hero`".
|
|
81
|
+
- **A cycle resolves to 0** rather than erroring. `A → B → A` puts one of them at 0.
|
|
82
|
+
- Lookup is **document-wide** (`getElementById`, then `[data-composition-id]`). A reference can therefore reach a target in another composition on the assembled page. Keep referenced ids unique and keep the reference and its target in the same file, or the result depends on assembly order.
|
|
83
|
+
- A value that parses as a number is always absolute seconds. Otherwise the resolver expects `<id>`, `<id> + <number>`, or `<id> - <number>`.
|
|
84
|
+
- References can chain (`A → B → C`). Keep chains under 3-4 levels for readability.
|
|
85
|
+
- Negative offsets create overlap, which is allowed. Overlapping clips do **not** need different tracks.
|
|
86
|
+
|
|
87
|
+
Because every failure mode above is a silent 0, snapshot a reference-timed composition and check the clip actually starts where you meant.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Variables and Media
|
|
2
|
+
|
|
3
|
+
Two separate concerns, grouped because both control "what flows in from outside the HTML": runtime parameters (variables) and external media files (video/audio).
|
|
4
|
+
|
|
5
|
+
## Variables
|
|
6
|
+
|
|
7
|
+
Declare variables on the `<html>` element with `data-composition-variables`. Each declaration needs `id`, `type`, `label`, and `default`:
|
|
8
|
+
|
|
9
|
+
```html
|
|
10
|
+
<html
|
|
11
|
+
data-composition-variables='[
|
|
12
|
+
{"id":"title","type":"string","label":"Title","default":"Hello"},
|
|
13
|
+
{"id":"accent","type":"color","label":"Accent","default":"#66d9ef"}
|
|
14
|
+
]'
|
|
15
|
+
></html>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Prefer declarative bindings — no script needed** for direct substitution:
|
|
19
|
+
|
|
20
|
+
```html
|
|
21
|
+
<img class="clip" data-start="0" data-duration="5" data-var-src="heroImage" src="fallback.jpg" />
|
|
22
|
+
<h1 class="clip" data-start="0" data-duration="5" data-var-text="title">Fallback</h1>
|
|
23
|
+
<style>
|
|
24
|
+
.card {
|
|
25
|
+
color: var(--accent);
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- `data-var-src="id"` substitutes the element's `src` (URL string or image `{url}`); the authored `src` is the fallback.
|
|
31
|
+
- `data-var-text="id"` substitutes the element's own text; element children (nested clips, animated spans) are preserved.
|
|
32
|
+
- Every scalar variable is applied automatically as a `--{id}` CSS custom property on the composition root, so `var(--id)` CSS responds to overrides — no `setProperty` boilerplate.
|
|
33
|
+
- Bindings resolve identically in preview and render, and per-instance for sub-compositions.
|
|
34
|
+
- Caveat: media with audio should keep a real fallback `src` — render audio extraction reads the authored attribute (lint: `media_variable_src_no_fallback`).
|
|
35
|
+
|
|
36
|
+
For logic beyond direct substitution (loops, conditionals, derived values), read values once during initialization:
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
const { title, accent } = window.__hyperframes.getVariables();
|
|
40
|
+
document.getElementById("title").textContent = title;
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Variable Rules
|
|
44
|
+
|
|
45
|
+
- Supported types and their extra options (consumed by Studio's editing UI):
|
|
46
|
+
- `string` — optional `placeholder`, `maxLength`
|
|
47
|
+
- `number` — optional `min`, `max`, `step`, `unit`
|
|
48
|
+
- `color` — none
|
|
49
|
+
- `boolean` — none
|
|
50
|
+
- `enum` — **required** `options: [{ "value": "...", "label": "..." }, ...]`
|
|
51
|
+
- Always provide useful `default` values so preview works without CLI overrides.
|
|
52
|
+
- Use `data-variable-values='{"title":"Pro"}'` on sub-composition hosts for per-instance overrides.
|
|
53
|
+
- Use `npx hyperframes render --variables '{"title":"Q4 Report"}'` or `--variables-file` for render-time overrides.
|
|
54
|
+
- Add `--strict-variables` in CI: turns undeclared keys, type mismatches, and enum values not in `options` into errors instead of warnings.
|
|
55
|
+
- Read values once during init, not on every animation tick — variables don't change mid-render.
|
|
56
|
+
- Media color grading can use exact variable references inside `data-color-grading` JSON. Use `$gradingPreset` or `${gradingIntensity}` as the whole field value; the runtime resolves it from the current composition's variables before applying shader adjustments, finishing details, blur/pixelate effects, and custom LUTs.
|
|
57
|
+
|
|
58
|
+
### Two JSON Shapes (Easy to Confuse)
|
|
59
|
+
|
|
60
|
+
- `data-composition-variables` is an **array of declarations** (the schema): `[{id, type, label, default}, ...]`
|
|
61
|
+
- `--variables` and `data-variable-values` are **objects keyed by id** (the values): `{"title":"Q4","accent":"#fff"}`
|
|
62
|
+
|
|
63
|
+
## Media
|
|
64
|
+
|
|
65
|
+
**`<video>`/`<audio>` work at any nesting depth, including inside a sub-composition `<template>` or a wrapper `<div>`.** The runtime discovers media with a flat `document.querySelectorAll("video, audio")`, resolves each element's host composition via `element.closest("[data-composition-id]")`, and rebases its local `data-start` by the accumulated absolute start of every ancestor composition. A host at `2` with child media at `2` therefore starts that media at root time `4`, consistently in preview, snapshot, extraction, and render. Legacy projects that deliberately authored a media start in root time must mark that element with `data-hf-media-start-basis="global"`; never infer the basis from overlapping numbers. New compositions should always use scene-local `data-start`. If a panel renders blank after a render, capture a per-frame `snapshot` and treat it as render-blocking.
|
|
66
|
+
|
|
67
|
+
The one real constraint is about **timelines, not media placement**: a sub-composition timeline **cannot reach or animate host elements** — neither `document.querySelector("#host-id")` nor a gsap selector string (`tl.to("#host-id", …)`) resolves across the boundary; a sub-comp timeline only drives its own subtree. So if a media element lives at the host root, **its per-scene motion (scale/opacity/morph/tilt/breathing) must be authored on the MAIN timeline in `index.html`, at GLOBAL time** (scene-local time + the scene slot's `data-start`). Keeping the media inside the scene sub-comp instead lets that sub-comp's own timeline animate it with scene-local time. For 3D tilt without a perspective parent, use gsap `transformPerspective` on the element. See `composition-patterns.md` archetype B.
|
|
68
|
+
|
|
69
|
+
Video elements must be muted and inline. Audio must be a separate `<audio>` element, even when it uses the same source file.
|
|
70
|
+
|
|
71
|
+
```html
|
|
72
|
+
<video
|
|
73
|
+
id="a-roll"
|
|
74
|
+
class="clip"
|
|
75
|
+
src="assets/demo.mp4"
|
|
76
|
+
data-start="0"
|
|
77
|
+
data-duration="12"
|
|
78
|
+
data-track-index="0"
|
|
79
|
+
muted
|
|
80
|
+
playsinline
|
|
81
|
+
></video>
|
|
82
|
+
|
|
83
|
+
<audio
|
|
84
|
+
id="a-roll-audio"
|
|
85
|
+
src="assets/demo.mp4"
|
|
86
|
+
data-start="0"
|
|
87
|
+
data-duration="12"
|
|
88
|
+
data-track-index="10"
|
|
89
|
+
data-volume="1"
|
|
90
|
+
></audio>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Media Rules
|
|
94
|
+
|
|
95
|
+
- **Do not** call `video.play()`, `audio.play()`, pause, or seek in composition code. HyperFrames owns playback.
|
|
96
|
+
- **Do not** drive host-root media from a sub-comp timeline: a sub-comp timeline cannot reach elements outside its subtree, so it has no effect. Drive host-root media from the main timeline at global time (or keep the media inside the sub-comp whose timeline animates it).
|
|
97
|
+
- **Do not** animate timed media element dimensions; animate a non-timed wrapper instead.
|
|
98
|
+
- **Do not** nest video inside a timed wrapper. `lint` rejects a `<video data-start>` whose ancestor also carries `data-start` (`video_nested_in_timed_element`, error), and the failure is real: the frame extractor resolves the video's start from its own `data-start` without the wrapper's offset, while visibility uses the wrapper's window. The clip then shows the wrong source frames and disappears partway through its slot. Put the timing on the wrapper **or** on the media element, never both.
|
|
99
|
+
- **Sub-compositions are exempt and work.** A `<video>`/`<audio>` inside a sub-composition renders identically to one at the host root, because a composition host propagates its offset. Only plain timed wrappers (a `<section data-start>` around a `<video data-start>`) break.
|
|
100
|
+
- **Never** add `crossorigin` to `<video>`/`<audio>`. `lint` rejects it unconditionally (`media_crossorigin_breaks_preview`, error) because a media host without `Access-Control-Allow-Origin` then fails silently in preview while renders still work, hiding the bug. There is no suppression, so this holds even for the canvas/WebGL/WebAudio readback case.
|
|
101
|
+
- **Every `<audio>` needs an `id`.** The mixer selects `audio[id][src]`, so an id-less `<audio>` is never mixed and the render is **silent**. `lint` catches it as `media_missing_id`.
|
|
102
|
+
- Audio always lives on a separate `<audio>` element — even if its source file is the same as a `<video>`. The `<video>` is muted; the `<audio>` carries sound.
|
|
103
|
+
- For volume fades and ducking, use the `data-automation` volume lane; the exact form is in `creator-editing-recipes.md`. `data-volume` is the static baseline. A timeline `volume` tween is ignored when a lane is present.
|
|
104
|
+
|
|
105
|
+
For media duration: `<video>` and `<audio>` can omit `data-duration` if the media's intrinsic length is known and you want the full clip. Otherwise provide `data-duration` explicitly.
|
|
106
|
+
|
|
107
|
+
Input codecs: render decodes video via FFmpeg (frames are pre-extracted and injected), so HEVC/H.265 assets (8/10-bit) render correctly everywhere; live preview auto-proxies any browser-hostile asset (transcodes and caches an H.264 copy on first use, opt out with `--no-proxy` or `media.autoProxy: false`), and `lint` emits an info-level `hevc_preview_codec` note naming affected assets.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<meta charset="utf-8">
|
|
4
|
+
<title>GG study — attention follows a changing path</title>
|
|
5
|
+
<style>
|
|
6
|
+
html, body { margin: 0; background: #142033; overflow: hidden; }
|
|
7
|
+
svg { display: block; width: 960px; height: 540px; }
|
|
8
|
+
</style>
|
|
9
|
+
<svg viewBox="0 0 960 540" role="img" aria-label="A signal traces a path; the framing follows it before revealing the complete route">
|
|
10
|
+
<g id="world">
|
|
11
|
+
<path id="route" d="M100 330 C260 330 230 150 430 160 S630 410 840 280 S1050 70 1250 200 S1450 450 1650 270" fill="none" stroke="#95e0c0" stroke-width="12" stroke-linecap="round"/>
|
|
12
|
+
<circle id="head" r="22" fill="#f7e7ae"/>
|
|
13
|
+
<circle id="halo" r="38" fill="none" stroke="#f7e7ae" stroke-width="2"/>
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|
|
16
|
+
<script>
|
|
17
|
+
// GG-authored reduction of the local Follow the Signal study (1.5–6.3s).
|
|
18
|
+
// Transfer the coupled path-progress/framing mechanism, not palette or camera rules.
|
|
19
|
+
const route = document.getElementById('route');
|
|
20
|
+
const length = route.getTotalLength();
|
|
21
|
+
route.style.strokeDasharray = length;
|
|
22
|
+
const smooth = (p) => p * p * (3 - 2 * p);
|
|
23
|
+
window.seekStudy = (seconds) => {
|
|
24
|
+
const progress = Math.max(0, Math.min(1, seconds / 4));
|
|
25
|
+
const point = route.getPointAtLength(progress * length);
|
|
26
|
+
route.style.strokeDashoffset = (1 - progress) * length;
|
|
27
|
+
for (const id of ['head', 'halo']) {
|
|
28
|
+
document.getElementById(id).setAttribute('cx', point.x);
|
|
29
|
+
document.getElementById(id).setAttribute('cy', point.y);
|
|
30
|
+
}
|
|
31
|
+
const resolve = smooth(Math.max(0, (progress - .65) / .35));
|
|
32
|
+
const zoom = 1.15 - .64 * resolve;
|
|
33
|
+
const x = (480 - point.x * zoom) * (1 - resolve) + 40 * resolve;
|
|
34
|
+
const y = (270 - point.y * zoom) * (1 - resolve) + 125 * resolve;
|
|
35
|
+
document.getElementById('world').setAttribute('transform', `translate(${x} ${y}) scale(${zoom})`);
|
|
36
|
+
};
|
|
37
|
+
window.seekStudy(0);
|
|
38
|
+
</script>
|
|
39
|
+
</html>
|
|
Binary file
|
|
Binary file
|