{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ai-podcast",
    "name": "Podcast Generation from PDF, Text, and Links",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/mogens9/ai-podcast",
    "canonicalUrl": "https://clawhub.ai/mogens9/ai-podcast",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ai-podcast",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ai-podcast",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "PUBLISH.md",
      "SKILL.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",
      "slug": "ai-podcast",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T06:22:16.534Z",
      "expiresAt": "2026-05-14T06:22:16.534Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ai-podcast",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ai-podcast",
        "contentDisposition": "attachment; filename=\"ai-podcast-1.0.11.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "ai-podcast"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ai-podcast"
    },
    "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/ai-podcast",
    "agentPageUrl": "https://openagent3.xyz/skills/ai-podcast/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ai-podcast/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ai-podcast/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": "What this skill does",
        "body": "Magic Podcast turns PDFs, documents, and notes into a natural two-host conversation you can listen to in minutes.\n\nUse MagicPodcast to:\n\nAsk what the podcast should be about.\nAsk for source: PDF URL or pasted text.\nAsk for podcast language (do not assume).\nConfirm: Ok, want me to make a podcast of this \"topic/pdf\" in \"language\". Should I do it?\nCreate a two-person dialogue podcast from that exact source.\nImmediately return https://www.magicpodcast.app/app so user can open their podcast dashboard.\nCheck status only when user asks.\nReturn title plus the shareable podcast URL when complete."
      },
      {
        "title": "Keywords",
        "body": "ai podcast, podcast, podcast generator, ai podcast generator, pdf to podcast, text to podcast, podcast from pdf, audio podcast, magicpodcast"
      },
      {
        "title": "Setup",
        "body": "Set required env:\n\nexport MAGICPODCAST_API_URL=\"https://api.magicpodcast.app\"\nexport MAGICPODCAST_API_KEY=\"<your_api_key>\"\n\nGet API key:\nhttps://www.magicpodcast.app/openclaw"
      },
      {
        "title": "Guided onboarding (one step at a time)",
        "body": "Ask one question at a time, then wait for the user's reply before asking the next.\nIf API key is missing or invalid, stop and say:\nIt's free to get started, and it takes under a minute. Open https://www.magicpodcast.app/openclaw, sign in with Google, copy your API key, and paste it here.\nIf user has a local PDF file, ask them to upload it to a reachable URL first.\nAfter key is available, continue:\n\ntopic\nsource (PDF URL or pasted text)\nlanguage\nfinal confirmation before create"
      },
      {
        "title": "Secure command templates",
        "body": "Never interpolate raw user text directly into shell commands.\nAlways validate first, then JSON-encode with jq.\n\nsafe_job_id() {\n  printf '%s' \"$1\" | grep -Eq '^[A-Za-z0-9_-]{8,128}$'\n}\n\nsafe_http_url() {\n  printf '%s' \"$1\" | grep -Eq '^https?://[^[:space:]]+$'\n}\n\nCreate from PDF:\n\n# Inputs expected from conversation state:\n# PDF_URL, LANGUAGE\nif ! safe_http_url \"$PDF_URL\"; then\n  echo \"Invalid PDF URL\" >&2\n  exit 1\nfi\n\npayload=\"$(jq -n --arg pdfUrl \"$PDF_URL\" --arg language \"$LANGUAGE\" '{pdfUrl:$pdfUrl,language:$language}')\"\n\ncurl -sS -X POST \"$MAGICPODCAST_API_URL/agent/v1/podcasts/pdf\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-api-key: $MAGICPODCAST_API_KEY\" \\\n  --data-binary \"$payload\"\n\nCreate from text:\n\n# Inputs expected from conversation state:\n# SOURCE_TEXT, LANGUAGE\npayload=\"$(jq -n --arg text \"$SOURCE_TEXT\" --arg language \"$LANGUAGE\" '{text:$text,language:$language}')\"\n\ncurl -sS -X POST \"$MAGICPODCAST_API_URL/agent/v1/podcasts/text\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-api-key: $MAGICPODCAST_API_KEY\" \\\n  --data-binary \"$payload\"\n\nCheck job once:\n\n# Input expected from API response:\n# JOB_ID\nif ! safe_job_id \"$JOB_ID\"; then\n  echo \"Invalid job id\" >&2\n  exit 1\nfi\n\ncurl -sS \"$MAGICPODCAST_API_URL/agent/v1/jobs/$JOB_ID\" \\\n  -H \"x-api-key: $MAGICPODCAST_API_KEY\"\n\nSigned-in users can generate free podcast.\nExpected generation time is usually 2-5 minutes.\nRight after starting, direct users to https://www.magicpodcast.app/app.\nTell the user this page is their dashboard: they can see created podcasts, live progress/status, and finished episodes.\nReturn outputs.shareUrl as the default completion link.\nIf outputs.shareUrl is missing, fall back to outputs.appUrl.\nOn completion, answer: Here is your podcast link: <url>.\nIf API returns an error, surface the exact error message and details.\nWarn users not to send sensitive documents unless they approve external processing.\n\nStatus checks:\n\nstatusLabel = \"complete\": return outputs.shareUrl (or outputs.appUrl as fallback).\nstatusLabel = \"failed\": return error message/details to user."
      }
    ],
    "body": "What this skill does\n\nMagic Podcast turns PDFs, documents, and notes into a natural two-host conversation you can listen to in minutes.\n\nUse MagicPodcast to:\n\nAsk what the podcast should be about.\nAsk for source: PDF URL or pasted text.\nAsk for podcast language (do not assume).\nConfirm: Ok, want me to make a podcast of this \"topic/pdf\" in \"language\". Should I do it?\nCreate a two-person dialogue podcast from that exact source.\nImmediately return https://www.magicpodcast.app/app so user can open their podcast dashboard.\nCheck status only when user asks.\nReturn title plus the shareable podcast URL when complete.\nKeywords\n\nai podcast, podcast, podcast generator, ai podcast generator, pdf to podcast, text to podcast, podcast from pdf, audio podcast, magicpodcast\n\nSetup\n\nSet required env:\n\nexport MAGICPODCAST_API_URL=\"https://api.magicpodcast.app\"\nexport MAGICPODCAST_API_KEY=\"<your_api_key>\"\n\n\nGet API key: https://www.magicpodcast.app/openclaw\n\nGuided onboarding (one step at a time)\nAsk one question at a time, then wait for the user's reply before asking the next.\nIf API key is missing or invalid, stop and say: It's free to get started, and it takes under a minute. Open https://www.magicpodcast.app/openclaw, sign in with Google, copy your API key, and paste it here.\nIf user has a local PDF file, ask them to upload it to a reachable URL first.\nAfter key is available, continue:\ntopic\nsource (PDF URL or pasted text)\nlanguage\nfinal confirmation before create\nSecure command templates\n\nNever interpolate raw user text directly into shell commands.\nAlways validate first, then JSON-encode with jq.\n\nsafe_job_id() {\n  printf '%s' \"$1\" | grep -Eq '^[A-Za-z0-9_-]{8,128}$'\n}\n\nsafe_http_url() {\n  printf '%s' \"$1\" | grep -Eq '^https?://[^[:space:]]+$'\n}\n\n\nCreate from PDF:\n\n# Inputs expected from conversation state:\n# PDF_URL, LANGUAGE\nif ! safe_http_url \"$PDF_URL\"; then\n  echo \"Invalid PDF URL\" >&2\n  exit 1\nfi\n\npayload=\"$(jq -n --arg pdfUrl \"$PDF_URL\" --arg language \"$LANGUAGE\" '{pdfUrl:$pdfUrl,language:$language}')\"\n\ncurl -sS -X POST \"$MAGICPODCAST_API_URL/agent/v1/podcasts/pdf\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-api-key: $MAGICPODCAST_API_KEY\" \\\n  --data-binary \"$payload\"\n\n\nCreate from text:\n\n# Inputs expected from conversation state:\n# SOURCE_TEXT, LANGUAGE\npayload=\"$(jq -n --arg text \"$SOURCE_TEXT\" --arg language \"$LANGUAGE\" '{text:$text,language:$language}')\"\n\ncurl -sS -X POST \"$MAGICPODCAST_API_URL/agent/v1/podcasts/text\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"x-api-key: $MAGICPODCAST_API_KEY\" \\\n  --data-binary \"$payload\"\n\n\nCheck job once:\n\n# Input expected from API response:\n# JOB_ID\nif ! safe_job_id \"$JOB_ID\"; then\n  echo \"Invalid job id\" >&2\n  exit 1\nfi\n\ncurl -sS \"$MAGICPODCAST_API_URL/agent/v1/jobs/$JOB_ID\" \\\n  -H \"x-api-key: $MAGICPODCAST_API_KEY\"\n\nSigned-in users can generate free podcast.\nExpected generation time is usually 2-5 minutes.\nRight after starting, direct users to https://www.magicpodcast.app/app.\nTell the user this page is their dashboard: they can see created podcasts, live progress/status, and finished episodes.\nReturn outputs.shareUrl as the default completion link.\nIf outputs.shareUrl is missing, fall back to outputs.appUrl.\nOn completion, answer: Here is your podcast link: <url>.\nIf API returns an error, surface the exact error message and details.\nWarn users not to send sensitive documents unless they approve external processing.\n\nStatus checks:\n\nstatusLabel = \"complete\": return outputs.shareUrl (or outputs.appUrl as fallback).\nstatusLabel = \"failed\": return error message/details to user."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/mogens9/ai-podcast",
    "publisherUrl": "https://clawhub.ai/mogens9/ai-podcast",
    "owner": "mogens9",
    "version": "1.0.11",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ai-podcast",
    "downloadUrl": "https://openagent3.xyz/downloads/ai-podcast",
    "agentUrl": "https://openagent3.xyz/skills/ai-podcast/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ai-podcast/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ai-podcast/agent.md"
  }
}