luckiest-co 1.0.19 → 1.0.21
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/commands/status.md +10 -0
- package/hooks/hooks.json +11 -1
- package/hooks/update-notice.mjs +56 -0
- package/package.json +1 -1
- package/skills/luckiest-status/SKILL.md +10 -0
- package/skills/luckiest-video-studio/ATTRIBUTION.md +47 -0
- package/skills/luckiest-video-studio/CHANGELOG.md +64 -0
- package/skills/luckiest-video-studio/LICENSE-brag +21 -0
- package/skills/luckiest-video-studio/LICENSE-diagram-design +21 -0
- package/skills/luckiest-video-studio/LICENSE-motion-graphics +25 -0
- package/skills/luckiest-video-studio/LICENSE-student-kit +32 -0
- package/skills/luckiest-video-studio/LICENSE-student-kit-pipeline +15 -0
- package/skills/luckiest-video-studio/SECURITY.md +74 -0
- package/skills/luckiest-video-studio/SKILL.md +257 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-fan-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-fan-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-place-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-place-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-place-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-place-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-shove-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-shove-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-shove-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-shove-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-shuffle.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-5.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-6.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-7.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/card-slide-8.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/cards-pack-open-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/cards-pack-open-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chip-lay-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chip-lay-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chip-lay-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-collide-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-collide-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-collide-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-collide-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-handle-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-handle-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-handle-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-handle-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-handle-6.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-stack-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-stack-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-stack-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-stack-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-stack-5.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/chips-stack-6.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-grab-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-grab-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-shake-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-shake-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-shake-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-throw-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-throw-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/dice-throw-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/die-throw-1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/die-throw-2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/die-throw-3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/casino/die-throw-4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_carpet_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_carpet_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_carpet_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_concrete_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_concrete_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_concrete_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_concrete_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_concrete_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_grass_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_grass_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_grass_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_grass_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_grass_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_snow_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_snow_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_snow_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_snow_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_snow_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_wood_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_wood_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_wood_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_wood_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/footstep_wood_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactBell_heavy_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactBell_heavy_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactBell_heavy_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGeneric_light_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGeneric_light_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGeneric_light_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGeneric_light_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGeneric_light_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_heavy_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_light_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_light_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_light_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactGlass_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_heavy_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_heavy_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_heavy_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_light_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_light_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMetal_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactMining_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlank_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlank_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlank_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlank_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlank_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_heavy_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_heavy_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_heavy_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_heavy_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_heavy_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_light_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_light_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_light_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_light_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_light_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPlate_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_heavy_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_heavy_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_heavy_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_heavy_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_heavy_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactPunch_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_heavy_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_heavy_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_heavy_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_heavy_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_heavy_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactSoft_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactTin_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactTin_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactTin_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactTin_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactTin_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_heavy_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_heavy_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_heavy_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_heavy_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_heavy_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_light_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_light_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_light_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_light_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_light_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_medium_000.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_medium_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_medium_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_medium_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/impact/impactWood_medium_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/bong_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/click_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/click_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/click_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/click_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/click_005.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/drop_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/drop_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/drop_003.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/error_005.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/error_006.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/glitch_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/glitch_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/select_008.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/switch_001.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/switch_002.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/switch_004.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/switch_005.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/switch_006.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/interface/switch_007.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-001.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-002.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-003.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-004.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-005.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-006.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-007.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-008.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-009.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-010.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-011.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-012.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-013.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-014.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-015.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-016.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-017.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-018.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-019.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-020.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-021.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-022.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-023.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-024.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-025.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-026.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-027.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-028.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-029.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-030.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-031.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/keyboard/keypress-032.wav +0 -0
- package/skills/luckiest-video-studio/assets/sfx/sfx-analysis.json +15584 -0
- package/skills/luckiest-video-studio/assets/sfx/sfx-analysis.md +75 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/click1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/click2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/click3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/click4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/click5.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/mouseclick1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/rollover1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/rollover2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/rollover4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/rollover5.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch1.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch10.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch11.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch12.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch13.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch14.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch15.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch16.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch17.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch18.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch19.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch2.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch20.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch21.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch22.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch23.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch24.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch25.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch26.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch27.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch28.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch29.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch3.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch30.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch31.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch32.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch33.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch34.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch35.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch36.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch37.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch38.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch4.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch5.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch6.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch7.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch8.ogg +0 -0
- package/skills/luckiest-video-studio/assets/sfx/ui/switch9.ogg +0 -0
- package/skills/luckiest-video-studio/references/audio.md +285 -0
- package/skills/luckiest-video-studio/references/brand.md +55 -0
- package/skills/luckiest-video-studio/references/diffusion.md +75 -0
- package/skills/luckiest-video-studio/references/logo-recipes.md +77 -0
- package/skills/luckiest-video-studio/references/openscreen.md +60 -0
- package/skills/luckiest-video-studio/references/step-1-inspect.md +133 -0
- package/skills/luckiest-video-studio/references/step-2-plan.md +234 -0
- package/skills/luckiest-video-studio/references/step-3-compose.md +210 -0
- package/skills/luckiest-video-studio/references/step-4-deliver.md +168 -0
- package/skills/luckiest-video-studio/references/storyboard.md +78 -0
- package/skills/luckiest-video-studio/references/tones.md +231 -0
- package/skills/luckiest-video-studio/scripts/analyze_music_cues.py +309 -0
- package/skills/luckiest-video-studio/scripts/assemble-diffusion.mjs +161 -0
- package/skills/luckiest-video-studio/scripts/assemble-openscreen.mjs +74 -0
- package/skills/luckiest-video-studio/scripts/pyproject.toml +14 -0
- package/skills/luckiest-video-studio/scripts/qa.mjs +313 -0
- package/skills/luckiest-video-studio/scripts/qa.test.mjs +135 -0
- package/skills/luckiest-video-studio/scripts/render-scenes.mjs +125 -0
- package/skills/luckiest-video-studio/scripts/storyboard.schema.json +52 -0
- package/skills/luckiest-video-studio/scripts/uv.lock +819 -0
- package/skills/luckiest-video-studio/templates/diffusion/line-draw.tsx +132 -0
- package/skills/luckiest-video-studio/templates/logo-line-draw.html +38 -0
- package/skills/luckiest-video-studio-ae/ATTRIBUTION.md +9 -0
- package/skills/luckiest-video-studio-ae/CHANGELOG.md +7 -0
- package/skills/luckiest-video-studio-ae/SKILL.md +133 -0
- package/skills/luckiest-video-studio-cards/ATTRIBUTION.md +22 -0
- package/skills/luckiest-video-studio-cards/CHANGELOG.md +8 -0
- package/skills/luckiest-video-studio-cards/SKILL.md +114 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/DESIGN.md +50 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-agenda.html +180 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-bigtype.html +156 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-board.html +238 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-checklist.html +158 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-compare.html +205 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-deck.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-dossier.html +234 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-filmstrip.html +211 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-grid6.html +157 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-indexset.html +194 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-maplegend.html +243 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-matrix.html +198 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-numlist.html +180 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-outline.html +194 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-phases.html +208 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-quad.html +163 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-roadmap.html +197 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-stepper.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-toc.html +192 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-overview-vtimeline.html +166 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-bracket.html +88 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-circle.html +103 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-classified.html +112 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-collage.html +93 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-correction.html +93 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-crt.html +111 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-cutout.html +87 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-fullbleed.html +78 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-highlight.html +80 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-indexcard.html +85 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-map.html +96 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-markerbox.html +84 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-numeral.html +74 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-split.html +88 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-stacked.html +94 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-stamp.html +83 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-ticker.html +88 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-section-tornstrip.html +92 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-annotated.html +182 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-arc.html +105 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-axis.html +165 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-bar.html +111 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-bracket.html +124 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-calendar.html +219 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-callout.html +100 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-columns.html +171 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-corner.html +182 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-dots.html +102 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-engraving.html +160 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-footnote.html +125 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-frac.html +101 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-heat.html +179 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-isotype.html +133 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-ledger.html +106 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-left.html +109 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-magnifier.html +199 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-map.html +326 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-meter.html +153 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-multiplier.html +133 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-odo.html +93 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-pack.html +189 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-photo.html +93 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-pie.html +188 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-postage.html +191 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-pricetag.html +189 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-quote.html +113 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-ranking.html +171 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-receipt.html +182 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-ribbon.html +179 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-semi.html +171 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-spotlight.html +263 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-stamp.html +149 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-steps.html +123 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-tape.html +217 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-torn.html +240 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-trend.html +160 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-vs.html +101 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat-window.html +191 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-stat.html +97 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier1/t1-timeline.html +131 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-label.html +51 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-bracket.html +104 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-caption.html +129 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-circle.html +114 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-definition.html +152 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-footnote.html +113 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-magnify.html +157 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-pin.html +95 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-pullquote.html +135 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-spotlight.html +114 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-sticky.html +95 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-tag.html +129 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lb-underline.html +94 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lower-third.html +66 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-badge.html +133 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-barslab.html +126 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-bracket.html +146 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-clapper.html +144 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-highlight.html +128 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-indextab.html +134 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-rail.html +116 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-ribbon.html +140 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-stacked.html +143 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-stamp.html +133 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-sticky.html +154 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/cards/tier2/t2-lt-typecard.html +137 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/style.json +4463 -0
- package/skills/luckiest-video-studio-cards/packs/01-paper-collage/tokens.css +81 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/DESIGN.md +51 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-agenda.html +277 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-beforeafter.html +252 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-bento.html +269 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-bigleft.html +221 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-callouts.html +350 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-cardrow5.html +217 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-checklist.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-cycle.html +312 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-dashboard.html +414 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-deck2.html +223 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-deck3.html +200 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-duallist.html +323 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-featurecompare.html +244 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-featuregrid.html +235 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-flashcards.html +215 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-flow.html +287 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-funnel.html +246 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-gantt.html +290 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-grid6.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-grid9.html +217 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-iconlist.html +240 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-journey.html +305 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-kpirow.html +275 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-layers.html +199 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-legend.html +258 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-levels.html +199 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-logowall.html +278 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-mappoints.html +303 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-matrix.html +256 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-milestones.html +275 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-mindmap.html +247 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-nested.html +222 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-network.html +353 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-notifs.html +224 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-numlist.html +188 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-orgchart.html +240 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-outline.html +263 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-phases.html +250 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-pipeline.html +250 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-pricing.html +277 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-profiles.html +247 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-proscons.html +283 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-pyramid.html +181 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-quad.html +226 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-quotegrid.html +222 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-ranked.html +257 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-roadmap.html +251 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-spectrum.html +289 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-split3.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-spotlightcard.html +257 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-statgrid.html +252 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-steps.html +251 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-summary.html +231 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-tiercompare.html +295 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-timeline.html +229 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-toc.html +233 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-tree.html +250 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-tricards.html +217 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-venn.html +197 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-overview-vstable.html +273 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-ascend.html +180 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-aurora-bars.html +195 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-beam.html +197 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-boxed.html +172 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-breath.html +151 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-chaptercard.html +180 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-column-light.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-constellation.html +220 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-countdown.html +195 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-curtain.html +194 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-dawn.html +196 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-depth.html +186 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-divider.html +192 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-drift-grid.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-duotone.html +165 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-eclipse.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-emblem.html +222 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-flare-sweep.html +191 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-glow-rule.html +216 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-gradient-word.html +190 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-gridfloor.html +199 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-halo.html +173 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-horizon.html +217 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-index.html +202 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-kinetic.html +159 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-lensflare.html +231 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-liquid.html +181 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-marquee.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-mesh.html +225 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-monolith.html +204 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-node-title.html +208 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-numeral.html +174 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-orb.html +146 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-orbit.html +250 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-particles.html +188 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-pill.html +196 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-portal.html +222 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-prism.html +265 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-question.html +169 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-quoteopen.html +171 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-reveal-mask.html +174 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-ribbon.html +204 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-ripple.html +202 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-searchbar.html +208 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-slab.html +179 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-sphere-top.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-split-reveal.html +218 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-splitpanel.html +229 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-spotlight-cone.html +245 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-spotlight.html +179 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-stack.html +173 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-stacked-words.html +178 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-starfield.html +213 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-sweep.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-tunnel.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-type-scale.html +170 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-typed.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-underline-grow.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-waveform.html +242 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-section-wordmark.html +172 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-annot.html +248 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-beforeafter.html +293 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-bigpercent.html +228 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-bracketstat.html +210 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-bubble.html +256 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-cbars.html +313 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-clockface.html +296 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-column.html +382 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-compass.html +305 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-counterpill.html +216 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-curve.html +318 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-delta.html +300 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-dial.html +288 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-donut.html +307 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-dotgrid.html +241 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-figure.html +212 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-fillshape.html +232 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-fraction.html +263 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-funnel.html +285 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-growtharrow.html +242 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-heatcell.html +242 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-isotype.html +248 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-layered.html +198 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-mega.html +217 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-meter.html +263 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-milestone.html +260 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-money.html +253 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-multiplier.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-multiring.html +336 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-needle.html +253 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-nodes.html +259 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-odometer.html +301 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-orbitmoons.html +229 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-orbitstat.html +319 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-pair.html +244 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-percentile.html +287 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-pictobar.html +223 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-polar.html +256 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-quotestat.html +190 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-radialbars.html +387 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-range.html +300 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-rank.html +264 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-ratio.html +264 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-ring.html +274 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-risewall.html +234 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-score.html +273 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-segbar.html +262 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-semigauge.html +327 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-sparkline.html +291 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-spectrum.html +245 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-split.html +242 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-stackedbars.html +304 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-tickerstat.html +310 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-tiles.html +232 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-timer.html +248 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-trendline.html +343 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-underscore.html +236 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-versus.html +315 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-waffle.html +250 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier1/t1-stat-waterfall.html +273 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-badge.html +170 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-brace.html +239 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-bracket.html +195 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-bubble.html +179 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-byline.html +204 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-callout.html +137 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-category.html +178 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-checkmark.html +195 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-chipstat.html +150 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-comparemini.html +202 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-coord.html +271 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-counter.html +168 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-crosshair.html +243 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-dashed.html +168 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-definition.html +165 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-deltachip.html +184 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-eyebrow.html +186 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-fact.html +160 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-flag.html +232 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-formula.html +212 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-hash.html +175 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-highlightbox.html +176 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-iconchip.html +199 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-info.html +186 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-infocard.html +239 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-keycap.html +194 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-keyword.html +140 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-leader.html +201 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-legend.html +212 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-measure.html +201 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-meterchip.html +238 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-metric.html +149 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-micropie.html +233 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-minibar.html +190 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-node.html +225 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-note.html +183 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-numbercallout.html +175 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-percent.html +176 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-pointer.html +173 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-price.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-progress.html +233 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-pulse.html +206 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-qmark.html +164 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-quote.html +150 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-rating.html +252 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-ribbon.html +178 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-ringmark.html +229 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-search.html +174 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-sparkchip.html +243 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-spec.html +229 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-status.html +190 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-step.html +180 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-tag.html +134 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-takeaway.html +154 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-tcode.html +175 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-timestamp.html +185 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-toast.html +206 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-tooltip.html +175 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-underline.html +168 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lb-warning.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-avatar.html +202 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-badgecard.html +219 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-barslide.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-bracket.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-brandbar.html +229 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-bug.html +177 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-capsule.html +193 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-chapterbar.html +196 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-chip.html +162 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-cinemastrip.html +190 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-cite.html +179 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-clockname.html +192 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-coordbar.html +262 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-corner.html +206 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-cornerframe.html +251 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-countbar.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-dividername.html +211 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-dotline.html +209 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-doublecard.html +225 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-dual.html +233 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-edgebar.html +160 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-flipcard.html +198 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-geopin.html +198 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-glasscard.html +152 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-gradient.html +151 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-gradientbar.html +197 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-handlebar.html +192 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-infochips.html +182 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-lensbar.html +213 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-live.html +232 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-location.html +222 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-logolock.html +214 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-micname.html +208 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-minicard.html +176 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-minimal.html +149 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-nameplate3d.html +208 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-neonframe.html +208 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-neonpill.html +222 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-nowplaying.html +257 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-orbitbadge.html +232 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-pill.html +168 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-portraitframe.html +220 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-progressname.html +234 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-quote.html +202 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-ratingname.html +226 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-ribbon.html +198 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-sidebracket.html +195 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-slidetab.html +191 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-social.html +180 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-spotlightname.html +150 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-stacked.html +158 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-statline.html +223 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-tagrow.html +191 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-thinstrip.html +185 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-ticker.html +216 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-titlebar.html +188 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-trust.html +247 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-typedname.html +195 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-underbar.html +189 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/cards/tier2/t2-lt-waveband.html +235 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/style.json +8608 -0
- package/skills/luckiest-video-studio-cards/packs/02-aurora-glass/tokens.css +134 -0
- package/skills/luckiest-video-studio-cards/packs/_blueprint/DESIGN.md +41 -0
- package/skills/luckiest-video-studio-cards/packs/_blueprint/cards/tier1/t1-stat.html +57 -0
- package/skills/luckiest-video-studio-cards/packs/_blueprint/cards/tier2/t2-list.html +58 -0
- package/skills/luckiest-video-studio-cards/packs/_blueprint/style.json +88 -0
- package/skills/luckiest-video-studio-cards/packs/_blueprint/tokens.css +32 -0
- package/skills/luckiest-video-studio-cards/packs/registry.json +7789 -0
- package/skills/luckiest-video-studio-cards/references/card-contract.md +77 -0
- package/skills/luckiest-video-studio-cards/references/palette-leftovers.md +28 -0
- package/skills/luckiest-video-studio-cards/scripts/apply-brand.mjs +90 -0
- package/skills/luckiest-video-studio-cards/scripts/apply-brand.test.mjs +62 -0
- package/skills/luckiest-video-studio-cards/scripts/build-registry.mjs +54 -0
- package/skills/luckiest-video-studio-cards/scripts/new-pack.mjs +42 -0
- package/skills/luckiest-video-studio-cards/scripts/qa-cards.mjs +126 -0
- package/skills/luckiest-video-studio-cards/templates/glass-popout/DESIGN.md +24 -0
- package/skills/luckiest-video-studio-cards/templates/glass-popout/hyperframes.json +8 -0
- package/skills/luckiest-video-studio-cards/templates/glass-popout/index.html +349 -0
- package/skills/luckiest-video-studio-cards/templates/glass-popout/meta.json +8 -0
- package/skills/luckiest-video-studio-cards/templates/graph-paper/DESIGN.md +25 -0
- package/skills/luckiest-video-studio-cards/templates/graph-paper/hyperframes.json +8 -0
- package/skills/luckiest-video-studio-cards/templates/graph-paper/index.html +207 -0
- package/skills/luckiest-video-studio-cards/templates/graph-paper/meta.json +5 -0
- package/skills/luckiest-video-studio-cards/templates/graph-paper/package.json +10 -0
- package/skills/luckiest-video-studio-cuts/ATTRIBUTION.md +19 -0
- package/skills/luckiest-video-studio-cuts/CHANGELOG.md +6 -0
- package/skills/luckiest-video-studio-cuts/SKILL.md +129 -0
- package/skills/luckiest-video-studio-cuts/scripts/apply-cuts.mjs +174 -0
- package/skills/luckiest-video-studio-cuts/scripts/build-edl-review.mjs +114 -0
- package/skills/luckiest-video-studio-cuts/scripts/cut-silences.mjs +300 -0
- package/skills/luckiest-video-studio-cuts/scripts/find-cut-candidates.mjs +182 -0
- package/skills/luckiest-video-studio-reel/ATTRIBUTION.md +21 -0
- package/skills/luckiest-video-studio-reel/CHANGELOG.md +10 -0
- package/skills/luckiest-video-studio-reel/SKILL.md +177 -0
- package/skills/luckiest-video-studio-reel/references/chapters.md +64 -0
- package/skills/luckiest-video-studio-reel/scripts/beatgrid.mjs +39 -0
- package/skills/luckiest-video-studio-reel/scripts/mix.mjs +42 -0
- package/skills/luckiest-video-studio-reel/scripts/splice-music.mjs +38 -0
- package/skills/luckiest-video-studio-reel/templates/reel.html +116 -0
- package/skills/luckiest-video-studio-reference/ATTRIBUTION.md +7 -0
- package/skills/luckiest-video-studio-reference/CHANGELOG.md +8 -0
- package/skills/luckiest-video-studio-reference/SKILL.md +108 -0
- package/skills/luckiest-video-studio-reference/scripts/shots.mjs +58 -0
- package/skills/luckiest-video-studio-talk/ATTRIBUTION.md +19 -0
- package/skills/luckiest-video-studio-talk/CHANGELOG.md +18 -0
- package/skills/luckiest-video-studio-talk/SKILL.md +161 -0
- package/skills/luckiest-video-studio-talk/references/long-form.md +91 -0
- package/skills/luckiest-video-studio-talk/references/plan-schema.md +54 -0
- package/skills/luckiest-video-studio-talk/references/short-form.md +76 -0
- package/skills/luckiest-video-studio-talk/scripts/grab-evidence.mjs +38 -0
- package/skills/luckiest-video-studio-talk/scripts/validate-footage.mjs +25 -0
- package/skills/luckiest-video-studio-talk/scripts/validate-plan.mjs +49 -0
- package/skills/luckiest-video-studio-talk/templates/talk-overlay.html +40 -0
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// luckiest-video-studio-cuts: silence pass
|
|
3
|
+
// Pure pause/silence trimmer. Takes any word-level transcript (ElevenLabs Scribe
|
|
4
|
+
// shape, or { words: [{ text, start, end }] }) and removes silences only:
|
|
5
|
+
// - dead air before the first word and after the last word (head/tail trim)
|
|
6
|
+
// - inter-word pauses longer than --gap, trimmed down to a natural breath
|
|
7
|
+
//
|
|
8
|
+
// It does NOT cut repeats, false starts, or mistakes: that is the mistake pass.
|
|
9
|
+
//
|
|
10
|
+
// Outputs (next to the transcript, or --out-dir):
|
|
11
|
+
// <stem>.silence-edl.json keep/delete ranges + summary + params
|
|
12
|
+
// <stem>.silence-transcript.json re-timed words on the edited timeline
|
|
13
|
+
// <stem>.silence-decisions.md human-readable summary
|
|
14
|
+
// And, with --video, the ffmpeg command to make the cut (run it with --apply).
|
|
15
|
+
//
|
|
16
|
+
// Usage:
|
|
17
|
+
// node cut-silences.mjs <transcript.json> [options]
|
|
18
|
+
//
|
|
19
|
+
// Options:
|
|
20
|
+
// --video <path> source video; enables real cutting / ffmpeg command
|
|
21
|
+
// --out-dir <dir> output directory (default: alongside the transcript)
|
|
22
|
+
// --output <path> cut-video path (default: <video-stem>.silenced.mp4)
|
|
23
|
+
// --gap <seconds> min pause treated as trimmable silence (default 0.55)
|
|
24
|
+
// --head-pad <seconds> silence kept before the first word (default 0.22)
|
|
25
|
+
// --tail-pad <seconds> silence kept after the last word (default 0.34)
|
|
26
|
+
// --apply actually run ffmpeg to render the cut video
|
|
27
|
+
// --help
|
|
28
|
+
|
|
29
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
|
|
30
|
+
import { dirname, join, resolve, basename, extname } from "node:path";
|
|
31
|
+
import { spawnSync } from "node:child_process";
|
|
32
|
+
import { argv, exit } from "node:process";
|
|
33
|
+
|
|
34
|
+
function die(msg, code = 1) {
|
|
35
|
+
console.error(msg);
|
|
36
|
+
exit(code);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ---- parse args ----
|
|
40
|
+
const args = argv.slice(2);
|
|
41
|
+
if (args.length === 0 || args.includes("--help") || args.includes("-h")) {
|
|
42
|
+
console.log(
|
|
43
|
+
"Usage: node cut-silences.mjs <transcript.json> [--video path] [--out-dir dir]\n" +
|
|
44
|
+
" [--output path] [--gap 0.55] [--head-pad 0.22] [--tail-pad 0.34] [--apply]",
|
|
45
|
+
);
|
|
46
|
+
exit(args.length === 0 ? 1 : 0);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const opts = {
|
|
50
|
+
transcript: null,
|
|
51
|
+
video: null,
|
|
52
|
+
outDir: null,
|
|
53
|
+
output: null,
|
|
54
|
+
gap: 0.55,
|
|
55
|
+
headPad: 0.22,
|
|
56
|
+
tailPad: 0.34,
|
|
57
|
+
apply: false,
|
|
58
|
+
};
|
|
59
|
+
for (let i = 0; i < args.length; i++) {
|
|
60
|
+
const a = args[i];
|
|
61
|
+
if (a === "--video") opts.video = args[++i];
|
|
62
|
+
else if (a === "--out-dir") opts.outDir = args[++i];
|
|
63
|
+
else if (a === "--output" || a === "-o") opts.output = args[++i];
|
|
64
|
+
else if (a === "--gap") opts.gap = Number(args[++i]);
|
|
65
|
+
else if (a === "--head-pad") opts.headPad = Number(args[++i]);
|
|
66
|
+
else if (a === "--tail-pad") opts.tailPad = Number(args[++i]);
|
|
67
|
+
else if (a === "--apply") opts.apply = true;
|
|
68
|
+
else if (a.startsWith("--")) die(`unknown option: ${a}`);
|
|
69
|
+
else if (!opts.transcript) opts.transcript = a;
|
|
70
|
+
else die(`unexpected argument: ${a}`);
|
|
71
|
+
}
|
|
72
|
+
if (!opts.transcript) die("no transcript file given");
|
|
73
|
+
if (!Number.isFinite(opts.gap) || opts.gap <= 0) die("--gap must be a positive number");
|
|
74
|
+
|
|
75
|
+
const transcriptPath = resolve(opts.transcript);
|
|
76
|
+
if (!existsSync(transcriptPath)) die(`transcript not found: ${transcriptPath}`);
|
|
77
|
+
|
|
78
|
+
// ---- load + normalize transcript ----
|
|
79
|
+
let transcript = JSON.parse(readFileSync(transcriptPath, "utf8"));
|
|
80
|
+
if (Array.isArray(transcript)) transcript = { words: transcript }; // hyperframes transcribe writes a bare word array
|
|
81
|
+
if (!Array.isArray(transcript.words)) die("transcript has no `words` array");
|
|
82
|
+
|
|
83
|
+
// Keep only real spoken words with numeric timing. ElevenLabs tags spacing/audio
|
|
84
|
+
// events with type !== "word"; generic transcripts may omit `type` entirely.
|
|
85
|
+
const words = transcript.words
|
|
86
|
+
.filter((w) => (w.type ? w.type === "word" : true))
|
|
87
|
+
.filter((w) => Number.isFinite(Number(w.start)) && Number.isFinite(Number(w.end)))
|
|
88
|
+
.map((w, index) => ({ index, text: w.text, start: Number(w.start), end: Number(w.end) }));
|
|
89
|
+
|
|
90
|
+
if (words.length === 0) die("no timed words found in transcript");
|
|
91
|
+
|
|
92
|
+
// Source duration: prefer the transcript's own value, else probe the video, else
|
|
93
|
+
// fall back to just past the last word.
|
|
94
|
+
let duration = Number(transcript.audio_duration_secs);
|
|
95
|
+
if (!Number.isFinite(duration)) {
|
|
96
|
+
if (opts.video && existsSync(resolve(opts.video))) {
|
|
97
|
+
const probe = spawnSync("ffprobe", [
|
|
98
|
+
"-v", "error", "-show_entries", "format=duration",
|
|
99
|
+
"-of", "default=noprint_wrappers=1:nokey=1", resolve(opts.video),
|
|
100
|
+
]);
|
|
101
|
+
const d = Number(probe.stdout?.toString().trim());
|
|
102
|
+
if (Number.isFinite(d)) duration = d;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (!Number.isFinite(duration)) duration = words.at(-1).end + opts.tailPad;
|
|
106
|
+
|
|
107
|
+
// ---- build the delete ranges (silence only) ----
|
|
108
|
+
function mergeRanges(ranges) {
|
|
109
|
+
const sorted = ranges
|
|
110
|
+
.filter((r) => Number.isFinite(r.start) && Number.isFinite(r.end) && r.end > r.start)
|
|
111
|
+
.sort((a, b) => a.start - b.start);
|
|
112
|
+
const merged = [];
|
|
113
|
+
for (const range of sorted) {
|
|
114
|
+
const last = merged.at(-1);
|
|
115
|
+
if (!last || range.start > last.end) {
|
|
116
|
+
merged.push({ start: range.start, end: range.end, reasons: [range.reason] });
|
|
117
|
+
} else {
|
|
118
|
+
last.end = Math.max(last.end, range.end);
|
|
119
|
+
last.reasons.push(range.reason);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return merged;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const deleteRanges = [];
|
|
126
|
+
|
|
127
|
+
// head + tail dead air
|
|
128
|
+
const headEnd = words[0].start - opts.headPad;
|
|
129
|
+
if (headEnd > 0) deleteRanges.push({ start: 0, end: headEnd, reason: "head trim before first word" });
|
|
130
|
+
const tailStart = words.at(-1).end + opts.tailPad;
|
|
131
|
+
if (duration > tailStart) deleteRanges.push({ start: tailStart, end: duration, reason: "tail trim after final word" });
|
|
132
|
+
|
|
133
|
+
// inter-word pauses
|
|
134
|
+
for (let i = 1; i < words.length; i++) {
|
|
135
|
+
const prev = words[i - 1];
|
|
136
|
+
const next = words[i];
|
|
137
|
+
const gap = next.start - prev.end;
|
|
138
|
+
if (gap < opts.gap) continue;
|
|
139
|
+
|
|
140
|
+
// Keep a natural breath: longer for big pauses and sentence boundaries.
|
|
141
|
+
const sentenceBreak = /[.!?]$/.test(prev.text ?? "");
|
|
142
|
+
const keep = gap >= 2 ? 0.24 : sentenceBreak ? 0.2 : 0.14;
|
|
143
|
+
// Bias the kept breath slightly toward the end of the previous phrase.
|
|
144
|
+
const delStart = prev.end + keep * 0.55;
|
|
145
|
+
const delEnd = next.start - keep * 0.45;
|
|
146
|
+
if (delEnd > delStart) {
|
|
147
|
+
deleteRanges.push({ start: delStart, end: delEnd, reason: `pause ${gap.toFixed(2)}s -> ${keep.toFixed(2)}s` });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const mergedDeletes = mergeRanges(deleteRanges);
|
|
152
|
+
|
|
153
|
+
// ---- keep ranges = the complement of the deletes ----
|
|
154
|
+
const keepRanges = [];
|
|
155
|
+
let cursor = 0;
|
|
156
|
+
for (const del of mergedDeletes) {
|
|
157
|
+
if (del.start > cursor) keepRanges.push({ start: cursor, end: del.start });
|
|
158
|
+
cursor = Math.max(cursor, del.end);
|
|
159
|
+
}
|
|
160
|
+
if (cursor < duration) keepRanges.push({ start: cursor, end: duration });
|
|
161
|
+
const usableKeepRanges = keepRanges.filter((r) => r.end - r.start >= 0.04);
|
|
162
|
+
|
|
163
|
+
const removedTotal = mergedDeletes.reduce((sum, r) => sum + (r.end - r.start), 0);
|
|
164
|
+
const editedDuration = Number((duration - removedTotal).toFixed(3));
|
|
165
|
+
|
|
166
|
+
// ---- re-time the transcript onto the edited timeline ----
|
|
167
|
+
function removedBefore(time) {
|
|
168
|
+
let removed = 0;
|
|
169
|
+
for (const del of mergedDeletes) {
|
|
170
|
+
if (del.end <= time) removed += del.end - del.start;
|
|
171
|
+
else if (del.start < time) removed += time - del.start;
|
|
172
|
+
else break;
|
|
173
|
+
}
|
|
174
|
+
return removed;
|
|
175
|
+
}
|
|
176
|
+
function inDeleted(word) {
|
|
177
|
+
return mergedDeletes.some((del) => word.start < del.end && del.start < word.end);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const editedWords = [];
|
|
181
|
+
for (const word of words) {
|
|
182
|
+
if (inDeleted(word)) continue; // a word fully swallowed by a trim (rare for pure silence)
|
|
183
|
+
editedWords.push({
|
|
184
|
+
text: word.text,
|
|
185
|
+
source_start: word.start,
|
|
186
|
+
source_end: word.end,
|
|
187
|
+
start: Number((word.start - removedBefore(word.start)).toFixed(3)),
|
|
188
|
+
end: Number((word.end - removedBefore(word.end)).toFixed(3)),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// ---- ffmpeg trim+concat filtergraph (reliable A/V-synced cut) ----
|
|
193
|
+
function buildFilterScript(ranges) {
|
|
194
|
+
const lines = [];
|
|
195
|
+
for (let i = 0; i < ranges.length; i++) {
|
|
196
|
+
const r = ranges[i];
|
|
197
|
+
lines.push(`[0:v]trim=start=${r.start.toFixed(3)}:end=${r.end.toFixed(3)},setpts=PTS-STARTPTS[v${i}];`);
|
|
198
|
+
lines.push(`[0:a]atrim=start=${r.start.toFixed(3)}:end=${r.end.toFixed(3)},asetpts=PTS-STARTPTS[a${i}];`);
|
|
199
|
+
}
|
|
200
|
+
const inputs = ranges.map((_, i) => `[v${i}][a${i}]`).join("");
|
|
201
|
+
lines.push(`${inputs}concat=n=${ranges.length}:v=1:a=1[v][a]`);
|
|
202
|
+
return lines.join("\n");
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// ---- write outputs ----
|
|
206
|
+
const stem = basename(transcriptPath, extname(transcriptPath)).replace(/[-.]?transcript.*$/i, "") || "source";
|
|
207
|
+
const outDir = opts.outDir ? resolve(opts.outDir) : dirname(transcriptPath);
|
|
208
|
+
mkdirSync(outDir, { recursive: true });
|
|
209
|
+
|
|
210
|
+
const params = { gap: opts.gap, headPad: opts.headPad, tailPad: opts.tailPad };
|
|
211
|
+
const edl = {
|
|
212
|
+
agent: "cut-silences",
|
|
213
|
+
params,
|
|
214
|
+
source_duration: duration,
|
|
215
|
+
edited_duration: editedDuration,
|
|
216
|
+
removed: Number(removedTotal.toFixed(3)),
|
|
217
|
+
delete_ranges: mergedDeletes,
|
|
218
|
+
keep_ranges: usableKeepRanges,
|
|
219
|
+
};
|
|
220
|
+
const transcriptOut = {
|
|
221
|
+
language_code: transcript.language_code,
|
|
222
|
+
source_audio_duration_secs: duration,
|
|
223
|
+
audio_duration_secs: editedDuration,
|
|
224
|
+
produced_by: "cut-silences",
|
|
225
|
+
words: editedWords,
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
function fmt(s) {
|
|
229
|
+
const m = Math.floor(s / 60);
|
|
230
|
+
return `${String(m).padStart(2, "0")}:${(s - m * 60).toFixed(2).padStart(5, "0")}`;
|
|
231
|
+
}
|
|
232
|
+
const pauseDeletes = mergedDeletes.filter((d) => d.reasons.some((r) => r?.startsWith("pause")));
|
|
233
|
+
const decisions = [
|
|
234
|
+
"# Cut-Silences Decisions",
|
|
235
|
+
"",
|
|
236
|
+
`Source duration: ${fmt(duration)} (${duration.toFixed(2)}s)`,
|
|
237
|
+
`Edited duration: ${fmt(editedDuration)} (${editedDuration.toFixed(2)}s)`,
|
|
238
|
+
`Removed: ${removedTotal.toFixed(2)}s of silence across ${mergedDeletes.length} ranges`,
|
|
239
|
+
`Params: gap>=${params.gap}s, head-pad ${params.headPad}s, tail-pad ${params.tailPad}s`,
|
|
240
|
+
"",
|
|
241
|
+
`## Largest pauses trimmed (top 15)`,
|
|
242
|
+
"",
|
|
243
|
+
...pauseDeletes
|
|
244
|
+
.map((d) => ({ ...d, len: d.end - d.start }))
|
|
245
|
+
.sort((a, b) => b.len - a.len)
|
|
246
|
+
.slice(0, 15)
|
|
247
|
+
.map((d) => `- ${fmt(d.start)}-${fmt(d.end)} removed ${d.len.toFixed(2)}s`),
|
|
248
|
+
].join("\n");
|
|
249
|
+
|
|
250
|
+
const edlPath = join(outDir, `${stem}.silence-edl.json`);
|
|
251
|
+
const tPath = join(outDir, `${stem}.silence-transcript.json`);
|
|
252
|
+
const decPath = join(outDir, `${stem}.silence-decisions.md`);
|
|
253
|
+
writeFileSync(edlPath, JSON.stringify(edl, null, 2));
|
|
254
|
+
writeFileSync(tPath, JSON.stringify(transcriptOut, null, 2));
|
|
255
|
+
writeFileSync(decPath, decisions);
|
|
256
|
+
|
|
257
|
+
const summary = {
|
|
258
|
+
sourceDuration: Number(duration.toFixed(3)),
|
|
259
|
+
editedDuration,
|
|
260
|
+
removed: Number(removedTotal.toFixed(3)),
|
|
261
|
+
removedPct: Number(((removedTotal / duration) * 100).toFixed(1)),
|
|
262
|
+
deleteRanges: mergedDeletes.length,
|
|
263
|
+
keepRanges: usableKeepRanges.length,
|
|
264
|
+
editedWords: editedWords.length,
|
|
265
|
+
outputs: { edl: edlPath, transcript: tPath, decisions: decPath },
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
// ---- optional: produce the cut video ----
|
|
269
|
+
if (opts.video) {
|
|
270
|
+
const videoPath = resolve(opts.video);
|
|
271
|
+
if (!existsSync(videoPath)) die(`--video not found: ${videoPath}`);
|
|
272
|
+
const outputPath = resolve(
|
|
273
|
+
opts.output ?? join(outDir, `${basename(videoPath, extname(videoPath))}.silenced.mp4`),
|
|
274
|
+
);
|
|
275
|
+
const scriptPath = join(outDir, `${stem}.silence-filter.txt`);
|
|
276
|
+
writeFileSync(scriptPath, buildFilterScript(usableKeepRanges));
|
|
277
|
+
summary.video = { input: videoPath, output: outputPath, filterScript: scriptPath };
|
|
278
|
+
|
|
279
|
+
const ffArgs = [
|
|
280
|
+
"-y", "-i", videoPath,
|
|
281
|
+
"-/filter_complex", scriptPath,
|
|
282
|
+
"-map", "[v]", "-map", "[a]",
|
|
283
|
+
"-c:v", "libx264", "-preset", "medium", "-crf", "18",
|
|
284
|
+
"-c:a", "aac", "-b:a", "192k", "-movflags", "+faststart",
|
|
285
|
+
outputPath,
|
|
286
|
+
];
|
|
287
|
+
summary.ffmpegCommand = `ffmpeg ${ffArgs.map((a) => (a.includes(" ") ? `"${a}"` : a)).join(" ")}`;
|
|
288
|
+
|
|
289
|
+
if (opts.apply) {
|
|
290
|
+
console.error(`rendering cut video -> ${outputPath}`);
|
|
291
|
+
const ff = spawnSync("ffmpeg", ffArgs, { stdio: ["ignore", "ignore", "inherit"] });
|
|
292
|
+
if (ff.status !== 0) die(`ffmpeg failed (status ${ff.status})`, ff.status ?? 1);
|
|
293
|
+
summary.video.rendered = true;
|
|
294
|
+
} else {
|
|
295
|
+
summary.video.rendered = false;
|
|
296
|
+
summary.hint = "re-run with --apply to render the cut video";
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
console.log(JSON.stringify(summary, null, 2));
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// luckiest-video-studio-cuts: mistake pass, candidate finder
|
|
3
|
+
// Scans a word-level transcript for likely mistakes the speaker would want gone:
|
|
4
|
+
// - stutters / immediate word repeats ("the the", "I-I-I", "that that")
|
|
5
|
+
// - retakes / duplicate sentences (a line re-recorded; keep the clean take)
|
|
6
|
+
// - false starts (an abandoned phrase that restarts)
|
|
7
|
+
//
|
|
8
|
+
// This is MECHANICAL detection only. It proposes candidate cut ranges with rich
|
|
9
|
+
// context + a confidence + a default recommendation, but it does NOT decide.
|
|
10
|
+
// The agent reviews each candidate in context (review-gate) before apply-cuts
|
|
11
|
+
// renders anything.
|
|
12
|
+
//
|
|
13
|
+
// Input: any { words: [{ text, start, end, type? }] } transcript: typically
|
|
14
|
+
// the silence pass <stem>.silence-transcript.json (so cuts land on the silenced timeline).
|
|
15
|
+
//
|
|
16
|
+
// Output (next to the transcript, or --out-dir):
|
|
17
|
+
// <stem>.cut-candidates.json structured candidates for the agent to review
|
|
18
|
+
// <stem>.cut-candidates.md human-readable proposal
|
|
19
|
+
//
|
|
20
|
+
// Usage:
|
|
21
|
+
// node find-cut-candidates.mjs <transcript.json> [--out-dir dir]
|
|
22
|
+
|
|
23
|
+
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
24
|
+
import { dirname, join, resolve, basename, extname } from "node:path";
|
|
25
|
+
import { argv, exit } from "node:process";
|
|
26
|
+
|
|
27
|
+
const args = argv.slice(2);
|
|
28
|
+
if (args.length === 0 || args.includes("--help")) {
|
|
29
|
+
console.log("Usage: node find-cut-candidates.mjs <transcript.json> [--out-dir dir]");
|
|
30
|
+
exit(args.length === 0 ? 1 : 0);
|
|
31
|
+
}
|
|
32
|
+
let transcriptArg = null, outDirArg = null;
|
|
33
|
+
for (let i = 0; i < args.length; i++) {
|
|
34
|
+
if (args[i] === "--out-dir") outDirArg = args[++i];
|
|
35
|
+
else if (!transcriptArg) transcriptArg = args[i];
|
|
36
|
+
}
|
|
37
|
+
const transcriptPath = resolve(transcriptArg);
|
|
38
|
+
let transcript = JSON.parse(readFileSync(transcriptPath, "utf8"));
|
|
39
|
+
if (Array.isArray(transcript)) transcript = { words: transcript }; // hyperframes transcribe writes a bare word array
|
|
40
|
+
if (!Array.isArray(transcript.words)) { console.error("transcript has no words[]"); exit(1); }
|
|
41
|
+
|
|
42
|
+
function cleanToken(text) {
|
|
43
|
+
return (text ?? "").toLowerCase().replace(/^[^a-z0-9$%]+|[^a-z0-9$%]+$/g, "");
|
|
44
|
+
}
|
|
45
|
+
function displayText(ws) {
|
|
46
|
+
return ws.map((w) => w.text).join(" ").replace(/\s+([,.!?;:])/g, "$1");
|
|
47
|
+
}
|
|
48
|
+
function fmt(s) {
|
|
49
|
+
const m = Math.floor(s / 60);
|
|
50
|
+
return `${String(m).padStart(2, "0")}:${(s - m * 60).toFixed(2).padStart(5, "0")}`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const words = transcript.words
|
|
54
|
+
.filter((w) => (w.type ? w.type === "word" : true))
|
|
55
|
+
.filter((w) => Number.isFinite(Number(w.start)) && Number.isFinite(Number(w.end)))
|
|
56
|
+
.map((w, index) => ({ index, text: w.text, token: cleanToken(w.text), start: Number(w.start), end: Number(w.end) }));
|
|
57
|
+
|
|
58
|
+
if (words.length === 0) { console.error("no timed words"); exit(1); }
|
|
59
|
+
|
|
60
|
+
const candidates = [];
|
|
61
|
+
let cid = 0;
|
|
62
|
+
const ctx = (i, before = 6, after = 6) =>
|
|
63
|
+
displayText(words.slice(Math.max(0, i - before), Math.min(words.length, i + after)));
|
|
64
|
+
|
|
65
|
+
// ---- 1) stutters / immediate repeats ----
|
|
66
|
+
for (let i = 1; i < words.length; i++) {
|
|
67
|
+
const a = words[i - 1], b = words[i];
|
|
68
|
+
if (!b.token || b.token.length < 1) continue;
|
|
69
|
+
const closeGap = b.start - a.end < 0.5;
|
|
70
|
+
if (a.token === b.token && closeGap) {
|
|
71
|
+
candidates.push({
|
|
72
|
+
id: `c${String(++cid).padStart(3, "0")}`,
|
|
73
|
+
type: "stutter",
|
|
74
|
+
confidence: "high",
|
|
75
|
+
recommend: "cut",
|
|
76
|
+
// remove the first utterance, keep the second
|
|
77
|
+
cut: { start: Number(a.start.toFixed(3)), end: Number(b.start.toFixed(3)) },
|
|
78
|
+
removes: a.text,
|
|
79
|
+
keeps: b.text,
|
|
80
|
+
context: ctx(i),
|
|
81
|
+
note: `repeated "${a.token}"`,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// ---- build segments (for retake / false-start detection) ----
|
|
87
|
+
const segments = [];
|
|
88
|
+
let segStart = 0;
|
|
89
|
+
for (let i = 1; i < words.length; i++) {
|
|
90
|
+
const prev = words[i - 1], cur = words[i];
|
|
91
|
+
const gap = cur.start - prev.end;
|
|
92
|
+
const elapsed = cur.end - words[segStart].start;
|
|
93
|
+
const sentenceEnd = /[.!?]$/.test(prev.text ?? "");
|
|
94
|
+
if (gap > 0.85 || (sentenceEnd && elapsed >= 7.5) || elapsed >= 16) {
|
|
95
|
+
segments.push({ id: segments.length + 1, wordStart: segStart, wordEnd: i - 1, start: words[segStart].start, end: prev.end, text: displayText(words.slice(segStart, i)) });
|
|
96
|
+
segStart = i;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
segments.push({ id: segments.length + 1, wordStart: segStart, wordEnd: words.length - 1, start: words[segStart].start, end: words.at(-1).end, text: displayText(words.slice(segStart)) });
|
|
100
|
+
|
|
101
|
+
const stop = new Set("a an and are as at be but by for from i if in is it of on or so that this to was we with you your they their there what when where why how like um uh".split(" "));
|
|
102
|
+
function signature(seg) {
|
|
103
|
+
return seg.text.toLowerCase().replace(/[^a-z0-9\s$%]/g, " ").split(/\s+/).filter((t) => t.length > 2 && !stop.has(t)).slice(0, 18);
|
|
104
|
+
}
|
|
105
|
+
function jaccard(a, b) {
|
|
106
|
+
const as = new Set(a), bs = new Set(b);
|
|
107
|
+
let overlap = 0;
|
|
108
|
+
for (const x of as) if (bs.has(x)) overlap++;
|
|
109
|
+
return overlap / Math.max(1, new Set([...as, ...bs]).size);
|
|
110
|
+
}
|
|
111
|
+
const sigs = segments.map(signature);
|
|
112
|
+
|
|
113
|
+
// ---- 2) retakes / duplicate sentences (keep the later, cleaner take) ----
|
|
114
|
+
for (let i = 0; i < segments.length; i++) {
|
|
115
|
+
for (let j = i + 1; j < Math.min(segments.length, i + 9); j++) {
|
|
116
|
+
if (segments[j].start - segments[i].end > 75) break;
|
|
117
|
+
const score = jaccard(sigs[i], sigs[j]);
|
|
118
|
+
const sameOpening = sigs[i].slice(0, 4).filter((t, idx) => t === sigs[j][idx]).length >= 2;
|
|
119
|
+
if (score >= 0.34 || (score >= 0.24 && sameOpening)) {
|
|
120
|
+
const firstLen = segments[i].end - segments[i].start;
|
|
121
|
+
// A short first take that restarts soon after reads as a false start.
|
|
122
|
+
const isFalseStart = sameOpening && firstLen < 6 && segments[j].start - segments[i].end < 12;
|
|
123
|
+
candidates.push({
|
|
124
|
+
id: `c${String(++cid).padStart(3, "0")}`,
|
|
125
|
+
type: isFalseStart ? "false_start" : "retake",
|
|
126
|
+
confidence: score >= 0.45 ? "high" : score >= 0.34 ? "medium" : "low",
|
|
127
|
+
recommend: score >= 0.34 ? "cut" : "review",
|
|
128
|
+
score: Number(score.toFixed(3)),
|
|
129
|
+
// default: remove the earlier take up to the start of the cleaner restart
|
|
130
|
+
cut: { start: Number(segments[i].start.toFixed(3)), end: Number(segments[j].start.toFixed(3)) },
|
|
131
|
+
removes: segments[i].text,
|
|
132
|
+
keeps: segments[j].text,
|
|
133
|
+
gapBetween: Number((segments[j].start - segments[i].end).toFixed(2)),
|
|
134
|
+
note: `seg ${segments[i].id} ~ seg ${segments[j].id} (jaccard ${score.toFixed(2)}${sameOpening ? ", same opening" : ""})`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// sort by time, de-dupe overlapping retake/false-start proposals (keep highest score)
|
|
141
|
+
candidates.sort((a, b) => a.cut.start - b.cut.start);
|
|
142
|
+
|
|
143
|
+
const byType = candidates.reduce((m, c) => ((m[c.type] = (m[c.type] || 0) + 1), m), {});
|
|
144
|
+
const totalProposed = candidates.filter((c) => c.recommend === "cut").reduce((s, c) => s + (c.cut.end - c.cut.start), 0);
|
|
145
|
+
|
|
146
|
+
const stem = basename(transcriptPath, extname(transcriptPath)).replace(/[-.]?(silence-)?transcript.*$/i, "") || "source";
|
|
147
|
+
const outDir = outDirArg ? resolve(outDirArg) : dirname(transcriptPath);
|
|
148
|
+
mkdirSync(outDir, { recursive: true });
|
|
149
|
+
|
|
150
|
+
const out = {
|
|
151
|
+
agent: "cut-mistakes",
|
|
152
|
+
source_transcript: transcriptPath,
|
|
153
|
+
word_count: words.length,
|
|
154
|
+
segment_count: segments.length,
|
|
155
|
+
counts: byType,
|
|
156
|
+
proposed_cut_seconds: Number(totalProposed.toFixed(2)),
|
|
157
|
+
candidates,
|
|
158
|
+
};
|
|
159
|
+
const jsonPath = join(outDir, `${stem}.cut-candidates.json`);
|
|
160
|
+
writeFileSync(jsonPath, JSON.stringify(out, null, 2));
|
|
161
|
+
|
|
162
|
+
const md = [
|
|
163
|
+
"# Cut-Mistakes Candidates",
|
|
164
|
+
"",
|
|
165
|
+
`Transcript: ${basename(transcriptPath)} · ${words.length} words · ${segments.length} segments`,
|
|
166
|
+
`Found: ${candidates.length} candidates (` + Object.entries(byType).map(([k, v]) => `${v} ${k}`).join(", ") + ")",
|
|
167
|
+
`Default proposed cuts total ~${totalProposed.toFixed(1)}s. **Review before applying.**`,
|
|
168
|
+
"",
|
|
169
|
+
...candidates.map((c) =>
|
|
170
|
+
[
|
|
171
|
+
`## ${c.id} · ${c.type} · ${c.confidence} · recommend: ${c.recommend}`,
|
|
172
|
+
`cut ${fmt(c.cut.start)}–${fmt(c.cut.end)} (${(c.cut.end - c.cut.start).toFixed(2)}s): ${c.note}`,
|
|
173
|
+
"",
|
|
174
|
+
`- removes: ${c.removes}`,
|
|
175
|
+
c.keeps ? `- keeps: ${c.keeps}` : null,
|
|
176
|
+
c.context ? `- context: …${c.context}…` : null,
|
|
177
|
+
"",
|
|
178
|
+
].filter(Boolean).join("\n")),
|
|
179
|
+
].join("\n");
|
|
180
|
+
writeFileSync(join(outDir, `${stem}.cut-candidates.md`), md);
|
|
181
|
+
|
|
182
|
+
console.log(JSON.stringify({ candidates: candidates.length, counts: byType, proposedCutSeconds: Number(totalProposed.toFixed(2)), outputs: { json: jsonPath, md: join(outDir, `${stem}.cut-candidates.md`) } }, null, 2));
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Attribution
|
|
2
|
+
|
|
3
|
+
`luckiest-video-studio-reel` is a Luckiest sub-skill of `luckiest-video-studio`.
|
|
4
|
+
It is rewritten from the `motion-showreel` skill of the **HyperFrames student kit**
|
|
5
|
+
by Nate Herk and contributors, and ports that skill's `beatgrid.mjs`,
|
|
6
|
+
`splice-music.mjs`, and `mix.mjs`. The kit is MIT; its pipeline skills carry the
|
|
7
|
+
Student Kit Use Permission. Both texts are kept in
|
|
8
|
+
`luckiest-video-studio/LICENSE-student-kit` and `LICENSE-student-kit-pipeline`.
|
|
9
|
+
|
|
10
|
+
## Changes in this edition
|
|
11
|
+
|
|
12
|
+
- Runs as one `logo` scene with the `reel` recipe inside a video-studio run, with a
|
|
13
|
+
bundled starter composition (`templates/reel.html`) on the coordinator's brand
|
|
14
|
+
tokens.
|
|
15
|
+
- Beat analysis uses the coordinator's `analyze_music_cues.py`; the kit's
|
|
16
|
+
`music-grid.mjs` and `analyze-reference.mjs` are not included.
|
|
17
|
+
- Removed the paid image, video, music, and sound generators (`kie.mjs`,
|
|
18
|
+
`sfx.mjs`), which read API keys from `.env`. Sound comes from the CC0 kit.
|
|
19
|
+
- Rewrote the grammar and chapter notes without the source reel's breakdown,
|
|
20
|
+
brand examples, or personal references. See `luckiest-video-studio/SECURITY.md`
|
|
21
|
+
S26 to S31.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog: luckiest-video-studio-reel
|
|
2
|
+
|
|
3
|
+
## 1.1.0 (2026-09-30)
|
|
4
|
+
- Verify step runs the coordinator's `qa.mjs` beat grid, pops, dead frames,
|
|
5
|
+
legibility, and cross-fade gates on the rendered reel.
|
|
6
|
+
|
|
7
|
+
## 1.0.0 (2026-09-29)
|
|
8
|
+
- New sub-skill: beat-locked brand reel rendered as a `reel` logo recipe, with a
|
|
9
|
+
starter composition, HUD, and beat grid, splice, and premix scripts.
|
|
10
|
+
- No paid generation; user-supplied music and the CC0 sound kit only.
|