podcast
Use when the user asks for podcast or a task matching the examples below. Two-host podcast video for any URL or free-form topic — 1 minute, 4 acts × ~15s, native multi-shot dialogue, optional voice cloning for Host A. Use when the user asks to "make a podcast", "podcast about [thing]", "podcast revi
By pika-labs · 1,650 installs
npx skills add pika-labs/pika-plugins --skill podcast
Source repository · Upstream listing
/pika:podcast
4 acts × 15s each = 60s. Host A always LEFT, Host B always RIGHT. Accepts a URL or a free form topic / brief.
Parameters
Param Default Notes
input required URL to review or free form topic / brief (e.g. "I and Elon Musk talk about Mars")
bg img auto generated Podcast studio background
host a img auto generated Host A portrait — see Real person handling below
host b img auto generated Host B portrait — see Real person handling below
voice a 876341503281471517 Kling preset or cloned voice ID for Host A
voice b 829837252279803904 Kling preset or cloned voice ID for Host B
aspect ratio 16:9 Output aspect ratio
Cost transparency gate
Before any paid MCP call, call identity balance({verbose: true}) once. Surface the current balance, recent burn rate, and remaining runway, then gate the run with this exact message:
Estimated cost: about 6,000 9,000 credits (~$60 $90) for four Kling v3 omni pro 15s acts, optional missing asset image generation, one act corrective retry, concat, and post flight analyze media QA. This exceeds $5, so Reply proceed to continue or cancel to stop.
Do not call any paid MCP tool until the user replies proceed . If the user replies cancel , stop without generating. This is the only yes/no gate; after proceed , render the four acts and return the URL.
Defaults — fire fast, no mid flow confirmation
Use the param table defaults silently for voices. voice a defaults to the Kling preset 876341503281471517 and voice b to 829837252279803904 . Do not ask "which voice?" before firing — only honor explicit overrides ( voice a= , voice b= ).
Auto generate any missing host portraits silently (Step 1's archetype prompts). Do not ask "should I generate a host image?" — just generate.
Only the cost transparency gate asks for proceed . After proceed , submit → render the 4 acts → return URL. Account credit balance + provider failover are the canonical guardrails. The yes flag is accepted as a no op for backward compatibility.
Topic mode personas (Step 3) — when the user names a real public figure, follow Step 4 (Real person handling) silently: archetype portrait by default, no auto generated photographic likeness, no question to the user about likeness rights.
Pre generation wall clock guard
Start a timer at skill start once the podcast input is resolved and the cost gate has passed. The first paid generation call is generate image for missing background/host assets. If all assets are already provided, the first paid generation call is generate reference video . The first paid generation call must be invoked within 5 minutes of skill start. If you have not invoked the first paid generation call within 5 minutes of skill start, stop before any paid generation call and report failed pre generation timeout with what you have so far: input mode, asset status, voice status, URL capture/WebFetch status, script draft status, and the exact blocker. Do not keep refining host archetypes, factual grounding, jokes, or act wording.
Print a single line progress checkpoint after each prep stage and right before the paid generation call:
Stage 1/4 done — input resolved and cost gate passed, locking missing asset image prompts.
Stage 2/4 done — missing asset prompts ready, calling image generation now. Use this right before the first paid generate image call when any background or host image is missing. If all images are already provided, emit Stage 2/4 done — assets and voices ready, collecting URL/topic facts. instead and continue without image generation.
Stage 3/4 done — script draft locked, preparing first act.
Stage 4/4 done — first act prompt ready, calling Kling now.
Missing asset image prompt iteration is maximum 2 passes before the first generate image call. After the max 2 passes, ship what you have to generate image ; do not continue polishing host archetypes, studio background details, or persona styling. Script and act prompt iteration is maximum 2 passes before Kling. After the max 2 passes, ship what you have to generate reference video ; do not continue polishing jokes, interruptions, persona framing, or camera wording.
Local images on Claude Desktop
Claude Desktop can't pass inline pasted images to MCP tools yet (Anthropic side limitation). If the user pastes a photo inline, or mentions a local file they want as host a img / host b img , pause Step 1 and kindly send them this — something like:
Heads up — pasted images don't reach MCP tools on Claude Desktop yet (Anthropic limitation). Two easy options for your photo:
Paste a URL if it's already hosted (Imgur, S3, your site) — fastest
Attach the image file so I can upload it before generation.
When a local file arrives, convert it to a public URL with upload asset and use the returned public url as the parameter before Step 1. Already hosted https://... URLs work as is and skip this entirely.
If the user names a real public figure without attaching anything, do NOT auto generate their likeness — Step 4 (Real person handling) uses an archetype portrait instead.
Long running task status polling
When any long running generation or edit call returns a task id with or without an initial status, including {task id} , {task id, status: "queued"} , or an initial queued , running , or processing status, record the task id and start time immediately.
Call task status({task id}) in a tight loop until terminal ( completed failed cancelled ). No manual sleep and no Bash polling; the worker holds each status call open.
Emit ONE visible progress line every 60s while status is queued , running , or processing : Seedance i2v queued for {N}m {S}s... still processing . Replace the provider/stage label when polling Kling, image generation, clone voice, or concat tasks.
On completed , unwrap the returned result URL and continue.
On failed or cancelled , surface failure to the user with task id , status, and the last status message.
After 15 min total from the original submit, call task cancel({task id}) if the task is still non terminal, then surface failure to the user. If cancel reports the task is already terminal, call status once more and report that terminal result.
Do not submit a duplicate request while the original task is still queued , running , or processing .
Steps
0. Resolve input (empty args menu)
Strip flags ( yes , no captions , etc.) and key=value parameters from $ARGUMENTS . If what remains is empty or whitespace only , print this menu verbatim as your full response, then stop and wait for the user's next message — do NOT call any tool, do NOT proceed to Step 1, do NOT invent a topic or URL. If the stripped input is non empty (a URL or any prose), skip this step silently and proceed to Step 1.
What would you like a podcast about? I can take any of:
A website URL (product page, docs site, launch page) — e.g. https://pika.art
A GitHub repo — e.g. https://github.com/anthropics/claude code
A blog post / article URL — e.g. a recent piece you'd like discussed
A free form topic or brief — e.g. "I and Elon Musk talk about Mars" or "two scientists debate AGI"
Reply with your choice and I'll generate a 1 minute two host podcast video (4 acts × ~15s).
Tip: you don't need to type /pika:podcast — just say things like "make a podcast about <topic ", "podcast review of <url ", or "I and <persona talk about <topic " and I'll fire this skill automatically.
When the user replies, treat their reply as the resolved input (URL or topic) and proceed to Step 1. Do not re prompt.
1. Generate missing assets (parallel)
Generate only what's not provided. Default archetype prompts:
bg img — modern podcast studio, two chairs, warm lighting, no people, 16:9
host a img — enthusiastic host, studio portrait, left side framing, 1:1
host b img — pragmatic skeptic host, studio portrait, right side framing, 1:1
If the input mentions specific personas (Step 3), tune the archetype to match the persona vibe — see Real person handling below.
2. Resolve voice IDs
Use voice a / voice b as given; otherwise fall back to the default Kling presets ( 876341503281471517 / 829837252279803904 ). If the user supplied a cloned voice ID via voice a= / voice b= , use it directly.
3. Parse input mode — URL vs topic
Strip flags ( yes , no captions , etc.) and key=value parameters from $ARGUMENTS . Inspect what remains.
URL mode — input contains a https?:// URL:
Call capture website on the URL for visual grounding only: product/page name, visible layout, screenshots, b roll cues, and one jokeable visual detail.
Call WebFetch on the same URL and use its full page text as the script source of truth. Do not rely on the screenshot alone for facts.
Extract from the combined inputs: product name, value prop, 2–3 specific features or facts, pricing, one jokeable detail, and any concrete quotes or claims.
For long form pages (Wikipedia, docs, blog posts, or articles), scan the WebFetch full page text for deep sections beyond the lede. When at least 3 substantive deep sections are present, the script must mention at least 3 distinct sections beyond the lede (for example architecture, training, hallucinations, limitations, deployment, or safety), not just the opening summary.
Use WebFetch text for factual anchors and capture website for visuals. If they conflict, prefer WebFetch for factual claims and treat the screenshot as a visual reference.
Topic mode — input is free form prose (no URL):
Treat the whole input as the brief. Parse for:
Subject — what the conversation is about
Hosts — explicit if mentioned ("I and Elon Musk", "two scientists", "Joe and Sarah"); otherwise use defaults (enthusiastic host + skeptic host)
Angle — debate / interview / explainer / casual
Concrete facts — any specific claims, numbers, dates, quotes the user gave
If no concrete facts are given, use 2–3 clearly framed observations or hypotheses to anchor jokes and the "wait, actually..." pivot. Do not present invented claims as facts; if factual accuracy matters for the topic, ask for a source or URL.
If the user says "I and X" or "me and X", Host A = the user (represented by host a img= if supplied, else a generated host portrait) and Host B = X.
4. Real person handling (topic mode only)
If the parsed input names a specific real public figure as a host (e.g. "Elon Musk", "Taylor Swift", "Joe Rogan"):
Default behavior : do NOT auto generate that person's photographic likeness. Generate an archetype portrait matching the persona vibe — e.g. "tech billionaire energy CEO at a podcast desk" for an Elon style host, "pop star aesthetic" for a Taylor style host. Clearly inspired by, not impersonation.
Override : if the user explicitly provides host a img=<url or host b img=<url , use the provided image as is. The user takes responsibility for likeness rights.
Voices : same logic — default to a generic Kling preset; only use a cloned voice when the user provides one ( voice a= / voice b= ).
Script tone : the dialogue can riff on the named persona's known public positions or vibe (e.g. Mars enthusiasm for Elon style) — public record opinions are fair game. Do NOT put specific defamatory, off character, or fabricated private life statements in their mouth.
This guardrail keeps the skill creative ("I want a podcast where I argue with a tech CEO about Mars") without auto generating deepfakes of named real people.
CJK / non Latin handling
Use this section when the URL, topic, product name, host name, quote, or required script detail includes Chinese, Japanese, Korean, Arabic, Devanagari, Cyrillic, accented Latin, emoji, or any other non Latin text.
Script prese