{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ai-podcast-pipeline",
    "name": "Ai Podcast Pipeline",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/jeong-wooseok/ai-podcast-pipeline",
    "canonicalUrl": "https://clawhub.ai/jeong-wooseok/ai-podcast-pipeline",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ai-podcast-pipeline",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ai-podcast-pipeline",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/podcast_prompt_template_ko.md",
      "references/thumbnail_guidelines_ko.md",
      "references/workflow_runbook.md",
      "scripts/build_dualvoice_audio.py",
      "scripts/build_korean_srt.py"
    ],
    "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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/ai-podcast-pipeline"
    },
    "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-pipeline",
    "agentPageUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline/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": "⚠️ Security Notice",
        "body": "This skill may trigger antivirus false positives due to legitimate use of:\n\nbase64 decoding: Used ONLY to decode audio data from Gemini TTS API responses (standard practice for binary data in JSON)\nsubprocess calls: Used ONLY to invoke ffmpeg for audio/video processing\nEnvironment variables: Reads API keys from user-configured environment (GEMINI_API_KEY)\nNetwork requests: Calls Google Gemini API for text-to-speech generation\n\nAll code is open source and auditable in this repository. No malicious behavior.\n\nBuild end-to-end podcast assets from Trend/QuickView-* content."
      },
      {
        "title": "Core Workflow",
        "body": "Select source QuickView file.\nGenerate script (full or compressed mode).\nBuild dual-voice MP3 (Gemini multi-speaker, chunked for reliability).\nGenerate full-text Korean subtitles (no ellipsis truncation).\nRender subtitle MP4 with tuned font/size/timing shift.\nBuild thumbnail + YouTube metadata.\nDeliver final package."
      },
      {
        "title": "Step 1) Select Source",
        "body": "Prefer weekly QuickView file from your configured Quartz root.\n\nIf user gives wk.aiee.app URL, map to local Quartz markdown first."
      },
      {
        "title": "Step 2) Generate Script",
        "body": "Read and apply:\n\nreferences/podcast_prompt_template_ko.md\n\nModes:\n\nFull mode: 15~20 minutes\nCompressed mode: 5~7 minutes (core tips only)\n\nRules:\n\nno system/meta text in spoken lines\nhost intro once at opening only\nconversational Korean, short sentences, actionable\nsave script in archive/"
      },
      {
        "title": "Preferred: chunked builder (timeout-safe)",
        "body": "# Set API key via environment (required)\nexport GEMINI_API_KEY=\"<YOUR_KEY>\"\n\n# Run from skills/ai-podcast-pipeline/\npython3 scripts/build_dualvoice_audio.py \\\n  --input <script.txt> \\\n  --outdir <outdir> \\\n  --basename podcast_full_dualvoice \\\n  --chunk-lines 6"
      },
      {
        "title": "Single-pass (short scripts)",
        "body": "python3 scripts/gemini_multispeaker_tts.py \\\n  --input-file <dialogue.txt> \\\n  --outdir <outdir> \\\n  --basename podcast_dualvoice \\\n  --retries 3 \\\n  --timeout-seconds 120\n\nDefault voice mapping (2026-02-10 fixed):\n\nCallie (female) → Kore\nNick (male) → Puck\n\nOutput: MP3 (default delivery format)"
      },
      {
        "title": "Step 4) Build Korean Subtitles (Full Text)",
        "body": "Use full-text subtitle builder (no ... truncation):\n\npython3 scripts/build_korean_srt.py \\\n  --script <script.txt> \\\n  --audio <final.mp3> \\\n  --output <outdir>/podcast.srt \\\n  --max-chars 22"
      },
      {
        "title": "Step 5) Render Subtitled MP4 (Font + Timing)",
        "body": "Use renderer with adjustable font and timing shift:\n\npython3 scripts/render_subtitled_video.py \\\n  --image <thumbnail.png> \\\n  --audio <final.mp3> \\\n  --srt <podcast.srt> \\\n  --output <outdir>/final.mp4 \\\n  --font-name \"Do Hyeon\" \\\n  --font-size 27 \\\n  --shift-ms -250\n\nNotes:\n\nshift-ms negative = subtitle earlier (for lag fixes)\nIf text clipping occurs, lower font-size (e.g., 25~27)\nkeep text inside safe area; avoid overlap with character/object"
      },
      {
        "title": "Step 6) Build Thumbnail + YouTube Metadata",
        "body": "# Set API key via environment (required)\nexport GEMINI_API_KEY=\"<YOUR_KEY>\"\n\npython3 scripts/build_podcast_assets.py \\\n  --source \"<QuickView path or URL>\"\n\nReference (layout/copy guardrails):\n\nreferences/thumbnail_guidelines_ko.md"
      },
      {
        "title": "Step 7) Final Delivery Checklist",
        "body": "Always include:\n\nsource used\nfinal MP3 path\nsubtitle MP4 path + size\nthumbnail path\nYouTube title options (3)\nYouTube description"
      },
      {
        "title": "Reliability Rules",
        "body": "Gemini timeout on long input: use chunked builder (build_dualvoice_audio.py)\nSubtitle clipping: reduce font size and increase bottom margin\nSubtitle lag: adjust --shift-ms (usually -150 to -300)\nKeep generated assets under Telegram practical limits"
      },
      {
        "title": "Security Notes",
        "body": "API keys must be passed via environment variables (GEMINI_API_KEY), not hardcoded.\nNever paste raw keys into prompts, logs, screenshots, or public posts.\nRecent hardening: thumbnail generation now passes keys via env (not CLI args)."
      },
      {
        "title": "References",
        "body": "references/podcast_prompt_template_ko.md\nreferences/workflow_runbook.md\nreferences/thumbnail_guidelines_ko.md"
      }
    ],
    "body": "AI Podcast Pipeline\n⚠️ Security Notice\n\nThis skill may trigger antivirus false positives due to legitimate use of:\n\nbase64 decoding: Used ONLY to decode audio data from Gemini TTS API responses (standard practice for binary data in JSON)\nsubprocess calls: Used ONLY to invoke ffmpeg for audio/video processing\nEnvironment variables: Reads API keys from user-configured environment (GEMINI_API_KEY)\nNetwork requests: Calls Google Gemini API for text-to-speech generation\n\nAll code is open source and auditable in this repository. No malicious behavior.\n\nBuild end-to-end podcast assets from Trend/QuickView-* content.\n\nCore Workflow\nSelect source QuickView file.\nGenerate script (full or compressed mode).\nBuild dual-voice MP3 (Gemini multi-speaker, chunked for reliability).\nGenerate full-text Korean subtitles (no ellipsis truncation).\nRender subtitle MP4 with tuned font/size/timing shift.\nBuild thumbnail + YouTube metadata.\nDeliver final package.\nStep 1) Select Source\n\nPrefer weekly QuickView file from your configured Quartz root.\n\nIf user gives wk.aiee.app URL, map to local Quartz markdown first.\n\nStep 2) Generate Script\n\nRead and apply:\n\nreferences/podcast_prompt_template_ko.md\n\nModes:\n\nFull mode: 15~20 minutes\nCompressed mode: 5~7 minutes (core tips only)\n\nRules:\n\nno system/meta text in spoken lines\nhost intro once at opening only\nconversational Korean, short sentences, actionable\nsave script in archive/\nStep 3) Build Audio (Gemini Multi-Speaker, Reliable)\nPreferred: chunked builder (timeout-safe)\n# Set API key via environment (required)\nexport GEMINI_API_KEY=\"<YOUR_KEY>\"\n\n# Run from skills/ai-podcast-pipeline/\npython3 scripts/build_dualvoice_audio.py \\\n  --input <script.txt> \\\n  --outdir <outdir> \\\n  --basename podcast_full_dualvoice \\\n  --chunk-lines 6\n\nSingle-pass (short scripts)\npython3 scripts/gemini_multispeaker_tts.py \\\n  --input-file <dialogue.txt> \\\n  --outdir <outdir> \\\n  --basename podcast_dualvoice \\\n  --retries 3 \\\n  --timeout-seconds 120\n\n\nDefault voice mapping (2026-02-10 fixed):\n\nCallie (female) → Kore\nNick (male) → Puck\n\nOutput: MP3 (default delivery format)\n\nStep 4) Build Korean Subtitles (Full Text)\n\nUse full-text subtitle builder (no ... truncation):\n\npython3 scripts/build_korean_srt.py \\\n  --script <script.txt> \\\n  --audio <final.mp3> \\\n  --output <outdir>/podcast.srt \\\n  --max-chars 22\n\nStep 5) Render Subtitled MP4 (Font + Timing)\n\nUse renderer with adjustable font and timing shift:\n\npython3 scripts/render_subtitled_video.py \\\n  --image <thumbnail.png> \\\n  --audio <final.mp3> \\\n  --srt <podcast.srt> \\\n  --output <outdir>/final.mp4 \\\n  --font-name \"Do Hyeon\" \\\n  --font-size 27 \\\n  --shift-ms -250\n\n\nNotes:\n\nshift-ms negative = subtitle earlier (for lag fixes)\nIf text clipping occurs, lower font-size (e.g., 25~27)\nkeep text inside safe area; avoid overlap with character/object\nStep 6) Build Thumbnail + YouTube Metadata\n# Set API key via environment (required)\nexport GEMINI_API_KEY=\"<YOUR_KEY>\"\n\npython3 scripts/build_podcast_assets.py \\\n  --source \"<QuickView path or URL>\"\n\n\nReference (layout/copy guardrails):\n\nreferences/thumbnail_guidelines_ko.md\nStep 7) Final Delivery Checklist\n\nAlways include:\n\nsource used\nfinal MP3 path\nsubtitle MP4 path + size\nthumbnail path\nYouTube title options (3)\nYouTube description\nReliability Rules\nGemini timeout on long input: use chunked builder (build_dualvoice_audio.py)\nSubtitle clipping: reduce font size and increase bottom margin\nSubtitle lag: adjust --shift-ms (usually -150 to -300)\nKeep generated assets under Telegram practical limits\nSecurity Notes\nAPI keys must be passed via environment variables (GEMINI_API_KEY), not hardcoded.\nNever paste raw keys into prompts, logs, screenshots, or public posts.\nRecent hardening: thumbnail generation now passes keys via env (not CLI args).\nReferences\nreferences/podcast_prompt_template_ko.md\nreferences/workflow_runbook.md\nreferences/thumbnail_guidelines_ko.md"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jeong-wooseok/ai-podcast-pipeline",
    "publisherUrl": "https://clawhub.ai/jeong-wooseok/ai-podcast-pipeline",
    "owner": "jeong-wooseok",
    "version": "0.1.5",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline",
    "downloadUrl": "https://openagent3.xyz/downloads/ai-podcast-pipeline",
    "agentUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ai-podcast-pipeline/agent.md"
  }
}