CLI Reference

August 11, 2026 · View on GitHub

slidecraft is the single entry point for all of Shuttleslide's capabilities. Every subcommand is independently usable and scriptable.

$ slidecraft --help
Usage: slidecraft [OPTIONS] COMMAND [ARGS]...

  Shuttleslide - Bidirectional PPTX ↔ HTML conversion library.

  Convert PowerPoint presentations to HTML and back with round-trip
  format preservation.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  to-html       Convert PPTX file to HTML.
  to-pptx       Convert HTML file to PPTX using deterministic rule-based...
  json-to-pptx  Convert a PPT-DSL JSON file directly to PPTX (no LLM required).
  analyze       Analyze a PPTX file and show its structure.
  generate      Generate a slide deck from a topic using an LLM agent pipeline.
  review        Launch the web review client.
  warm-cache    Pre-populate the CDN asset cache so generation works offline.
  info          Show information about the Shuttleslide project.

slidecraft to-html

Convert a .pptx file to a single self-contained HTML file.

slidecraft to-html INPUT_PPTX [-o OUTPUT] [OPTIONS]

Options

OptionDefaultDescription
INPUT_PPTX (arg)Path to the .pptx or .ppt file
-o, --output PATHderived from inputOutput HTML path (or directory)
--layout {flow,pptview,slideshow}slideshowLayout mode
--stdoutoffPrint HTML to stdout instead of writing a file
--theme {default,corporate,modern}defaultCSS theme
--verbose, -voffShow progress messages
--animationson (default)Enable CSS entrance/transition animations (slideshow only)
--no-animationsDisable CSS animations
--base64offEmbed images as base64 (default: separate files under output_assets/)
--no-shrinkoffDisable Playwright-based font-shrink-on-overflow for text shapes

Layout modes

  • flow — semantic, scrollable page. Best for RAG / web publishing.
  • pptview — PowerPoint editor look. Best for design fidelity.
  • slideshow — interactive presentation with keyboard navigation ( , Space, Home, End) and slide transitions.

Examples

# Default interactive slideshow
slidecraft to-html deck.pptx -o presentation.html

# Single scrollable page for RAG ingestion
slidecraft to-html deck.pptx -o presentation.html --layout flow

# Fully self-contained file (no external assets)
slidecraft to-html deck.pptx -o single-file.html --base64

# Pipe to another tool
slidecraft to-html deck.pptx --stdout | grep -i "title"

slidecraft to-pptx

Convert HTML to a .pptx file using deterministic rule-based extraction. No LLM, no network access required.

slidecraft to-pptx INPUT_HTML [-o OUTPUT] [OPTIONS]

Options

OptionDefaultDescription
INPUT_HTML (arg)Path to the HTML file
-o, --output PATHderived from inputOutput PPTX path
--verbose, -voffShow stage-by-stage progress

Pipeline

  1. HTML is loaded into headless Chromium via Playwright; computed positions and styles are extracted.
  2. The rule-based classifier groups elements into shapes, text boxes, tables, and SVG paths.
  3. A PPT-DSL JSON document is emitted.
  4. PPTXRenderer writes a .pptx with native DrawingML shapes.

Example

slidecraft to-pptx slides.html -o output.pptx -v

slidecraft json-to-pptx

Render a pre-built PPT-DSL JSON document directly to PPTX. Skips the HTML-extraction stage entirely — useful when you hand-craft or pre-generate the DSL.

slidecraft json-to-pptx INPUT_JSON [-o OUTPUT] [OPTIONS]

Options

OptionDefaultDescription
INPUT_JSON (arg)Path to the PPT-DSL JSON file
-o, --output PATHderived from inputOutput PPTX path
--verbose, -voffShow progress

Example

slidecraft json-to-pptx deck.dsl.json -o deck.pptx

slidecraft analyze

Inspect a .pptx file and print its structure (metadata, slide count, layouts, element types and positions).

slidecraft analyze INPUT_PPTX [OPTIONS]

Options

OptionDefaultDescription
INPUT_PPTX (arg)Path to the PowerPoint file
--verbose, -voffPrint per-element details

Example

slidecraft analyze deck.pptx -v

slidecraft generate

Generate a multi-slide deck from a topic using an LLM agent. Requires the [ai] install extra and an OpenAI-compatible endpoint.

slidecraft generate [TOPIC] [-i INPUT_FILE] --output-dir DIR [OPTIONS]

Options

