motion_list
List motion graphics
The graphics in the packs: ref, overlay or full frame, default length, what it is.
searchcategoryio.github.monarcpro由 GitHub 帳號 monarcpro 發布v0.3.1更新於 Nov 1, 2026
Motion graphics as code: find, preview and render lower thirds, titles, charts and 3D to video
尋找、預覽、檢查並算繪具品牌風格的動態圖像——下三分之一字幕、標題、圖表、3D——輸出含透明通道的影片檔。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
Brand-aware, voice-synced motion graphics as code — for developers and AI agents.
[npm version] [CI] [Engine licence: MIT] [Docs on volito.dev]
Website · Docs · Packs · For agents · npm · Changelog
By MONARC STUDIOS, the team behind MONARC PRO. Volito is the motion graphics engine
inside the MONARC PRO video editor, opened up; the name is Latin for “to flutter”.
Every graphic is a small program — function frame(t, $) returns the SVG of one frame — so it is
readable, diffable, seekable to any frame, and something an AI agent can write and fix. It ships with
107 ready-made graphics in twelve packs (3D, maps, transitions, kinetic type, interactive UI and filter effects among them), 36 brand styles,
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.
DESIGN.md, or a couple of overrides, and the whole pack re-skins.--sound gives any render a sound track Volito synthesises itself — a pop for
every spring, a whoosh for every move across the frame, ticks for letters, a hit for a slam, a bed in a
key — and a program can design its own cues beside its frames.
[A 10-second Volito intro: kinetic type, the logo dropping in, an extruded 3D wordmark and an end card]
This intro is a Volito program: kinetic type, a 3D wordmark and an end card, rendered in Node.
Volito was first published as @monarcpro/motion; that package is deprecated in favour of this one.
Node 20.10 or newer. Video formats need ffmpeg on your PATH (or VOLITO_FFMPEG);
stills, contact sheets and PNG frames do not. WebM needs an ffmpeg built with libvpx.
107 graphics in twelve packs. Every one takes any brand style and any aspect, and every part of it takes any move.
volito info <item> lists every prop. To see them all live, serve this package's folder and
open examples/gallery.html.
Every item is made of named parts (volito info lower-third lists them: scrim, spine, plate,
name, role). Any part takes any move, and the moves combine freely:
Or let it choreograph itself: --mood energetic | elegant | playful | cinematic | glitchy | minimal | retro | kinetic,
and --seed <n> for a new take on every number (the same number always moves the same way). --speed 2 plays
it all twice as fast. volito moves lists everything. Programs you write get the same kit:
const M = motion($, t); M.part("card", { at, in: "pop", box }, markup).
The 3D items are real geometry, not tricks: meshes are lit, faces turned away are culled, everything is sorted far to near and projected through a perspective camera — then drawn as SVG paths, so 3D renders on any machine with no GPU, at the same speed as the rest. 3D text is extruded from the outlines of the bundled faces (read straight from the font files), so a logo turns in the brand's own type.
Maps use Natural Earth's countries (177, packed into 30 KB): worldMap($, { center, zoom }) projects them
flat (Equal Earth), worldGlobe(S, …) puts them on a 3D globe, and worldFind("UK") finds one by name,
short name or ISO number. volito api documents both.
Every render can carry sound, and Volito makes it the way it makes pictures: from code, from nothing. No
sample library, no files to find. --sound reads the graphic's own motion — every part's move leaves a
mark — and gives each its sound: a spring pops, a move across the frame whooshes (louder the further it
travels), letters tick, a typewriter types, a slam hits, a glitch zaps, a burst sparkles. --bed Dm lays
a pad under it in a key, and it steps back under every hit on its own.
A program designs its own sound beside its frames — function sound($) runs once with the same $
($.dur, $.beat, $.at(word), $.data), so cues land on the same beats the picture uses:
Each cue takes at, dur, level (0–2), pitch (semitones), pan (-1…1) and seed. The track is
stereo 48 kHz, limited, with a room; --sound-out track.wav writes it alone for an editor's timeline
beside a ProRes overlay. MP4 and HEVC carry AAC, ProRes carries PCM, WebM carries Opus; PNG and GIF carry
none. volito api prints the whole sound reference.
Any set of options can be saved as a spec: one JSON file for one graphic that every command takes in place of an item. Keep it in your repo, review it, hand it to an agent; options on the command line win over it.
Paths inside a spec (a DESIGN.md, a program, a transcript, image props) are relative to the spec file.
program points at your own frame(t, $) file, or code holds it inline. volito bundle priya.volito.json
packs the spec and those files into one priya.volito that every command takes, anywhere.
The check at each aspect, then what the frames show: when the graphic settles, how long it holds still and
when it leaves (with a warning when the entrance is slow or the hold too short for its words), how much of
an overlay sits under Reels', Shorts' and TikTok's interface at 9:16, and a contact sheet per aspect in
volito-review/<item>/ with a review.md.
Or by hand: claude mcp add volito -- npx -y volito mcp, codex mcp add volito -- npx -y volito mcp, and for
Cursor, Windsurf and other MCP clients:
The preview, still, check, review, render and sound tools take an item, your own code or a spec file, plus motion, mood, seed and speed. A ready-made agent skill is in skills/volito/SKILL.md — npx volito init installs it for Claude Code, npx skills add monarcpro/volito for other agents, or copy it
to ~/.claude/skills/volito/ for Claude Code.
The player runs each program in a sandboxed Web Worker and draws through the same SVG path as the
renderer, so what plays on the page is what renders. Fonts load from base (the package's own
fonts/ on jsDelivr by default); serve the package's fonts/ and dist/registry.json to stay offline.
<volito-player>The same player as an HTML element, with controls and aspect tabs. One script, no build step:
Or import "volito/player" in a bundled app. Each tab lays the item out again for that aspect, not a
crop. It loads when it nears the screen, pauses off screen and in a hidden tab, and does not autoplay
for readers who prefer reduced motion.
Properties and methods: play(), pause(), seek(t), load(), currentTime, duration, paused,
ended, ready, playbackRate, props, brand, aspect, options (anything else a build takes:
words, media, beats), program, warnings and player (the MotionPlayer underneath). Events,
none of which bubble: ready, play, pause, ended, timeupdate (about ten a second),
durationchange, aspectchange, warnings and error. Style it with CSS custom properties
(--volito-accent, --volito-stage, --volito-max-height, …) or ::part(); Space, ←/→ (a frame,
Shift for a second), Home and End work when it has focus. examples/player.html shows each of these.
A graphic can be a live UI element: its timeline cut into named states that page events and your code
switch between. Every item in the ui pack declares its own, so this works with no setup:
Any graphic can have states: states='{"idle":{"from":"idle","to":"hover","play":"loop"},…}' (times are seconds or
beat names; play is once, loop or hold; next hands a finished once on), and
on="pointerenter(idle): hover; pointerleave(hover): idle; click: press" maps page events to them.
36 built in. MONARC PRO's: ember, cream, mono, neon, pop, studio, and the explainer art
styles whiteboard, sketch, pastel, pixel, collage, diorama, clay, storybook. And Volito's
own, each with an animated pattern for a ground:
volito styles lists them all. Or pass a DESIGN.md:
Faces available: Inter, Space Grotesk, Space Mono, Poppins, Playfair Display, Montserrat, Anton, Outfit, Gabarito, Caveat, Press Start 2P, Permanent Marker, Patrick Hand, Fredoka, IM Fell English, Bebas Neue, DM Serif Display, Archivo Black, Syne, Unbounded, Righteous, Orbitron, Pacifico, Fraunces and Bricolage Grotesque.
A style's texture can name any of sixteen animated patterns, and every ground the items draw picks it
up: dots, plus, graph, hatch, stripes, checker, halftone, dither, waves, rings, mesh,
confetti, bauhaus, tiles, pills, sunburst (the editor's grid, glow, grain, paper, board,
parchment, pixel and studio still work). Programs can draw one anywhere:
Options: box, color, color2, a (strength), scale, speed, angle, at ([x, y] for rings,
halftone, sunburst), count, seed, r. They are pure functions of time like everything else — no GPU.
A program is a pure function of t: no Date, Math.random (use $.hash), timers, network or DOM.
Size by $.k, colour from $.c, faces from $.font(role), and a brand's DESIGN.md re-skins it.
A pack is a folder with pack.json, a shared.js of helpers and one folder per item; load it with
--packs <dir>.
Node runs each program in a fresh vm context holding the same worker source MONARC PRO uses.
Only strings and numbers cross into it, and eval, Function, require, process and the network are
out of reach. Text is measured with fontkit against the bundled faces; frames are rasterised by
resvg; text beyond a face's Latin cut is shaped by fontkit and
drawn as outlines, and dash patterns written against pathLength (which resvg ignores) are scaled to
each shape's real length first. Frames that don't change are drawn once. The motion kit, the 3D kit and
the map data ship as libraries that are added to a program when it is built: items stay small, and the
60 000-character limit applies only to what an item's author (or an agent) wrote.
vm keeps mistakes contained, but it is not a security boundary. Run packs you trust, as you would
any npm package.
node scripts/review.mjs <aspect> <style> [items | pack:<id>] [times] writes contact sheets to out/,
node scripts/styles.mjs [styles] [items] one row per style, node scripts/strip.mjs <items> <aspect> <style> <times> '<props JSON>' the same props across several items,
node scripts/variants.mjs <item> one item under many seeds, and node scripts/demo-grid.mjs <item> a 3×3
video of nine choreographies.
The engine in src/engine/ (the runtime every program draws with, its sandbox and the brand styles) is the
same code MONARC PRO uses, copied from MONARC PRO's core so this repo stands alone; src/engine/SOURCE.json
names the commit. With a MONARC PRO checkout (../monarc) next to this one, pnpm sync-engine brings it up to date and
node scripts/sync-engine.mjs --check reports drift. Packs, the motion kit (src/kit.ts), the extra
faces (src/fonts-extra.ts), styles (src/styles-extra.ts) and patterns (src/patterns.ts) live here;
src/engine.ts splices the faces and patterns into the runtime without editing the copy.
fonts/licenses/ of the installed package
(pnpm build writes that folder in a checkout).Issues and pull requests are welcome: CONTRIBUTING.md covers the setup, the tests and how items and packs are written. Report security problems privately, as SECURITY.md says.
Made by MONARC STUDIOS, the team behind MONARC PRO.
來源:README.md,提交 af1b115
List motion graphics
The graphics in the packs: ref, overlay or full frame, default length, what it is.
searchcategoryDescribe a motion graphic
Everything about one item: what it shows, its length, aspects and every prop with its type and default. `code: true` adds its source (to learn from or adapt).
codeitem必填List brand styles
The built-in brand styles (colour roles, faces, motion feel). Any style can be replaced by a DESIGN.md, or tuned with `colors`.
無需輸入參數。
List motion settings
Every move (entrances, and exits as the same move played backwards), ease, idle loop, emphasis hit, mood, text split and order the `motion` settings take. Any part of any graphic can use any of them.
無需輸入參數。
Preview a motion graphic
A contact sheet: frames across the graphic's time in one image, so you can see how it moves and whether the text fits. Overlays are shown on a grey stand-in for footage.
codeitemmoodseedspecbeatspropsspeedstyletimeswordsaspect另有 5 個Render one frame
One frame as a PNG (alpha kept), returned as an image and written to `out` when given.
toutcodeitemmoodseedspecbeatspropsspeedstylewords另有 6 個Check a motion graphic
Runs it frame by frame at each aspect and reports errors (throws, SVG that does not parse, a graphic that draws nothing) and warnings (text running off the frame, words never spoken, props that do not fit). Use it in a write → check → preview loop.
codeitemmoodseedspecbeatspropsspeedstylewordsaspectcolors另有 4 個Review a motion graphic
Everything to look at before rendering, measured: the check at each aspect, when it settles and how long it holds still (with a warning when the entrance is slow or the hold too short to read its words), how much of an overlay sits under Reels', Shorts' and TikTok's own interface at 9:16, and a contact sheet per aspect (returned as images, written with a review.md to outDir).
codeitemmoodseedspecbeatspropsspeedstylewordsaspectcolors另有 5 個Render a motion graphic
Render to a file. Formats: mov — ProRes 4444 with alpha (.mov) — drops onto footage in Premiere, Resolve, Final Cut, After Effects; webm — VP9 with alpha (.webm) — for the web and CapCut; needs an ffmpeg built with libvpx; mp4 — H.264 (.mp4) — no alpha: drawn on --bg (black by default); hevc — HEVC with alpha (.mov) — small files for Final Cut, iMovie and Safari; macOS only (VideoToolbox); gif — animated GIF — 1-bit transparency, or drawn on --bg; png — a folder of PNG frames with alpha — no ffmpeg needed. Returns the file's path.
bedfpsoutcodeitemmoodseedspecbeatspropssoundspeed另有 12 個Sound design for a motion graphic
The graphic's sound alone, as a .wav, with its cue list: the program's own sound($) cues when it defines them, else cues read from its motion (a pop for every spring, a whoosh for every move across the frame, ticks for letters, a hit for a slam). Needs no ffmpeg. Use motion_render with sound: true to mux it into the video instead.
bedoutcodeitemmoodseedspecbeatspropsspeedstylewords另有 6 個Validate a Graphic spec
Checks a Graphic spec before rendering: its shape, the item it names, files it points at, props against the item (lengths, types, choices), motion parts, aspect and length. A spec is one JSON document for one graphic: { "volito": 1, "item": "lower-third", "props": {…}, "style": "ember", "aspect": "9:16", "motion": {…}, "mood", "seed", "sound" }. Pass it inline or as a file path; then render it with motion_render { spec: "path" }.
spec必填Program API
How to write your own graphic: the frame(t, $) contract, the whole $ runtime (timing, motion, text, shapes, cards, charts, art styles, brand colours and faces) and how items and packs are laid out. Read before passing `code`.
無需輸入參數。
已滿足適用檢查項的 80%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
請在儲存庫或註冊中心條目中宣告授權條款。
npx volito render lower-third \ --prop name="Priya Sharma" --prop role="Product designer" \ --style ember --aspect 16:9 --out priya.movnpm install volito # or run it with npx, nothing to installvolito render lower-third \ --motion name.in=typewriter --motion plate.in=iris --motion "*.ease=bouncy" \ --motion role.emphasis=pulse@2 --motion spine.idle=pulse --out priya.movfunction frame(t, $) { const S = scene3d($, { camera: { yaw: -20 + 40 * (t / $.dur), pitch: -8 } }); S.add(S.text("VOLITO", { face: $.font("display"), size: 220 * $.k, depth: 60 * $.k, color: $.c.fg, side: $.c.accent })); return S.render();}volito render logo-sting --prop wordmark=VOLITO --sound --bed Dm --format mp4 --out sting.mp4volito sound lower-third --prop name="Priya Sharma" --out priya.wav # the track alone, with its cue listfunction sound($) { return { cues: [ { at: 0.2, kind: "riser", dur: 1.1 }, { at: $.beat("in", 1.3), kind: "hit", level: 1.1 }, { at: 1.5, kind: "shimmer", dur: 1.2, pan: 0.3 }, { at: -0.6, kind: "ding", note: "A5", level: 0.6 }, // negative counts from the end ], bed: { key: "D", mode: "minor", from: 0.8, to: -0.4, level: 0.5 }, auto: false, // true adds the motion's own cues on top };}volito list # every itemvolito info stat # what it is, every propvolito styles # the built-in brand stylesvolito moves # every move, ease, idle, hit and moodvolito sheet title-card --mood playful --seed 7 # a new choreographyvolito sheet stat --prop value=72 --prop suffix=% --prop chart=ring # frames across time, one PNGvolito still title-card --aspect 9:16 --t 1.5 --out frame.pngvolito render banner --prop headline="Doors open at 9" --format webm --out banner.webmvolito check ./my-graphic.js # run it at every aspect, report problemsvolito spec lower-third --prop name="Priya Sharma" --style ember --aspect 9:16 --out priya.volito.jsonvolito validate priya.volito.json # its props, parts, files and aspect against the itemvolito render priya.volito.json --prop role="Founder"volito schema # the JSON Schema (also at https://volito.dev/schema/graphic.v1.json){ "$schema": "https://volito.dev/schema/graphic.v1.json", "volito": 1, "item": "essentials/lower-third", "props": { "name": "Priya Sharma", "role": "Product designer" }, "style": "./DESIGN.md", "aspect": "9:16", "motion": { "name": { "in": "typewriter" } }, "mood": "elegant", "seed": 4, "sound": { "bed": "Dm" }, "render": { "format": "mov", "out": "renders/priya.mov" }}volito review lower-third --prop name="Priya Sharma" --aspect 9:16npx volito init # adds the server for Claude Code, Cursor and VS Code, and the skillnpx volito doctor # what is ready: Node, FFmpeg formats, fonts, each agent's setup{ "mcpServers": { "volito": { "command": "npx", "args": ["-y", "volito", "mcp"] } } }import { findItem, renderVideo, renderStill, renderSheet, checkItem } from "volito";
const item = findItem("essentials/lower-third");const result = await renderVideo(item, { props: { name: "Priya Sharma", role: "Product designer" }, style: "ember", // or the text of a DESIGN.md, or { colors, fonts, … } colors: { accent: "#00A86B" }, // overrides aspect: "9:16", out: "priya.mov",});console.log(result.file, result.frames, result.warnings);import { loadRegistry, findItem, createPlayer } from "volito/browser";
const registry = await loadRegistry(); // the packs, from jsDelivr (or pass your own base URL)const player = await createPlayer(canvas, findItem(registry, "headline"), { props: { text: "Stop editing. *Start directing.*" }, style: "neon", aspect: "16:9",});player.play(); // also: pause(), seek(t), update({ props }), destroy()<script type="module" src="https://cdn.jsdelivr.net/npm/volito/dist/player.js"></script>
<volito-player item="essentials/lower-third" props='{"name":"Ada Lovelace","role":"First programmer"}' brand="cobalt" aspects="all" controls autoplay loop></volito-player><volito-player item="ui/button" aspect="1000x500" ground="none" props='{"label":"Get started"}'></volito-player><script type="module"> const button = document.querySelector("volito-player"); button.addEventListener("statechange", (e) => console.log(e.detail.to)); // enter → idle → hover → press → loading await fetch("/api/signup", { method: "POST" }); button.state = "done"; // lands on the check</script>---name: acmemode: lightcolors: accent: "#00A86B" accent2: "#FFD23F" ink: "#101418" paper: "#FAFAF7"fonts: display: "Poppins:800" text: "Inter:600"motion: bouncysurface: glass---# AcmeFriendly, confident, never shouty.s += $.pattern(t, "halftone", { box: { x: 0, y: 0, w: W, h: H }, a: 1.2, scale: 1, speed: 0.5 });volito new promo-card # item.json + frame.js from a templatevolito sheet ./motion/promo-cardvolito api # the whole $ runtimevolito guide # how items and packs are laid outfunction frame(t, $) { const p = $.data, k = $.k; // props, and the canvas scale (1 at 1080 px) const tin = $.beat("in", 0.2); return $.g($.enter(t, tin, { dy: 60 * k, ox: $.W / 2, oy: $.H / 2 }), $.card($.W / 2 - 320 * k, $.H / 2 - 110 * k, 640 * k, 220 * k), $.text($.case(p.title ?? "Hello"), { ...$.font("display"), size: 80 * k, x: $.W / 2, y: $.H / 2 - 44 * k, anchor: "middle" }));}pnpm install # Node 22.18 or newer for development (the package itself runs on Node 20.10+)pnpm build # fonts/ from Fontsource, then dist/pnpm testnode dist/cli.js sheet lower-third --mood playful --seed 7 --out sheet.png