PDF & DocumentsDocumentedScanned

slidespeak

Generate, edit, and manage PowerPoint presentations via the SlideSpeak API.

Share:

Installation

npx clawhub@latest install slidespeak

View the full skill documentation and source below.

Documentation

SlideSpeak Presentation Skill

This skill enables you to create and edit PowerPoint presentations using the SlideSpeak API.

IMPORTANT: Timing Behavior

Presentation generation takes 30-60 seconds.

Option 1: Wait for completion (default)

Run the command and wait. The script polls internally until complete:
node scripts/slidespeak.mjs generate --text "Topic"
  • Blocks until the task finishes (typically 30-60 seconds)
  • Returns the complete result with download URL

Option 2: Return immediately with --no-wait

If you cannot wait for the command to complete, use --no-wait:
node scripts/slidespeak.mjs generate --text "Topic" --no-wait
Returns immediately with:
{
  "success": true,
  "data": {
    "task_id": "abc123...",
    "message": "Task started. Check status with: node scripts/slidespeak.mjs status abc123..."
  }
}

Then poll the status until complete:

node scripts/slidespeak.mjs status <task_id>

When task_status is SUCCESS, use the request_id to download.

Timeout behavior

If the script times out while waiting, it returns the task_id so you can continue polling:
{
  "success": true,
  "data": {
    "complete": false,
    "task_id": "abc123...",
    "task_status": "STARTED",
    "message": "Task still processing. Check status with: node scripts/slidespeak.mjs status abc123..."
  }
}

Setup

The SLIDESPEAK_API_KEY environment variable must be set. Get your API key from

Quick Reference

All commands use the helper script at scripts/slidespeak.mjs. The script handles API authentication and waits for async tasks to complete automatically (no manual polling needed).

Generate a Presentation from Text

node scripts/slidespeak.mjs generate --text "Your topic or content" --length 6

Options:

  • --text (required): Topic or content for the presentation

  • --length: Number of slides (default: 10)

  • --template: Template name or ID (default: "default")

  • --language: Output language (default: "ORIGINAL")

  • --tone: casual, professional, funny, educational, sales_pitch

  • --verbosity: concise, standard, text-heavy

  • --no-images: Disable stock image fetching

  • --no-cover: Exclude cover slide

  • --no-toc: Exclude table of contents


Generate from an Uploaded Document

First upload the document, then generate:

# Upload a document (PDF, DOCX, PPTX, etc.)
node scripts/slidespeak.mjs upload /path/to/document.pdf

# Use the returned document_uuid to generate
node scripts/slidespeak.mjs generate --document <document_uuid> --length 10

Supported formats: .pdf, .docx, .doc, .pptx, .ppt, .xlsx, .txt, .md

List Available Templates

# Default templates
node scripts/slidespeak.mjs templates

# Branded templates (if configured)
node scripts/slidespeak.mjs templates --branded

Download a Presentation

After generation completes, use the request_id to download:

node scripts/slidespeak.mjs download <request_id>

Returns a JSON object with a short-lived download URL.

Edit an Existing Presentation

Edit slides in an existing presentation:

# Insert a new slide at position 2
node scripts/slidespeak.mjs edit-slide \
  --presentation-id <id> \
  --type INSERT \
  --position 2 \
  --prompt "Content about market analysis"

# Regenerate slide at position 3
node scripts/slidespeak.mjs edit-slide \
  --presentation-id <id> \
  --type REGENERATE \
  --position 3 \
  --prompt "Updated content for this slide"

# Remove slide at position 4
node scripts/slidespeak.mjs edit-slide \
  --presentation-id <id> \
  --type REMOVE \
  --position 4

Edit types:

  • INSERT: Add a new slide at the position

  • REGENERATE: Replace existing slide content

  • REMOVE: Delete the slide (no prompt needed)


Check Task Status

For debugging or manual polling:

node scripts/slidespeak.mjs status <task_id>

Get Account Info

node scripts/slidespeak.mjs me

Slide-by-Slide Generation

For precise control over each slide, use the slide-by-slide endpoint. See references/API.md for the full schema.

node scripts/slidespeak.mjs generate-slides --config slides.json

Where slides.json contains:

{
  "slides": [
    {"title": "Introduction", "layout": "title", "content": "Welcome message"},
    {"title": "Key Points", "layout": "bullets", "item_amount": 4, "content": "Main discussion points"}
  ],
  "template": "default"
}

Webhooks

Subscribe to receive notifications when tasks complete:

# Subscribe
node scripts/slidespeak.mjs webhook-subscribe --url ""

# Unsubscribe
node scripts/slidespeak.mjs webhook-unsubscribe --url ""

Error Handling

The script outputs JSON with either:

  • Success: {"success": true, "data": {...}}

  • Error: {"success": false, "error": "message"}


Common Workflows

Create a presentation about a topic

node scripts/slidespeak.mjs generate --text "Introduction to Machine Learning" --length 8 --tone educational

Create a presentation from a PDF report

# Upload the PDF
RESULT=$(node scripts/slidespeak.mjs upload report.pdf)
DOC_ID=$(echo $RESULT | jq -r '.data.document_uuid')

# Generate presentation
node scripts/slidespeak.mjs generate --document "$DOC_ID" --length 12

Edit a presentation to add a new slide

node scripts/slidespeak.mjs edit-slide \
  --presentation-id "abc123" \
  --type INSERT \
  --position 5 \
  --prompt "Add a slide about quarterly revenue growth with charts"

Additional Resources

For detailed API documentation including all parameters, layout types, and constraints, read references/API.md.