@autoaiai/aicut 0.1.11 → 0.1.13
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/MANUAL.md +94 -94
- package/package.json +1 -1
- package/skills/aicut-motion/SKILL.md +69 -3
- package/skills/aicut-motion/THIRD_PARTY_NOTICES.md +14 -0
- package/skills/aicut-motion/assets/atlas/lib/harness.js +116 -0
- package/skills/aicut-motion/assets/atlas/lib/sound.js +274 -0
- package/skills/aicut-motion/assets/atlas/styles/001-flat-vector-science/code.js +937 -0
- package/skills/aicut-motion/assets/atlas/styles/001-flat-vector-science/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/001-flat-vector-science/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/002-watercolor-wash/code.js +909 -0
- package/skills/aicut-motion/assets/atlas/styles/002-watercolor-wash/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/002-watercolor-wash/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/003-shadow-puppet-theatre/code.js +881 -0
- package/skills/aicut-motion/assets/atlas/styles/003-shadow-puppet-theatre/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/003-shadow-puppet-theatre/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/004-whiteboard-explainer/code.js +897 -0
- package/skills/aicut-motion/assets/atlas/styles/004-whiteboard-explainer/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/004-whiteboard-explainer/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/005-psychedelic-poster/code.js +814 -0
- package/skills/aicut-motion/assets/atlas/styles/005-psychedelic-poster/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/005-psychedelic-poster/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/006-tech-glow-explainer/code.js +990 -0
- package/skills/aicut-motion/assets/atlas/styles/006-tech-glow-explainer/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/006-tech-glow-explainer/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/007-papercraft-models/code.js +994 -0
- package/skills/aicut-motion/assets/atlas/styles/007-papercraft-models/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/007-papercraft-models/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/008-1940s-film-noir/code.js +792 -0
- package/skills/aicut-motion/assets/atlas/styles/008-1940s-film-noir/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/008-1940s-film-noir/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/009-manim-style-math/code.js +840 -0
- package/skills/aicut-motion/assets/atlas/styles/009-manim-style-math/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/009-manim-style-math/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/010-illuminated-manuscript/code.js +1126 -0
- package/skills/aicut-motion/assets/atlas/styles/010-illuminated-manuscript/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/010-illuminated-manuscript/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/011-editorial-essay-collage/code.js +854 -0
- package/skills/aicut-motion/assets/atlas/styles/011-editorial-essay-collage/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/011-editorial-essay-collage/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/012-bioluminescent-deep-sea/code.js +1124 -0
- package/skills/aicut-motion/assets/atlas/styles/012-bioluminescent-deep-sea/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/012-bioluminescent-deep-sea/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/013-product-launch-reveal/code.js +728 -0
- package/skills/aicut-motion/assets/atlas/styles/013-product-launch-reveal/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/013-product-launch-reveal/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/014-halftone-pop-panel/code.js +664 -0
- package/skills/aicut-motion/assets/atlas/styles/014-halftone-pop-panel/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/014-halftone-pop-panel/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/015-isometric-pastel/code.js +991 -0
- package/skills/aicut-motion/assets/atlas/styles/015-isometric-pastel/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/015-isometric-pastel/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/016-oscilloscope-vector-art/code.js +801 -0
- package/skills/aicut-motion/assets/atlas/styles/016-oscilloscope-vector-art/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/016-oscilloscope-vector-art/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/017-risograph-zine/code.js +692 -0
- package/skills/aicut-motion/assets/atlas/styles/017-risograph-zine/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/017-risograph-zine/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/018-claymation-set/code.js +756 -0
- package/skills/aicut-motion/assets/atlas/styles/018-claymation-set/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/018-claymation-set/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/019-neon-sign-at-night/code.js +922 -0
- package/skills/aicut-motion/assets/atlas/styles/019-neon-sign-at-night/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/019-neon-sign-at-night/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/020-kawaii-anime/code.js +852 -0
- package/skills/aicut-motion/assets/atlas/styles/020-kawaii-anime/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/020-kawaii-anime/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/021-ukiyo-e-woodblock/code.js +724 -0
- package/skills/aicut-motion/assets/atlas/styles/021-ukiyo-e-woodblock/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/021-ukiyo-e-woodblock/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/022-16-bit-pixel-odyssey/code.js +793 -0
- package/skills/aicut-motion/assets/atlas/styles/022-16-bit-pixel-odyssey/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/022-16-bit-pixel-odyssey/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/023-chalkboard-lesson/code.js +846 -0
- package/skills/aicut-motion/assets/atlas/styles/023-chalkboard-lesson/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/023-chalkboard-lesson/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/024-cut-paper-diorama/code.js +1008 -0
- package/skills/aicut-motion/assets/atlas/styles/024-cut-paper-diorama/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/024-cut-paper-diorama/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/025-cathedral-glass/code.js +680 -0
- package/skills/aicut-motion/assets/atlas/styles/025-cathedral-glass/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/025-cathedral-glass/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/026-editorial-chart/code.js +633 -0
- package/skills/aicut-motion/assets/atlas/styles/026-editorial-chart/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/026-editorial-chart/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/027-synthwave-outrun/code.js +757 -0
- package/skills/aicut-motion/assets/atlas/styles/027-synthwave-outrun/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/027-synthwave-outrun/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/028-origami-studio/code.js +828 -0
- package/skills/aicut-motion/assets/atlas/styles/028-origami-studio/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/028-origami-studio/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/029-linocut-relief-print/code.js +697 -0
- package/skills/aicut-motion/assets/atlas/styles/029-linocut-relief-print/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/029-linocut-relief-print/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/030-holographic-foil-card/code.js +687 -0
- package/skills/aicut-motion/assets/atlas/styles/030-holographic-foil-card/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/030-holographic-foil-card/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/031-voxel-diorama/code.js +727 -0
- package/skills/aicut-motion/assets/atlas/styles/031-voxel-diorama/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/031-voxel-diorama/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/032-sumi-e-ink-wash/code.js +903 -0
- package/skills/aicut-motion/assets/atlas/styles/032-sumi-e-ink-wash/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/032-sumi-e-ink-wash/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/033-etch-a-sketch-toy/code.js +662 -0
- package/skills/aicut-motion/assets/atlas/styles/033-etch-a-sketch-toy/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/033-etch-a-sketch-toy/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/034-cosmic-star-chart/code.js +951 -0
- package/skills/aicut-motion/assets/atlas/styles/034-cosmic-star-chart/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/034-cosmic-star-chart/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/035-punk-zine-collage/code.js +759 -0
- package/skills/aicut-motion/assets/atlas/styles/035-punk-zine-collage/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/035-punk-zine-collage/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/036-thermal-camera/code.js +738 -0
- package/skills/aicut-motion/assets/atlas/styles/036-thermal-camera/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/036-thermal-camera/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/037-engineering-blueprint/code.js +793 -0
- package/skills/aicut-motion/assets/atlas/styles/037-engineering-blueprint/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/037-engineering-blueprint/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/038-impasto-night/code.js +673 -0
- package/skills/aicut-motion/assets/atlas/styles/038-impasto-night/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/038-impasto-night/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/039-win95-desktop/code.js +907 -0
- package/skills/aicut-motion/assets/atlas/styles/039-win95-desktop/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/039-win95-desktop/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/040-low-poly-faceted/code.js +833 -0
- package/skills/aicut-motion/assets/atlas/styles/040-low-poly-faceted/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/040-low-poly-faceted/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/041-manga-page/code.js +845 -0
- package/skills/aicut-motion/assets/atlas/styles/041-manga-page/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/041-manga-page/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/042-wood-type-letterpress/code.js +496 -0
- package/skills/aicut-motion/assets/atlas/styles/042-wood-type-letterpress/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/042-wood-type-letterpress/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/043-light-painting/code.js +635 -0
- package/skills/aicut-motion/assets/atlas/styles/043-light-painting/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/043-light-painting/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/044-felt-patchwork/code.js +799 -0
- package/skills/aicut-motion/assets/atlas/styles/044-felt-patchwork/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/044-felt-patchwork/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/045-phosphor-terminal/code.js +547 -0
- package/skills/aicut-motion/assets/atlas/styles/045-phosphor-terminal/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/045-phosphor-terminal/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/046-glassmorphism-ui/code.js +592 -0
- package/skills/aicut-motion/assets/atlas/styles/046-glassmorphism-ui/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/046-glassmorphism-ui/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/047-tarot-card/code.js +768 -0
- package/skills/aicut-motion/assets/atlas/styles/047-tarot-card/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/047-tarot-card/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/048-transit-map/code.js +666 -0
- package/skills/aicut-motion/assets/atlas/styles/048-transit-map/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/048-transit-map/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/049-gouache-travel-poster/code.js +559 -0
- package/skills/aicut-motion/assets/atlas/styles/049-gouache-travel-poster/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/049-gouache-travel-poster/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/050-napkin-sketch/code.js +943 -0
- package/skills/aicut-motion/assets/atlas/styles/050-napkin-sketch/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/050-napkin-sketch/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/051-art-deco-foil/code.js +606 -0
- package/skills/aicut-motion/assets/atlas/styles/051-art-deco-foil/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/051-art-deco-foil/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/052-radiograph-on-lightbox/code.js +730 -0
- package/skills/aicut-motion/assets/atlas/styles/052-radiograph-on-lightbox/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/052-radiograph-on-lightbox/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/053-vaporwave/code.js +782 -0
- package/skills/aicut-motion/assets/atlas/styles/053-vaporwave/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/053-vaporwave/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/054-ebru-paper-marbling/code.js +504 -0
- package/skills/aicut-motion/assets/atlas/styles/054-ebru-paper-marbling/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/054-ebru-paper-marbling/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/055-isotype-pictograms/code.js +517 -0
- package/skills/aicut-motion/assets/atlas/styles/055-isotype-pictograms/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/055-isotype-pictograms/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/056-soft-3d-clay/code.js +713 -0
- package/skills/aicut-motion/assets/atlas/styles/056-soft-3d-clay/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/056-soft-3d-clay/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/057-cross-stitch-sampler/code.js +717 -0
- package/skills/aicut-motion/assets/atlas/styles/057-cross-stitch-sampler/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/057-cross-stitch-sampler/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/058-constructivist-propaganda/code.js +540 -0
- package/skills/aicut-motion/assets/atlas/styles/058-constructivist-propaganda/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/058-constructivist-propaganda/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/059-pocket-monochrome/code.js +524 -0
- package/skills/aicut-motion/assets/atlas/styles/059-pocket-monochrome/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/059-pocket-monochrome/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/060-botanical-plate/code.js +934 -0
- package/skills/aicut-motion/assets/atlas/styles/060-botanical-plate/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/060-botanical-plate/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/061-kinetic-type/code.js +690 -0
- package/skills/aicut-motion/assets/atlas/styles/061-kinetic-type/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/061-kinetic-type/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/062-byzantine-mosaic/code.js +612 -0
- package/skills/aicut-motion/assets/atlas/styles/062-byzantine-mosaic/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/062-byzantine-mosaic/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/063-y2k-liquid-chrome/code.js +666 -0
- package/skills/aicut-motion/assets/atlas/styles/063-y2k-liquid-chrome/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/063-y2k-liquid-chrome/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/064-sticky-note-wall/code.js +651 -0
- package/skills/aicut-motion/assets/atlas/styles/064-sticky-note-wall/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/064-sticky-note-wall/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/065-vintage-newsprint/code.js +656 -0
- package/skills/aicut-motion/assets/atlas/styles/065-vintage-newsprint/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/065-vintage-newsprint/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/066-hidden-line-wireframe/code.js +672 -0
- package/skills/aicut-motion/assets/atlas/styles/066-hidden-line-wireframe/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/066-hidden-line-wireframe/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/067-memphis-group/code.js +548 -0
- package/skills/aicut-motion/assets/atlas/styles/067-memphis-group/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/067-memphis-group/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/068-ballpoint-notebook/code.js +989 -0
- package/skills/aicut-motion/assets/atlas/styles/068-ballpoint-notebook/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/068-ballpoint-notebook/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/069-op-art-sphere/code.js +440 -0
- package/skills/aicut-motion/assets/atlas/styles/069-op-art-sphere/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/069-op-art-sphere/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/070-topographic-survey/code.js +895 -0
- package/skills/aicut-motion/assets/atlas/styles/070-topographic-survey/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/070-topographic-survey/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/071-pointillist-afternoon/code.js +563 -0
- package/skills/aicut-motion/assets/atlas/styles/071-pointillist-afternoon/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/071-pointillist-afternoon/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/072-vector-arcade-1980/code.js +627 -0
- package/skills/aicut-motion/assets/atlas/styles/072-vector-arcade-1980/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/072-vector-arcade-1980/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/073-patent-drawing/code.js +1096 -0
- package/skills/aicut-motion/assets/atlas/styles/073-patent-drawing/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/073-patent-drawing/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/074-bauhaus-poster/code.js +595 -0
- package/skills/aicut-motion/assets/atlas/styles/074-bauhaus-poster/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/074-bauhaus-poster/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/075-bitmap-paint-doodle/code.js +665 -0
- package/skills/aicut-motion/assets/atlas/styles/075-bitmap-paint-doodle/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/075-bitmap-paint-doodle/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/076-nail-thread-string-art/code.js +645 -0
- package/skills/aicut-motion/assets/atlas/styles/076-nail-thread-string-art/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/076-nail-thread-string-art/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/077-ridgeline/code.js +436 -0
- package/skills/aicut-motion/assets/atlas/styles/077-ridgeline/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/077-ridgeline/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/078-sketchbook-graphite/code.js +1237 -0
- package/skills/aicut-motion/assets/atlas/styles/078-sketchbook-graphite/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/078-sketchbook-graphite/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/079-teletext-page/code.js +622 -0
- package/skills/aicut-motion/assets/atlas/styles/079-teletext-page/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/079-teletext-page/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/080-silkscreen-grid/code.js +524 -0
- package/skills/aicut-motion/assets/atlas/styles/080-silkscreen-grid/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/080-silkscreen-grid/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/081-guilloch-security-print/code.js +689 -0
- package/skills/aicut-motion/assets/atlas/styles/081-guilloch-security-print/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/081-guilloch-security-print/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/082-ascii-demoscene/code.js +574 -0
- package/skills/aicut-motion/assets/atlas/styles/082-ascii-demoscene/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/082-ascii-demoscene/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/083-international-typographic-style/code.js +469 -0
- package/skills/aicut-motion/assets/atlas/styles/083-international-typographic-style/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/083-international-typographic-style/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/084-flow-field/code.js +531 -0
- package/skills/aicut-motion/assets/atlas/styles/084-flow-field/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/084-flow-field/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/085-macpaint-1984/code.js +675 -0
- package/skills/aicut-motion/assets/atlas/styles/085-macpaint-1984/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/085-macpaint-1984/style.json +13 -0
- package/skills/aicut-motion/assets/atlas/styles/086-multi-scale-truchet/code.js +609 -0
- package/skills/aicut-motion/assets/atlas/styles/086-multi-scale-truchet/poster.jpg +0 -0
- package/skills/aicut-motion/assets/atlas/styles/086-multi-scale-truchet/style.json +13 -0
- package/skills/aicut-motion/references/motion-delivery.md +55 -0
- package/skills/aicut-motion/references/style-index.json +690 -0
- package/skills/aicut-motion/references/style-research.md +73 -0
- package/skills/aicut-motion/references/style-selection.md +71 -0
- package/skills/aicut-motion/scripts/atlas-viewer.html +195 -0
- package/skills/aicut-motion/scripts/atlas.mjs +109 -0
- package/studio/server/fetch-github.mjs +14 -3
- package/studio/server/server.mjs +40 -3
- package/studio/server/skill-summaries.mjs +60 -0
- package/studio/server/skills.mjs +121 -7
- package/studio/server/styles-store.mjs +235 -0
- package/studio/server/template-posters.mjs +2 -2
- package/studio/server/templates-page.mjs +93 -93
- package/studio/server/templates.mjs +32 -7
- package/studio/ui/dist/assets/ExportCenter-DasulhAv.js +1 -0
- package/studio/ui/dist/assets/SettingsModal-BZw0Hz2_.js +2 -0
- package/studio/ui/dist/assets/es-C8XPZARI.js +1 -0
- package/studio/ui/dist/assets/index-BjJVmBzB.js +1623 -0
- package/studio/ui/dist/assets/index-C3BfKZFO.css +1 -0
- package/studio/ui/dist/assets/ja-BeNkdaEj.js +1 -0
- package/studio/ui/dist/assets/ko-DcTVhdzK.js +1 -0
- package/studio/ui/dist/assets/zh-CN-Cg51ctbL.js +1 -0
- package/studio/ui/dist/index.html +2 -2
- package/skills/30x-web-to-video/SKILL.md +0 -421
- package/skills/30x-web-to-video/examples/INDEX.md +0 -26
- package/skills/30x-web-to-video/references/animations.md +0 -539
- package/skills/30x-web-to-video/references/audio.md +0 -256
- package/skills/30x-web-to-video/references/components.md +0 -340
- package/skills/30x-web-to-video/references/lottie.md +0 -174
- package/skills/30x-web-to-video/references/visual-effects.md +0 -157
- package/skills/30x-web-to-video/remotion-best-practices/rules/audio.md +0 -169
- package/skills/30x-web-to-video/remotion-best-practices/rules/calculate-metadata.md +0 -134
- package/skills/30x-web-to-video/remotion-best-practices/rules/charts.md +0 -120
- package/skills/30x-web-to-video/remotion-best-practices/rules/compositions.md +0 -154
- package/skills/30x-web-to-video/remotion-best-practices/rules/ffmpeg.md +0 -38
- package/skills/30x-web-to-video/remotion-best-practices/rules/fonts.md +0 -152
- package/skills/3d-asset-generation/SKILL.md +0 -142
- package/skills/action-fight-prompt/SKILL.md +0 -136
- package/skills/action-fight-prompt/references/camera-and-impact.md +0 -64
- package/skills/action-fight-prompt/references/example-15s-duel.md +0 -59
- package/skills/action-fight-prompt/references/scene-patterns.md +0 -80
- package/skills/ad-creative-video/SKILL.md +0 -205
- package/skills/ad-creative-video/references/batch-ad-pipeline.md +0 -289
- package/skills/ad-creative-video/references/platform-specs.md +0 -72
- package/skills/after-effects/SKILL.md +0 -123
- package/skills/after-effects/references/export-recipes.md +0 -168
- package/skills/after-effects/references/expression-library.md +0 -184
- package/skills/after-effects/references/expressions.md +0 -134
- package/skills/after-effects/references/performance-triage.md +0 -138
- package/skills/after-effects/references/project-hygiene.md +0 -188
- package/skills/ai-media-quality-review/SKILL.md +0 -72
- package/skills/ai-product-video/SKILL.md +0 -296
- package/skills/ai-product-video/references/aesthetic-rules.md +0 -177
- package/skills/ai-product-video/references/final-review.md +0 -110
- package/skills/ai-product-video/references/guided-free-creation.md +0 -194
- package/skills/ai-product-video/references/music-beat-sync.md +0 -219
- package/skills/ai-product-video/references/pipeline.md +0 -392
- package/skills/ai-product-video/references/sequences/promo-energy-arc.md +0 -50
- package/skills/ai-product-video/references/shots/ATTRIBUTION.md +0 -65
- package/skills/ai-product-video/references/shots/camera/basic-3d-scene.md +0 -37
- package/skills/ai-product-video/references/shots/camera/crash-zoom-punch.md +0 -39
- package/skills/ai-product-video/references/shots/camera/cursor-flyover.md +0 -38
- package/skills/ai-product-video/references/shots/camera/depth-layer-moves.md +0 -40
- package/skills/ai-product-video/references/shots/camera/graze-face-tour.md +0 -57
- package/skills/anidoodle/SKILL.md +0 -185
- package/skills/anidoodle/references/anatomy.md +0 -91
- package/skills/anidoodle/references/backends-and-adapters.md +0 -82
- package/skills/anidoodle/references/camera.md +0 -148
- package/skills/anidoodle/references/craft-bar.md +0 -72
- package/skills/anidoodle/references/determinism-and-contract.md +0 -46
- package/skills/anidoodle/references/formats.md +0 -121
- package/skills/anidoodle/references/motion-grammar.md +0 -234
- package/skills/anidoodle/references/music/compose.md +0 -388
- package/skills/anidoodle/references/music/sound-design.md +0 -245
- package/skills/anidoodle/references/music/sounds-licenses.md +0 -69
- package/skills/anidoodle/references/music/styles/lofi-electronic.md +0 -112
- package/skills/anidoodle/references/music/styles/music-box.md +0 -57
- package/skills/animated-component-libraries/SKILL.md +0 -820
- package/skills/animated-component-libraries/references/customization_guide.md +0 -699
- package/skills/animated-component-libraries/references/magic_ui_components.md +0 -422
- package/skills/animated-component-libraries/references/react_bits_components.md +0 -587
- package/skills/animated-infographic/SKILL.md +0 -211
- package/skills/animated-infographic/references/sequenced-infographic.md +0 -286
- package/skills/appshot-core/SKILL.md +0 -872
- package/skills/article-highlights/SKILL.md +0 -151
- package/skills/avatar-mix/SKILL.md +0 -301
- package/skills/bang-motion/SKILL.md +0 -583
- package/skills/bang-motion/references/ae-bridge-higgsfield.md +0 -160
- package/skills/bang-motion/references/anti-ppt.md +0 -110
- package/skills/bang-motion/references/architecture.md +0 -188
- package/skills/bang-motion/references/explainer.md +0 -579
- package/skills/bang-motion/references/kartun-panggung.md +0 -221
- package/skills/bang-motion/references/opener-konsep.md +0 -817
- package/skills/bang-motion/references/roadmap.md +0 -85
- package/skills/bang-motion/references/techniques.md +0 -690
- package/skills/beat-sync-edit/SKILL.md +0 -148
- package/skills/book-video-factory/SKILL.md +0 -139
- package/skills/book-video-factory/references/first-run.md +0 -50
- package/skills/book-video-factory/references/paper-collage-explainer.md +0 -127
- package/skills/book-video-factory/references/quality-gates.md +0 -87
- package/skills/book-video-production/SKILL.md +0 -211
- package/skills/brag/SKILL.md +0 -195
- package/skills/brag/references/audio.md +0 -312
- package/skills/brag/references/step-1-inspect.md +0 -125
- package/skills/brag/references/step-2-plan.md +0 -234
- package/skills/brag/references/step-3-compose.md +0 -199
- package/skills/brag/references/step-4-deliver.md +0 -141
- package/skills/brag/references/tones.md +0 -231
- package/skills/brand-setup/SKILL.md +0 -228
- package/skills/brewreel/SKILL.md +0 -491
- package/skills/brewreel/docs/broll.en.md +0 -252
- package/skills/brewreel/docs/broll.md +0 -252
- package/skills/brewreel/docs/custom-shot.en.md +0 -66
- package/skills/brewreel/docs/custom-shot.md +0 -103
- package/skills/brewreel/docs/faq.en.md +0 -90
- package/skills/brewreel/docs/faq.md +0 -90
- package/skills/brewreel/docs/features.en.md +0 -157
- package/skills/brewreel/docs/features.md +0 -157
- package/skills/brewreel/docs/gallery.en.md +0 -44
- package/skills/brewreel/docs/gallery.md +0 -44
- package/skills/brewreel/docs/how-it-works.en.md +0 -64
- package/skills/brewreel/docs/how-it-works.md +0 -64
- package/skills/caption-animation/SKILL.md +0 -216
- package/skills/caption-animation/references/word-timed-captions.md +0 -254
- package/skills/cartcut-editing/SKILL.md +0 -615
- package/skills/cartcut-editing/references/html-typography.md +0 -277
- package/skills/cassette-video-edit/SKILL.md +0 -129
- package/skills/ccvideo/SKILL.md +0 -264
- package/skills/chekhov-dramaturgy/SKILL.md +0 -367
- package/skills/chekhov-dramaturgy/reference.md +0 -375
- package/skills/chengfeng-check-updates/SKILL.md +0 -283
- package/skills/cinematic-product-promo-skill/SKILL.md +0 -295
- package/skills/cinematic-product-promo-skill/references/aesthetic-rules.md +0 -187
- package/skills/cinematic-product-promo-skill/references/final-review.md +0 -116
- package/skills/cinematic-product-promo-skill/references/guided-free-creation.md +0 -199
- package/skills/cinematic-product-promo-skill/references/jianying-export.md +0 -183
- package/skills/cinematic-product-promo-skill/references/music-beat-sync.md +0 -257
- package/skills/cinematic-product-promo-skill/references/pipeline.md +0 -393
- package/skills/cinematic-product-promo-skill/references/sequences/promo-energy-arc.md +0 -50
- package/skills/cinematic-product-promo-skill/references/shots/ATTRIBUTION.md +0 -65
- package/skills/cinematic-product-promo-skill/references/shots/camera/basic-3d-scene.md +0 -37
- package/skills/cinematic-product-promo-skill/references/shots/camera/crash-zoom-punch.md +0 -39
- package/skills/cinematic-product-promo-skill/references/shots/camera/cursor-flyover.md +0 -38
- package/skills/cinematic-product-promo-skill/references/shots/camera/depth-layer-moves.md +0 -40
- package/skills/claude-gif/SKILL.md +0 -211
- package/skills/claude-gif/references/gif-optimization.md +0 -209
- package/skills/claude-gif/references/perfect-loops.md +0 -295
- package/skills/claude-gif/references/platform-specs.md +0 -138
- package/skills/claude-gif/references/prompt-engineering.md +0 -211
- package/skills/claude-gif/references/remotion-gif.md +0 -560
- package/skills/codex-video-pipeline/SKILL.md +0 -213
- package/skills/codex-video-pipeline/examples/ai-meeting-notes/INPUT.md +0 -10
- package/skills/codex-video-pipeline/examples/ai-meeting-notes/expected/action-list.md +0 -22
- package/skills/codex-video-pipeline/references/captions.md +0 -39
- package/skills/codex-video-pipeline/references/cover-system.md +0 -72
- package/skills/codex-video-pipeline/references/cross-platform.md +0 -77
- package/skills/codex-video-pipeline/references/example-run.md +0 -54
- package/skills/codex-video-pipeline/references/first-run.md +0 -130
- package/skills/codex-video-pipeline/references/project-contract.md +0 -54
- package/skills/codex-video-pipeline/references/quality-gates.md +0 -44
- package/skills/codex-video-pipeline/references/research-and-script.md +0 -50
- package/skills/collage-broll-explainers/SKILL.md +0 -429
- package/skills/create-onboarding-video/SKILL.md +0 -233
- package/skills/cs-shotcraft-skill/SKILL.md +0 -218
- package/skills/cs-shotcraft-skill/references/aesthetic-rules.md +0 -207
- package/skills/cs-shotcraft-skill/references/camera-table.md +0 -88
- package/skills/cs-shotcraft-skill/references/engineering.md +0 -132
- package/skills/cs-shotcraft-skill/references/final-review.md +0 -118
- package/skills/cs-shotcraft-skill/references/guided-free-creation.md +0 -199
- package/skills/cs-shotcraft-skill/references/jianying-export.md +0 -183
- package/skills/cs-shotcraft-skill/references/music-beat-sync.md +0 -257
- package/skills/cs-shotcraft-skill/references/pipeline.md +0 -408
- package/skills/cs-shotcraft-skill/references/product-machine.md +0 -56
- package/skills/cs-shotcraft-skill/references/sequences/promo-energy-arc.md +0 -50
- package/skills/cs-shotcraft-skill/references/shots/ATTRIBUTION.md +0 -65
- package/skills/cs-shotcraft-skill/references/shots/camera/basic-3d-scene.md +0 -37
- package/skills/cut-video/SKILL.md +0 -387
- package/skills/cyxj-hyperframes-overlay/SKILL.md +0 -75
- package/skills/cyxj-remotion-evolve/SKILL.md +0 -123
- package/skills/cyxj-remotion-evolve-vibe-motion/SKILL.md +0 -123
- package/skills/demo-video-creation-skill/SKILL.md +0 -152
- package/skills/demo-video-creation-skill/references/capture-workflow.md +0 -74
- package/skills/demo-video-creation-skill/references/qc-checklist.md +0 -61
- package/skills/demo-video-creation-skill/references/remotion-ffmpeg.md +0 -94
- package/skills/demo-video-creation-skill/references/storytelling.md +0 -86
- package/skills/demo-video-creation-skill/references/visual-system.md +0 -83
- package/skills/demoday/SKILL.md +0 -148
- package/skills/develop-premiere-pro-mcp/SKILL.md +0 -131
- package/skills/diagram-animation/SKILL.md +0 -200
- package/skills/diagram-animation/references/diagram-and-chart-recipes.md +0 -218
- package/skills/diagram-tour/SKILL.md +0 -287
- package/skills/diagram-tour/examples/agent-architecture/agent-architecture-tour.md +0 -78
- package/skills/docvideoer/SKILL.md +0 -139
- package/skills/draftcut/SKILL.md +0 -104
- package/skills/draftcut/docs/agent-bootstrap.md +0 -64
- package/skills/draftcut/docs/approvals.md +0 -45
- package/skills/draftcut/docs/audio-first-migration.md +0 -35
- package/skills/draftcut/docs/configuration.md +0 -54
- package/skills/draftcut/docs/getting-started.md +0 -63
- package/skills/draftcut/docs/harness-case-study.en.md +0 -23
- package/skills/draftcut/docs/harness-case-study.md +0 -47
- package/skills/draftcut/references/01-plan.md +0 -30
- package/skills/draftcut/references/03-deliver.md +0 -26
- package/skills/draftcut/references/04-reference-theme-prompt.md +0 -7
- package/skills/draftcut/references/05-social-loudness.md +0 -58
- package/skills/draftcut/references/06-modern-components.md +0 -72
- package/skills/easyedit/SKILL.md +0 -66
- package/skills/erduo-broll-loop-engineering/SKILL.md +0 -136
- package/skills/erduo-broll-loop-engineering/references/animation-craft.md +0 -208
- package/skills/erduo-broll-loop-engineering/references/first-run-onboarding.md +0 -107
- package/skills/erduo-broll-loop-engineering/references/handoff-template.md +0 -70
- package/skills/erduo-broll-loop-engineering/references/motion-layout-lint.md +0 -122
- package/skills/erduo-broll-loop-engineering/references/parent-review-checklist.md +0 -171
- package/skills/erduo-broll-loop-engineering/references/prompt-first-workflow.md +0 -322
- package/skills/erduo-broll-loop-engineering/references/remotion-backend.md +0 -334
- package/skills/erduo-broll-loop-engineering/references/runtime/remotion-hyperframes-map.md +0 -76
- package/skills/erduo-broll-loop-engineering/references/runtime/runtime-contract.md +0 -174
- package/skills/erduo-broll-loop-engineering/references/runtime/runtime-selection.md +0 -135
- package/skills/erduo-broll-loop-engineering/references/shotcraft/remotion-sources/SOURCE.md +0 -7
- package/skills/erduo-broll-loop-engineering/references/shotcraft/upstream-attribution.md +0 -65
- package/skills/explainer-assets/SKILL.md +0 -98
- package/skills/explainer-video/SKILL.md +0 -146
- package/skills/framewright/SKILL.md +0 -324
- package/skills/framewright/references/audio.md +0 -230
- package/skills/framewright/references/guide.md +0 -276
- package/skills/framewright/references/painting.md +0 -425
- package/skills/framewright/references/photo.md +0 -75
- package/skills/framewright/references/questionnaire.md +0 -115
- package/skills/framewright/references/styles.md +0 -388
- package/skills/framewright/references/troubleshooting.md +0 -119
- package/skills/framewright/references/world.md +0 -215
- package/skills/gbro-collage-broll/SKILL.md +0 -435
- package/skills/gbro-collage-info/SKILL.md +0 -135
- package/skills/gbro-collage-info/references/motion-grammar.md +0 -66
- package/skills/gbro-collage-info/references/production.md +0 -67
- package/skills/gbro-collage-info/references/style-system.md +0 -38
- package/skills/gemini-tts/SKILL.md +0 -208
- package/skills/gemini-tts/references/prompting-guide.md +0 -169
- package/skills/gen/SKILL.md +0 -282
- package/skills/ghost-editor/SKILL.md +0 -437
- package/skills/ghost-editor/docs/HOW-IT-WORKS.md +0 -82
- package/skills/ghost-editor/docs/PLAYBOOK.md +0 -139
- package/skills/ghost-editor/docs/THIRD_PARTY/audio.md +0 -17
- package/skills/ghost-editor/docs/THIRD_PARTY/audioqa.md +0 -13
- package/skills/ghost-editor/docs/THIRD_PARTY/captions.md +0 -20
- package/skills/ghost-editor/docs/THIRD_PARTY/fonts.md +0 -17
- package/skills/ghost-editor/docs/THIRD_PARTY/kinetic.md +0 -22
- package/skills/ghost-editor/docs/THIRD_PARTY/looks.md +0 -22
- package/skills/ghost-editor/docs/THIRD_PARTY/matte.md +0 -20
- package/skills/ghost-editor/docs/THIRD_PARTY/models.md +0 -11
- package/skills/ghost-editor/docs/THIRD_PARTY/runtime.md +0 -13
- package/skills/ghost-editor/docs/THIRD_PARTY/shaders.md +0 -15
- package/skills/git-story-film/SKILL.md +0 -220
- package/skills/git-story-film/examples/raven-story/FONTS.md +0 -8
- package/skills/git-story-film/examples/raven-story/OUTLINE.md +0 -93
- package/skills/git-story-film/references/craft.md +0 -148
- package/skills/git-story-film/references/directing.md +0 -185
- package/skills/git-story-film/references/forms.md +0 -150
- package/skills/git-story-film/references/production.md +0 -150
- package/skills/git-story-film/references/story.md +0 -137
- package/skills/git-story-film/references/text-and-fonts.md +0 -90
- package/skills/guizang-product-video-skill/SKILL.md +0 -96
- package/skills/guizang-product-video-skill/references/audio-and-qa.md +0 -113
- package/skills/guizang-product-video-skill/references/audio-sourcing.md +0 -80
- package/skills/guizang-product-video-skill/references/case-study.md +0 -63
- package/skills/guizang-product-video-skill/references/component-pipeline.md +0 -86
- package/skills/guizang-product-video-skill/references/cover.md +0 -43
- package/skills/guizang-product-video-skill/references/direction.md +0 -91
- package/skills/guizang-product-video-skill/references/onboarding.md +0 -98
- package/skills/guizang-product-video-skill/references/repo-and-style.md +0 -44
- package/skills/guizang-product-video-skill/references/review.md +0 -38
- package/skills/guizang-product-video-skill/references/starter.md +0 -168
- package/skills/guizang-product-video-skill/references/story-and-copy.md +0 -88
- package/skills/guizang-product-video-skill/references/visual-vocabulary.md +0 -78
- package/skills/guofeng-paper-video/SKILL.md +0 -159
- package/skills/guofeng-paper-video/style/design.md +0 -43
- package/skills/guofeng-paper-video/style/palette.md +0 -21
- package/skills/guofeng-paper-video/style/prompts/01-/345/210/206/351/225/234/350/241/250.md +0 -19
- package/skills/guofeng-paper-video/style/prompts/02-/347/224/237/346/210/220/347/272/270/347/211/207.md +0 -37
- package/skills/guofeng-paper-video/style/prompts/03-/351/205/215/351/237/263/350/204/232/346/234/254.md +0 -27
- package/skills/guofeng-paper-video/style//345/210/206/351/225/234/344/270/216/345/233/276/345/261/202/350/247/204/350/214/203.md +0 -67
- package/skills/guofeng-paper-video/style//347/272/270/347/211/207/347/264/240/346/235/220/350/247/204/350/214/203.md +0 -29
- package/skills/hand-drawn-explainer-video-nikola/SKILL.md +0 -113
- package/skills/hand-drawn-explainer-video-nikola/docs/ARCHITECTURE.md +0 -18
- package/skills/hand-drawn-explainer-video-nikola/docs/CONFIGURATION.md +0 -22
- package/skills/hand-drawn-explainer-video-nikola/docs/STYLES.md +0 -28
- package/skills/hand-drawn-explainer-video-nikola/docs/TROUBLESHOOTING.md +0 -35
- package/skills/hand-drawn-explainer-video-nikola/examples/program-animation/skill-demo/DESIGN.md +0 -24
- package/skills/hand-drawn-explainer-video-nikola/references/automation-workflow.md +0 -67
- package/skills/hand-drawn-explainer-video-nikola/references/output-example.md +0 -79
- package/skills/hand-drawn-explainer-video-nikola/references/preflight-and-recovery.md +0 -49
- package/skills/hand-drawn-explainer-video-nikola/references/style-guide.md +0 -82
- package/skills/hand-drawn-explainer-video-nikola/references/style-selection-and-updates.md +0 -39
- package/skills/hand-drawn-explainer-video-nikola/references/upstream-whiteboard-review.md +0 -30
- package/skills/hand-drawn-explainer-video-nikola/references/voiceover.md +0 -37
- package/skills/hbg-life-simulation/SKILL.md +0 -285
- package/skills/hbg-life-simulation/references/image-generation.md +0 -53
- package/skills/hbg-life-simulation/references/local-account-api.md +0 -112
- package/skills/hbg-life-simulation/references/opening-system.md +0 -45
- package/skills/hbg-life-simulation/references/project-spec.md +0 -62
- package/skills/hbg-life-simulation/references/render-and-qa.md +0 -107
- package/skills/hbg-life-simulation/references/storyboarding.md +0 -69
- package/skills/hbg-life-simulation/references/style-system.md +0 -80
- package/skills/hbg-life-simulation/references/visual-system.md +0 -44
- package/skills/heygen-avatar/SKILL.md +0 -489
- package/skills/heygen-avatar/references/asset-routing.md +0 -86
- package/skills/heygen-avatar/references/avatar-creation.md +0 -181
- package/skills/heygen-avatar/references/troubleshooting.md +0 -137
- package/skills/heytea-doodle-poster/SKILL.md +0 -132
- package/skills/heytea-doodle-poster/references/desktop-pet-character-modes.md +0 -103
- package/skills/heytea-doodle-poster/references/desktop-pet-environment.md +0 -122
- package/skills/heytea-doodle-poster/references/desktop-pet-pack.md +0 -106
- package/skills/heytea-doodle-poster/references/desktop-pet-workflow.md +0 -264
- package/skills/heytea-doodle-poster/references/evaluation.md +0 -246
- package/skills/heytea-doodle-poster/references/lettering-guide.md +0 -213
- package/skills/heytea-doodle-poster/references/mixed-media-style-guide.md +0 -101
- package/skills/heytea-doodle-poster/references/monster-poster-workflow.md +0 -56
- package/skills/heytea-doodle-poster/references/style-guide.md +0 -412
- package/skills/heytea-doodle-poster-hosted/SKILL.md +0 -132
- package/skills/heytea-doodle-poster-hosted/references/desktop-pet-character-modes.md +0 -103
- package/skills/heytea-doodle-poster-hosted/references/desktop-pet-environment.md +0 -122
- package/skills/heytea-doodle-poster-hosted/references/desktop-pet-pack.md +0 -106
- package/skills/heytea-doodle-poster-hosted/references/desktop-pet-workflow.md +0 -264
- package/skills/heytea-doodle-poster-hosted/references/evaluation.md +0 -246
- package/skills/heytea-doodle-poster-hosted/references/lettering-guide.md +0 -213
- package/skills/heytea-doodle-poster-hosted/references/mixed-media-style-guide.md +0 -101
- package/skills/heytea-doodle-poster-hosted/references/monster-poster-workflow.md +0 -56
- package/skills/heytea-doodle-poster-hosted/references/style-guide.md +0 -412
- package/skills/html2video/SKILL.md +0 -290
- package/skills/html2video/references/cjk-type.md +0 -173
- package/skills/html2video/references/editorial.md +0 -145
- package/skills/html2video/references/narration.md +0 -111
- package/skills/html2video/references/pitfalls.md +0 -238
- package/skills/html2video/references/shots.md +0 -198
- package/skills/html2video/references/storyboard.md +0 -323
- package/skills/hyperdirector/SKILL.md +0 -202
- package/skills/hyperdirector/docs/audio-workflow.md +0 -160
- package/skills/hyperdirector/docs/audio-workflow.zh-CN.md +0 -244
- package/skills/hyperdirector/docs/brand-kit-setup.md +0 -322
- package/skills/hyperdirector/docs/brand-kit-setup.zh-CN.md +0 -277
- package/skills/hyperdirector/docs/cursor-development-notes.md +0 -474
- package/skills/hyperdirector/docs/faq.md +0 -285
- package/skills/hyperdirector/docs/faq.zh-CN.md +0 -198
- package/skills/hyperdirector/docs/first-video.md +0 -320
- package/skills/hyperdirector/docs/first-video.zh-CN.md +0 -265
- package/skills/hyperdirector/docs/installation.md +0 -254
- package/skills/hyperdirector/docs/installation.zh-CN.md +0 -222
- package/skills/hyperdirector/docs/quickstart.md +0 -203
- package/skills/hyperframes/SKILL.md +0 -117
- package/skills/hyperframes/references/captions.md +0 -46
- package/skills/hyperframes/references/film.md +0 -48
- package/skills/hyperframes/references/format.md +0 -158
- package/skills/hyperframes/references/look.md +0 -69
- package/skills/hyperframes/references/motion.md +0 -95
- package/skills/hyperframes/references/overlays.md +0 -39
- package/skills/hyperframes/references/review.md +0 -51
- package/skills/hyperframes/references/runtimes.md +0 -69
- package/skills/hyperframes/references/skill-lifecycle.md +0 -49
- package/skills/hyperframes/references/sound.md +0 -43
- package/skills/hyperframes/references/spec.md +0 -76
- package/skills/hyperframes/references/story.md +0 -103
- package/skills/hyperframes-motion-director/SKILL.md +0 -920
- package/skills/hyperframes-motion-director/references/asset-choreography-and-render-qa.md +0 -185
- package/skills/hyperframes-motion-director/references/audio-sync.md +0 -83
- package/skills/hyperframes-motion-director/references/design-engineering.md +0 -156
- package/skills/hyperframes-motion-director/references/gsap-choreography.md +0 -202
- package/skills/hyperframes-motion-director/references/hyperframes-stability.md +0 -99
- package/skills/hyperframes-motion-director/references/imagegen-asset-pipeline.md +0 -227
- package/skills/hyperframes-motion-director/references/motion-background-system.md +0 -165
- package/skills/hyperframes-motion-director/references/motion-craft.md +0 -182
- package/skills/hyperframes-motion-director/references/premium-product-promo.md +0 -287
- package/skills/hyperframes-motion-director/references/text-over-background-layout.md +0 -221
- package/skills/hyperframes-motion-director/references/visual-standard.md +0 -174
- package/skills/hyperframes-motion-director/references/workflow.md +0 -320
- package/skills/hypit/SKILL.md +0 -367
- package/skills/hypit/references/creation/brief.md +0 -93
- package/skills/hypit/references/creation/script-and-time.md +0 -259
- package/skills/hypit/references/creation/transformations.md +0 -143
- package/skills/hypit/references/playbooks/craft/b-roll.md +0 -94
- package/skills/hypit/references/playbooks/craft/caption-tracking.md +0 -126
- package/skills/hypit/references/playbooks/craft/captions.md +0 -253
- package/skills/hypit/references/playbooks/craft/generated-dependencies.md +0 -38
- package/skills/hypit/references/playbooks/craft/graphic-compositions.md +0 -85
- package/skills/hypit/references/playbooks/craft/motion-graphics.md +0 -68
- package/skills/hypit/references/playbooks/craft/screen-demonstrations.md +0 -51
- package/skills/hypit/references/playbooks/craft/sound-mix.md +0 -70
- package/skills/hypit/references/playbooks/formats/narration-led-demo.md +0 -87
- package/skills/image/SKILL.md +0 -153
- package/skills/image/references/characters.md +0 -86
- package/skills/image/references/creative-direction.md +0 -137
- package/skills/image/references/de-slop.md +0 -95
- package/skills/image/references/dimensional.md +0 -88
- package/skills/image/references/editing.md +0 -112
- package/skills/image/references/golden-rules.md +0 -198
- package/skills/image/references/gpt-image.md +0 -228
- package/skills/image/references/models.md +0 -78
- package/skills/image/references/multi-panel.md +0 -354
- package/skills/image/references/nano-banana.md +0 -150
- package/skills/image/references/patterns/character-design.md +0 -150
- package/skills/image/references/patterns/ecommerce.md +0 -124
- package/skills/image-smixs/SKILL.md +0 -153
- package/skills/image-smixs/references/characters.md +0 -86
- package/skills/image-smixs/references/creative-direction.md +0 -137
- package/skills/image-smixs/references/de-slop.md +0 -95
- package/skills/image-smixs/references/dimensional.md +0 -88
- package/skills/image-smixs/references/editing.md +0 -112
- package/skills/image-smixs/references/golden-rules.md +0 -198
- package/skills/image-smixs/references/gpt-image.md +0 -228
- package/skills/image-smixs/references/models.md +0 -78
- package/skills/image-smixs/references/multi-panel.md +0 -354
- package/skills/image-smixs/references/nano-banana.md +0 -150
- package/skills/image-smixs/references/patterns/character-design.md +0 -150
- package/skills/image-smixs/references/patterns/ecommerce.md +0 -124
- package/skills/image-story-video-wizard/SKILL.md +0 -148
- package/skills/image-story-video-wizard/docs/ARTICLE_ALIGNMENT.md +0 -29
- package/skills/image-story-video-wizard/references/host-routing.md +0 -44
- package/skills/image-story-video-wizard/references/state-schema.md +0 -79
- package/skills/image-story-video-wizard/references/workflow.md +0 -203
- package/skills/image-story-video-wizard/references/writing-and-review.md +0 -60
- package/skills/ip-as-logo/SKILL.md +0 -151
- package/skills/ip-as-logo-s1dashu/SKILL.md +0 -151
- package/skills/jtxvideo-skill/SKILL.md +0 -337
- package/skills/kinetic-reel/SKILL.md +0 -140
- package/skills/kinetic-reel/examples/work-reel-26/STORYBOARD.md +0 -51
- package/skills/kinetic-reel/references/sound.md +0 -40
- package/skills/kinetic-reel/references/style-guide.md +0 -79
- package/skills/knowledge-explainer-skill/SKILL.md +0 -149
- package/skills/knowledge-explainer-skill/examples/ai_video_3steps.md +0 -61
- package/skills/knowledge-explainer-skill/examples/algorithm_bubble.md +0 -20
- package/skills/knowledge-explainer-skill/examples/before_after_demo.md +0 -38
- package/skills/knowledge-explainer-skill/examples/cta_outro.md +0 -11
- package/skills/knowledge-explainer-skill/examples/double_pendulum.md +0 -20
- package/skills/knowledge-explainer-skill/examples/paper_fold.md +0 -20
- package/skills/knowledge-explainer-skill/examples/script.md +0 -40
- package/skills/lanshu-create-ai-presenter-video/SKILL.md +0 -253
- package/skills/lanshu-create-ai-presenter-video/references/editing.md +0 -67
- package/skills/lanshu-create-ai-presenter-video/references/generation.md +0 -94
- package/skills/lanshu-create-ai-presenter-video/references/qa-recovery.md +0 -83
- package/skills/lanshu-create-ai-presenter-video/references/styled-explainer.md +0 -189
- package/skills/laoxu-video-script/SKILL.md +0 -117
- package/skills/laoxu-video-script/references/cases.md +0 -305
- package/skills/laoxu-video-script/references/de-ai.md +0 -32
- package/skills/laoxu-video-script/references/diagnostics.md +0 -67
- package/skills/laoxu-video-script/references/format.md +0 -62
- package/skills/laoxu-video-script/references/formulas.md +0 -43
- package/skills/laoxu-video-script/references/method.md +0 -115
- package/skills/laoxu-video-script/references/motifs-and-lines.md +0 -829
- package/skills/laoxu-video-script/references/persona.md +0 -38
- package/skills/laoxu-video-script/references/qihao-path.md +0 -35
- package/skills/laoxu-video-script/references/qihao-xinfa.md +0 -39
- package/skills/laoxu-video-script/references/redlines.md +0 -26
- package/skills/lemo-opuscar/SKILL.md +0 -67
- package/skills/lipnardo/SKILL.md +0 -308
- package/skills/lipnardo/examples/batch-personalized.md +0 -44
- package/skills/lipnardo/examples/photo-to-avatar-pipeline.md +0 -56
- package/skills/lipnardo/examples/single-video.md +0 -44
- package/skills/lipnardo/references/avatar-types.md +0 -42
- package/skills/lipnardo/references/credit-costs.md +0 -39
- package/skills/lipnardo/references/error-codes.md +0 -66
- package/skills/lipnardo/references/heygen-api-reference.md +0 -416
- package/skills/ll-video-decomposer/SKILL.md +0 -105
- package/skills/ll-video-decomposer/references/audiovisual-analysis-guide.md +0 -44
- package/skills/ll-video-decomposer/references/evidence-and-confidence-rules.md +0 -41
- package/skills/ll-video-decomposer/references/multi-video-comparison-template.md +0 -48
- package/skills/ll-video-decomposer/references/single-video-report-template.md +0 -47
- package/skills/ll-video-decomposer/references/tool-discovery-workflow.md +0 -30
- package/skills/ll-video-decomposer/references/transcription-routing.md +0 -65
- package/skills/ll-video-decomposer/references/video-acquisition-workflow.md +0 -30
- package/skills/ltx2-video/SKILL.md +0 -193
- package/skills/ltx2-video/references/mode_ux.md +0 -293
- package/skills/make-ai-short/SKILL.md +0 -130
- package/skills/make-blender-education-video/SKILL.md +0 -247
- package/skills/make-blender-education-video/references/evidence-and-explanation.md +0 -62
- package/skills/make-blender-education-video/references/github-workflow-discovery.md +0 -55
- package/skills/make-blender-education-video/references/production-workflow.md +0 -62
- package/skills/make-blender-education-video/references/story-patterns.md +0 -65
- package/skills/make-blender-education-video/references/visual-quality.md +0 -82
- package/skills/manage-storyboard-projects/SKILL.md +0 -128
- package/skills/manim-composer/SKILL.md +0 -176
- package/skills/manim-composer/references/narrative-patterns.md +0 -125
- package/skills/manim-composer/references/scene-examples.md +0 -216
- package/skills/manim-composer/references/visual-techniques.md +0 -223
- package/skills/manim-composer/templates/scenes-template.md +0 -147
- package/skills/monet-ai-editor-monet/SKILL.md +0 -367
- package/skills/motion-graphics/SKILL.md +0 -206
- package/skills/motion-graphics/references/craft.md +0 -136
- package/skills/motion-graphics/references/engine.md +0 -130
- package/skills/motion-graphics/references/export.md +0 -67
- package/skills/motion-graphics/references/physics.md +0 -100
- package/skills/motion-graphics/references/verify.md +0 -124
- package/skills/motion-video/SKILL.md +0 -133
- package/skills/motion-video/references/audio-and-beat-sync.md +0 -109
- package/skills/motion-video/references/composition-contract.md +0 -107
- package/skills/motion-video/references/production-pipeline.md +0 -147
- package/skills/motion-video/references/style-comic-spiderverse.md +0 -87
- package/skills/motion-video/references/style-glass-keynote.md +0 -69
- package/skills/motion-video-maker/SKILL.md +0 -1452
- package/skills/motion-video-maker/reference/components.md +0 -451
- package/skills/motion-video-maker/reference/workflow.md +0 -190
- package/skills/motioncraft/SKILL.md +0 -221
- package/skills/motioncraft/references/animation-system.md +0 -57
- package/skills/motioncraft/references/assets-and-licensing.md +0 -21
- package/skills/motioncraft/references/customization.md +0 -52
- package/skills/motioncraft/references/gpu-cloud-render.md +0 -15
- package/skills/motioncraft/references/music.md +0 -43
- package/skills/motioncraft/references/phase1-planning-and-preview.md +0 -74
- package/skills/motioncraft/references/phase2-timeline-audio.md +0 -33
- package/skills/motioncraft/references/phase3-pixel-review.md +0 -13
- package/skills/motioncraft/references/phase4-templates.md +0 -30
- package/skills/motioncraft/references/preflight.md +0 -27
- package/skills/motioncraft/references/qa.md +0 -53
- package/skills/motioncraft/references/reference-analysis.md +0 -37
- package/skills/narrator-ai-cli/SKILL.md +0 -256
- package/skills/narrator-ai-cli/references/magic-video.md +0 -205
- package/skills/narrator-ai-cli/references/operations.md +0 -230
- package/skills/narrator-ai-cli/references/resources.md +0 -126
- package/skills/narrator-ai-cli/references/workflows.md +0 -332
- package/skills/newcut-video-clipping/SKILL.md +0 -194
- package/skills/newcut-video-clipping/references/examples.md +0 -59
- package/skills/newcut-video-clipping/references/provider-config.md +0 -110
- package/skills/newcut-video-clipping/references/quality-check.md +0 -35
- package/skills/newcut-video-clipping/references/semantic-plan.md +0 -65
- package/skills/notes-to-video/SKILL.md +0 -476
- package/skills/openchatcut/SKILL.md +0 -100
- package/skills/openchatcut/references/editing-workflow.md +0 -54
- package/skills/openchatcut/references/getting-started.md +0 -106
- package/skills/openchatcut/references/known-errors.md +0 -62
- package/skills/openstoryline-install/SKILL.md +0 -228
- package/skills/orca-motion/SKILL.md +0 -100
- package/skills/orca-motion/references/api.md +0 -100
- package/skills/orca-motion/references/integration.md +0 -59
- package/skills/orca-motion/references/kinetic-type.md +0 -59
- package/skills/orca-motion/references/principles.md +0 -76
- package/skills/package-talking-head-video/SKILL.md +0 -90
- package/skills/package-talking-head-video/docs/EXAMPLES.md +0 -18
- package/skills/package-talking-head-video/docs/TROUBLESHOOTING.md +0 -29
- package/skills/package-talking-head-video/docs/USAGE.md +0 -83
- package/skills/package-talking-head-video/docs/superpowers/plans/2026-08-08-multicolor-center-speaker.md +0 -144
- package/skills/package-talking-head-video/docs/superpowers/plans/2026-08-08-semantic-template-system-v2.md +0 -1099
- package/skills/package-talking-head-video/docs/superpowers/specs/2026-08-08-multicolor-center-speaker-design.md +0 -154
- package/skills/package-talking-head-video/docs/superpowers/specs/2026-08-08-semantic-template-system-v2-design.md +0 -365
- package/skills/package-talking-head-video/examples/auto-editing-0/GATE_A.md +0 -56
- package/skills/package-talking-head-video/examples/auto-editing-0/GATE_D.md +0 -8
- package/skills/package-talking-head-video/examples/auto-editing-0/QA_REPORT.md +0 -34
- package/skills/package-talking-head-video/references/director-rules.md +0 -29
- package/skills/package-talking-head-video/references/motion-and-illustration.md +0 -25
- package/skills/paper-cut/SKILL.md +0 -164
- package/skills/paper-cut/references/asset-spec.md +0 -47
- package/skills/paper-cut/references/audio-and-chatcut.md +0 -26
- package/skills/paper-cut/references/hyperframes-assembly.md +0 -47
- package/skills/paper-cut/references/image-led-production.md +0 -65
- package/skills/paper-cut/references/storyboard-schema.md +0 -48
- package/skills/paper-cut/references/workflow.md +0 -39
- package/skills/personal-ip-brand-intro/SKILL.md +0 -216
- package/skills/personal-ip-brand-intro/references/intake-schema.md +0 -79
- package/skills/personal-ip-brand-intro/references/music-upload-workflow.md +0 -40
- package/skills/personal-ip-brand-intro/references/originality-rules.md +0 -42
- package/skills/personal-ip-brand-intro/references/qa-checklist.md +0 -60
- package/skills/personal-ip-brand-intro/references/rhythm-routing.md +0 -41
- package/skills/personal-ip-brand-intro/references/storyboard-contract.md +0 -42
- package/skills/pixel2motion/SKILL.md +0 -279
- package/skills/pixel2motion/references/html-delivery-template.md +0 -42
- package/skills/pixel2motion/references/motion-personality.md +0 -109
- package/skills/pixel2motion/references/reveal-patterns.md +0 -163
- package/skills/pixel2motion/references/ribbon-fitting.md +0 -90
- package/skills/pixel2motion/references/twelve-principles-for-logos.md +0 -116
- package/skills/premiere-batch-delivery/SKILL.md +0 -71
- package/skills/premiere-pro-mcp/SKILL.md +0 -161
- package/skills/promo-creator-skills/SKILL.md +0 -209
- package/skills/promo-creator-skills/references/mureka_prompt_guide.md +0 -251
- package/skills/promo-creator-skills/references/product_promo_bgm_prompting.md +0 -100
- package/skills/promo-video/SKILL.md +0 -408
- package/skills/qisi-video-remix/SKILL.md +0 -134
- package/skills/qisi-video-remix/examples/creative-plan.md +0 -133
- package/skills/qisi-video-remix/references/delivery-guide.md +0 -63
- package/skills/reel-video/SKILL.md +0 -237
- package/skills/remotion-ad-video/SKILL.md +0 -252
- package/skills/remotion-ad-video/references/ad-aesthetic-qa.md +0 -60
- package/skills/remotion-ad-video/references/ad-brief-contract.md +0 -235
- package/skills/remotion-ad-video/references/ad-exemplars.md +0 -186
- package/skills/remotion-ad-video/references/ad-intake.md +0 -54
- package/skills/remotion-ad-video/references/asset-harvest.md +0 -56
- package/skills/remotion-ad-video/references/audio-caption-system.md +0 -202
- package/skills/remotion-ad-video/references/concept-contract.md +0 -128
- package/skills/remotion-ad-video/references/creative-direction.md +0 -146
- package/skills/remotion-ad-video/references/fast-test-workflow.md +0 -86
- package/skills/remotion-ad-video/references/game-ad-patterns.md +0 -75
- package/skills/remotion-ad-video/references/hyperframes-output.md +0 -90
- package/skills/remotion-ad-video/references/industry-angle-library.md +0 -71
- package/skills/remotion-ads/SKILL.md +0 -278
- package/skills/remotion-ads/references/ad-copywriting.md +0 -229
- package/skills/remotion-ads/references/animations.md +0 -693
- package/skills/remotion-ads/references/brand-config-template.md +0 -355
- package/skills/remotion-ads/references/captions.md +0 -529
- package/skills/remotion-ads/references/carousels.md +0 -580
- package/skills/remotion-ads/references/components.md +0 -897
- package/skills/remotion-ads/references/copy-frameworks.md +0 -144
- package/skills/remotion-ads/references/formats.md +0 -436
- package/skills/remotion-ads/references/gemini-tts.md +0 -473
- package/skills/remotion-ads/references/html-in-canvas.md +0 -555
- package/skills/remotion-ads/references/local-assets.md +0 -543
- package/skills/remotion-ads/references/music.md +0 -656
- package/skills/remotion-code-motion-explainer/SKILL.md +0 -178
- package/skills/remotion-code-motion-explainer/references/code-motion-design.md +0 -86
- package/skills/remotion-code-motion-explainer/references/motion-production-patterns.md +0 -93
- package/skills/remotion-code-motion-explainer/references/production-and-qc.md +0 -99
- package/skills/remotion-code-motion-explainer/references/reference-reconstruction.md +0 -48
- package/skills/remotion-code-motion-explainer/references/ui-motion-shot-library.md +0 -62
- package/skills/remotion-motion-graphics/SKILL.md +0 -169
- package/skills/remotion-motion-graphics/references/patterns.md +0 -355
- package/skills/remotion-motion-graphics/references/polish.md +0 -102
- package/skills/remotion-motion-graphics/references/scaffold.md +0 -144
- package/skills/remotion-motion-graphics/references/traps.md +0 -152
- package/skills/remotion-resemble-ai/SKILL.md +0 -879
- package/skills/remotion-resemble-ai/rules/resemble-captions.md +0 -350
- package/skills/remotion-resemble-ai/rules/resemble-remotion-integration.md +0 -305
- package/skills/remotion-resemble-ai/rules/resemble-setup.md +0 -284
- package/skills/remotion-resemble-ai/rules/resemble-streaming-tts.md +0 -225
- package/skills/remotion-resemble-ai/rules/resemble-sync-tts.md +0 -239
- package/skills/remotion-resemble-ai/rules/resemble-voices.md +0 -213
- package/skills/remotion-resemble-ai/rules/visual-animations.md +0 -567
- package/skills/riffkit/SKILL.md +0 -196
- package/skills/riffkit/examples/any-look-styles.md +0 -11
- package/skills/riffkit/examples/faceless-and-auto.md +0 -16
- package/skills/riffkit/examples/localize-spanish.md +0 -18
- package/skills/riffkit/examples/tiktok-shop-product.md +0 -22
- package/skills/riffkit/references/anchor.md +0 -62
- package/skills/riffkit/references/api.md +0 -806
- package/skills/riffkit/references/details.md +0 -153
- package/skills/riffkit/references/errors.md +0 -69
- package/skills/riffkit/references/intents.md +0 -29
- package/skills/saas-motion-video/SKILL.md +0 -71
- package/skills/script-to-video/SKILL.md +0 -2627
- package/skills/shorts/SKILL.md +0 -372
- package/skills/shorts/references/caption-styles.md +0 -105
- package/skills/shorts/references/platform-specs.md +0 -149
- package/skills/shorts/references/remotion-patterns.md +0 -180
- package/skills/shorts/references/scoring-rubric.md +0 -106
- package/skills/smart-video-editor/SKILL.md +0 -327
- package/skills/smart-video-editor/docs/FONTS.md +0 -57
- package/skills/story-telling/SKILL.md +0 -222
- package/skills/story-telling/rules/composition.md +0 -130
- package/skills/story-telling/rules/images.md +0 -119
- package/skills/story-telling/rules/models.md +0 -98
- package/skills/story-telling/rules/narration.md +0 -87
- package/skills/story-telling/rules/pitfalls.md +0 -140
- package/skills/story-telling/rules/story-formats.md +0 -108
- package/skills/story-telling/rules/story-json.md +0 -143
- package/skills/story-telling/rules/voices.md +0 -114
- package/skills/story-telling/rules/workflow.md +0 -105
- package/skills/story-to-handdrawn-video/SKILL.md +0 -216
- package/skills/story-to-handdrawn-video/references/asset-workflow.md +0 -24
- package/skills/story-to-handdrawn-video/references/reference-style-workflow.md +0 -27
- package/skills/su-card-to-video/SKILL.md +0 -103
- package/skills/talking-head-video-pipeline/SKILL.md +0 -224
- package/skills/talking-head-video-pipeline/examples/prompts.md +0 -217
- package/skills/talking-head-video-pipeline/references/asr-adapters.md +0 -51
- package/skills/talking-head-video-pipeline/references/caption-workflow.md +0 -53
- package/skills/talking-head-video-pipeline/references/export-recipes.md +0 -78
- package/skills/talking-head-video-pipeline/references/layout-safety.md +0 -49
- package/skills/talking-head-video-pipeline/references/video-use-integration.md +0 -71
- package/skills/talking-head-video-pipeline/references/workflows/captions.md +0 -52
- package/skills/talking-head-video-pipeline/references/workflows/design.md +0 -77
- package/skills/talking-head-video-pipeline/references/workflows/doctor.md +0 -51
- package/skills/talking-head-video-pipeline/references/workflows/export.md +0 -50
- package/skills/talking-head-video-pipeline/references/workflows/init.md +0 -51
- package/skills/talking-head-video-pipeline/references/workflows/learn.md +0 -36
- package/skills/text-to-lottie/SKILL.md +0 -202
- package/skills/text-to-lottie/references/chapterization-transition-grammar.md +0 -132
- package/skills/text-to-lottie/references/design-taste.md +0 -292
- package/skills/text-to-lottie/references/lottie-spec-map.md +0 -82
- package/skills/text-to-lottie/references/motion-taste.md +0 -260
- package/skills/text-to-lottie/references/player-contract.md +0 -325
- package/skills/text-to-lottie/references/recipe-camera-scene-motion.md +0 -65
- package/skills/text-to-lottie/references/recipe-data-stats.md +0 -104
- package/skills/text-to-lottie/references/recipe-diagram-technical.md +0 -106
- package/skills/text-to-lottie/references/recipe-loaders-icons.md +0 -70
- package/skills/text-to-lottie/references/recipe-logo.md +0 -72
- package/skills/text-to-lottie/references/recipe-lower-thirds.md +0 -62
- package/skills/text-to-lottie/references/recipe-product-promo.md +0 -99
- package/skills/ultrademo/SKILL.md +0 -212
- package/skills/video-assemble/SKILL.md +0 -101
- package/skills/video-assemble-zenstory-ai/SKILL.md +0 -153
- package/skills/video-assemble-zenstory-ai/references/audio-modes.md +0 -63
- package/skills/video-assemble-zenstory-ai/references/explicit-audio-mix.md +0 -77
- package/skills/video-assemble-zenstory-ai/references/jianying/SOURCE.md +0 -14
- package/skills/video-assemble-zenstory-ai/references/narration-adoption.md +0 -103
- package/skills/video-assemble-zenstory-ai/references/packaging.md +0 -44
- package/skills/video-assemble-zenstory-ai/references/source-score.md +0 -146
- package/skills/video-assemble-zenstory-ai/references/subtitle-track.md +0 -202
- package/skills/video-editing/SKILL.md +0 -688
- package/skills/video-explainer/SKILL.md +0 -163
- package/skills/video-explainer/references/brief-to-script.md +0 -56
- package/skills/video-explainer/references/errors-and-privacy.md +0 -18
- package/skills/video-explainer/references/motion-storyboard.md +0 -82
- package/skills/video-explainer/references/render-and-verify.md +0 -62
- package/skills/video-explainer/references/review-gate.md +0 -82
- package/skills/video-explainer/references/setup-and-doctor.md +0 -33
- package/skills/video-script-builder/SKILL.md +0 -329
- package/skills/video-script-builder/examples/quick-start-transcript.md +0 -19
- package/skills/video-script-builder/references/audio-workflow.md +0 -84
- package/skills/video-script-builder/references/caption-components.md +0 -70
- package/skills/video-script-builder/references/common-pitfalls.md +0 -80
- package/skills/video-script-builder/references/component-catalog.md +0 -197
- package/skills/video-script-builder/references/component-recipes.md +0 -165
- package/skills/video-script-builder/references/gsap-patterns.md +0 -112
- package/skills/video-script-builder/references/pacing-rules.md +0 -78
- package/skills/video-script-builder/references/quality-checklist.md +0 -98
- package/skills/video-script-builder/references/remotion-patterns.md +0 -211
- package/skills/video-script-builder/references/shader-transitions.md +0 -115
- package/skills/video-script-builder/references/taste-principles.md +0 -160
- package/skills/video-scrub/SKILL.md +0 -216
- package/skills/video-scrub/references/profiles.md +0 -89
- package/skills/video-scrub/references/residue-map.md +0 -204
- package/skills/video-short-maker/SKILL.md +0 -182
- package/skills/video-shot-analysis-feishu/SKILL.md +0 -173
- package/skills/video-shotcraft/SKILL.md +0 -267
- package/skills/video-shotcraft/docs/deepseek-harness.md +0 -69
- package/skills/video-shotcraft/references/aesthetic-rules.md +0 -177
- package/skills/video-shotcraft/references/final-review.md +0 -112
- package/skills/video-shotcraft/references/guided-free-creation.md +0 -199
- package/skills/video-shotcraft/references/jianying-export.md +0 -182
- package/skills/video-shotcraft/references/music-beat-sync.md +0 -219
- package/skills/video-shotcraft/references/pipeline.md +0 -390
- package/skills/video-shotcraft/references/sequences/promo-energy-arc.md +0 -50
- package/skills/video-shotcraft/references/shots/ATTRIBUTION.md +0 -65
- package/skills/video-shotcraft/references/shots/camera/basic-3d-scene.md +0 -37
- package/skills/video-shotcraft/references/shots/camera/crash-zoom-punch.md +0 -39
- package/skills/video-shotcraft/references/shots/camera/cursor-flyover.md +0 -38
- package/skills/video-shotcraft-vincentwei10/SKILL.md +0 -316
- package/skills/video-shotcraft-vincentwei10/references/aesthetic-rules.md +0 -187
- package/skills/video-shotcraft-vincentwei10/references/final-review.md +0 -116
- package/skills/video-shotcraft-vincentwei10/references/guided-free-creation.md +0 -199
- package/skills/video-shotcraft-vincentwei10/references/jianying-export.md +0 -183
- package/skills/video-shotcraft-vincentwei10/references/music-beat-sync.md +0 -257
- package/skills/video-shotcraft-vincentwei10/references/pipeline.md +0 -401
- package/skills/video-shotcraft-vincentwei10/references/publish-upload-post.md +0 -111
- package/skills/video-shotcraft-vincentwei10/references/sequences/promo-energy-arc.md +0 -50
- package/skills/video-shotcraft-vincentwei10/references/shots/ATTRIBUTION.md +0 -62
- package/skills/video-shotcraft-vincentwei10/references/shots/camera/basic-3d-scene.md +0 -41
- package/skills/video-shotcraft-vincentwei10/references/shots/camera/crash-zoom-punch.md +0 -52
- package/skills/video-shotcraft-vincentwei10/references/shots/camera/cursor-flyover.md +0 -39
- package/skills/video-structure-analyzer/SKILL.md +0 -148
- package/skills/video-structure-analyzer/examples/xhs-rook-time-spend/xhs-rook-time-spend_/346/213/211/347/211/207/346/213/206/350/247/243.md +0 -50
- package/skills/video-structure-analyzer/examples/xhs-smelly-cat/xhs-smelly-cat_/346/213/211/347/211/207/346/213/206/350/247/243.md +0 -19
- package/skills/video-toolkit/SKILL.md +0 -686
- package/skills/videocut/SKILL.md +0 -159
- package/skills/videodb/SKILL.md +0 -497
- package/skills/videodb/reference/api-reference.md +0 -741
- package/skills/videodb/reference/capture-reference.md +0 -399
- package/skills/videodb/reference/capture.md +0 -110
- package/skills/videodb/reference/editor-reference.md +0 -506
- package/skills/videodb/reference/editor.md +0 -389
- package/skills/videodb/reference/generative.md +0 -344
- package/skills/videodb/reference/indexing-reference.md +0 -481
- package/skills/videodb/reference/indexing.md +0 -537
- package/skills/videodb/reference/legacy/index-reference.md +0 -223
- package/skills/videodb/reference/legacy/index.md +0 -241
- package/skills/videodb/reference/legacy/search.md +0 -249
- package/skills/videodb/reference/migration.md +0 -113
- package/skills/vlog-auto-edit/SKILL.md +0 -982
- package/skills/vlog-auto-edit/examples/project_structure.md +0 -84
- package/skills/vox-animated-ad-mcp/SKILL.md +0 -419
- package/skills/vox-director/SKILL.md +0 -351
- package/skills/vox-director/references/beat-layer.md +0 -143
- package/skills/vox-director/references/host-mode.md +0 -120
- package/skills/vox-director/references/local-engine.md +0 -73
- package/skills/vox-director/references/models-and-gotchas.md +0 -91
- package/skills/vox-director/references/prompt-guide.md +0 -275
- package/skills/vox-director/references/voices.md +0 -59
- package/skills/xingchen-vox-collage/SKILL.md +0 -251
- package/skills/xingchen-vox-collage/references/asset-layer-contract.md +0 -98
- package/skills/xingchen-vox-collage/references/creative-exploration.md +0 -19
- package/skills/xingchen-vox-collage/references/learned-branches.md +0 -34
- package/skills/xingchen-vox-collage/references/remotion-scene-contract.md +0 -77
- package/skills/xingchen-vox-collage/references/visual-language.md +0 -74
- package/skills/xingchen-vox-collage/references/visual-qa.md +0 -59
- package/skills/youtube/SKILL.md +0 -147
- package/skills/youtube/references/algorithm-guide.md +0 -59
- package/skills/youtube/references/analytics-benchmarks.md +0 -67
- package/skills/youtube/references/dataforseo-integration.md +0 -51
- package/skills/youtube/references/monetization-guide.md +0 -62
- package/skills/youtube/references/repurposing-guide.md +0 -54
- package/skills/youtube/references/retention-scripting-guide.md +0 -75
- package/skills/youtube/references/seo-playbook.md +0 -77
- package/skills/youtube/references/shorts-playbook.md +0 -64
- package/skills/youtube/references/thumbnail-ctr-guide.md +0 -73
- package/skills/youtube-shorts-factory/SKILL.md +0 -358
- package/skills/youtube-shorts-factory/resources/adaptation-guide.md +0 -133
- package/skills/youtube-shorts-factory/resources/storyboard-template.md +0 -271
- package/skills/youtube-shorts-factory/resources/workflow-steps.md +0 -139
- package/studio/ui/dist/assets/ExportCenter-DEyy1vs_.js +0 -1
- package/studio/ui/dist/assets/SettingsModal-CQmsA2A2.js +0 -2
- package/studio/ui/dist/assets/es-AqUfIkAy.js +0 -1
- package/studio/ui/dist/assets/index-C7moXjTY.css +0 -1
- package/studio/ui/dist/assets/index-DdU5QNpY.js +0 -1623
- package/studio/ui/dist/assets/ja-YwiCB4QQ.js +0 -1
- package/studio/ui/dist/assets/ko-CKtBPDze.js +0 -1
- package/studio/ui/dist/assets/zh-CN-DtNEwKWJ.js +0 -1
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# Craft: type, motion, and the recurring element
|
|
2
|
-
|
|
3
|
-
## Optical centering
|
|
4
|
-
|
|
5
|
-
Centering the layout box leaves text sitting low, because the box carries ascender and descender space that nobody perceives. Centre the **ink**: cap top of the first line to baseline of the last.
|
|
6
|
-
|
|
7
|
-
`MG.opticalCenter()` does this with real font metrics from canvas `measureText`:
|
|
8
|
-
|
|
9
|
-
```js
|
|
10
|
-
const m = mctx.measureText('H');
|
|
11
|
-
baseline = (lineHeight - (m.fontBoundingBoxAscent + m.fontBoundingBoxDescent)) / 2 + m.fontBoundingBoxAscent;
|
|
12
|
-
cap = m.actualBoundingBoxAscent;
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
Measured on a real piece before the fix, scenes sat 28–41px below centre in a 1080 frame. Nobody could name it; everybody felt it.
|
|
16
|
-
|
|
17
|
-
**Whether a rule or underline counts** depends on its role:
|
|
18
|
-
|
|
19
|
-
- Fixed part of the lockup (under a logo, under a URL) → include it. Otherwise the composition is bottom-heavy by half the rule's overhang.
|
|
20
|
-
- A highlight that moves from line to line → exclude it. Include it and the framing shifts depending on where the highlight happens to be parked.
|
|
21
|
-
|
|
22
|
-
## Type that fills its measure
|
|
23
|
-
|
|
24
|
-
Short lines in a big frame look like a mistake. Two checks worth doing numerically:
|
|
25
|
-
|
|
26
|
-
**Does the text fill the measure?** Sum the token widths, not the `.line` box — a block element reports the container width, and if a camera scale is active you will read that scaled. At one point three lines of 84px type left 413px of empty frame; at 112px the first line filled 756 of 880 and the scene stopped looking broken.
|
|
27
|
-
|
|
28
|
-
**Is the hierarchy right?** If a small supporting line ends up the *widest* element on screen, the hierarchy is inverted and it reads as unbalanced no matter what else you do. Shorten it or enlarge the headline until the primary line is clearly the widest.
|
|
29
|
-
|
|
30
|
-
## Leading, spacing, and where a rule fits
|
|
31
|
-
|
|
32
|
-
**Uniform leading, sized so a highlight fits in any gap.** Giving extra margin only to the underlined line makes that line breathe differently from the rest — someone will say "the underlined text takes up more space" without knowing why. The gap should be identical whether the rule is there or not: the rule lives in the gap, it does not create it.
|
|
33
|
-
|
|
34
|
-
**Word gaps are margin, not text nodes.** An inline-block containing only a space collapses to zero and the words come out glued together. Use `margin-right` on the token, zero it before punctuation, and zero it on the last token of a line — otherwise a trailing margin shifts centred lines off-centre.
|
|
35
|
-
|
|
36
|
-
Strip that last margin in JS rather than with `:last-child`, because with grouped targets (`*{two words}`) the last token of the *group* is also `:last-child` of its wrapper and would eat the space before the next word.
|
|
37
|
-
|
|
38
|
-
## Choosing a motion language
|
|
39
|
-
|
|
40
|
-
Pick one way things arrive and one way they leave, and hold to it across the whole piece. Mixing them is the most common reason work looks amateur, and it is invisible while you build scene by scene.
|
|
41
|
-
|
|
42
|
-
The choice is about tone. Six that cover most briefs, all in `MG.ENTER` / `MG.EXIT`:
|
|
43
|
-
|
|
44
|
-
**`speed`** — arrives fast with a directional smear and brakes hard. Urgency, sport, news, anything about being quick. Loud; wears out on long pieces.
|
|
45
|
-
|
|
46
|
-
**`pop`** — grows from nothing and overshoots. Playful, consumer, product. Reads friendly, reads cheap if overdone.
|
|
47
|
-
|
|
48
|
-
**`wipe`** — a hard edge uncovers it and nothing moves. Editorial, architectural, confident. The most restrained option that still has energy, and the best default when the type itself is the point.
|
|
49
|
-
|
|
50
|
-
**`drift`** — barely moves; the fade does the work. Premium, calm, serious. Needs slower timings all round or it looks like nothing happened.
|
|
51
|
-
|
|
52
|
-
**`rise`** — comes up out of its own baseline behind a mask. Cinematic titles. Requires `overflow: hidden` on a wrapper per line.
|
|
53
|
-
|
|
54
|
-
**`focus`** — resolves from blurred. Photographic, dreamy. Expensive to render; check the frame rate before committing.
|
|
55
|
-
|
|
56
|
-
Two levers change the feel more than the language does:
|
|
57
|
-
|
|
58
|
-
**Stagger unit.** Per-letter is energetic and becomes exhausting past a few words. Per-word is the middle. Per-line is calm and is usually right for sentences. The same `pop` staggered per-letter and per-line are two different pieces.
|
|
59
|
-
|
|
60
|
-
**Duration ratio.** An entrance that is 60% of the hold reads as busy; 25% reads as composed.
|
|
61
|
-
|
|
62
|
-
### Directional smear
|
|
63
|
-
|
|
64
|
-
If the language is `speed`, the blur has to be directional — `filter: blur()` is isotropic and wrong for linear motion. Offset copies in a shadow list give the direction, and shadow lists interpolate between keyframes so it animates for free.
|
|
65
|
-
|
|
66
|
-
`MG.trail(size, k, {dx, dy, colour})` takes a direction and a colour. Both matter: the trail belongs *behind* the motion, so it flips when the object does, and a hardcoded dark trail is invisible on a dark background.
|
|
67
|
-
|
|
68
|
-
There is a better and costlier option: render several subframes per output frame and average them in ffmpeg with `tmix`. That is true motion blur in every direction at once, at N× the capture time. Worth it for a hero piece.
|
|
69
|
-
|
|
70
|
-
### What holds regardless of language
|
|
71
|
-
|
|
72
|
-
**Arrivals decelerate, departures accelerate.** Matching curves makes everything rubbery.
|
|
73
|
-
|
|
74
|
-
```js
|
|
75
|
-
brake = cubic-bezier(.12,.85,.25,1) // arrivals
|
|
76
|
-
launch = cubic-bezier(.55,0,.9,.35) // departures
|
|
77
|
-
breath = cubic-bezier(.45,0,.55,1) // anything continuous
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Chained ease-outs read as stop-start.** Every segment decelerates to zero and the next starts fast. For anything continuous, ease-in-out.
|
|
81
|
-
|
|
82
|
-
**For large type, scale the exit down.** Exit distance is proportional to font size, so at 112px the default sweep crosses half the screen and collides with the next scene. A factor around 0.55 keeps the language at a fraction of the distance.
|
|
83
|
-
|
|
84
|
-
**Nothing should ever be perfectly still.** A frame that holds motionless for two seconds reads as *stuck*. This is easy to misdiagnose: on a real piece the complaint was "it feels janky", and the measurement showed **zero dropped frames** at a median of 8.3ms. It was not performance. It was that scenes had no camera, so between entrance and exit the image was frozen.
|
|
85
|
-
|
|
86
|
-
Every scene gets a slow push: settle over ~1.5s, then keep drifting to about 1.007 by the time it leaves. At 1.014 people report things "levitating".
|
|
87
|
-
|
|
88
|
-
**Overlap, but not too much.** Scenes overlap — the outgoing text is still leaving as the next arrives — and that is what makes it flow. But when the two are at very different type sizes, a big smear draws over the small type underneath and reads as a mistake. The right gap is not a constant: it depends on the exit duration plus the stagger. Widen it until the frame actually clears, and check by rendering the transition rather than by arithmetic.
|
|
89
|
-
|
|
90
|
-
### On dark backgrounds
|
|
91
|
-
|
|
92
|
-
Three things break quietly:
|
|
93
|
-
|
|
94
|
-
- A trail with a hardcoded dark colour simply does not exist. Pass `{colour:'255,255,255'}`.
|
|
95
|
-
- Large flat dark areas band. A static grain layer at around 5% opacity fixes it.
|
|
96
|
-
- Two stacked vignette gradients draw the edge of the ellipse, very visible in 9:16. Use one.
|
|
97
|
-
|
|
98
|
-
## A recurring element as the spine
|
|
99
|
-
|
|
100
|
-
One element that persists across every scene is the cheapest way to make a sequence feel composed rather than assembled. The form is open — a rule under the key word, a dot, a cursor, a shape that reframes each card, a mask edge that wipes between them. What follows uses a travelling rule as the worked example because the geometry is easy to talk about, but the principles transfer.
|
|
101
|
-
|
|
102
|
-
Treat it as a character, not a graphic. Some things that make that work:
|
|
103
|
-
|
|
104
|
-
**Constant thickness.** Draw it 100px wide and resolve the real width with `scaleX`, so the thickness never changes wherever it goes.
|
|
105
|
-
|
|
106
|
-
**Rotate on its axis.** `transform-origin: center`, not `left`. A rectangle tilted two degrees reads as a head turning; it is the cheapest expressive lever available and the single thing that turns a bar into a character.
|
|
107
|
-
|
|
108
|
-
**Ask for tilt in pixels, not degrees.** A 300px bar and a 78px bar must lean the *same amount visually*; with a fixed angle the short one is imperceptible.
|
|
109
|
-
|
|
110
|
-
```js
|
|
111
|
-
const tilt = px => Math.min(8, Math.atan2(px, width / 2) * 180 / Math.PI);
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**Stretch by edges, not from the centre**, when the targets share an edge. Left-aligned lines all start at the same x and differ only in where they end. Stretching from the centre pushes both ends, so reaching a long item also grows leftward — off the frame. Interpolate the left and right edges independently and let the travelling edge carry the stretch.
|
|
115
|
-
|
|
116
|
-
**Weight on landing.** Overshoot, stretch on the way, rebound twice, settle. Squash and stretch, but on the X axis only — thickening the bar is cartoon vocabulary and clashes with a speed-based language.
|
|
117
|
-
|
|
118
|
-
**An idle vocabulary** for when it waits: breathe, twitch, look (tilt and hold), nod, yawn, shiver. Draw them from a shuffled deck rather than sampling independently, so no two waits look the same and none is only breathing. End long waits with a slow settle — contract slightly, tilt, sink — so the next move reads as waking up.
|
|
119
|
-
|
|
120
|
-
**Seed the randomness.** With `Math.random()` the preview and the export are different films, and so is every re-render.
|
|
121
|
-
|
|
122
|
-
**Stop when the scene stops.** Once the piece has landed its final beat, it should be still. Idle gestures during the closing frame read as noise exactly when attention should be on the payoff. "Still" here still includes the camera's global drift — that is fine, it moves everything together.
|
|
123
|
-
|
|
124
|
-
## Two things that look right and are not
|
|
125
|
-
|
|
126
|
-
**An element that crosses text reads as a rendering bug**, even when the copy explicitly calls for a strikethrough — and even when the strike is typographically well placed at a third of cap height above the baseline. It also contradicts the rule that keeps it behind the type. If a line needs negating, let the gesture do it — park under the word and shake.
|
|
127
|
-
|
|
128
|
-
**An element that flies past a line without stopping reads as a blink.** Either stop on it — three deliberate stops down a three-line block reads as following the reading — or make the transit short and let the letters cut through it. What does not work is a fast pass at full size across a line it never lands on.
|
|
129
|
-
|
|
130
|
-
## When the words are the problem
|
|
131
|
-
|
|
132
|
-
If you are writing copy too and two rounds of alternatives all feel wrong, stop generating options. The words are usually fine; the *slot* has no defined job. Ask what that beat is for — name the problem, answer the objection, show proof, make the promise — and the line tends to write itself.
|
|
133
|
-
|
|
134
|
-
A defensive beat (security, guarantees, risk) dropped into the middle of a persuasive sequence will feel wrong no matter how well phrased, because it interrupts the momentum. That is a structural problem, not a wording one.
|
|
135
|
-
|
|
136
|
-
And when someone says a section is "too slow", scale its whole sequence by a factor rather than trimming one hold. The internal rhythm is usually right; there is just too much of it.
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# The timeline engine
|
|
2
|
-
|
|
3
|
-
## Why paused WAAPI and not something else
|
|
4
|
-
|
|
5
|
-
| Approach | Why not |
|
|
6
|
-
| --- | --- |
|
|
7
|
-
| CSS animations | Run on wall-clock time. You cannot ask for frame 847. |
|
|
8
|
-
| GSAP / anime.js | Seekable, but a dependency, and you still hand-roll the export. |
|
|
9
|
-
| After Effects / Rive | Not code. Not diffable, not scriptable, not re-renderable from a prompt. |
|
|
10
|
-
| Screen recording | Non-deterministic. Drops frames, varies by machine, cannot re-render at another size. |
|
|
11
|
-
|
|
12
|
-
Paused WAAPI gives seekability with zero dependencies, and — the part people underrate — it makes the animation *queryable*. You can put the piece at t=7.2 and read a `getBoundingClientRect()`. Every verification technique in `verify.md` depends on that.
|
|
13
|
-
|
|
14
|
-
## Absolute time
|
|
15
|
-
|
|
16
|
-
`tl()` takes keyframes in absolute seconds and converts them to `delay` + `duration` + fractional offsets. That means `seek(t)` is `currentTime = t` for every animation, with no bookkeeping.
|
|
17
|
-
|
|
18
|
-
Because `fill: 'both'` is set, an element holds its first keyframe before its delay and its last one after. So a single animation genuinely describes the element's whole life.
|
|
19
|
-
|
|
20
|
-
## The four failure modes, in depth
|
|
21
|
-
|
|
22
|
-
### 1. Two animations, one property
|
|
23
|
-
|
|
24
|
-
```js
|
|
25
|
-
beat(el, tIn, null); // entrance, fill:both
|
|
26
|
-
tl(el, [exit keyframes]); // exit, fill:both ← collides
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Both fill backwards. The later-created animation has higher composite order, so *its* first keyframe applies from time zero. If that keyframe says `opacity: 1`, the element is on screen for the entire piece.
|
|
30
|
-
|
|
31
|
-
The symptom is confusing because it presents as a *content* bug — the closing logo visible behind scene two — rather than an animation bug. If you see something from a later scene bleeding into an earlier one, count the animations on that element before anything else.
|
|
32
|
-
|
|
33
|
-
Same rule applies to a travelling element: one element, one animation, all its moves in one list. That is what `Track` is for.
|
|
34
|
-
|
|
35
|
-
Different properties on the same element are fine — a `z-index` animation alongside a `transform` animation does not collide.
|
|
36
|
-
|
|
37
|
-
### 2. seek() without pause
|
|
38
|
-
|
|
39
|
-
```js
|
|
40
|
-
function seek(s){ A.forEach(a => a.currentTime = s * 1000); } // wrong
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
If a preview loop is running, the animations are *playing*. You set the time, control returns to the browser, several milliseconds elapse, and the screenshot captures a slightly later moment. In a preview that is invisible. In an export it silently offsets every single frame, and the video looks fine — which is what makes it dangerous.
|
|
44
|
-
|
|
45
|
-
Pause first, and cancel the preview loop the first time an external seek arrives, or it will fire mid-export and start playback again.
|
|
46
|
-
|
|
47
|
-
### 3. Non-monotonic keyframes
|
|
48
|
-
|
|
49
|
-
Chaining moves by hand ("this one at t+0.3, then that one at t+0.5") eventually schedules something before the previous move finished. WAAPI throws `Offsets must be monotonically non-decreasing` for the *whole animation*, naming nothing.
|
|
50
|
-
|
|
51
|
-
`Track.push` clamps with `Math.max(t, last)`. Times in your script become intentions: too early degrades to "immediately after".
|
|
52
|
-
|
|
53
|
-
This bites twice. The second time is when you assemble a track out of several sequences — a shared camera built from per-scene windows, say. If one scene runs longer than planned its window overlaps the next, and the assembled list is out of order. Clamp there too:
|
|
54
|
-
|
|
55
|
-
```js
|
|
56
|
-
bk.push({ t: Math.max(prev, Math.min(prev + .45, next.t0 - .01)), ... });
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 4. Measuring after animating
|
|
60
|
-
|
|
61
|
-
`fill: 'both'` applies immediately, so once the animations exist every rect includes a transform. Anything you measure then is wrong.
|
|
62
|
-
|
|
63
|
-
Fixed order: **build DOM → optically centre → measure targets → create animations.** If a later stage needs a measurement, take it in the measuring stage and keep it.
|
|
64
|
-
|
|
65
|
-
## Porting CSS keyframes faithfully
|
|
66
|
-
|
|
67
|
-
If you are reproducing an existing CSS animation, port it *literally*, including the parts that look like oversights. Three details that changed the result when they were "cleaned up":
|
|
68
|
-
|
|
69
|
-
**A keyframe that omits a property is not the same as one that repeats it.** In
|
|
70
|
-
|
|
71
|
-
```css
|
|
72
|
-
0% { opacity:0; transform: translateX(-1.45em) scaleX(1.55); }
|
|
73
|
-
28% { opacity:1; } /* no transform */
|
|
74
|
-
68% { transform: translateX(.055em) scaleX(.955); }
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
the transform interpolates 0% → 68% in one stretch. Adding a transform at 28% changes the trajectory. `tl()` preserves omissions — just leave the property out of that step.
|
|
78
|
-
|
|
79
|
-
**`em` resolves against the element the animation is on, not the visual size of the thing.** A camera on a wrapper that never sets `font-size` gets the document's 16px, so `translateX(.10em)` is 1.6px — not 16.7px as it would be inside a 167px headline. Reproducing the "intended" value moved the scene 15px.
|
|
80
|
-
|
|
81
|
-
**Ancestors count.** If the original had the mark nested *inside* the element the camera scales, it is scaled too. Reproduce the containment or replicate the transform on its layer.
|
|
82
|
-
|
|
83
|
-
Every one of these was found by a pixel diff, not by looking.
|
|
84
|
-
|
|
85
|
-
## Camera and shared tracks
|
|
86
|
-
|
|
87
|
-
The camera goes on the full-canvas scene element, not on the text block. Two reasons:
|
|
88
|
-
|
|
89
|
-
- Its centre is the canvas centre, so any other full-canvas layer can reuse the *identical* transform string and stay locked to the type. Put it on the text block and a left-aligned scene scales about its own centre, which no other layer can match.
|
|
90
|
-
- Scenes are `inset: 0`, so this works at any canvas height.
|
|
91
|
-
|
|
92
|
-
Because the content inside a scene is optically shifted by `dy`, scaling about the canvas centre displaces it by `(1-s)·dy`. The `cameraKeyframes` helper cancels that with a `translateY` term, so the push happens about the content's own centre without moving the transform origin. With dy = 31px and a 3% scale that is ~0.9px — small, and exactly the kind of thing a pixel diff catches and an eye does not.
|
|
93
|
-
|
|
94
|
-
## Layering
|
|
95
|
-
|
|
96
|
-
The recurring mark belongs **behind** the text (`z-index` below the scenes). When it moves between lines it has to cross the line in between; in front that reads as a strikethrough — a rendering bug — while behind, the letters cut through it and it reads as passing underneath.
|
|
97
|
-
|
|
98
|
-
If some moment genuinely needs it in front (covering something up), animate `z-index` — it interpolates discretely, which is what you want:
|
|
99
|
-
|
|
100
|
-
```js
|
|
101
|
-
tl(overlay, [
|
|
102
|
-
{ t: 0, zIndex: '0', ease: 'linear' },
|
|
103
|
-
{ t: cover - .01, zIndex: '0', ease: 'linear' },
|
|
104
|
-
{ t: cover, zIndex: '2' }
|
|
105
|
-
]);
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Keep it below any full-canvas overlay such as a vignette, or it will render on top of the grade.
|
|
109
|
-
|
|
110
|
-
## Deriving times instead of hard-coding them
|
|
111
|
-
|
|
112
|
-
Scenes whose length depends on a sequence of moves should publish their end time rather than have it guessed:
|
|
113
|
-
|
|
114
|
-
```js
|
|
115
|
-
let t = arrive(start, targets[0]);
|
|
116
|
-
targets.slice(1).forEach(g => { t = hop(t + .16, g); });
|
|
117
|
-
const sceneOut = t + .3; // the scene is as long as the moves need
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Hard-coded times made a five-item list end after three items, because the moves grew and the scene did not. Derive downstream times from `sceneOut`.
|
|
121
|
-
|
|
122
|
-
The counterweight: scenes that are structurally alike should *be* alike. A scene twice as long as its neighbours reads as a mistake even when its content earns the time. Same shape, same duration, same gap — then the piece feels composed rather than assembled.
|
|
123
|
-
|
|
124
|
-
Expose the derived times for the verification scripts:
|
|
125
|
-
|
|
126
|
-
```js
|
|
127
|
-
window.__times = { ...T, sceneOut, end };
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
Verification scripts that hard-code timestamps go stale the first time you retime anything, and then report failures that are not there.
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# Export
|
|
2
|
-
|
|
3
|
-
`scripts/export.js` renders every aspect ratio and works unchanged for any piece exposing `window.__seek` and `window.__duration`.
|
|
4
|
-
|
|
5
|
-
```sh
|
|
6
|
-
npm i playwright && npx playwright install chromium
|
|
7
|
-
node export.js # 1:1, 4:5 and 9:16
|
|
8
|
-
node export.js 9x16 # one
|
|
9
|
-
FPS=30 CRF=20 node export.js
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
## Aspect ratios: change the canvas, never pad
|
|
13
|
-
|
|
14
|
-
Keep the width fixed (1080) and vary only the canvas **height**, read from a query parameter:
|
|
15
|
-
|
|
16
|
-
```js
|
|
17
|
-
const ALTO = Math.round(+new URLSearchParams(location.search).get('h') || 1080);
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
Padding a square with flat colour is the obvious shortcut and it is wrong whenever anything reaches the frame edge. A vignette arriving at the border at ~4.5% black meets flat background and leaves a visible seam. A taller canvas puts the gradient across the whole frame and the composition simply gets more room.
|
|
21
|
-
|
|
22
|
-
Everything that referenced the canvas centre has to follow — optical centering uses `ALTO/2`, and the fit calculation becomes `min(innerWidth/1080, innerHeight/ALTO)`. Then verify the centring is identical across formats; it should come out the same to within a few pixels.
|
|
23
|
-
|
|
24
|
-
| | Size | Where |
|
|
25
|
-
| --- | --- | --- |
|
|
26
|
-
| 1:1 | 1080×1080 | LinkedIn, Instagram feed, Facebook, X |
|
|
27
|
-
| 4:5 | 1080×1350 | Instagram and LinkedIn feed — more height on mobile |
|
|
28
|
-
| 9:16 | 1080×1920 | Reels, Stories, TikTok, Shorts |
|
|
29
|
-
|
|
30
|
-
A square composition centred in 9:16 leaves large empty margins. That is normal and correct — platform UI occupies those areas — and scaling the content up is not an option without a redesign, since it already fills the width.
|
|
31
|
-
|
|
32
|
-
## Encoder flags that decide whether the file works
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
-c:v libx264 -pix_fmt yuv420p -crf 17 -preset slow
|
|
36
|
-
-f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -shortest -c:a aac -b:a 96k
|
|
37
|
-
-movflags +faststart
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
- **`yuv420p`** — x264 defaults to a chroma format that platforms and QuickTime will not decode. This is the single most common reason an exported file "does not work".
|
|
41
|
-
- **`+faststart`** — moves the index to the front. Without it, playback waits for the whole file to download; in a feed that decides whether anyone sees it.
|
|
42
|
-
- **Silent audio track** — some platforms reject video-only uploads outright. `anullsrc` plus `-shortest` costs nothing.
|
|
43
|
-
- **CRF 17** — visually lossless for flat graphics. A 24-second 1080×1080 piece lands around 3 MB.
|
|
44
|
-
|
|
45
|
-
60fps is worth it for fast motion with trails. 30fps roughly halves the file if that matters more.
|
|
46
|
-
|
|
47
|
-
## The Playwright trap
|
|
48
|
-
|
|
49
|
-
```js
|
|
50
|
-
await page.screenshot({ animations: 'disabled' }); // never
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
That option does not freeze anything. It **fast-forwards every animation to its end state**, so all N frames come out identical. The timeline is already paused; passing it is the bug.
|
|
54
|
-
|
|
55
|
-
## Checking the output
|
|
56
|
-
|
|
57
|
-
```sh
|
|
58
|
-
ffprobe -v error -select_streams v:0 \
|
|
59
|
-
-show_entries stream=width,height,r_frame_rate,pix_fmt \
|
|
60
|
-
-show_entries format=duration -of csv=p=0:nk=1 out.mp4
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Confirm the dimensions, `yuv420p`, the frame rate, the duration against `window.__duration`, and that an audio stream exists. Cheap, and it catches a bad render before an upload does.
|
|
64
|
-
|
|
65
|
-
## Timing
|
|
66
|
-
|
|
67
|
-
Roughly 1400 frames per format for a 24-second piece at 60fps, about 60–90 seconds of capture each plus encoding. Run it in the background and do something else. If you change the animation mid-export, kill it and restart — half the frames will be from the old version and the seam is not obvious.
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
# Physics: when to integrate instead of ease
|
|
2
|
-
|
|
3
|
-
## The rule
|
|
4
|
-
|
|
5
|
-
An easing curve is a *shape*, not a simulation. `ease-out` decelerates; a falling object accelerates. For anything thrown, dropped, bounced or toppled, integrate the motion at a fixed `dt` and emit the sampled points as keyframes with `linear` easing between them. The sampling carries the curve.
|
|
6
|
-
|
|
7
|
-
The same applies to departures. Something pulling away — a vehicle, a launch — starts slow and builds, which is `x = ½at²`; `ease-out` does the exact opposite and `ease-in` only approximates it. Integrate with a constant acceleration and a speed cap, and scale the motion trail by `v/vmax` so the smear grows with the speed — the trail sits *behind* the motion, so flip its offsets with the direction. Which direction is not free either: if the object came to rest in some orientation, it now has a facing, and driving the other way reads as reversing. Mirror the whole departure off a single `dir` so it stays consistent. Add the two beats that sell it: a weight-transfer squat before moving, and a couple of rocking oscillations that go nowhere before it grips.
|
|
8
|
-
|
|
9
|
-
```js
|
|
10
|
-
const dt = 1/240; // finer than the frame rate: bounces are brief
|
|
11
|
-
let x = x0, y = y0, vx = v0x, vy = v0y, t = 0;
|
|
12
|
-
const pts = [];
|
|
13
|
-
while (t < limit){
|
|
14
|
-
t += dt;
|
|
15
|
-
vy += g * dt; y += vy * dt; x += vx * dt;
|
|
16
|
-
pts.push({ t: t0 + t, x, y });
|
|
17
|
-
}
|
|
18
|
-
tl(el, pts.map(p => ({
|
|
19
|
-
t: p.t,
|
|
20
|
-
transform: `translate(${p.x.toFixed(2)}px, ${p.y.toFixed(2)}px)`,
|
|
21
|
-
ease: 'linear'
|
|
22
|
-
})));
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Around 120 keyframes for a second of motion is fine. Values that work as a starting point for a hand-sized object in a 1080 frame: `g ≈ 4400 px/s²`, launch `vy ≈ -1150 px/s`, restitution `≈ 0.46`.
|
|
26
|
-
|
|
27
|
-
## Boxes and discs are different solvers
|
|
28
|
-
|
|
29
|
-
`PHYS.drop()` models a **rectangle** — corner contact, and a topple that ends with a face lying flat. `PHYS.roll()` models anything **round** — the contact height is the radius at any angle, so there is no topple: it bounces, then rolls, then friction stops it.
|
|
30
|
-
|
|
31
|
-
Running a disc through the box solver produces something that rises and falls with every rotation, because the solver thinks the contact height changes as it spins. It looks wrong and the cause is not obvious from the animation.
|
|
32
|
-
|
|
33
|
-
For the disc, the impact also couples spin to the surface through a tangential impulse. That is what makes a coin read as a coin rather than as a bouncing ball with a texture on it.
|
|
34
|
-
|
|
35
|
-
## How many bounces
|
|
36
|
-
|
|
37
|
-
`stop` — the vertical speed below which bouncing ends — is a **directorial** control, not an implementation detail. It is the knob that decides "bounces twice" against "bounces five times", which is usually the thing the brief actually specifies. Default 90 px/s; raise it for fewer bounces.
|
|
38
|
-
|
|
39
|
-
## Contact with rotation
|
|
40
|
-
|
|
41
|
-
If the object spins, the axis-aligned bottom is not what touches the floor. For a box of half-extents `a` (x) and `b` (y) rotated by θ, the centre rests at
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
h(θ) = a·|sin θ| + b·|cos θ|
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
above the floor. Use that for the contact test and a corner touches first, which is what actually happens.
|
|
48
|
-
|
|
49
|
-
## Coming to rest — the part that goes wrong
|
|
50
|
-
|
|
51
|
-
A tumbling object that stops bouncing is usually left tilted, resting on a corner. From there it topples: it pivots about that corner under gravity until a face lies flat.
|
|
52
|
-
|
|
53
|
-
Do **not** tween the angle to upright. It is not a fall — a fall accelerates — and it looks exactly as artificial as it is. Keep integrating:
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
τ = -g · (horizontal lever arm of the contact corner)
|
|
57
|
-
α = τ / I, I = (4/3)(a² + b²) for a rectangle about its corner
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
While pivoting, the centre also **drops** (a corner rest is higher than a face rest) and **shifts horizontally** as it swings about the fixed corner. Those two are what make it read as real; a pure rotation reads as a tween no matter how well eased.
|
|
61
|
-
|
|
62
|
-
### Bug 1: the pivot jumps when the contact corner changes
|
|
63
|
-
|
|
64
|
-
Track the contact corner from the signs of sine and cosine:
|
|
65
|
-
|
|
66
|
-
```js
|
|
67
|
-
u = a · sign(sin θ) v = b · sign(cos θ)
|
|
68
|
-
cx = pivotX - (u·cos θ - v·sin θ)
|
|
69
|
-
cy = floor - (u·sin θ + v·cos θ)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
This description is continuous through the tipping point — where the same corner stays down and the object simply passes from one face's basin to the next — and only changes at multiples of 90°, when a face slaps flat and the pivot genuinely moves to the other corner. Re-anchor the pivot from the current centre at that instant and the position stays continuous.
|
|
73
|
-
|
|
74
|
-
Describing it instead with 90° "frames" that swap the half-extents makes the centre jump the width of the box at the tipping point. Measured: **44.67px between consecutive frames**, and it was not obvious in playback.
|
|
75
|
-
|
|
76
|
-
Related: deriving the pivot side from `Math.sign(θ)` alone flips it at θ = 0, jumping the centre by the full box width. Carry the side as state.
|
|
77
|
-
|
|
78
|
-
### Bug 2: it never comes to rest
|
|
79
|
-
|
|
80
|
-
A box has **four** stable orientations, not one. If the simulation only models "upright", an object that tips past its balance point rotates toward lying down and then oscillates forever, because there is no rest state there to catch it.
|
|
81
|
-
|
|
82
|
-
For a box taller than it is wide, lying down is the *lower* energy state — so a spinning letter will essentially always end up fallen, never standing. That is correct physics, and worth telling whoever asked, because they may expect it to land neatly upright.
|
|
83
|
-
|
|
84
|
-
The honest lever on the outcome is the **throw**, not the landing. Changing the initial spin changes where it comes to rest; clamping the final angle is just a tween wearing a costume. If a particular resting pose is required, either tune the launch until physics produces it, or say plainly that it will not.
|
|
85
|
-
|
|
86
|
-
## Physics and format interact
|
|
87
|
-
|
|
88
|
-
If any part of the geometry derives from the canvas height — a floor at `ALTO - 200`, a launch from the top of frame — then each aspect ratio simulates a different fall and each MP4 ends at a different time. Every file looks fine on its own, which is what makes it hard to catch.
|
|
89
|
-
|
|
90
|
-
Derive physics geometry from fixed canvas coordinates, or accept the divergence deliberately and check that `window.__duration` matches across formats.
|
|
91
|
-
|
|
92
|
-
## Verify a simulation numerically
|
|
93
|
-
|
|
94
|
-
Two checks catch nearly everything:
|
|
95
|
-
|
|
96
|
-
**Continuity.** Sample the element's position at the target frame rate and report the largest jump between consecutive frames. Real motion is smooth; a discontinuity means a bookkeeping bug. Compare the worst jump against the expected velocity: 108 px/s at 60fps should show 1.8px per frame, and a 9.67px jump was a sign flip.
|
|
97
|
-
|
|
98
|
-
**Rest.** Confirm it actually stops, and where. A hardcoded settle keyframe that used a fixed X while the simulation ended somewhere else made a letter slide sideways to reach an invented point — it read as teleporting.
|
|
99
|
-
|
|
100
|
-
Also check it rests *on* the surface: measure the object's bottom against the surface's top and expect them equal, not approximately equal.
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# Verify by measuring
|
|
2
|
-
|
|
3
|
-
The whole point of a seekable timeline is that you can interrogate any moment. Use it. Before claiming something is fixed, write six lines that check it and print a number.
|
|
4
|
-
|
|
5
|
-
All of these assume the page exposes `window.__seek(seconds)` and `window.__duration`, and — for anything time-relative — `window.__times`.
|
|
6
|
-
|
|
7
|
-
## The harness
|
|
8
|
-
|
|
9
|
-
```js
|
|
10
|
-
const { chromium } = require('playwright');
|
|
11
|
-
const b = await chromium.launch();
|
|
12
|
-
const p = await b.newPage({ viewport: { width: 1080, height: 1080 } });
|
|
13
|
-
const errs = []; p.on('pageerror', e => errs.push(String(e)));
|
|
14
|
-
await p.goto('file:///.../video.html');
|
|
15
|
-
await p.evaluate(() => document.fonts.ready);
|
|
16
|
-
// then: await p.evaluate(t => window.__seek(t), 7.2);
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Always collect `pageerror`. A thrown exception while building the timeline leaves a half-built animation that still renders something plausible.
|
|
20
|
-
|
|
21
|
-
## Frame times — is it actually janky?
|
|
22
|
-
|
|
23
|
-
```js
|
|
24
|
-
const dt = await p.evaluate(() => new Promise(res => {
|
|
25
|
-
const out = []; let prev = performance.now(), n = 0;
|
|
26
|
-
document.body.click(); // restart playback
|
|
27
|
-
const tick = now => { out.push(now - prev); prev = now;
|
|
28
|
-
if (++n < 600) requestAnimationFrame(tick); else res(out); };
|
|
29
|
-
requestAnimationFrame(tick);
|
|
30
|
-
}));
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
Report median, p95, and the count over 20ms. Do this **before** touching the design when someone says it feels janky. On a real piece the answer was 8.3ms median and zero dropped frames — the problem was that scenes had no camera and held frozen. Redesigning motion because of an imagined performance problem wastes a lot of time.
|
|
34
|
-
|
|
35
|
-
## Composition — is it centred?
|
|
36
|
-
|
|
37
|
-
Find the ink bounding box by scanning pixels, and report the top and bottom margins.
|
|
38
|
-
|
|
39
|
-
```js
|
|
40
|
-
const im = PNG.sync.read(await p.screenshot());
|
|
41
|
-
let top = 1e9, bot = -1;
|
|
42
|
-
for (let y = 0; y < H; y++) for (let x = 0; x < 1080; x++){
|
|
43
|
-
const k = (y*1080 + x) * 4;
|
|
44
|
-
const dark = (im.data[k] + im.data[k+1] + im.data[k+2]) / 3 < 170;
|
|
45
|
-
const accent = im.data[k] - im.data[k+2] > 60; // exclude the accent colour
|
|
46
|
-
if (dark && !accent){ if (y < top) top = y; if (y > bot) bot = y; }
|
|
47
|
-
}
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Under 10px of imbalance in a 1080 frame is fine. 28–41px is what "it feels off" looks like as a number.
|
|
51
|
-
|
|
52
|
-
## Overflow — does anything leave the frame?
|
|
53
|
-
|
|
54
|
-
Sample the element's rect across the window where it should stay put, and report the worst excursion past 0 and past the canvas width. Also report the maximum width: a smear that grows to 859px in a 1080 frame is going to clip even if it happens to stay inside on this particular line.
|
|
55
|
-
|
|
56
|
-
## Continuity — does it jump?
|
|
57
|
-
|
|
58
|
-
```js
|
|
59
|
-
let prev = null, worst = 0, when = 0;
|
|
60
|
-
for (let t = t0; t <= t1; t += 1/60){
|
|
61
|
-
const x = await p.evaluate(tt => { window.__seek(tt);
|
|
62
|
-
return document.getElementById('thing').getBoundingClientRect().left; }, t);
|
|
63
|
-
if (prev !== null && Math.abs(x - prev) > worst){ worst = Math.abs(x - prev); when = t; }
|
|
64
|
-
prev = x;
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
Compare the worst jump against the expected velocity at that moment. Anything much larger is a bookkeeping bug, not motion.
|
|
69
|
-
|
|
70
|
-
## Reproducing a reference exactly
|
|
71
|
-
|
|
72
|
-
If you are porting an existing animation, diff it. Note that a CSS-animated reference is also seekable:
|
|
73
|
-
|
|
74
|
-
```js
|
|
75
|
-
await ref.evaluate(t => {
|
|
76
|
-
const a = document.getAnimations();
|
|
77
|
-
a.forEach(x => x.pause());
|
|
78
|
-
a.forEach(x => x.currentTime = t * 1000);
|
|
79
|
-
}, t);
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Then compare two ways, and let the second one decide:
|
|
83
|
-
|
|
84
|
-
**Pixels** — count differing pixels with a small per-channel tolerance (8/255 covers antialiasing noise). This is a coarse net that catches anything structural.
|
|
85
|
-
|
|
86
|
-
**Geometry** — compare `getBoundingClientRect()` element by element at matching instants and report the worst deviation in px. *This is the real claim.* Pixel counts explode from sub-pixel offsets: on one comparison the geometry agreed to 0.38px while the pixel count sat at 0.4%, purely because two animations with different absolute durations resolve their easing curves with slightly different precision and every edge antialiases differently. Judging by pixels alone would have sent you hunting a bug that did not exist.
|
|
87
|
-
|
|
88
|
-
Two things the geometric check needs:
|
|
89
|
-
|
|
90
|
-
- **Skip anything invisible.** An element parked off-screen at `opacity: 0` in both files can be thousands of pixels apart and it means nothing. Reading a 2771px "deviation" from an invisible bar is a memorable way to learn this.
|
|
91
|
-
- **Compensate deliberate differences.** If the port is optically recentred by 31px or runs at 90% speed, apply that shift and that time scale in the comparison. The claim is "same movement", not "same coordinates".
|
|
92
|
-
|
|
93
|
-
Expect residual sub-pixel differences from integer rounding: `offsetWidth` returns integers where `getBoundingClientRect()` is fractional, which is worth ~0.2px on its own.
|
|
94
|
-
|
|
95
|
-
## The trap: suspect the check first
|
|
96
|
-
|
|
97
|
-
When a check that used to pass suddenly fails, **suspect the check**. In practice the large majority of alarms were the measurement's fault:
|
|
98
|
-
|
|
99
|
-
| What it looked like | What it was |
|
|
100
|
-
| --- | --- |
|
|
101
|
-
| The recurring mark flies 1256px off frame | Measurement window written for the old timing; it was sampling the entrance, which is *supposed* to start off-frame |
|
|
102
|
-
| Scene 1 has no text at all | Fixed timestamp in the audit script; after a retime it landed after the text had left |
|
|
103
|
-
| The URL scene is empty | Same — by that timestamp the mark had already covered the word, which is the intended behaviour |
|
|
104
|
-
| The port broke, 4.7% difference | Race in the harness: the reference starts its animations in a `requestAnimationFrame` *after* `fonts.ready`, so `getAnimations()` returned an empty list and the diff compared against a blank frame |
|
|
105
|
-
|
|
106
|
-
Confirm the failure independently before you "fix" working code. Two habits prevent most of it:
|
|
107
|
-
|
|
108
|
-
- Derive measurement windows from `window.__times` instead of hard-coding seconds.
|
|
109
|
-
- Wait for the thing you are about to measure: `await page.waitForFunction(() => document.getAnimations().length > 5)`.
|
|
110
|
-
|
|
111
|
-
## Contact sheets
|
|
112
|
-
|
|
113
|
-
For anything about rhythm, render a strip of frames and look at it as one image:
|
|
114
|
-
|
|
115
|
-
```js
|
|
116
|
-
for (let i = 0; i < n; i++){
|
|
117
|
-
await p.evaluate(t => window.__seek(t), t0 + i * step);
|
|
118
|
-
await p.screenshot({ path: `f${i}.png`, clip: { x, y, width, height } });
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Then tile them with PIL and label each with its timestamp. A 30-frame sheet across the whole piece catches structural problems — overlapping scenes, a beat that never fires, an accent parked in the wrong place — faster than watching it.
|
|
123
|
-
|
|
124
|
-
Two cautions: crop generously or you will diagnose a problem that is only your crop (a rule "vanishing" because the camera pushed it past the clip edge), and remember `getBoundingClientRect()` on a block element returns the *container* width, scaled by any active camera — measure the tokens if you want the text width.
|