{
  "schemaVersion": "1.0",
  "item": {
    "slug": "slidespeak",
    "name": "SlideSpeak",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/mve/slidespeak",
    "canonicalUrl": "https://clawhub.ai/mve/slidespeak",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/slidespeak",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=slidespeak",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/slidespeak.mjs",
      "references/API.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/slidespeak"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/slidespeak",
    "agentPageUrl": "https://openagent3.xyz/skills/slidespeak/agent",
    "manifestUrl": "https://openagent3.xyz/skills/slidespeak/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/slidespeak/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "SlideSpeak Presentation Skill",
        "body": "This skill enables you to create and edit PowerPoint presentations using the SlideSpeak API."
      },
      {
        "title": "IMPORTANT: Timing Behavior",
        "body": "Presentation generation takes 30-60 seconds."
      },
      {
        "title": "Option 1: Wait for completion (default)",
        "body": "Run the command and wait. The script polls internally until complete:\n\nnode scripts/slidespeak.mjs generate --text \"Topic\"\n\nBlocks until the task finishes (typically 30-60 seconds)\nReturns the complete result with download URL"
      },
      {
        "title": "Option 2: Return immediately with --no-wait",
        "body": "If you cannot wait for the command to complete, use --no-wait:\n\nnode scripts/slidespeak.mjs generate --text \"Topic\" --no-wait\n\nReturns immediately with:\n\n{\n  \"success\": true,\n  \"data\": {\n    \"task_id\": \"abc123...\",\n    \"message\": \"Task started. Check status with: node scripts/slidespeak.mjs status abc123...\"\n  }\n}\n\nThen poll the status until complete:\n\nnode scripts/slidespeak.mjs status <task_id>\n\nWhen task_status is SUCCESS, use the request_id to download."
      },
      {
        "title": "Timeout behavior",
        "body": "If the script times out while waiting, it returns the task_id so you can continue polling:\n\n{\n  \"success\": true,\n  \"data\": {\n    \"complete\": false,\n    \"task_id\": \"abc123...\",\n    \"task_status\": \"STARTED\",\n    \"message\": \"Task still processing. Check status with: node scripts/slidespeak.mjs status abc123...\"\n  }\n}"
      },
      {
        "title": "Setup",
        "body": "The SLIDESPEAK_API_KEY environment variable must be set. Get your API key from https://app.slidespeak.co/settings/developer"
      },
      {
        "title": "Quick Reference",
        "body": "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)."
      },
      {
        "title": "Generate a Presentation from Text",
        "body": "node scripts/slidespeak.mjs generate --text \"Your topic or content\" --length 6\n\nOptions:\n\n--text (required): Topic or content for the presentation\n--length: Number of slides (default: 10)\n--template: Template name or ID (default: \"default\")\n--language: Output language (default: \"ORIGINAL\")\n--tone: casual, professional, funny, educational, sales_pitch\n--verbosity: concise, standard, text-heavy\n--no-images: Disable stock image fetching\n--no-cover: Exclude cover slide\n--no-toc: Exclude table of contents"
      },
      {
        "title": "Generate from an Uploaded Document",
        "body": "First upload the document, then generate:\n\n# Upload a document (PDF, DOCX, PPTX, etc.)\nnode scripts/slidespeak.mjs upload /path/to/document.pdf\n\n# Use the returned document_uuid to generate\nnode scripts/slidespeak.mjs generate --document <document_uuid> --length 10\n\nSupported formats: .pdf, .docx, .doc, .pptx, .ppt, .xlsx, .txt, .md"
      },
      {
        "title": "List Available Templates",
        "body": "# Default templates\nnode scripts/slidespeak.mjs templates\n\n# Branded templates (if configured)\nnode scripts/slidespeak.mjs templates --branded"
      },
      {
        "title": "Download a Presentation",
        "body": "After generation completes, use the request_id to download:\n\nnode scripts/slidespeak.mjs download <request_id>\n\nReturns a JSON object with a short-lived download URL."
      },
      {
        "title": "Edit an Existing Presentation",
        "body": "Edit slides in an existing presentation:\n\n# Insert a new slide at position 2\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id <id> \\\n  --type INSERT \\\n  --position 2 \\\n  --prompt \"Content about market analysis\"\n\n# Regenerate slide at position 3\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id <id> \\\n  --type REGENERATE \\\n  --position 3 \\\n  --prompt \"Updated content for this slide\"\n\n# Remove slide at position 4\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id <id> \\\n  --type REMOVE \\\n  --position 4\n\nEdit types:\n\nINSERT: Add a new slide at the position\nREGENERATE: Replace existing slide content\nREMOVE: Delete the slide (no prompt needed)"
      },
      {
        "title": "Check Task Status",
        "body": "For debugging or manual polling:\n\nnode scripts/slidespeak.mjs status <task_id>"
      },
      {
        "title": "Get Account Info",
        "body": "node scripts/slidespeak.mjs me"
      },
      {
        "title": "Slide-by-Slide Generation",
        "body": "For precise control over each slide, use the slide-by-slide endpoint. See references/API.md for the full schema.\n\nnode scripts/slidespeak.mjs generate-slides --config slides.json\n\nWhere slides.json contains:\n\n{\n  \"slides\": [\n    {\"title\": \"Introduction\", \"layout\": \"title\", \"content\": \"Welcome message\"},\n    {\"title\": \"Key Points\", \"layout\": \"bullets\", \"item_amount\": 4, \"content\": \"Main discussion points\"}\n  ],\n  \"template\": \"default\"\n}"
      },
      {
        "title": "Webhooks",
        "body": "Subscribe to receive notifications when tasks complete:\n\n# Subscribe\nnode scripts/slidespeak.mjs webhook-subscribe --url \"https://your-webhook.com/endpoint\"\n\n# Unsubscribe\nnode scripts/slidespeak.mjs webhook-unsubscribe --url \"https://your-webhook.com/endpoint\""
      },
      {
        "title": "Error Handling",
        "body": "The script outputs JSON with either:\n\nSuccess: {\"success\": true, \"data\": {...}}\nError: {\"success\": false, \"error\": \"message\"}"
      },
      {
        "title": "Create a presentation about a topic",
        "body": "node scripts/slidespeak.mjs generate --text \"Introduction to Machine Learning\" --length 8 --tone educational"
      },
      {
        "title": "Create a presentation from a PDF report",
        "body": "# Upload the PDF\nRESULT=$(node scripts/slidespeak.mjs upload report.pdf)\nDOC_ID=$(echo $RESULT | jq -r '.data.document_uuid')\n\n# Generate presentation\nnode scripts/slidespeak.mjs generate --document \"$DOC_ID\" --length 12"
      },
      {
        "title": "Edit a presentation to add a new slide",
        "body": "node scripts/slidespeak.mjs edit-slide \\\n  --presentation-id \"abc123\" \\\n  --type INSERT \\\n  --position 5 \\\n  --prompt \"Add a slide about quarterly revenue growth with charts\""
      },
      {
        "title": "Additional Resources",
        "body": "For detailed API documentation including all parameters, layout types, and constraints, read references/API.md."
      }
    ],
    "body": "SlideSpeak Presentation Skill\n\nThis skill enables you to create and edit PowerPoint presentations using the SlideSpeak API.\n\nIMPORTANT: Timing Behavior\n\nPresentation generation takes 30-60 seconds.\n\nOption 1: Wait for completion (default)\n\nRun the command and wait. The script polls internally until complete:\n\nnode scripts/slidespeak.mjs generate --text \"Topic\"\n\nBlocks until the task finishes (typically 30-60 seconds)\nReturns the complete result with download URL\nOption 2: Return immediately with --no-wait\n\nIf you cannot wait for the command to complete, use --no-wait:\n\nnode scripts/slidespeak.mjs generate --text \"Topic\" --no-wait\n\n\nReturns immediately with:\n\n{\n  \"success\": true,\n  \"data\": {\n    \"task_id\": \"abc123...\",\n    \"message\": \"Task started. Check status with: node scripts/slidespeak.mjs status abc123...\"\n  }\n}\n\n\nThen poll the status until complete:\n\nnode scripts/slidespeak.mjs status <task_id>\n\n\nWhen task_status is SUCCESS, use the request_id to download.\n\nTimeout behavior\n\nIf the script times out while waiting, it returns the task_id so you can continue polling:\n\n{\n  \"success\": true,\n  \"data\": {\n    \"complete\": false,\n    \"task_id\": \"abc123...\",\n    \"task_status\": \"STARTED\",\n    \"message\": \"Task still processing. Check status with: node scripts/slidespeak.mjs status abc123...\"\n  }\n}\n\nSetup\n\nThe SLIDESPEAK_API_KEY environment variable must be set. Get your API key from https://app.slidespeak.co/settings/developer\n\nQuick Reference\n\nAll 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).\n\nGenerate a Presentation from Text\nnode scripts/slidespeak.mjs generate --text \"Your topic or content\" --length 6\n\n\nOptions:\n\n--text (required): Topic or content for the presentation\n--length: Number of slides (default: 10)\n--template: Template name or ID (default: \"default\")\n--language: Output language (default: \"ORIGINAL\")\n--tone: casual, professional, funny, educational, sales_pitch\n--verbosity: concise, standard, text-heavy\n--no-images: Disable stock image fetching\n--no-cover: Exclude cover slide\n--no-toc: Exclude table of contents\nGenerate from an Uploaded Document\n\nFirst upload the document, then generate:\n\n# Upload a document (PDF, DOCX, PPTX, etc.)\nnode scripts/slidespeak.mjs upload /path/to/document.pdf\n\n# Use the returned document_uuid to generate\nnode scripts/slidespeak.mjs generate --document <document_uuid> --length 10\n\n\nSupported formats: .pdf, .docx, .doc, .pptx, .ppt, .xlsx, .txt, .md\n\nList Available Templates\n# Default templates\nnode scripts/slidespeak.mjs templates\n\n# Branded templates (if configured)\nnode scripts/slidespeak.mjs templates --branded\n\nDownload a Presentation\n\nAfter generation completes, use the request_id to download:\n\nnode scripts/slidespeak.mjs download <request_id>\n\n\nReturns a JSON object with a short-lived download URL.\n\nEdit an Existing Presentation\n\nEdit slides in an existing presentation:\n\n# Insert a new slide at position 2\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id <id> \\\n  --type INSERT \\\n  --position 2 \\\n  --prompt \"Content about market analysis\"\n\n# Regenerate slide at position 3\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id <id> \\\n  --type REGENERATE \\\n  --position 3 \\\n  --prompt \"Updated content for this slide\"\n\n# Remove slide at position 4\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id <id> \\\n  --type REMOVE \\\n  --position 4\n\n\nEdit types:\n\nINSERT: Add a new slide at the position\nREGENERATE: Replace existing slide content\nREMOVE: Delete the slide (no prompt needed)\nCheck Task Status\n\nFor debugging or manual polling:\n\nnode scripts/slidespeak.mjs status <task_id>\n\nGet Account Info\nnode scripts/slidespeak.mjs me\n\nSlide-by-Slide Generation\n\nFor precise control over each slide, use the slide-by-slide endpoint. See references/API.md for the full schema.\n\nnode scripts/slidespeak.mjs generate-slides --config slides.json\n\n\nWhere slides.json contains:\n\n{\n  \"slides\": [\n    {\"title\": \"Introduction\", \"layout\": \"title\", \"content\": \"Welcome message\"},\n    {\"title\": \"Key Points\", \"layout\": \"bullets\", \"item_amount\": 4, \"content\": \"Main discussion points\"}\n  ],\n  \"template\": \"default\"\n}\n\nWebhooks\n\nSubscribe to receive notifications when tasks complete:\n\n# Subscribe\nnode scripts/slidespeak.mjs webhook-subscribe --url \"https://your-webhook.com/endpoint\"\n\n# Unsubscribe\nnode scripts/slidespeak.mjs webhook-unsubscribe --url \"https://your-webhook.com/endpoint\"\n\nError Handling\n\nThe script outputs JSON with either:\n\nSuccess: {\"success\": true, \"data\": {...}}\nError: {\"success\": false, \"error\": \"message\"}\nCommon Workflows\nCreate a presentation about a topic\nnode scripts/slidespeak.mjs generate --text \"Introduction to Machine Learning\" --length 8 --tone educational\n\nCreate a presentation from a PDF report\n# Upload the PDF\nRESULT=$(node scripts/slidespeak.mjs upload report.pdf)\nDOC_ID=$(echo $RESULT | jq -r '.data.document_uuid')\n\n# Generate presentation\nnode scripts/slidespeak.mjs generate --document \"$DOC_ID\" --length 12\n\nEdit a presentation to add a new slide\nnode scripts/slidespeak.mjs edit-slide \\\n  --presentation-id \"abc123\" \\\n  --type INSERT \\\n  --position 5 \\\n  --prompt \"Add a slide about quarterly revenue growth with charts\"\n\nAdditional Resources\n\nFor detailed API documentation including all parameters, layout types, and constraints, read references/API.md."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/mve/slidespeak",
    "publisherUrl": "https://clawhub.ai/mve/slidespeak",
    "owner": "mve",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/slidespeak",
    "downloadUrl": "https://openagent3.xyz/downloads/slidespeak",
    "agentUrl": "https://openagent3.xyz/skills/slidespeak/agent",
    "manifestUrl": "https://openagent3.xyz/skills/slidespeak/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/slidespeak/agent.md"
  }
}