volito 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +29 -0
- package/PACKS-LICENSE.md +43 -0
- package/README.md +377 -2
- package/dist/browser.d.ts +523 -0
- package/dist/browser.js +5182 -0
- package/dist/chunks/chunk-CFDFWZAC.js +6125 -0
- package/dist/cli.js +401 -0
- package/dist/index.d.ts +723 -0
- package/dist/index.js +138 -0
- package/dist/mcp.js +237 -0
- package/dist/registry.json +1 -0
- package/examples/gallery.html +222 -0
- package/fonts/anton-latin-400-normal.ttf +0 -0
- package/fonts/anton-latin-ext-400-normal.ttf +0 -0
- package/fonts/anton-vietnamese-400-normal.ttf +0 -0
- package/fonts/archivo-black-latin-400-normal.ttf +0 -0
- package/fonts/archivo-black-latin-ext-400-normal.ttf +0 -0
- package/fonts/bebas-neue-latin-400-normal.ttf +0 -0
- package/fonts/bebas-neue-latin-ext-400-normal.ttf +0 -0
- package/fonts/bricolage-grotesque-latin-500-normal.ttf +0 -0
- package/fonts/bricolage-grotesque-latin-800-normal.ttf +0 -0
- package/fonts/bricolage-grotesque-latin-ext-500-normal.ttf +0 -0
- package/fonts/bricolage-grotesque-latin-ext-800-normal.ttf +0 -0
- package/fonts/bricolage-grotesque-vietnamese-500-normal.ttf +0 -0
- package/fonts/bricolage-grotesque-vietnamese-800-normal.ttf +0 -0
- package/fonts/caveat-cyrillic-400-normal.ttf +0 -0
- package/fonts/caveat-cyrillic-700-normal.ttf +0 -0
- package/fonts/caveat-cyrillic-ext-400-normal.ttf +0 -0
- package/fonts/caveat-cyrillic-ext-700-normal.ttf +0 -0
- package/fonts/caveat-latin-400-normal.ttf +0 -0
- package/fonts/caveat-latin-700-normal.ttf +0 -0
- package/fonts/caveat-latin-ext-400-normal.ttf +0 -0
- package/fonts/caveat-latin-ext-700-normal.ttf +0 -0
- package/fonts/dm-serif-display-latin-400-italic.ttf +0 -0
- package/fonts/dm-serif-display-latin-400-normal.ttf +0 -0
- package/fonts/dm-serif-display-latin-ext-400-italic.ttf +0 -0
- package/fonts/dm-serif-display-latin-ext-400-normal.ttf +0 -0
- package/fonts/faces.json +2040 -0
- package/fonts/fraunces-latin-600-italic.ttf +0 -0
- package/fonts/fraunces-latin-600-normal.ttf +0 -0
- package/fonts/fraunces-latin-900-normal.ttf +0 -0
- package/fonts/fraunces-latin-ext-600-italic.ttf +0 -0
- package/fonts/fraunces-latin-ext-600-normal.ttf +0 -0
- package/fonts/fraunces-latin-ext-900-normal.ttf +0 -0
- package/fonts/fraunces-vietnamese-600-italic.ttf +0 -0
- package/fonts/fraunces-vietnamese-600-normal.ttf +0 -0
- package/fonts/fraunces-vietnamese-900-normal.ttf +0 -0
- package/fonts/fredoka-hebrew-400-normal.ttf +0 -0
- package/fonts/fredoka-hebrew-600-normal.ttf +0 -0
- package/fonts/fredoka-hebrew-700-normal.ttf +0 -0
- package/fonts/fredoka-latin-400-normal.ttf +0 -0
- package/fonts/fredoka-latin-600-normal.ttf +0 -0
- package/fonts/fredoka-latin-700-normal.ttf +0 -0
- package/fonts/fredoka-latin-ext-400-normal.ttf +0 -0
- package/fonts/fredoka-latin-ext-600-normal.ttf +0 -0
- package/fonts/fredoka-latin-ext-700-normal.ttf +0 -0
- package/fonts/gabarito-latin-700-normal.ttf +0 -0
- package/fonts/gabarito-latin-900-normal.ttf +0 -0
- package/fonts/gabarito-latin-ext-700-normal.ttf +0 -0
- package/fonts/gabarito-latin-ext-900-normal.ttf +0 -0
- package/fonts/im-fell-english-latin-400-italic.ttf +0 -0
- package/fonts/im-fell-english-latin-400-normal.ttf +0 -0
- package/fonts/inter-cyrillic-300-normal.ttf +0 -0
- package/fonts/inter-cyrillic-400-normal.ttf +0 -0
- package/fonts/inter-cyrillic-500-normal.ttf +0 -0
- package/fonts/inter-cyrillic-600-normal.ttf +0 -0
- package/fonts/inter-cyrillic-700-normal.ttf +0 -0
- package/fonts/inter-cyrillic-800-normal.ttf +0 -0
- package/fonts/inter-cyrillic-900-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-300-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-400-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-500-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-600-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-700-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-800-normal.ttf +0 -0
- package/fonts/inter-cyrillic-ext-900-normal.ttf +0 -0
- package/fonts/inter-greek-300-normal.ttf +0 -0
- package/fonts/inter-greek-400-normal.ttf +0 -0
- package/fonts/inter-greek-500-normal.ttf +0 -0
- package/fonts/inter-greek-600-normal.ttf +0 -0
- package/fonts/inter-greek-700-normal.ttf +0 -0
- package/fonts/inter-greek-800-normal.ttf +0 -0
- package/fonts/inter-greek-900-normal.ttf +0 -0
- package/fonts/inter-greek-ext-300-normal.ttf +0 -0
- package/fonts/inter-greek-ext-400-normal.ttf +0 -0
- package/fonts/inter-greek-ext-500-normal.ttf +0 -0
- package/fonts/inter-greek-ext-600-normal.ttf +0 -0
- package/fonts/inter-greek-ext-700-normal.ttf +0 -0
- package/fonts/inter-greek-ext-800-normal.ttf +0 -0
- package/fonts/inter-greek-ext-900-normal.ttf +0 -0
- package/fonts/inter-latin-300-normal.ttf +0 -0
- package/fonts/inter-latin-400-normal.ttf +0 -0
- package/fonts/inter-latin-500-normal.ttf +0 -0
- package/fonts/inter-latin-600-normal.ttf +0 -0
- package/fonts/inter-latin-700-normal.ttf +0 -0
- package/fonts/inter-latin-800-normal.ttf +0 -0
- package/fonts/inter-latin-900-normal.ttf +0 -0
- package/fonts/inter-latin-ext-300-normal.ttf +0 -0
- package/fonts/inter-latin-ext-400-normal.ttf +0 -0
- package/fonts/inter-latin-ext-500-normal.ttf +0 -0
- package/fonts/inter-latin-ext-600-normal.ttf +0 -0
- package/fonts/inter-latin-ext-700-normal.ttf +0 -0
- package/fonts/inter-latin-ext-800-normal.ttf +0 -0
- package/fonts/inter-latin-ext-900-normal.ttf +0 -0
- package/fonts/inter-vietnamese-300-normal.ttf +0 -0
- package/fonts/inter-vietnamese-400-normal.ttf +0 -0
- package/fonts/inter-vietnamese-500-normal.ttf +0 -0
- package/fonts/inter-vietnamese-600-normal.ttf +0 -0
- package/fonts/inter-vietnamese-700-normal.ttf +0 -0
- package/fonts/inter-vietnamese-800-normal.ttf +0 -0
- package/fonts/inter-vietnamese-900-normal.ttf +0 -0
- package/fonts/licenses/anton.txt +93 -0
- package/fonts/licenses/archivo-black.txt +93 -0
- package/fonts/licenses/bebas-neue.txt +93 -0
- package/fonts/licenses/bricolage-grotesque.txt +93 -0
- package/fonts/licenses/caveat.txt +93 -0
- package/fonts/licenses/dm-serif-display.txt +93 -0
- package/fonts/licenses/fraunces.txt +93 -0
- package/fonts/licenses/fredoka.txt +93 -0
- package/fonts/licenses/gabarito.txt +93 -0
- package/fonts/licenses/im-fell-english.txt +93 -0
- package/fonts/licenses/inter.txt +93 -0
- package/fonts/licenses/montserrat.txt +93 -0
- package/fonts/licenses/orbitron.txt +93 -0
- package/fonts/licenses/outfit.txt +93 -0
- package/fonts/licenses/pacifico.txt +93 -0
- package/fonts/licenses/patrick-hand.txt +93 -0
- package/fonts/licenses/permanent-marker.txt +201 -0
- package/fonts/licenses/playfair-display.txt +93 -0
- package/fonts/licenses/poppins.txt +93 -0
- package/fonts/licenses/press-start-2p.txt +93 -0
- package/fonts/licenses/righteous.txt +93 -0
- package/fonts/licenses/space-grotesk.txt +93 -0
- package/fonts/licenses/space-mono.txt +93 -0
- package/fonts/licenses/syne.txt +93 -0
- package/fonts/licenses/unbounded.txt +93 -0
- package/fonts/montserrat-cyrillic-300-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-400-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-500-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-700-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-800-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-900-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-ext-300-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-ext-400-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-ext-500-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-ext-700-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-ext-800-normal.ttf +0 -0
- package/fonts/montserrat-cyrillic-ext-900-normal.ttf +0 -0
- package/fonts/montserrat-latin-300-normal.ttf +0 -0
- package/fonts/montserrat-latin-400-normal.ttf +0 -0
- package/fonts/montserrat-latin-500-normal.ttf +0 -0
- package/fonts/montserrat-latin-700-normal.ttf +0 -0
- package/fonts/montserrat-latin-800-normal.ttf +0 -0
- package/fonts/montserrat-latin-900-normal.ttf +0 -0
- package/fonts/montserrat-latin-ext-300-normal.ttf +0 -0
- package/fonts/montserrat-latin-ext-400-normal.ttf +0 -0
- package/fonts/montserrat-latin-ext-500-normal.ttf +0 -0
- package/fonts/montserrat-latin-ext-700-normal.ttf +0 -0
- package/fonts/montserrat-latin-ext-800-normal.ttf +0 -0
- package/fonts/montserrat-latin-ext-900-normal.ttf +0 -0
- package/fonts/montserrat-vietnamese-300-normal.ttf +0 -0
- package/fonts/montserrat-vietnamese-400-normal.ttf +0 -0
- package/fonts/montserrat-vietnamese-500-normal.ttf +0 -0
- package/fonts/montserrat-vietnamese-700-normal.ttf +0 -0
- package/fonts/montserrat-vietnamese-800-normal.ttf +0 -0
- package/fonts/montserrat-vietnamese-900-normal.ttf +0 -0
- package/fonts/orbitron-latin-500-normal.ttf +0 -0
- package/fonts/orbitron-latin-800-normal.ttf +0 -0
- package/fonts/outfit-latin-700-normal.ttf +0 -0
- package/fonts/outfit-latin-900-normal.ttf +0 -0
- package/fonts/outfit-latin-ext-700-normal.ttf +0 -0
- package/fonts/outfit-latin-ext-900-normal.ttf +0 -0
- package/fonts/pacifico-cyrillic-400-normal.ttf +0 -0
- package/fonts/pacifico-cyrillic-ext-400-normal.ttf +0 -0
- package/fonts/pacifico-latin-400-normal.ttf +0 -0
- package/fonts/pacifico-latin-ext-400-normal.ttf +0 -0
- package/fonts/pacifico-vietnamese-400-normal.ttf +0 -0
- package/fonts/patrick-hand-latin-400-normal.ttf +0 -0
- package/fonts/patrick-hand-latin-ext-400-normal.ttf +0 -0
- package/fonts/patrick-hand-vietnamese-400-normal.ttf +0 -0
- package/fonts/permanent-marker-latin-400-normal.ttf +0 -0
- package/fonts/playfair-display-cyrillic-400-italic.ttf +0 -0
- package/fonts/playfair-display-cyrillic-400-normal.ttf +0 -0
- package/fonts/playfair-display-cyrillic-700-italic.ttf +0 -0
- package/fonts/playfair-display-cyrillic-700-normal.ttf +0 -0
- package/fonts/playfair-display-cyrillic-900-italic.ttf +0 -0
- package/fonts/playfair-display-cyrillic-900-normal.ttf +0 -0
- package/fonts/playfair-display-latin-400-italic.ttf +0 -0
- package/fonts/playfair-display-latin-400-normal.ttf +0 -0
- package/fonts/playfair-display-latin-700-italic.ttf +0 -0
- package/fonts/playfair-display-latin-700-normal.ttf +0 -0
- package/fonts/playfair-display-latin-900-italic.ttf +0 -0
- package/fonts/playfair-display-latin-900-normal.ttf +0 -0
- package/fonts/playfair-display-latin-ext-400-italic.ttf +0 -0
- package/fonts/playfair-display-latin-ext-400-normal.ttf +0 -0
- package/fonts/playfair-display-latin-ext-700-italic.ttf +0 -0
- package/fonts/playfair-display-latin-ext-700-normal.ttf +0 -0
- package/fonts/playfair-display-latin-ext-900-italic.ttf +0 -0
- package/fonts/playfair-display-latin-ext-900-normal.ttf +0 -0
- package/fonts/playfair-display-vietnamese-400-italic.ttf +0 -0
- package/fonts/playfair-display-vietnamese-400-normal.ttf +0 -0
- package/fonts/playfair-display-vietnamese-700-italic.ttf +0 -0
- package/fonts/playfair-display-vietnamese-700-normal.ttf +0 -0
- package/fonts/playfair-display-vietnamese-900-italic.ttf +0 -0
- package/fonts/playfair-display-vietnamese-900-normal.ttf +0 -0
- package/fonts/poppins-devanagari-300-normal.ttf +0 -0
- package/fonts/poppins-devanagari-400-normal.ttf +0 -0
- package/fonts/poppins-devanagari-600-normal.ttf +0 -0
- package/fonts/poppins-devanagari-700-normal.ttf +0 -0
- package/fonts/poppins-devanagari-800-normal.ttf +0 -0
- package/fonts/poppins-devanagari-900-normal.ttf +0 -0
- package/fonts/poppins-latin-300-normal.ttf +0 -0
- package/fonts/poppins-latin-400-normal.ttf +0 -0
- package/fonts/poppins-latin-600-normal.ttf +0 -0
- package/fonts/poppins-latin-700-normal.ttf +0 -0
- package/fonts/poppins-latin-800-normal.ttf +0 -0
- package/fonts/poppins-latin-900-normal.ttf +0 -0
- package/fonts/poppins-latin-ext-300-normal.ttf +0 -0
- package/fonts/poppins-latin-ext-400-normal.ttf +0 -0
- package/fonts/poppins-latin-ext-600-normal.ttf +0 -0
- package/fonts/poppins-latin-ext-700-normal.ttf +0 -0
- package/fonts/poppins-latin-ext-800-normal.ttf +0 -0
- package/fonts/poppins-latin-ext-900-normal.ttf +0 -0
- package/fonts/press-start-2p-cyrillic-400-normal.ttf +0 -0
- package/fonts/press-start-2p-cyrillic-ext-400-normal.ttf +0 -0
- package/fonts/press-start-2p-greek-400-normal.ttf +0 -0
- package/fonts/press-start-2p-latin-400-normal.ttf +0 -0
- package/fonts/press-start-2p-latin-ext-400-normal.ttf +0 -0
- package/fonts/righteous-latin-400-normal.ttf +0 -0
- package/fonts/righteous-latin-ext-400-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-400-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-500-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-600-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-700-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-ext-400-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-ext-500-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-ext-600-normal.ttf +0 -0
- package/fonts/space-grotesk-latin-ext-700-normal.ttf +0 -0
- package/fonts/space-grotesk-vietnamese-400-normal.ttf +0 -0
- package/fonts/space-grotesk-vietnamese-500-normal.ttf +0 -0
- package/fonts/space-grotesk-vietnamese-600-normal.ttf +0 -0
- package/fonts/space-grotesk-vietnamese-700-normal.ttf +0 -0
- package/fonts/space-mono-latin-400-normal.ttf +0 -0
- package/fonts/space-mono-latin-700-normal.ttf +0 -0
- package/fonts/space-mono-latin-ext-400-normal.ttf +0 -0
- package/fonts/space-mono-latin-ext-700-normal.ttf +0 -0
- package/fonts/space-mono-vietnamese-400-normal.ttf +0 -0
- package/fonts/space-mono-vietnamese-700-normal.ttf +0 -0
- package/fonts/syne-greek-600-normal.ttf +0 -0
- package/fonts/syne-greek-800-normal.ttf +0 -0
- package/fonts/syne-latin-600-normal.ttf +0 -0
- package/fonts/syne-latin-800-normal.ttf +0 -0
- package/fonts/syne-latin-ext-600-normal.ttf +0 -0
- package/fonts/syne-latin-ext-800-normal.ttf +0 -0
- package/fonts/unbounded-cyrillic-500-normal.ttf +0 -0
- package/fonts/unbounded-cyrillic-800-normal.ttf +0 -0
- package/fonts/unbounded-cyrillic-ext-500-normal.ttf +0 -0
- package/fonts/unbounded-cyrillic-ext-800-normal.ttf +0 -0
- package/fonts/unbounded-latin-500-normal.ttf +0 -0
- package/fonts/unbounded-latin-800-normal.ttf +0 -0
- package/fonts/unbounded-latin-ext-500-normal.ttf +0 -0
- package/fonts/unbounded-latin-ext-800-normal.ttf +0 -0
- package/fonts/unbounded-vietnamese-500-normal.ttf +0 -0
- package/fonts/unbounded-vietnamese-800-normal.ttf +0 -0
- package/libs/world.js +113 -0
- package/package.json +119 -4
- package/packs/3d/bars-3d/frame.js +39 -0
- package/packs/3d/bars-3d/item.json +78 -0
- package/packs/3d/card-flip/frame.js +36 -0
- package/packs/3d/card-flip/item.json +67 -0
- package/packs/3d/cube/frame.js +49 -0
- package/packs/3d/cube/item.json +52 -0
- package/packs/3d/globe/frame.js +66 -0
- package/packs/3d/globe/item.json +67 -0
- package/packs/3d/logo-3d/frame.js +26 -0
- package/packs/3d/logo-3d/item.json +53 -0
- package/packs/3d/number-3d/frame.js +26 -0
- package/packs/3d/number-3d/item.json +65 -0
- package/packs/3d/pack.json +21 -0
- package/packs/3d/shared.js +33 -0
- package/packs/3d/title-3d/frame.js +38 -0
- package/packs/3d/title-3d/item.json +52 -0
- package/packs/annotate/arrow/frame.js +28 -0
- package/packs/annotate/arrow/item.json +85 -0
- package/packs/annotate/circle/frame.js +22 -0
- package/packs/annotate/circle/item.json +90 -0
- package/packs/annotate/emphasis/frame.js +30 -0
- package/packs/annotate/emphasis/item.json +76 -0
- package/packs/annotate/focus/frame.js +24 -0
- package/packs/annotate/focus/item.json +82 -0
- package/packs/annotate/highlight/frame.js +22 -0
- package/packs/annotate/highlight/item.json +83 -0
- package/packs/annotate/markers/frame.js +22 -0
- package/packs/annotate/markers/item.json +62 -0
- package/packs/annotate/pack.json +24 -0
- package/packs/annotate/pointer/frame.js +26 -0
- package/packs/annotate/pointer/item.json +81 -0
- package/packs/annotate/reactions/frame.js +22 -0
- package/packs/annotate/reactions/item.json +78 -0
- package/packs/annotate/shared.js +30 -0
- package/packs/annotate/spotlight/frame.js +35 -0
- package/packs/annotate/spotlight/item.json +105 -0
- package/packs/annotate/stamp/frame.js +18 -0
- package/packs/annotate/stamp/item.json +79 -0
- package/packs/backdrops/aurora/frame.js +12 -0
- package/packs/backdrops/aurora/item.json +56 -0
- package/packs/backdrops/blobs/frame.js +19 -0
- package/packs/backdrops/blobs/item.json +56 -0
- package/packs/backdrops/bokeh/frame.js +18 -0
- package/packs/backdrops/bokeh/item.json +56 -0
- package/packs/backdrops/gradient/frame.js +10 -0
- package/packs/backdrops/gradient/item.json +46 -0
- package/packs/backdrops/pack.json +23 -0
- package/packs/backdrops/pattern/frame.js +8 -0
- package/packs/backdrops/pattern/item.json +96 -0
- package/packs/backdrops/retro-grid/frame.js +33 -0
- package/packs/backdrops/retro-grid/item.json +55 -0
- package/packs/backdrops/shared.js +7 -0
- package/packs/backdrops/starfield/frame.js +18 -0
- package/packs/backdrops/starfield/item.json +52 -0
- package/packs/backdrops/tiles/frame.js +8 -0
- package/packs/backdrops/tiles/item.json +56 -0
- package/packs/backdrops/topo/frame.js +25 -0
- package/packs/backdrops/topo/item.json +56 -0
- package/packs/broadcast/countdown/frame.js +34 -0
- package/packs/broadcast/countdown/item.json +49 -0
- package/packs/broadcast/live-badge/frame.js +43 -0
- package/packs/broadcast/live-badge/item.json +64 -0
- package/packs/broadcast/location/frame.js +35 -0
- package/packs/broadcast/location/item.json +62 -0
- package/packs/broadcast/lt-bars/frame.js +31 -0
- package/packs/broadcast/lt-bars/item.json +52 -0
- package/packs/broadcast/lt-kicker/frame.js +36 -0
- package/packs/broadcast/lt-kicker/item.json +58 -0
- package/packs/broadcast/lt-news/frame.js +30 -0
- package/packs/broadcast/lt-news/item.json +47 -0
- package/packs/broadcast/lt-pill/frame.js +28 -0
- package/packs/broadcast/lt-pill/item.json +68 -0
- package/packs/broadcast/lt-reveal/frame.js +25 -0
- package/packs/broadcast/lt-reveal/item.json +51 -0
- package/packs/broadcast/pack.json +23 -0
- package/packs/broadcast/score-bug/frame.js +40 -0
- package/packs/broadcast/score-bug/item.json +106 -0
- package/packs/broadcast/ticker/frame.js +28 -0
- package/packs/broadcast/ticker/item.json +64 -0
- package/packs/data/bar-race/frame.js +46 -0
- package/packs/data/bar-race/item.json +113 -0
- package/packs/data/donut/frame.js +47 -0
- package/packs/data/donut/item.json +100 -0
- package/packs/data/flight/frame.js +75 -0
- package/packs/data/flight/item.json +66 -0
- package/packs/data/funnel/frame.js +52 -0
- package/packs/data/funnel/item.json +83 -0
- package/packs/data/goals/frame.js +34 -0
- package/packs/data/goals/item.json +64 -0
- package/packs/data/line-chart/frame.js +61 -0
- package/packs/data/line-chart/item.json +117 -0
- package/packs/data/pack.json +23 -0
- package/packs/data/shared.js +38 -0
- package/packs/data/timeline/frame.js +56 -0
- package/packs/data/timeline/item.json +70 -0
- package/packs/data/versus/frame.js +39 -0
- package/packs/data/versus/item.json +84 -0
- package/packs/data/world-map/frame.js +63 -0
- package/packs/data/world-map/item.json +126 -0
- package/packs/essentials/banner/frame.js +46 -0
- package/packs/essentials/banner/item.json +70 -0
- package/packs/essentials/bar-chart/frame.js +56 -0
- package/packs/essentials/bar-chart/item.json +108 -0
- package/packs/essentials/callout/frame.js +43 -0
- package/packs/essentials/callout/item.json +86 -0
- package/packs/essentials/end-card/frame.js +47 -0
- package/packs/essentials/end-card/item.json +85 -0
- package/packs/essentials/headline/frame.js +40 -0
- package/packs/essentials/headline/item.json +74 -0
- package/packs/essentials/logo-sting/frame.js +48 -0
- package/packs/essentials/logo-sting/item.json +64 -0
- package/packs/essentials/lower-third/frame.js +41 -0
- package/packs/essentials/lower-third/item.json +68 -0
- package/packs/essentials/pack.json +28 -0
- package/packs/essentials/quote/frame.js +33 -0
- package/packs/essentials/quote/item.json +66 -0
- package/packs/essentials/shared.js +16 -0
- package/packs/essentials/social/frame.js +43 -0
- package/packs/essentials/social/item.json +86 -0
- package/packs/essentials/stat/frame.js +49 -0
- package/packs/essentials/stat/item.json +113 -0
- package/packs/essentials/steps/frame.js +53 -0
- package/packs/essentials/steps/item.json +80 -0
- package/packs/essentials/subscribe/frame.js +39 -0
- package/packs/essentials/subscribe/item.json +87 -0
- package/packs/essentials/title-card/frame.js +50 -0
- package/packs/essentials/title-card/item.json +73 -0
- package/packs/essentials/wipe/frame.js +48 -0
- package/packs/essentials/wipe/item.json +75 -0
- package/packs/promo/coupon/frame.js +35 -0
- package/packs/promo/coupon/item.json +63 -0
- package/packs/promo/cta/frame.js +17 -0
- package/packs/promo/cta/item.json +73 -0
- package/packs/promo/features/frame.js +25 -0
- package/packs/promo/features/item.json +57 -0
- package/packs/promo/launch/frame.js +26 -0
- package/packs/promo/launch/item.json +66 -0
- package/packs/promo/offer-countdown/frame.js +29 -0
- package/packs/promo/offer-countdown/item.json +64 -0
- package/packs/promo/pack.json +22 -0
- package/packs/promo/price-card/frame.js +42 -0
- package/packs/promo/price-card/item.json +102 -0
- package/packs/promo/ribbon/frame.js +17 -0
- package/packs/promo/ribbon/item.json +58 -0
- package/packs/promo/sale-badge/frame.js +18 -0
- package/packs/promo/sale-badge/item.json +74 -0
- package/packs/promo/shared.js +15 -0
- package/packs/social/chat/frame.js +54 -0
- package/packs/social/chat/item.json +71 -0
- package/packs/social/comments/frame.js +46 -0
- package/packs/social/comments/item.json +66 -0
- package/packs/social/follow-card/frame.js +52 -0
- package/packs/social/follow-card/item.json +105 -0
- package/packs/social/notification/frame.js +27 -0
- package/packs/social/notification/item.json +66 -0
- package/packs/social/notifications/frame.js +28 -0
- package/packs/social/notifications/item.json +68 -0
- package/packs/social/now-playing/frame.js +51 -0
- package/packs/social/now-playing/item.json +72 -0
- package/packs/social/pack.json +22 -0
- package/packs/social/post/frame.js +41 -0
- package/packs/social/post/item.json +86 -0
- package/packs/social/rating/frame.js +45 -0
- package/packs/social/rating/item.json +58 -0
- package/packs/social/shared.js +25 -0
- package/packs/transitions/blinds/frame.js +24 -0
- package/packs/transitions/blinds/item.json +67 -0
- package/packs/transitions/clock/frame.js +26 -0
- package/packs/transitions/clock/item.json +60 -0
- package/packs/transitions/doors/frame.js +28 -0
- package/packs/transitions/doors/item.json +56 -0
- package/packs/transitions/glitch/frame.js +41 -0
- package/packs/transitions/glitch/item.json +59 -0
- package/packs/transitions/ink/frame.js +25 -0
- package/packs/transitions/ink/item.json +68 -0
- package/packs/transitions/iris/frame.js +19 -0
- package/packs/transitions/iris/item.json +78 -0
- package/packs/transitions/pack.json +25 -0
- package/packs/transitions/pixels/frame.js +19 -0
- package/packs/transitions/pixels/item.json +59 -0
- package/packs/transitions/shared.js +58 -0
- package/packs/transitions/slices/frame.js +19 -0
- package/packs/transitions/slices/item.json +58 -0
- package/packs/transitions/stripes/frame.js +22 -0
- package/packs/transitions/stripes/item.json +68 -0
- package/packs/transitions/tiles/frame.js +33 -0
- package/packs/transitions/tiles/item.json +71 -0
- package/packs/transitions/whip/frame.js +27 -0
- package/packs/transitions/whip/item.json +63 -0
- package/packs/type/decode/frame.js +23 -0
- package/packs/type/decode/item.json +52 -0
- package/packs/type/echo/frame.js +20 -0
- package/packs/type/echo/item.json +52 -0
- package/packs/type/key-phrase/frame.js +32 -0
- package/packs/type/key-phrase/item.json +45 -0
- package/packs/type/liquid-fill/frame.js +27 -0
- package/packs/type/liquid-fill/item.json +52 -0
- package/packs/type/marquee/frame.js +21 -0
- package/packs/type/marquee/item.json +67 -0
- package/packs/type/pack.json +24 -0
- package/packs/type/shared.js +13 -0
- package/packs/type/split-flap/frame.js +49 -0
- package/packs/type/split-flap/item.json +44 -0
- package/packs/type/stack/frame.js +19 -0
- package/packs/type/stack/item.json +51 -0
- package/packs/type/typewriter/frame.js +13 -0
- package/packs/type/typewriter/item.json +60 -0
- package/packs/type/word-by-word/frame.js +21 -0
- package/packs/type/word-by-word/item.json +52 -0
- package/packs/type/word-swap/frame.js +43 -0
- package/packs/type/word-swap/item.json +63 -0
- package/skill/SKILL.md +79 -0
- package/skill/template/frame.js +26 -0
- package/skill/template/item.json +16 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Volito is two things with two licences:
|
|
2
|
+
|
|
3
|
+
- The engine (everything outside packs/ and fonts/): the MIT License, below.
|
|
4
|
+
- The MONARC packs (packs/): the MONARC Packs License 1.0, in PACKS-LICENSE.md.
|
|
5
|
+
- The fonts (fonts/): each family's SIL Open Font License 1.1, in fonts/licenses/.
|
|
6
|
+
|
|
7
|
+
--------------------------------------------------------------------------------
|
|
8
|
+
|
|
9
|
+
MIT License
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2026 MONARC STUDIOS
|
|
12
|
+
|
|
13
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
14
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
15
|
+
in the Software without restriction, including without limitation the rights
|
|
16
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
17
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
18
|
+
furnished to do so, subject to the following conditions:
|
|
19
|
+
|
|
20
|
+
The above copyright notice and this permission notice shall be included in all
|
|
21
|
+
copies or substantial portions of the Software.
|
|
22
|
+
|
|
23
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
24
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
25
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
26
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
27
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
28
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
29
|
+
SOFTWARE.
|
package/PACKS-LICENSE.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# MONARC Packs License 1.0
|
|
2
|
+
|
|
3
|
+
> **Draft.** Have counsel review this text before the first public release.
|
|
4
|
+
|
|
5
|
+
Copyright (c) 2026 MONARC STUDIOS
|
|
6
|
+
|
|
7
|
+
This licence covers the motion graphics packs distributed with Volito (the `packs/` folder of
|
|
8
|
+
`volito`) and any other pack whose `pack.json` names this licence (together, the **Packs**).
|
|
9
|
+
The Volito engine is under the MIT License (see `LICENSE`); the fonts are under their own
|
|
10
|
+
SIL Open Font Licenses (see `fonts/licenses/`).
|
|
11
|
+
|
|
12
|
+
## What you may do
|
|
13
|
+
|
|
14
|
+
1. **Make things with the Packs.** You may use, copy, modify and render the Packs to make videos,
|
|
15
|
+
images and other media (**Productions**) — personal or commercial, for yourself or for clients,
|
|
16
|
+
including advertising, broadcast and streaming.
|
|
17
|
+
2. **Share what you make.** You may publish, sell and distribute your Productions anywhere, with no
|
|
18
|
+
royalty and no attribution required (a credit to Volito is welcome, never required).
|
|
19
|
+
3. **Change the items.** You may edit an item's code, props and look for your own Productions.
|
|
20
|
+
4. **Build on them.** You may use the Packs inside your own software or service to make Productions
|
|
21
|
+
for your users, as long as your users receive the rendered media, not the Packs themselves.
|
|
22
|
+
|
|
23
|
+
## What you may not do
|
|
24
|
+
|
|
25
|
+
1. **Resell or give away the Packs as templates.** You may not sell, license, sublicense or
|
|
26
|
+
distribute the Packs, or modified versions of them, as templates, presets, project files, a
|
|
27
|
+
template library or marketplace listing, or as any product or service whose main value is the
|
|
28
|
+
Packs themselves.
|
|
29
|
+
2. **Remove notices.** Keep this licence with any copy of the Packs you distribute as part of your
|
|
30
|
+
own software (item 4 above).
|
|
31
|
+
3. **Use our name as yours.** This licence gives no right to the MONARC, MONARC STUDIOS, MONARC PRO or
|
|
32
|
+
Volito names or logos, except to say truthfully that you used Volito.
|
|
33
|
+
|
|
34
|
+
## The rest
|
|
35
|
+
|
|
36
|
+
- **Termination.** If you break these terms, your permission ends; Productions you made before
|
|
37
|
+
then stay yours.
|
|
38
|
+
- **No warranty.** The Packs are provided "as is", without warranty of any kind, express or
|
|
39
|
+
implied, including merchantability, fitness for a particular purpose and non-infringement.
|
|
40
|
+
- **No liability.** In no event shall MONARC STUDIOS be liable for any claim, damages or other
|
|
41
|
+
liability arising from the Packs or their use.
|
|
42
|
+
|
|
43
|
+
Questions, or a use these terms do not cover: hello@monarcpro.app
|
package/README.md
CHANGED
|
@@ -1,3 +1,378 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://volito.dev"><img src=".github/assets/banner.jpg" alt="Volito: motion graphics, from one sentence. Motion graphics as code for developers and AI agents, by MONARC PRO." width="100%"></a>
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">Volito</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center"><strong>Brand-aware, voice-synced motion graphics as code — for developers and AI agents.</strong></p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://www.npmjs.com/package/volito"><img src="https://img.shields.io/npm/v/volito?color=2433e8&label=npm" alt="npm version"></a>
|
|
11
|
+
<a href="https://github.com/monarcpro/volito/actions/workflows/ci.yml"><img src="https://github.com/monarcpro/volito/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
12
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/engine-MIT-dfff4f?labelColor=15140f" alt="Engine licence: MIT"></a>
|
|
13
|
+
<a href="https://volito.dev/docs"><img src="https://img.shields.io/badge/docs-volito.dev-ff6a3d?labelColor=15140f" alt="Docs on volito.dev"></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="https://volito.dev">Website</a> ·
|
|
18
|
+
<a href="https://volito.dev/docs">Docs</a> ·
|
|
19
|
+
<a href="https://volito.dev/docs/packs">Packs</a> ·
|
|
20
|
+
<a href="https://volito.dev/docs/agents">For agents</a> ·
|
|
21
|
+
<a href="https://www.npmjs.com/package/volito">npm</a> ·
|
|
22
|
+
<a href="CHANGELOG.md">Changelog</a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
By [MONARC STUDIOS](https://monarcpro.app), the team behind MONARC PRO. Volito is the motion graphics engine
|
|
26
|
+
inside the [MONARC PRO](https://monarcpro.app) video editor, opened up; the name is Latin for “to flutter”.
|
|
27
|
+
Every graphic is a small program — `function frame(t, $)` returns the SVG of one frame — so it is
|
|
28
|
+
readable, diffable, seekable to any frame, and something an AI agent can write and fix. It ships with
|
|
29
|
+
96 ready-made graphics in ten packs (3D, maps, transitions and kinetic type among them), 36 brand styles,
|
|
30
|
+
sixteen animated patterns, a CLI, a Node API, a browser player and an MCP server, and renders to ProRes 4444 or HEVC with alpha, WebM, MP4, GIF, PNG frames or SVG.
|
|
31
|
+
|
|
32
|
+
- **One design, every brand.** Items draw with colour roles and faces, not fixed colours: pass one of 36
|
|
33
|
+
built-in styles, your `DESIGN.md`, or a couple of overrides, and the whole pack re-skins.
|
|
34
|
+
- **One design, every aspect.** Layouts follow the canvas and keep to title-safe areas, including the
|
|
35
|
+
space platforms reserve on 9:16. 16:9, 9:16, 1:1 and 4:5 from the same item.
|
|
36
|
+
- **On the voice.** Give a transcript and text lands on the words that say it.
|
|
37
|
+
- **Drops onto footage.** Overlays render with real alpha for Premiere, Resolve, Final Cut, After
|
|
38
|
+
Effects and CapCut.
|
|
39
|
+
- **Agent-native.** An MCP server gives Claude Code, Cursor and other agents tools to find, preview (as an
|
|
40
|
+
image they can see), check and render graphics — or to write their own.
|
|
41
|
+
- **Many scripts.** Latin, Latin Extended, Vietnamese, Cyrillic, Greek and Devanagari (Hindi), shaped properly.
|
|
42
|
+
|
|
43
|
+
<p align="center">
|
|
44
|
+
<img src=".github/assets/intro.gif" alt="A 10-second Volito intro: kinetic type, the logo dropping in, an extruded 3D wordmark and an end card" width="420"><br>
|
|
45
|
+
<sub>This intro is a Volito program: kinetic type, a 3D wordmark and an end card, rendered in Node.</sub>
|
|
46
|
+
</p>
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npx volito render lower-third \
|
|
50
|
+
--prop name="Priya Sharma" --prop role="Product designer" \
|
|
51
|
+
--style ember --aspect 16:9 --out priya.mov
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Install
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install volito # or run it with npx, nothing to install
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Volito was first published as `@monarcpro/motion`; that package is deprecated in favour of this one.
|
|
61
|
+
|
|
62
|
+
Node 20.10 or newer. Video formats need [ffmpeg](https://ffmpeg.org) on your `PATH` (or `VOLITO_FFMPEG`);
|
|
63
|
+
stills, contact sheets and PNG frames do not. WebM needs an ffmpeg built with libvpx.
|
|
64
|
+
|
|
65
|
+
## The packs
|
|
66
|
+
|
|
67
|
+
<img src=".github/assets/packs.jpg" alt="96 graphics in 10 packs: a render from each of Essentials, Broadcast, Social, Data, 3D, Transitions, Annotate, Type, Backdrops and Promo" width="100%">
|
|
68
|
+
|
|
69
|
+
96 graphics in ten packs. Every one takes any brand style and any aspect, and every part of it takes any move.
|
|
70
|
+
|
|
71
|
+
| Pack | Items |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| **Essentials** (14) | `lower-third` · `title-card` · `headline` (kinetic, on the voice) · `subscribe` · `social` · `callout` · `stat` · `bar-chart` · `steps` · `quote` · `banner` · `end-card` · `logo-sting` · `wipe` |
|
|
74
|
+
| **Broadcast** (10) | Lower thirds in five looks — `lt-bars`, `lt-reveal` (mask reveal), `lt-kicker`, `lt-pill` (picture or initials, status dot), `lt-news` (tight boxes) — `ticker` (crawl), `live-badge` (viewers, clock), `score-bug` (teams, scores, clock, goal flash), `location` (pin and place card), `countdown` |
|
|
75
|
+
| **Social** (8) | `follow-card` (profile, count, Follow press) · `notification` (phone or desktop) · `notifications` (a stack that cascades) · `comments` (typing on) · `chat` (thread with typing dots) · `post` (counts and a heart) · `now-playing` (music card) · `rating` (stars, score, review) |
|
|
76
|
+
| **Data** (9) | `line-chart` (draws on, target line) · `donut` · `bar-race` (overtaking across periods) · `goals` (meters) · `versus` · `timeline` · `funnel` · `world-map` (countries filled by value, regions) · `flight` (a great-circle route between two places) |
|
|
77
|
+
| **3D** (7) | `logo-3d` (extruded wordmark, light sweep) · `title-3d` (letters flip up) · `number-3d` (an extruded counter) · `card-flip` (front and back) · `cube` (a word prism that rolls) · `bars-3d` (orbiting camera) · `globe` (spins to a country, routes arc in) |
|
|
78
|
+
| **Transitions** (11) | Cover the frame by the cut, reveal the next shot: `iris` (circle, diamond, star, square) · `blinds` · `doors` (with a Bauhaus disc) · `glitch` · `ink` (wobbly blooms) · `clock` · `tiles` (Bauhaus shapes) · `pixels` · `stripes` · `slices` · `whip` — each with a word at the cut |
|
|
79
|
+
| **Annotate** (10) | Point at things in footage (places in % of the frame): `arrow` (hand-drawn or clean) · `circle` · `spotlight` (feathered dim) · `focus` (brackets that lock on) · `highlight` (highlighter, underline, box, strike) · `stamp` (pressed ink) · `reactions` (live hearts, likes, fire) · `pointer` (leader line and card) · `emphasis` · `markers` (numbered) |
|
|
80
|
+
| **Type** (10) | Kinetic type: `typewriter` · `word-swap` (a word that keeps changing) · `split-flap` · `marquee` (tilted scrolling bands) · `echo` · `liquid-fill` · `decode` · `word-by-word` · `key-phrase` (marker on *marked* words) · `stack` (editorial) |
|
|
81
|
+
| **Backdrops** (9) | Moving grounds: `pattern` (any of the sixteen) · `aurora` · `tiles` (Bauhaus field) · `retro-grid` (synthwave) · `blobs` (lava goo) · `gradient` · `starfield` · `bokeh` · `topo` |
|
|
82
|
+
| **Promo** (8) | `sale-badge` (starburst) · `price-card` (counts down, strike, click) · `coupon` (copy the code) · `offer-countdown` (D:H:M:S) · `features` (checklist) · `cta` (button and cursor) · `launch` · `ribbon` (crossing tapes) |
|
|
83
|
+
|
|
84
|
+
`volito info <item>` lists every prop. To see them all live, serve this package's folder and
|
|
85
|
+
open `examples/gallery.html`.
|
|
86
|
+
|
|
87
|
+
## Motion without limits
|
|
88
|
+
|
|
89
|
+
Every item is made of named **parts** (`volito info lower-third` lists them: `scrim`, `spine`, `plate`,
|
|
90
|
+
`name`, `role`). Any part takes any move, and the moves combine freely:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
volito render lower-third \
|
|
94
|
+
--motion name.in=typewriter --motion plate.in=iris --motion "*.ease=bouncy" \
|
|
95
|
+
--motion role.emphasis=pulse@2 --motion spine.idle=pulse --out priya.mov
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
| Setting | Takes |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| `in`, `out` | 38 moves — `rise` `drop` `slide` `smear` `arc` `pop` `zoom` `push` `grow` `wipe` `iris` `shutter` `blinds` `diagonal` `blur` `flip` `turn` `spin` `roll` `swing` `skew` `stretch` `squash` `bounce` `elastic` `slam` `tilt` `float` `glitch` `flicker` `typewriter` `scramble` … An exit plays its move backwards. |
|
|
101
|
+
| `ease` | `out` `inOut` `expo` `back` `elastic` `bounce`, springs `snappy` `punchy` `bouncy` `calm` `wobbly`, or `spring(f,d)`, `steps(n)`, `cubic(x1,y1,x2,y2)` |
|
|
102
|
+
| `from`, `outFrom` | the side a move comes from or leaves to (`left`, `right`, `up`, `down`, diagonals) |
|
|
103
|
+
| `dur`, `delay`, `at`, `outAt`, `distance`, `intensity`, `origin`, `blur` | timing, travel, scale, pivot, motion blur |
|
|
104
|
+
| `idle` | a loop while it holds: `float` `bob` `pulse` `breathe` `wiggle` `sway` `drift` `jitter` `spin` `heartbeat` `shimmer` |
|
|
105
|
+
| `emphasis` | hits at a time, a beat or a spoken word: `"shake@1.2, pop@now"` (`pulse` `pop` `shake` `jump` `wobble` `flash` `spin` `rubber` `tada`) |
|
|
106
|
+
| `split`, `order`, `stagger` | text whole, or by `lines` / `words` / `letters`, `forward` `reverse` `center` `edges` `random` |
|
|
107
|
+
| `keys` | your own keyframes: `[{"t":0,"x":-300,"op":0},{"t":0.8,"x":0,"op":1,"ease":"bouncy"}]` — any path |
|
|
108
|
+
|
|
109
|
+
Or let it choreograph itself: `--mood energetic | elegant | playful | cinematic | glitchy | minimal | retro | kinetic`,
|
|
110
|
+
and `--seed <n>` for a new take on every number (the same number always moves the same way). `--speed 2` plays
|
|
111
|
+
it all twice as fast. `volito moves` lists everything. Programs you write get the same kit:
|
|
112
|
+
`const M = motion($, t); M.part("card", { at, in: "pop", box }, markup)`.
|
|
113
|
+
|
|
114
|
+
## 3D and maps
|
|
115
|
+
|
|
116
|
+
The 3D items are real geometry, not tricks: meshes are lit, faces turned away are culled, everything is
|
|
117
|
+
sorted far to near and projected through a perspective camera — then drawn as SVG paths, so 3D renders on
|
|
118
|
+
any machine with no GPU, at the same speed as the rest. 3D text is extruded from the outlines of the
|
|
119
|
+
bundled faces (read straight from the font files), so a logo turns in the brand's own type.
|
|
120
|
+
|
|
121
|
+
```js
|
|
122
|
+
function frame(t, $) {
|
|
123
|
+
const S = scene3d($, { camera: { yaw: -20 + 40 * (t / $.dur), pitch: -8 } });
|
|
124
|
+
S.add(S.text("VOLITO", { face: $.font("display"), size: 220 * $.k, depth: 60 * $.k, color: $.c.fg, side: $.c.accent }));
|
|
125
|
+
return S.render();
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Maps use Natural Earth's countries (177, packed into 30 KB): `worldMap($, { center, zoom })` projects them
|
|
130
|
+
flat (Equal Earth), `worldGlobe(S, …)` puts them on a 3D globe, and `worldFind("UK")` finds one by name,
|
|
131
|
+
short name or ISO number. `volito api` documents both.
|
|
132
|
+
|
|
133
|
+
## CLI
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
volito list # every item
|
|
137
|
+
volito info stat # what it is, every prop
|
|
138
|
+
volito styles # the built-in brand styles
|
|
139
|
+
volito moves # every move, ease, idle, hit and mood
|
|
140
|
+
volito sheet title-card --mood playful --seed 7 # a new choreography
|
|
141
|
+
volito sheet stat --prop value=72 --prop suffix=% --prop chart=ring # frames across time, one PNG
|
|
142
|
+
volito still title-card --aspect 9:16 --t 1.5 --out frame.png
|
|
143
|
+
volito render banner --prop headline="Doors open at 9" --format webm --out banner.webm
|
|
144
|
+
volito check ./my-graphic.js # run it at every aspect, report problems
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
| Option | |
|
|
148
|
+
| --- | --- |
|
|
149
|
+
| `--prop name=value` | a prop (repeat). Lists: `"a; b; c"`. Chart rows: `"Label: 42; Other: 17"` |
|
|
150
|
+
| `--props <json or file>` | every prop at once |
|
|
151
|
+
| `--image name=path` | a picture for an image prop (a file or URL) |
|
|
152
|
+
| `--style <name or DESIGN.md>` | a built-in style or your brand's `DESIGN.md` |
|
|
153
|
+
| `--accent --accent2 --ink --paper #hex` · `--mode dark\|light` · `--display --text Font:900` | overrides on the style |
|
|
154
|
+
| `--aspect 16:9\|9:16\|1:1\|4:5\|WxH` · `--duration s` · `--fps n` · `--width px` | the frame |
|
|
155
|
+
| `--bg #hex\|transparent` | a ground under the graphic |
|
|
156
|
+
| `--words transcript.json` · `--offset s` | land text on a voice (`[{w, s, e}]` or Whisper JSON) |
|
|
157
|
+
| `--motion part.setting=value` | how a part moves (repeat; `*` for every part) — see *Motion without limits* |
|
|
158
|
+
| `--mood m` · `--seed n` · `--speed x` | a choreography, a new take per seed, faster or slower |
|
|
159
|
+
| `--beat in=0.4 --beat out=-0.6` | move the entrance and exit (negative counts from the end) |
|
|
160
|
+
| `--packs <dir>` | more packs (also `VOLITO_PACKS`) |
|
|
161
|
+
| `--format mov\|webm\|mp4\|hevc\|gif\|png` | for `render`; `png`/`svg` for `still` |
|
|
162
|
+
|
|
163
|
+
| Format | |
|
|
164
|
+
| --- | --- |
|
|
165
|
+
| `mov` | ProRes 4444 with alpha — the default; for every desktop editor |
|
|
166
|
+
| `hevc` | HEVC with alpha in .mov — small files for Final Cut, iMovie, Safari (macOS) |
|
|
167
|
+
| `webm` | VP9 with alpha — for the web and CapCut |
|
|
168
|
+
| `mp4` | H.264, no alpha — drawn on `--bg` (black) |
|
|
169
|
+
| `gif` | animated GIF, 1-bit transparency |
|
|
170
|
+
| `png` | a folder of PNG frames with alpha |
|
|
171
|
+
|
|
172
|
+
## AI agents (MCP)
|
|
173
|
+
|
|
174
|
+
<img src=".github/assets/agents.jpg" alt="An agent adds the Volito MCP server, then calls motion_list, motion_preview, motion_check and motion_render to make a lower third in 16:9 and 9:16" width="100%">
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
claude mcp add volito -- npx -y volito mcp
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Cursor, Windsurf and other MCP clients:
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{ "mcpServers": { "volito": { "command": "npx", "args": ["-y", "volito", "mcp"] } } }
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
| Tool | |
|
|
187
|
+
| --- | --- |
|
|
188
|
+
| `motion_list` | find graphics by words or category |
|
|
189
|
+
| `motion_info` | an item's props (and its source with `code: true`) |
|
|
190
|
+
| `motion_styles` | the brand styles |
|
|
191
|
+
| `motion_preview` | a contact sheet as an image — the agent sees how it moves and whether text fits |
|
|
192
|
+
| `motion_still` | one frame as an image |
|
|
193
|
+
| `motion_check` | errors and warnings at every aspect |
|
|
194
|
+
| `motion_render` | render to a file and return its path |
|
|
195
|
+
| `motion_moves` | every move, ease, idle, hit and mood the `motion` settings take |
|
|
196
|
+
| `motion_api` | the program API and the motion kit, for writing new graphics |
|
|
197
|
+
|
|
198
|
+
Every tool takes an `item` or your own `code`, plus `motion`, `mood`, `seed` and `speed`. A ready-made agent skill is in `skill/SKILL.md` — copy it
|
|
199
|
+
to `~/.claude/skills/volito/` for Claude Code.
|
|
200
|
+
|
|
201
|
+
## Node API
|
|
202
|
+
|
|
203
|
+
```js
|
|
204
|
+
import { findItem, renderVideo, renderStill, renderSheet, checkItem } from "volito";
|
|
205
|
+
|
|
206
|
+
const item = findItem("essentials/lower-third");
|
|
207
|
+
const result = await renderVideo(item, {
|
|
208
|
+
props: { name: "Priya Sharma", role: "Product designer" },
|
|
209
|
+
style: "ember", // or the text of a DESIGN.md, or { colors, fonts, … }
|
|
210
|
+
colors: { accent: "#00A86B" }, // overrides
|
|
211
|
+
aspect: "9:16",
|
|
212
|
+
out: "priya.mov",
|
|
213
|
+
});
|
|
214
|
+
console.log(result.file, result.frames, result.warnings);
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Browser
|
|
218
|
+
|
|
219
|
+
```js
|
|
220
|
+
import { loadRegistry, findItem, createPlayer } from "volito/browser";
|
|
221
|
+
|
|
222
|
+
const registry = await loadRegistry(); // the packs, from jsDelivr (or pass your own base URL)
|
|
223
|
+
const player = await createPlayer(canvas, findItem(registry, "headline"), {
|
|
224
|
+
props: { text: "Stop editing. *Start directing.*" },
|
|
225
|
+
style: "neon",
|
|
226
|
+
aspect: "16:9",
|
|
227
|
+
});
|
|
228
|
+
player.play(); // also: pause(), seek(t), update({ props }), destroy()
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
The player runs each program in a sandboxed Web Worker and draws through the same SVG path as the
|
|
232
|
+
renderer, so what plays on the page is what renders. Fonts load from `base` (the package's own
|
|
233
|
+
`fonts/` on jsDelivr by default); serve the package's `fonts/` and `dist/registry.json` to stay offline.
|
|
234
|
+
|
|
235
|
+
## Brand styles
|
|
236
|
+
|
|
237
|
+
36 built in. MONARC PRO's: `ember`, `cream`, `mono`, `neon`, `pop`, `studio`, and the explainer art
|
|
238
|
+
styles `whiteboard`, `sketch`, `pastel`, `pixel`, `collage`, `diorama`, `clay`, `storybook`. And Volito's
|
|
239
|
+
own, each with an animated pattern for a ground:
|
|
240
|
+
|
|
241
|
+
| Style | Look | Pattern |
|
|
242
|
+
| --- | --- | --- |
|
|
243
|
+
| `cobalt` | cobalt colour field, cream type, acid lime | `bauhaus` |
|
|
244
|
+
| `tomato` | tomato-red poster, black slabs | `halftone` |
|
|
245
|
+
| `acid` | acid-yellow sheet, indigo serif | `dither` |
|
|
246
|
+
| `candy` | neo-brutal: outlines, hard shadows, pink and yellow | `dots` |
|
|
247
|
+
| `riso` | risograph pink and blue on paper | `halftone` |
|
|
248
|
+
| `aurora` | night with drifting violet and cyan light, glass | `mesh` |
|
|
249
|
+
| `sunset` | plum ground, coral and gold blooms | `mesh` |
|
|
250
|
+
| `lime` | ink ground, electric lime | `plus` |
|
|
251
|
+
| `sport` | black, volt and blaze, condensed caps | `stripes` |
|
|
252
|
+
| `retro` | seventies cream, orange and mustard, fat serif | `waves` |
|
|
253
|
+
| `diner` | cream, cherry and teal, script headline | `checker` |
|
|
254
|
+
| `blueprint` | graph paper, cobalt ink, serif | `graph` |
|
|
255
|
+
| `forest` | deep green field, peony pink, soft serif | `rings` |
|
|
256
|
+
| `luxe` | black and champagne gold, deco | `sunburst` |
|
|
257
|
+
| `capsule` | outlined pills, coral and lime | `pills` |
|
|
258
|
+
| `memphis` | warm white, hot pink and sky, confetti | `confetti` |
|
|
259
|
+
| `swiss` | off-white, black, signal red, heavy Inter | `tiles` |
|
|
260
|
+
| `terminal` | phosphor green monospace | `dither` |
|
|
261
|
+
| `vapor` | synthwave magenta and cyan | `waves` |
|
|
262
|
+
| `scifi` | HUD cyan, geometric display | `plus` |
|
|
263
|
+
| `mint` | mint sheet, coral pop | `dots` |
|
|
264
|
+
| `editorial` | magazine black and red, didone | `hatch` |
|
|
265
|
+
|
|
266
|
+
`volito styles` lists them all. Or pass a `DESIGN.md`:
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
---
|
|
270
|
+
name: acme
|
|
271
|
+
mode: light
|
|
272
|
+
colors:
|
|
273
|
+
accent: "#00A86B"
|
|
274
|
+
accent2: "#FFD23F"
|
|
275
|
+
ink: "#101418"
|
|
276
|
+
paper: "#FAFAF7"
|
|
277
|
+
fonts:
|
|
278
|
+
display: "Poppins:800"
|
|
279
|
+
text: "Inter:600"
|
|
280
|
+
motion: bouncy
|
|
281
|
+
surface: glass
|
|
282
|
+
---
|
|
283
|
+
# Acme
|
|
284
|
+
Friendly, confident, never shouty.
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Faces available: Inter, Space Grotesk, Space Mono, Poppins, Playfair Display, Montserrat, Anton, Outfit,
|
|
288
|
+
Gabarito, Caveat, Press Start 2P, Permanent Marker, Patrick Hand, Fredoka, IM Fell English, Bebas Neue,
|
|
289
|
+
DM Serif Display, Archivo Black, Syne, Unbounded, Righteous, Orbitron, Pacifico, Fraunces and Bricolage Grotesque.
|
|
290
|
+
|
|
291
|
+
### Patterns
|
|
292
|
+
|
|
293
|
+
A style's `texture` can name any of sixteen animated patterns, and every ground the items draw picks it
|
|
294
|
+
up: `dots`, `plus`, `graph`, `hatch`, `stripes`, `checker`, `halftone`, `dither`, `waves`, `rings`, `mesh`,
|
|
295
|
+
`confetti`, `bauhaus`, `tiles`, `pills`, `sunburst` (the editor's `grid`, `glow`, `grain`, `paper`, `board`,
|
|
296
|
+
`parchment`, `pixel` and `studio` still work). Programs can draw one anywhere:
|
|
297
|
+
|
|
298
|
+
```js
|
|
299
|
+
s += $.pattern(t, "halftone", { box: { x: 0, y: 0, w: W, h: H }, a: 1.2, scale: 1, speed: 0.5 });
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Options: `box`, `color`, `color2`, `a` (strength), `scale`, `speed`, `angle`, `at` ([x, y] for rings,
|
|
303
|
+
halftone, sunburst), `count`, `seed`, `r`. They are pure functions of time like everything else — no GPU.
|
|
304
|
+
|
|
305
|
+
## Write your own
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
volito new promo-card # item.json + frame.js from a template
|
|
309
|
+
volito sheet ./motion/promo-card
|
|
310
|
+
volito api # the whole $ runtime
|
|
311
|
+
volito guide # how items and packs are laid out
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
```js
|
|
315
|
+
function frame(t, $) {
|
|
316
|
+
const p = $.data, k = $.k; // props, and the canvas scale (1 at 1080 px)
|
|
317
|
+
const tin = $.beat("in", 0.2);
|
|
318
|
+
return $.g($.enter(t, tin, { dy: 60 * k, ox: $.W / 2, oy: $.H / 2 }),
|
|
319
|
+
$.card($.W / 2 - 320 * k, $.H / 2 - 110 * k, 640 * k, 220 * k),
|
|
320
|
+
$.text($.case(p.title ?? "Hello"), { ...$.font("display"), size: 80 * k, x: $.W / 2, y: $.H / 2 - 44 * k, anchor: "middle" }));
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
A program is a pure function of `t`: no `Date`, `Math.random` (use `$.hash`), timers, network or DOM.
|
|
325
|
+
Size by `$.k`, colour from `$.c`, faces from `$.font(role)`, and a brand's `DESIGN.md` re-skins it.
|
|
326
|
+
A pack is a folder with `pack.json`, a `shared.js` of helpers and one folder per item; load it with
|
|
327
|
+
`--packs <dir>`.
|
|
328
|
+
|
|
329
|
+
## How it renders
|
|
330
|
+
|
|
331
|
+
Node runs each program in a fresh `vm` context holding the same worker source MONARC PRO uses.
|
|
332
|
+
Only strings and numbers cross into it, and eval, `Function`, `require`, `process` and the network are
|
|
333
|
+
out of reach. Text is measured with fontkit against the bundled faces; frames are rasterised by
|
|
334
|
+
[resvg](https://github.com/RazrFalcon/resvg); text beyond a face's Latin cut is shaped by fontkit and
|
|
335
|
+
drawn as outlines, and dash patterns written against `pathLength` (which resvg ignores) are scaled to
|
|
336
|
+
each shape's real length first. Frames that don't change are drawn once. The motion kit, the 3D kit and
|
|
337
|
+
the map data ship as libraries that are added to a program when it is built: items stay small, and the
|
|
338
|
+
60 000-character limit applies only to what an item's author (or an agent) wrote.
|
|
339
|
+
|
|
340
|
+
`vm` keeps mistakes contained, but it is not a security boundary. Run packs you trust, as you would
|
|
341
|
+
any npm package.
|
|
342
|
+
|
|
343
|
+
## Development
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
pnpm install # Node 22.18 or newer for development (the package itself runs on Node 20.10+)
|
|
347
|
+
pnpm build # fonts/ from Fontsource, then dist/
|
|
348
|
+
pnpm test
|
|
349
|
+
node dist/cli.js sheet lower-third --mood playful --seed 7 --out sheet.png
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
`node scripts/review.mjs <aspect> <style> [items | pack:<id>] [times]` writes contact sheets to `out/`,
|
|
353
|
+
`node scripts/styles.mjs [styles] [items]` one row per style, `node scripts/strip.mjs <items> <aspect> <style>
|
|
354
|
+
<times> '<props JSON>'` the same props across several items,
|
|
355
|
+
`node scripts/variants.mjs <item>` one item under many seeds, and `node scripts/demo-grid.mjs <item>` a 3×3
|
|
356
|
+
video of nine choreographies.
|
|
357
|
+
|
|
358
|
+
The engine in `src/engine/` (the runtime every program draws with, its sandbox and the brand styles) is the
|
|
359
|
+
same code MONARC PRO uses, copied from MONARC PRO's core so this repo stands alone; `src/engine/SOURCE.json`
|
|
360
|
+
names the commit. With a MONARC PRO checkout (`../monarc`) next to this one, `pnpm sync-engine` brings it up to date and
|
|
361
|
+
`node scripts/sync-engine.mjs --check` reports drift. Packs, the motion kit (`src/kit.ts`), the extra
|
|
362
|
+
faces (`src/fonts-extra.ts`), styles (`src/styles-extra.ts`) and patterns (`src/patterns.ts`) live here;
|
|
363
|
+
`src/engine.ts` splices the faces and patterns into the runtime without editing the copy.
|
|
364
|
+
|
|
365
|
+
## Licence
|
|
366
|
+
|
|
367
|
+
- The engine: [MIT](LICENSE).
|
|
368
|
+
- The MONARC packs: the [MONARC Packs License](PACKS-LICENSE.md). Use them in any video, personal or
|
|
369
|
+
commercial, with no attribution required. Don't resell them as templates.
|
|
370
|
+
- The fonts: each family's SIL Open Font License, in `fonts/licenses/` of the installed package
|
|
371
|
+
(`pnpm build` writes that folder in a checkout).
|
|
372
|
+
|
|
373
|
+
## Contributing
|
|
374
|
+
|
|
375
|
+
Issues and pull requests are welcome: [CONTRIBUTING.md](CONTRIBUTING.md) covers the setup, the tests and
|
|
376
|
+
how items and packs are written. Report security problems privately, as [SECURITY.md](SECURITY.md) says.
|
|
377
|
+
|
|
378
|
+
Made by [MONARC STUDIOS](https://monarcpro.app), the team behind [MONARC PRO](https://monarcpro.app).
|