OptionDefaultDescription
TOPIC (arg, optional)The presentation topic
-i, --input PATHRead the topic from a markdown/text file
--style TEXTbusinessStyle hint: business, cute, anime, tech, editorial, ...
--slides INTinferred (6–15)Target slide count
-o, --output-dir PATH (required)Where to write 1.html, 2.html, ...
--api-base URL$SHUTTLESLIDE_API_BASEOpenAI-compatible API base URL
--api-key TEXT$SHUTTLESLIDE_API_KEYAPI key
--model NAME$SHUTTLESLIDE_MODELModel name (e.g. glm-4.7, gpt-4o-mini)
--temperature FLOAT0.7Sampling temperature
--verbose, -voffShow progress

Examples

# Inline topic
slidecraft generate "Introduction to Machine Learning" -o tmp/gen/

# From a file
slidecraft generate -i outline.md --style tech -o tmp/gen/

# With explicit credentials
slidecraft generate "AI in healthcare" \
    --api-base https://open.bigmodel.cn/api/paas/v4 \
    --api-key  $SHUTTLESLIDE_API_KEY \
    --model    glm-4.7 \
    -o         tmp/gen/

Environment variables

The SHUTTLESLIDE_* variables are read as fallbacks when the corresponding CLI flag is omitted. They also work for slidecraft review:

  • SHUTTLESLIDE_API_BASE
  • SHUTTLESLIDE_API_KEY
  • SHUTTLESLIDE_MODEL

slidecraft review

Launch a local web server with a human-in-the-loop review UI. Each pipeline stage (theme, outline, slide-build) pauses for your approval; request edits, approve to proceed, and export when done.

Requires the [review] install extra.

slidecraft review [OPTIONS]

Options

OptionDefaultDescription
--host ADDR127.0.0.1Bind address
--port INT8765Bind port
-o, --output-dir PATH./tmp/web_review/Base directory for runs (each run gets a timestamped subdir)
--no-browseroffDon't auto-open the browser; still print the URL
--api-base URLLock the LLM API base (UI field becomes read-only)
--api-key TEXTLock the LLM API key
--model NAMELock the LLM model name
--mockoffMock mode: bypass real LLM/VLM calls; uses a stub orchestrator with canned state. Useful for UI demos and screenshots without API credentials. Locks all credential fields (hidden in the form).

Examples

# Default — opens browser, runs on 127.0.0.1:8765
slidecraft review

# Different port, no auto-open
slidecraft review --port 9000 --no-browser

# Lock credentials via flags (UI hides them)
slidecraft review --api-base $URL --api-key $KEY --model glm-4.7

Credential resolution order (later wins)

  1. The web form (typed at runtime)
  2. .env file in CWD using SHUTTLESLIDE_* keys
  3. CLI flags above

slidecraft warm-cache

Pre-download the Tailwind JIT script and Material Icons CSS into ~/.shuttleslide/cdn/ so generate works offline. Run once when you have network access; afterwards generation works without it.

slidecraft warm-cache [OPTIONS]

Options

OptionDefaultDescription
--forceoffRe-download even if cache files exist
--include-google-fontsoffAlso fetch Google Fonts CSS (~47 MB; not used by the default renderer)

Example

slidecraft warm-cache

slidecraft info

Print version, capabilities, and project URL.

slidecraft info

Extension points

Shuttleslide exposes five public entry-point groups. External packages register implementations via their pyproject.toml; shuttleslide discovers and loads them with failure-isolation (a broken extension logs to stderr and is skipped; others still load). Built-ins always win on name conflicts.

GroupWhat extensions registerLoaded by
shuttleslide.cli_commandsAdditional slidecraft <cmd> subcommands (click.Command or click.Group)slidecraft process start
shuttleslide.review.stagesPipeline stages for the review UI (e.g. extra stages that run after slides)Review orchestrator
shuttleslide.review.editorsCustom Editor subclasses for new EditTarget.kind values beyond the built-ins (json / html / svg / image)default_editors() at InteractiveOrchestrator construction
shuttleslide.review.house_rulesProviders that swap HOUSE_RULES for one review-pipeline run based on AgentConfig attributesoverride_house_rules_for_config
shuttleslide.skill_assetsDirectories containing SKILL.md files to deploy alongside the built-in Claude Code skillsslidecraft install-skill

Example: registering a CLI command

# In your package's pyproject.toml
[project.entry-points."shuttleslide.cli_commands"]
my-cmd = "my_package.cli:my_cmd"

my_cmd must be a click.Command. Once your package is installed, slidecraft my-cmd is available — no changes to shuttleslide required.

Example: registering a custom editor

[project.entry-points."shuttleslide.review.editors"]
my-kind = "my_package.editors:MyEditor"

MyEditor must be a subclass of shuttleslide.agent.review.editors.Editor (or an instance). The kind it declares must not collide with the built-ins (json / html / svg / image) — built-ins always win.