From voxflow
Turns long articles, notes, or reports into vertical 1080×1920 card videos with TTS narration and 13 visual themes. Use when a user wants to create narrated slide videos for social platforms like TikTok, Xiaohongshu, or LinkedIn.
How this skill is triggered — by the user, by Claude, or both
Slash command
/voxflow:sliceThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn an article, note, paper, or rough topic into a vertical 1080×1920 card video — narrated, paginated to TTS rhythm, with 13 visual themes covering 抖音 / 小红书 / 知乎 / X / 公众号 / 飞书 / TikTok / LinkedIn / 雪球 / 微博 / 即刻 / B 站 / 播客.
Turn an article, note, paper, or rough topic into a vertical 1080×1920 card video — narrated, paginated to TTS rhythm, with 13 visual themes covering 抖音 / 小红书 / 知乎 / X / 公众号 / 飞书 / TikTok / LinkedIn / 雪球 / 微博 / 即刻 / B 站 / 播客.
Renamed from
paper-slide→slice. The product is now called Slice (voxflow.studio/apps/slice); the legacy slug is no longer registered.paper-slidesurvives only as one of the 13 theme ids.
| Context | Route | Notes |
|---|---|---|
| User wants the deck JSON (no render) — fast, scriptable, pipeable | CLI: voxflow slice <article.md> --theme <id> | Hits /api/slice/deck directly (200 quota; renamed from /api/paper-slide/slice in #3307 Deploy 2). Returns the canonical 5–8 card deck JSON validated by the same backend the web app uses, all 13 themes accepted. No mp4 — pipe --json into custom tools, the local Remotion composition (contributors), or paste into the web app for rendering. |
| User is iterating on a deck — multi-round edits to copy/structure before committing to a render | CLI: voxflow slice stage <deck.json> | Boots a localhost preview page (no quota cost) that hot-reloads on every save of the deck JSON. Useful loop: voxflow slice ... -o deck.json → voxflow slice stage deck.json → tweak prompt → re-run slice → preview updates instantly. See Stage Route below. |
| User wants a finished mp4 + cover (default consumer flow) | Web app: https://voxflow.studio/apps/slice | The only place that runs the exact 6 Slice themes end-to-end. Free tier ships 9:16 mp4 + multi-aspect cover (9:16/3:4/1:1). |
User wants a similar-looking video offline via CLI but the deck-only voxflow slice isn't enough | voxflow present or voxflow picstory --style sketchnote | Approximation only. Different visual schemes; cannot output Slice's editorial-mag / notion-card / brutalist / glass-dark themes. See CLI Approximation below. |
Local checkout has video-present/src/compositions/PaperSlide (VoxFlow contributors only) | Local Remotion experiment script | See Local Remotion Route. Note: experiment script only exercises the original paper-slide composition; other 12 themes render via cloud worker only. |
| User only wants strategy or copy | Produce the deck JSON via voxflow slice (or by hand following the schema); tell them which renderer to use. | The deck schema is renderer-agnostic; same JSON renders in any theme. |
| User asks to open-source / package | Keep private APIs, tokens, generated audio, MP4 outputs out of the skill package. |
references/themes.md once — it lists all 13 themes, their visual signature, and which platform / content type each one fits. Don't default to paper-slide for everything.figureKeyword; the renderer maps it to a local hand-drawn scene / pose / icon. (See references/deck-schema.md.)Read references/deck-schema.md when writing deck JSON, picking keywords, or debugging layout. Read references/example-decks.md for seed decks. Read references/themes.md when picking a theme or explaining theme tradeoffs.
https://voxflow.studio/apps/slice
Workflow:
references/themes.md) + a voice (6 production voices: 男主播 / 霸总男声 / 闲聊男声 / 小美 / 小心 / 小徐).Tell the user this is the only route that produces the exact Slice render for all 13 themes — they're private Remotion compositions, not shipped with the CLI.
voxflow slice)For users who want the structured deck JSON without the render — fast (one round-trip, 200 quota), pipeable, theme-aware. Hits the same /api/slice/deck backend the web app uses, so the deck shape is canonical.
voxflow slice article.md # default theme: paper-slide
voxflow slice article.md --theme editorial-mag -o deck.json
voxflow slice --text "long article ..." --theme bold-poster --json | jq .deck
When to use this route:
video-present/src/compositions/PaperSlide Remotion composition and wants to render the deck locally — voxflow slice ... --json -o props.json then feed props.json into the experiment script.deck.cards[*].caption + narration).Limits:
voxflow slice with voxflow narrate if you want per-card audio without rendering.voxflow slice stage (iteration preview)For the human-in-the-loop iteration phase before committing to a cloud render. Stage spins up a localhost HTTP server with hot reload — every save of the deck JSON updates the page instantly. No quota cost, no network round-trip.
voxflow slice deck.md -o deck.json # 1. produce a deck (200 quota)
voxflow slice stage deck.json # 2. open localhost preview (free)
# 3. edit deck.json by hand or re-run slice
# 4. preview hot-reloads on save
Want a no-quota, no-login starter? Use the bundled sample directly:
voxflow slice stage examples/11-slice-stage/sample-deck.json
Flags:
voxflow slice stage <deck.json> [--port <n>] [--theme <id>] [--no-open]
--port Default 5180. Auto-skips +1 up to 5189 on conflict.
--theme Lock the preview to one theme (must be one of the 13 valid ids).
--no-open Don't auto-launch the browser (CI / SSH / agent environments).
When to use Stage:
deck.json and the human reviews via browser — the page updates without the agent having to re-print paths.The Stage UI ships text-first export controls so cards can be reused on text-only platforms without paying for a full render:
{title}\n\n{caption (if distinct)}\n\n{narration} (trimmed). Drop into a tweet, 即刻 post, blog snippet.<seriesTitle>.json (filename auto-sanitised, capped at 60 chars + .json).Formatters live in lib/stage-core/deck-format.js (formatCardAsText, formatDeckAsMarkdown, suggestDeckFilename) and are unit-tested in tests/deck-format.test.js. Their source is stringified into the served HTML via Function.prototype.toString() so the browser executes the same code the tests cover — single source of truth, no double maintenance.
Image / MP4 carousel exports for 小红书 / 微博 / 公众号 头图 are NOT in Phase 1.4 text-only. Those land in a future Phase once renderStill per-card thumbnails are available (they require a backend Remotion endpoint that doesn't exist yet).
What Stage is NOT:
renderStill.Stage doesn't try to be Cursor — it's a visual feedback closer that hands prompts to whatever AI tool the user already has open (Claude Code, Cursor, ChatGPT, anything). Two affordances cover the whole edit loop:
| Intent | UX | Output |
|---|---|---|
| Whole-card rewrite ("regen this card, keep the rest") | Hover the card → corner button Edit with AI | Modal with a prompt: file path + cards[N] JSON snippet + <your instruction> slot |
| Local phrase rewrite ("just this phrase is off") | Select text inside a card → floating Edit selection with AI button appears | Modal with a prompt: file path + the exact selected substring quoted + full card JSON for context |
The user types the instruction (e.g. "shorten to 12 chars, more visceral"), clicks Copy prompt, pastes into their AI. The AI uses its native file-edit tools (Claude Code's Edit, Cursor's Apply, etc.) to rewrite the file. Stage's SSE watcher hot-reloads the preview within ~150 ms. Loop until satisfied.
Why this design and not an embedded chat / MCP server: see #3330 for the full design rationale (universal copy-paste vs. Claude Code-only MCP, cost vs. coverage tradeoff, future MCP upgrade path conditional on usage telemetry).
If the user must have an mp4 from the CLI alone (no web app, no contributor Remotion access), fall back to voxflow present or voxflow picstory — they cover the same article-to-video shape but with their own visual schemes, not the exact 13 Slice themes.
voxflow present --text "paste article or summary" --style editorial --output slice-approx.mp4
voxflow picstory --topic "topic" --style sketchnote --scenes 4 --output slice-sketch.mp4
Closest CLI scheme per Slice theme:
| Slice theme | Closest CLI route |
|---|---|
| paper-slide | voxflow picstory --style sketchnote |
| editorial-mag | voxflow present --style editorial |
| bold-poster | voxflow present --style brutalist (closest weight) |
| notion-card | voxflow present --style minimal |
| brutalist | voxflow present --style brutalist |
| glass-dark | voxflow present --style noir or --style aurora |
| editorial-stencil | voxflow present --style editorial (no letterbox / dual-tone equivalent) |
| broadsheet | voxflow present --style editorial (no FT salmon palette) |
| blueprint | voxflow picstory --style chalkboard (closest grid/diagram feel) |
| daisy-pastel | voxflow picstory --style sketchnote (no pastel illustration equivalent) |
| showa-catalog | voxflow picstory --style vintage_newspaper (no city-pop equivalent) |
| photo-feature | voxflow picstory --style photo (photo-feature needs imageUrl per card — see deck-schema) |
| atmospheric | voxflow present --style noir |
Always tell the user: "This is a Slice-adjacent draft. The exact 13-theme renderer lives on voxflow.studio/apps/slice."
Skip if video-present/src/compositions/PaperSlide is not in your checkout — it's private code; npm / skills users don't have it.
From the contributor checkout root:
cd video-present
node scripts/paper-slide-experiments.mjs
Render a subset:
cd video-present
PAPER_SLIDE_EXPERIMENT_FILTER=research-reading node scripts/paper-slide-experiments.mjs
Verify outputs:
ffprobe -v error -select_streams v:0 \
-show_entries stream=width,height,duration \
-of default=nw=1 out/paper-slide-experiments/research-reading.mp4
ffmpeg -y -hide_banner -loglevel error -ss 9 \
-i out/paper-slide-experiments/research-reading.mp4 \
-frames:v 1 -q:v 2 out/paper-slide-experiments/research-reading-body.jpg
Expected: 1080×1920, 20-35 seconds, no black flashes, no caption overflow, figure not clipped.
problem-framing, evidence-board, customer-pain, timeline-review, owner-deadline, risk-guardrail, cashflow-ledger, team-alignment, before-after, learning-loop, decision-fork, growth-system.thinking, running, climbing, stuck, celebrating, briefcase, users, target, clock, flame, lightbulb, chart-bar.thinking on every card.photo-feature and atmospheric use each card's imageUrl as a backdrop and degrade to an SVG stub when missing — see references/deck-schema.md.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub voxflowstudio/skills --plugin voxflow