@prestyj/cli 5.27.0 → 5.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -5
- package/assets/motion/BRAG-LICENSE +21 -0
- package/assets/motion/HYPERFRAMES-LICENSE +190 -0
- package/assets/motion/THIRD-PARTY.md +57 -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/fonts.mjs +107 -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 +250 -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/fonts.json +209 -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/specimen.jpg +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 +104 -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/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 +52 -0
- package/assets/motion/references/runtime/lint-validate-inspect.md +131 -0
- package/assets/motion/references/runtime/minimal-composition.md +69 -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 +70 -0
- package/assets/motion/skills/mixkit-split-text-617/SKILL.md +115 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-480.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-494.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-5.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-508.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6525.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6539.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6647.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6663.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6677.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6691.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6706.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6722.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6736.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6750.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6764.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6780.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6794.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6810.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6823.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6872.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-6936.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/compositions/comp-76.json +1 -0
- package/assets/motion/skills/mixkit-split-text-617/data/manifest.json +495 -0
- package/assets/motion/skills/mixkit-split-text-617/references/RECONSTRUCTION.md +201 -0
- package/assets/motion/skills/mixkit-split-text-617/references/VERIFICATION.md +107 -0
- package/assets/motion/skills/mixkit-split-text-617/tools/inspect_motion.py +130 -0
- package/assets/motion/skills/motion/SKILL.md +102 -0
- package/assets/motion/skills/source-ingest/SKILL.md +48 -0
- package/assets/motion/skills/video-qa/SKILL.md +66 -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 +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session.d.ts +26 -0
- package/dist/core/agent-session.js +116 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.js +5 -5
- package/dist/core/auth-providers.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/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/project-discovery.js +3 -0
- package/dist/core/project-discovery.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 +35 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/verification-evidence.js +7 -2
- package/dist/core/verification-evidence.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 +21 -0
- package/dist/motion-agent/motion-check-tool.js +206 -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 +48 -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 +3 -0
- package/dist/system-prompt.js +5 -1
- package/dist/system-prompt.js.map +1 -1
- package/dist/tools/bash.js +2 -2
- package/dist/tools/bash.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/ui/components/Footer.js +1 -2
- package/dist/ui/components/Footer.js.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# GG runtime inputs and assets
|
|
2
|
+
|
|
3
|
+
This is implementation support, not a creative workflow. The selected recipe
|
|
4
|
+
controls choreography and permitted adaptations. Bind approved text, fonts,
|
|
5
|
+
colours, logos and media without adding a second look-selection process.
|
|
6
|
+
|
|
7
|
+
`hf` in these references is shorthand for the exact bundled launcher command
|
|
8
|
+
in the system prompt; expand it, never run bare `hf` or `npx hyperframes`.
|
|
9
|
+
`<node>` and `<motion bin>` also come from that prompt. No self-updates,
|
|
10
|
+
package installs, cloud rendering or publishing without explicit permission.
|
|
11
|
+
|
|
12
|
+
## Local inputs
|
|
13
|
+
|
|
14
|
+
- Keep original captures/uploads in `sources/`; use local `assets/` for the
|
|
15
|
+
files consumed by the composition. Never overwrite originals or finished renders.
|
|
16
|
+
- A reusable kit lives at `brand-kits/<slug>/Motion.md` in the Motion workspace.
|
|
17
|
+
Keep it read-only for ordinary video work. Record the selected kit and permitted
|
|
18
|
+
bindings in `frame.md`; preserve legacy briefs rather than duplicating plans.
|
|
19
|
+
- The recipe defines fit/crop/in-point policies. Record approved choices. A
|
|
20
|
+
different asset aspect ratio or title length does not authorize new choreography.
|
|
21
|
+
- Root output duration is a static composition contract. If a permitted input
|
|
22
|
+
changes duration, update the authored root explicitly; a runtime variable
|
|
23
|
+
cannot silently change the compiled video length.
|
|
24
|
+
|
|
25
|
+
## Existing helpers (only when needed)
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
<node> "<motion bin>/fonts.mjs" list
|
|
29
|
+
<node> "<motion bin>/fonts.mjs" add <project> <Family>...
|
|
30
|
+
<node> "<motion bin>/pdf-extract.mjs" <file.pdf> <output-dir>
|
|
31
|
+
<node> "<motion bin>/three.mjs" add <project>
|
|
32
|
+
<node> "<motion bin>/library.mjs" list
|
|
33
|
+
<node> "<motion bin>/reveal.mjs" <delivered-file>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Inspect helper help for less common operations; do not guess options. Fonts,
|
|
37
|
+
Three.js and library assets remain available offline, but their existence does
|
|
38
|
+
not require using them. Respect actual licenses and required brand typography.
|
|
39
|
+
|
|
40
|
+
Shared music and SFX are at `../../assets/music/` and `../../assets/sfx/` relative
|
|
41
|
+
to this document. Upstream metadata can retain historical `skills/brag/` paths;
|
|
42
|
+
resolve its filenames under these shared asset roots, not the removed skill.
|
|
43
|
+
Those provenance notes are not instructions to invoke an old workflow.
|
|
44
|
+
Preserve credits, cue maps and SFX analysis. Copy only used
|
|
45
|
+
assets into the video project. The selected recipe or user determines whether
|
|
46
|
+
sound belongs in the video; do not automatically add music or hits.
|
|
47
|
+
|
|
48
|
+
Use `motion_check` once on the current render as specified by `video-qa`; it
|
|
49
|
+
runs the media helpers and returns images for this agent to inspect. Do not
|
|
50
|
+
repeat its checks as a separate checklist. Request permission before
|
|
51
|
+
installing missing FFmpeg/browser software; a detector setup failure does not
|
|
52
|
+
justify skipping validation. Never upload user files to resolve a local blocker.
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# lint, check, snapshot
|
|
2
|
+
|
|
3
|
+
Motion's `motion_check` tool already runs `check`, including lint, runtime, layout and contrast, and returns rendered images. Do not run the commands below as additional delivery gates. Use them only for targeted debugging of a concrete failure. `snapshot` captures still frames and zoomed crops; `validate`, `inspect` and `layout` are deprecated because `check` covers them.
|
|
4
|
+
|
|
5
|
+
## Discipline (motion-heavy work)
|
|
6
|
+
|
|
7
|
+
For a concrete problem during authoring or editing:
|
|
8
|
+
|
|
9
|
+
- Use `lint` for a static-code failure or `check --snapshots` for runtime/layout evidence, not both by default.
|
|
10
|
+
- Look at the returned images before changing the animation: a diagnostic must not become an alternative art direction.
|
|
11
|
+
- Treat layout errors as defects unless a snapshot proves the layering is intentional, in which case mark it with `data-layout-allow-overflow` / `data-layout-allow-overlap` / `data-layout-allow-occlusion` / `data-layout-allow-caption-zone` (caption band only).
|
|
12
|
+
- Existing meaningful motion assertions may remain, but GG does not require a new `*.motion.json` sidecar for every video. Use rendered-pixel checks and the `video-qa` evidence process for liveness, especially for canvas/WebGL. No detector or screenshot proves playback was watched.
|
|
13
|
+
|
|
14
|
+
## lint
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
hf lint # current directory
|
|
18
|
+
hf lint ./my-project # specific project
|
|
19
|
+
hf lint --verbose # info-level findings
|
|
20
|
+
hf lint --json # machine-readable
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Lints `index.html` and all files in `compositions/`. Reports errors (must fix), warnings (should fix), and info (with `--verbose`). Catches missing `data-composition-id`, overlapping tracks on the same `data-track-index`, unregistered timelines, and GSAP/CSS transform conflicts.
|
|
24
|
+
|
|
25
|
+
`<video>`/`<audio>` work at any nesting depth, including inside a `compositions/*.html` sub-composition or a wrapper `<div>`: the runtime discovers media with a flat DOM query and seeks/decodes it wherever it lives (`packages/core/src/runtime/{media,startResolver}.ts`). After a render, `snapshot` each scene that has a video and confirm the panel actually shows footage (a blank/black panel where a clip should play is a real bug, not a placeholder).
|
|
26
|
+
|
|
27
|
+
## check
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
hf check # current directory: the full browser gate
|
|
31
|
+
hf check ./my-project # specific project
|
|
32
|
+
hf check --json # agent-readable envelope {ok, lint, runtime, layout, motion, contrast, hdr, snapshots}
|
|
33
|
+
hf check --snapshots # also write overview frames (annotated) + per-finding crops
|
|
34
|
+
hf check --samples 15 # denser timeline sweep (default 9)
|
|
35
|
+
hf check --at 1.5,4,7.25 # explicit hero-frame timestamps
|
|
36
|
+
hf check --at-transitions # also sample every tween start/end boundary
|
|
37
|
+
hf check --tolerance 4 # allowed overflow px before reporting (default 2)
|
|
38
|
+
hf check --timeout 30000 # initial render-ready + navigation minimum in ms (defaults: 3000 / 10000)
|
|
39
|
+
hf check --no-contrast # skip the WCAG audit while iterating
|
|
40
|
+
hf check --strict # exit non-zero on warnings too (default: only errors)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
One command, one Chrome boot. `check` runs the linter first and skips the browser entirely when lint reports errors. Then it loads the bundled composition once, wires runtime listeners before navigation, and sweeps one seek grid running every audit per sample:
|
|
44
|
+
|
|
45
|
+
- **Runtime**: JavaScript console errors, unhandled exceptions, failed network requests (media-file `ERR_ABORTED` filtered out), HTTP 4xx/5xx.
|
|
46
|
+
- **Layout**: text extending outside its container or the canvas, text clipped by its own box, held text overlaps and occlusion (with an approximate covered fraction), children escaping clipping containers.
|
|
47
|
+
- **Motion**: `*.motion.json` sidecar assertions against the same seeked timeline (see below).
|
|
48
|
+
- **Contrast**: WCAG AA on visible text, sampled at 5 grid points. Failures are **errors** and each finding carries the sampled fg/bg colors, measured vs required ratio, and a suggested compliant color in the same palette direction, so most contrast fixes need no screenshot at all.
|
|
49
|
+
|
|
50
|
+
Every finding carries a selector, the element's `data-*` identity, the composition source file, a bbox, and the sample time: jump straight from the JSON to the HTML you must edit and re-run.
|
|
51
|
+
|
|
52
|
+
**Severity is persistence-aware.** A dynamic issue observed at a single grid sample (an entrance/exit transient) demotes to info and never gates. Issues held across samples gate the exit code, a held `content_overlap` is an error, and a held, partially-visible `canvas_overflow` breaching ≥5% of the canvas promotes to warning. Coordinate-frame findings (`escaped_container`, `panel_out_of_canvas`, `connector_detached`) flag geometry computed in one frame but rendered in another — an element far outside its offset parent, a painted panel stuck across the canvas edge, a connector line detached from every node. Text drawn into a `<canvas>` has no DOM box, so `canvas_overflow` cannot see it; `canvas_content_at_edge` warns when a canvas's pixels show sharp content (drawn text, hard shapes) along the frame edge — mark intentional full-bleed art (particles, photos) with `data-layout-allow-overflow`. If a 3s+ composition shows zero geometry change across every sample, `check` fails with `sweep_static`: a frozen timeline makes every green verdict unreliable, so it refuses to pass. The fingerprint includes per-element opacity, so opacity-only reveals (code typing, staggered fades) count as motion — but only while they're still in flight at the sampled times. The classic trap is a reveal that completes early and then holds a static frame for the rest of the duration: every sample lands on the settled state and the run fails. For a source-backed recipe, preserve that early reveal and reading hold. Diagnose with samples at its actual action times and the rendered-pixel result. Do not spread the reveal, add a blinking element or introduce drift to appease a heuristic. Report an unresolved detector conflict honestly rather than changing locked choreography or claiming a pass.
|
|
53
|
+
|
|
54
|
+
**Escape hatches** (mark intent in the HTML, then re-run):
|
|
55
|
+
|
|
56
|
+
- `data-layout-allow-overflow` — overflow is intentional (entrance/exit travel).
|
|
57
|
+
- `data-layout-allow-overlap` — deliberate text layering (e.g. a demo cursor label over a heading). Applies only to the marked text block; it is not inherited. Mark the specific layering participant, never a scene/root wrapper, so unrelated descendant collisions remain auditable.
|
|
58
|
+
- `data-layout-allow-occlusion` — an element is meant to cover text.
|
|
59
|
+
- `data-layout-allow-caption-zone` — intentional lower-third / caption-band copy under `--caption-zone`. Applies to the marked element and every descendant (`closest`); silences only `caption_zone_collision` (not overflow/overlap/occlusion). Prefer the narrowest wrapper that owns the intentional band copy.
|
|
60
|
+
- `data-layout-ignore` — decorative element that should never be audited.
|
|
61
|
+
|
|
62
|
+
**Opt-in pipeline gates** (used by orchestrators; off by default):
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
hf check --caption-zone "x0=0;y0=.82;x1=1;y1=1;severity=error;seek=.25,1"
|
|
66
|
+
hf check --frame-check # media (img/svg/video/canvas) out-of-frame detection
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`--caption-zone` takes fractional band geometry (`x0/y0/x1/y1` required, 0-1 fractions of the composition's own canvas, portrait included) with optional `severity` and comma-separated `seek` fractions; it flags a text element's DOM box (`getBoundingClientRect`) that overlaps the band. Waive intentional lower-third copy with `data-layout-allow-caption-zone` on the element or its nearest wrapper (see Escape hatches). `--frame-check` reports media elements breaching the canvas beyond `max(120px, 6% of the min canvas dimension)`.
|
|
70
|
+
|
|
71
|
+
**Fixing contrast errors** — thresholds are 4.5:1 for normal text, 3:1 for large text (24px+, or 19px+ bold). The finding's `suggestedColor` already picks the nearest compliant color in the right direction (brighten on dark backgrounds, darken on light); apply an allowed correction, or resolve a conflict with locked source/brand colours before changing them. Recheck the changed output through `motion_check`; do not duplicate the full diagnostic checklist.
|
|
72
|
+
|
|
73
|
+
## Motion verification (`*.motion.json` sidecar)
|
|
74
|
+
|
|
75
|
+
`check` verifies **motion intent** against the same seeked timeline the renderer uses — the closest automated proxy for "render the MP4 and watch it". It catches render-vs-preview bugs layout sampling can't: an entrance reveal the seek lands past, a broken stagger order, an element drifting off-frame mid-tween, a frozen shot.
|
|
76
|
+
|
|
77
|
+
Drop a `*.motion.json` sidecar next to the composition (matching the html basename when several compositions share a dir). `check` discovers it automatically — no flag, no authoring-framework changes. With no sidecar, `check` behaves exactly as before.
|
|
78
|
+
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"duration": 6,
|
|
82
|
+
"assertions": [
|
|
83
|
+
{ "kind": "appearsBy", "selector": "#headline", "bySec": 0.5 },
|
|
84
|
+
{ "kind": "before", "a": "#headline", "b": "#cta" },
|
|
85
|
+
{ "kind": "staysInFrame", "selector": ".card" },
|
|
86
|
+
{ "kind": "keepsMoving", "withinSelector": ".scene" }
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
| Assertion | Fails (code) when |
|
|
92
|
+
| ------------------------------ | --------------------------------------------------------------------------- |
|
|
93
|
+
| `appearsBy(selector, bySec)` | not visible (opacity ≥ 0.5) by `bySec` — `motion_appears_late` |
|
|
94
|
+
| `before(a, b)` | `a` does not first appear strictly before `b` — `motion_out_of_order` |
|
|
95
|
+
| `staysInFrame(selector)` | once visible, its box leaves the canvas — `motion_off_frame` |
|
|
96
|
+
| `keepsMoving(withinSelector?)` | a fully-static window exceeds `maxStaticSec` (default 2s) — `motion_frozen` |
|
|
97
|
+
|
|
98
|
+
`duration`, `withinSelector`, and `maxStaticSec` are optional. Findings are **errors by default** and appear in the same human and `--json` output as layout findings. A selector that matches nothing is reported as `motion_selector_missing` rather than silently passing — a typo'd selector fails loudly. Use this in the feedback loop instead of eyeballing the render: assert what the motion is supposed to do, and let `check` tell you when the seek diverges from intent.
|
|
99
|
+
|
|
100
|
+
## snapshot
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
hf snapshot # 5 key frames as PNG
|
|
104
|
+
hf snapshot ./my-project # specific project
|
|
105
|
+
hf snapshot --frames 10 # evenly-spaced N frames
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Captures still PNGs from the composition for visual diffing, thumbnails, or attaching to a PR. Faster than rendering a video when you only need a few hero frames. Output lands in the project's snapshots directory. Not deprecated: it remains the standalone capture utility, while `check --snapshots` covers the gate's needs (overview frames annotated with labeled finding boxes, plus `finding-NN-<code>.png` crops for every error finding with a bbox).
|
|
109
|
+
|
|
110
|
+
### Zooming into a reported finding
|
|
111
|
+
|
|
112
|
+
`hyperframes check --snapshots` already writes a `finding-NN-<code>.png` crop for every error finding that carries a bbox, but the same zoom is available standalone once you know what to look at:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
hf check --snapshots # reports a finding, e.g. content_overlap on "#cta"
|
|
116
|
+
hf snapshot --zoom "#cta" # crop the element to verify the defect, at 3x density
|
|
117
|
+
hf snapshot --zoom "100,50,400,300" --zoom-scale 2 # or an exact pixel region
|
|
118
|
+
# fix the composition HTML, then re-check:
|
|
119
|
+
hf check
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
`--zoom` takes a CSS selector or an exact `x,y,w,h` pixel region and always produces a real high-density crop (a raised `deviceScaleFactor`, never CSS zoom or a viewport resize), so the composition's layout — and its render determinism — is untouched. A selector matching nothing is a loud error, not a silent full-frame fallback, and a frame where the target has no visible box (collapsed or animated off-canvas) is skipped with a note instead of written as a sliver.
|
|
123
|
+
|
|
124
|
+
## Deprecated: validate, inspect, layout
|
|
125
|
+
|
|
126
|
+
All three keep working, print a deprecation notice on stderr, and mark `_meta.deprecated: true` in `--json`. Their functionality lives in `check`:
|
|
127
|
+
|
|
128
|
+
- `validate` (runtime errors + contrast) → `check` (contrast failures are now gating errors with fix payloads, not warnings).
|
|
129
|
+
- `inspect` / `layout` (layout sweep + motion sidecar) → `check` (same flags: `--samples`, `--at`, `--at-transitions`, `--tolerance`, `--strict`).
|
|
130
|
+
|
|
131
|
+
Migrate scripts by replacing the sequence with the single `check` invocation; scaffolded projects' `npm run check` already points there.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Minimal Composition
|
|
2
|
+
|
|
3
|
+
The smallest renderable HyperFrames composition — a standalone (top-level) root with one clip and one tween:
|
|
4
|
+
|
|
5
|
+
```html
|
|
6
|
+
<!doctype html>
|
|
7
|
+
<html lang="en">
|
|
8
|
+
<head>
|
|
9
|
+
<meta charset="UTF-8" />
|
|
10
|
+
<meta name="viewport" content="width=1920, height=1080" />
|
|
11
|
+
<title>Minimal HyperFrames Composition</title>
|
|
12
|
+
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
|
|
13
|
+
<style>
|
|
14
|
+
body {
|
|
15
|
+
margin: 0;
|
|
16
|
+
background: #0b0f14;
|
|
17
|
+
color: white;
|
|
18
|
+
font-family: Inter, system-ui, sans-serif;
|
|
19
|
+
}
|
|
20
|
+
#root {
|
|
21
|
+
position: relative;
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
}
|
|
26
|
+
.clip {
|
|
27
|
+
position: absolute;
|
|
28
|
+
inset: 0;
|
|
29
|
+
display: grid;
|
|
30
|
+
place-items: center;
|
|
31
|
+
}
|
|
32
|
+
h1 {
|
|
33
|
+
margin: 0;
|
|
34
|
+
font-size: 96px;
|
|
35
|
+
}
|
|
36
|
+
</style>
|
|
37
|
+
</head>
|
|
38
|
+
<body>
|
|
39
|
+
<div
|
|
40
|
+
id="root"
|
|
41
|
+
data-composition-id="main"
|
|
42
|
+
data-start="0"
|
|
43
|
+
data-width="1920"
|
|
44
|
+
data-height="1080"
|
|
45
|
+
data-duration="5"
|
|
46
|
+
>
|
|
47
|
+
<section id="title-card" class="clip" data-start="0" data-duration="5">
|
|
48
|
+
<h1 id="title">Hello HyperFrames</h1>
|
|
49
|
+
</section>
|
|
50
|
+
</div>
|
|
51
|
+
<script>
|
|
52
|
+
const tl = gsap.timeline({ paused: true });
|
|
53
|
+
tl.from("#title", { y: 48, opacity: 0, duration: 0.6, ease: "power3.out" }, 0.2);
|
|
54
|
+
window.__timelines["main"] = tl;
|
|
55
|
+
</script>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
What the runtime actually requires:
|
|
61
|
+
|
|
62
|
+
- Root `<div>` with `data-composition-id`, `data-width`, `data-height`. Root `data-start="0"` is written above by convention and every shipped block has it, but the runtime stamps it when absent, so it is not required.
|
|
63
|
+
- A duration source: root `data-duration` (as above), or a GSAP timeline, or media, or an adapter that can infer one.
|
|
64
|
+
- Timed elements carry `data-start` plus a duration. That attribute alone is what makes an element a clip: `class="clip"` is a layout and tooling convention, and `data-track-index` is a Studio display lane. Neither is required, and a composition with no clips at all renders fine.
|
|
65
|
+
- A GSAP timeline created paused and registered on `window.__timelines["<composition-id>"]`.
|
|
66
|
+
|
|
67
|
+
Everything else in the skeleton is ordinary HTML and CSS: the `#root` box, `.clip` positioning, and fonts are yours to choose.
|
|
68
|
+
|
|
69
|
+
This pattern is **standalone** (top-level `index.html`) — no `<template>` wrapper around the root. For sub-compositions (files loaded by `data-composition-src`), see `sub-compositions.md`.
|
|
@@ -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.
|