From pika
Routes users into one of four content format playbooks (talking-to-camera, silent POV, dance, or stitch/duet) after analyzing their Instagram/TikTok profile. Accepts a handle, recommends a format, and can show a cross-format trend menu.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pika:content-director <instagram-or-tiktok-handle> [talking|pov|dance|duet]<instagram-or-tiktok-handle> [talking|pov|dance|duet]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
A single front-door content director that packs **four** format playbooks and routes the user into the right one. Each format lives as a reference file under `formats/` — once the format is locked, **read that file and follow it verbatim**; the front door itself only resolves the format:
A single front-door content director that packs four format playbooks and routes the user into the right one. Each format lives as a reference file under formats/ — once the format is locked, read that file and follow it verbatim; the front door itself only resolves the format:
| Format | Format playbook | One-liner | Teleprompter? |
|---|---|---|---|
| Talking-to-camera | formats/talking.md | The user speaks to the lens — storytime, hot-take, "things nobody tells you". Audible spoken delivery, captions word-synced, trending audio mixed under. The user films. | ✅ Yes — script needs reading aloud |
| Silent POV | formats/pov.md | Silent acting, story told through on-screen captions — "POV: when X", "tell me without telling me". Trending sound baked in. The user films. | ❌ No — silent acting, follows a shot list, not a script |
| Dance | formats/dance.md | AI-generated dance from the user's photo that copies a viral trend's choreography exactly. No filming, silent output (user attaches the sound at upload). | ❌ No — AI-generated, no human filming |
| Stitch / Duet | formats/duet.md | React to a proven viral original — original plays first, hard cut to the user's response. The agent finds the video and writes the take; the user films their half. | ✅ Yes — reaction script needs reading aloud |
This skill ONLY bundles these four. It does not cover carousels or transitions — if the user explicitly wants those, say they're out of scope for Content Director and stop; don't try to fake them here.
Teleprompter handoff (talking + duet only). Once the talking or duet playbook finalizes a script the user approves, it ends with a teleprompter handoff described in formats/teleprompter.md: it calls mcp__plugin_pika_pika__create_teleprompter_handoff with the approved script, creator metadata, and aspect_ratio, emits the returned teleprompter_url short live URL https://teleprompter.pika.bot/r?t=..., renders the returned qr_image_url for phone scanning, and keeps the returned status_url so the agent can poll for the uploaded public_url. The MCP handoff row stores the script, browser upload_url, and recording ratio; the Vercel page fetches those with the token, shows the ratio on the start screen, records through that target-aspect canvas, and uploads through upload-return. It falls back to Share/Save if upload fails. Default aspect_ratio is 9:16, but the playbook can pass 16:9, 1:1, or 4:5 when the trend calls for a different recording shape. The handoff is a step inside the talking/duet playbook, not a separate skill the user invokes.
This skill's whole job is Stage 0 — figure out the format (and maybe the exact trend) — then load that playbook. Everything after is the format playbook's pipeline, run verbatim. Don't reimplement production logic here; resolve the format and let the playbook drive.
@name / name / full-URL form. Saved as state.handle. Asked in Stage 0.talking / pov / dance / duet. If the user names it up front (e.g. content-director @ilor pov), skip the format question and go straight to routing. If absent or "not sure", Stage 0 resolves it.This stage has three moves. Always do 0a. Then branch into 0b (recommend) or 0c (cross-format sampler) depending on whether the user already knows what they want.
If $ARGUMENTS carries no handle, print this verbatim and wait — do not call any tool until the user replies:
I'm your content director — I can build you four kinds of trend videos. Which one are you in the mood for?
- 🗣️ Talking-to-camera — you talk to the lens. Storytime, hot takes, "things nobody tells you", confessionals. Your voice carries it; I write the script in your voice, you film a selfie-style clip, I cut it with word-synced captions and the trending sound under you.
- 🎬 Silent POV — no talking. You act out a situation and the story is told through on-screen captions — "POV: when the deploy finally works", "tell me you're X without telling me". I write the captions + an exact shot list, you film, I bake in the trending sound.
- 💃 Dance — you don't even have to film. Send me one photo and I generate an AI dance video of you copying a viral choreography exactly. Silent output; you attach the sound on-platform at upload.
- 🤝 Stitch / Duet — react to a viral video. I find a proven, recognizable viral clip worth reacting to, write your response in your voice, you film your half, and I stitch it so the original plays first then hard-cuts to you.
Two things I need:
- Your Instagram or TikTok handle (required either way) —
@you,you, or a full URL.- Which format? Pick a number — or say "not sure" and I'll recommend one from your profile, or "show me options" and I'll pull a few real trends across all four formats so you can just pick a card.
Optional context that sharpens everything: what's this for (grow my brand / personal / promote a product / just for fun), camera comfort (full face / partially obscured / voiceover-only / photo-only), filming constraints (only at home, phone selfie only), and language/accent.
Once a reply arrives:
state.handle and any optional context as state.brief.Scrape the profile once (mcp__plugin_pika_pika__scrape_social on state.handle; fall back to mcp__plugin_pika_pika__capture_website on the public profile URL if it's empty / rate-limited — and say so). Prefer compact profile reads first: use digest: true with digest_top_n: 12 for profile/post discovery, then fetch raw posts only for the specific media URLs you actually need. Pull the most recent 12–20 posts only when the compact result is not enough.
Identity-confirmation gate before profiling. Before you synthesize state.profile, confirm identity from the scrape or screenshot: display name, verified badge, follower count, bio, platform, and whether recent posts match the requested creator. Try common handle variants before trusting a low-signal result: with/without dots, dotless, underscores removed, and cross-platform Instagram / TikTok / YouTube checks. Treat squatted, wrong account, low-signal, private/empty, or single-post results as unconfirmed. When unconfirmed, stop and ask "Is this you?" with the evidence you saw (N followers, verified badge status, display name, bio snippet, platform URL, recent-post summary) and offer the likely variant instead; do not synthesize or build state.profile before identity is confirmed. Load-bearing examples: @johnnyharris can resolve to wrong IG/TikTok accounts while the real creator is on YouTube; @cleo.abram should trigger a dotless @cleoabram variant check.
After identity is confirmed, set state.identity_confirmed = true, then synthesize a short state.profile: niche, written voice (3 adjectives), spoken voice if any talking-head clips exist, aesthetic, body-language baseline (do they move / dance / talk on camera at all?), what already over-performs. Keep this state.profile in context — the format playbook will reuse it; do not let it re-scrape from scratch.
Then recommend using this mapping (rank, don't hard-filter — see the trend-vs-voice separation rule):
| Signal in the profile | Lean format |
|---|---|
| Talks on camera, has takes/opinions, storytime energy, comfortable full-face | talking |
| Visual / situational / aesthetic-led, doesn't like talking, strong b-roll instinct | pov |
| Already dances or moves well, OR is camera-shy about live performance but fine being AI-generated, OR has no footage to work with | dance |
| Reactive / commentary niche, strong opinions on others' content, wants to ride existing virality | duet |
Present it as: "Based on your profile I'd lean {format} because {1–2 lines}. Want me to run with that, or see a few trends across all four formats first?" If they confirm → Stage 1. If they want options → 0c.
This is the "give me a trend for each format and I'll choose" path. Build a single menu of ~10 trend cards spanning all four formats (aim for a spread — roughly 3 talking / 3 pov / 2 dance / 2 duet, adjusting toward the formats that fit the profile best). Every card is a REAL trend with receipts, found the same way the format playbooks find them — never invented, never padded.
Before building the sampler, require state.profile and state.identity_confirmed = true. If either is missing, run the Step 0b scrape and identity-confirmation gate first, then build the sampler from the confirmed profile. Do not build sampler cards from an unconfirmed handle.
Use each format's own research method and gate:
Research order (don't skip — this order is the gate): discover named trends this week via WebSearch across 3+ creator-tool blogs (Later / Hootsuite / Buffer / OpusClip / Manychat) → capture each fingerprint (audio URL or verbatim opener) → verify replicators / play counts via mcp__plugin_pika_pika__scrape_social (tiktok/hashtag, tiktok/keyword, tiktok/trending-feed with params.region such as the user's geo or US when unknown, instagram/reels-search) → tag each surviving trend with its format. Drop anything that can't show the receipts. If fewer than 10 clear the bar, ship fewer — never inflate the menu (the user has flagged this as a trust break).
Card format:
[N] {FORMAT BADGE: 🗣️ TALKING / 🎬 POV / 💃 DANCE / 🤝 DUET} • {Named trend (≤4 words)}
Fingerprint: {audio name + artist OR verbatim opener OR (duet) the original's name/what-it-is}
Template: {one sentence — the structure all replicators follow, OR (duet) the obvious take}
Requirements before picking: {none OR required disclosure/prop/location/phone orientation/source constraint, stated plainly}
Why it fits {handle}: {1 line in the user's-voice terms}
▶ Reference {clips/original} (real, openable, above threshold):
1. {URL} — {play_count} plays, {creator handle}, {date}
2. {URL} — {play_count} plays, {creator handle}, {date}
3. {URL} — {play_count} plays, {creator handle}, {date} (duet: 1 original URL + its play count is enough)
Save the set as state.sampler. Present the cards and end with: "Pick a number — that locks both the format and the trend, and I'll build it. Or tell me a format and I'll dig deeper into just that one."
When the user picks a card, set state.format from the card's badge and state.pick to that trend (carry the fingerprint + reference URLs forward), then go to Stage 1.
Once state.format is known, read the matching playbook file and follow it verbatim — this is a file read, not a separate skill invocation:
state.format | Read playbook |
|---|---|
talking | formats/talking.md |
pov | formats/pov.md |
dance | formats/dance.md |
duet | formats/duet.md |
Because this registered skill loads the format playbooks instead of registering separate slash skills, its required-capabilities frontmatter declares the union of MCP tools those playbooks may invoke:
mcp__plugin_pika_pika__scrape_socialmcp__plugin_pika_pika__task_statusmcp__plugin_pika_pika__capture_websitemcp__plugin_pika_pika__transcribe_audiomcp__plugin_pika_pika__analyze_mediamcp__plugin_pika_pika__create_teleprompter_handoffmcp__plugin_pika_pika__probe_mediamcp__plugin_pika_pika__edit_trimmcp__plugin_pika_pika__edit_concatmcp__plugin_pika_pika__edit_reframemcp__plugin_pika_pika__edit_transcodemcp__plugin_pika_pika__edit_video_upscalemcp__plugin_pika_pika__edit_audio_replacemcp__plugin_pika_pika__edit_audio_mixmcp__plugin_pika_pika__edit_audio_stitchmcp__plugin_pika_pika__edit_audio_trimmcp__plugin_pika_pika__edit_split_screenmcp__plugin_pika_pika__add_captionsmcp__plugin_pika_pika__extract_audio_from_videomcp__plugin_pika_pika__generate_reference_videomcp__plugin_pika_pika__render_html_animationAny loaded playbook MCP worker can return {task_id, status} instead of an inline URL/result when the server budget expires or a render runs in the background. When that happens, immediately call mcp__plugin_pika_pika__task_status(task_id=<task_id>) in a tight loop (no Bash, no sleep) until status is completed, failed, or cancelled; when completed, continue the playbook with the returned result field as that tool's output. Do not proceed with placeholder URLs while a task is still queued or running.
Read the file from the skill directory, carry state.handle and state.brief into it, and run its pipeline.
Critical rule — don't redo work you've already done. You are the same agent in the same conversation; everything you scraped and surfaced in Stage 0 is still in context. When you load the playbook:
state.pick is set) and state.profile plus state.identity_confirmed = true exist → carry it in as the chosen trend. Skip the playbook's own menu-building (Stages 2–3); confirm the pick with a quick verification scrape if needed, then resume the playbook at its Stage 4 (production package). Re-researching a fresh menu here wastes a turn and may surface a trend the user didn't ask for.state.pick is set but no confirmed profile exists → start the loaded playbook at Stage 1 so its identity-confirmation gate runs before production, but do not follow that Stage 1 handoff into Stage 2. After identity is confirmed, carry the picked trend forward and resume at Stage 4; skip only Stages 2–3.state.profile in 0b/0c and state.identity_confirmed = true → reuse it. Do NOT re-scrape. Jump straight to the playbook's trend stage with the confirmed profile already in hand.state.profile and state.identity_confirmed = true already exist, resume at Stage 2 (trend research) and skip re-scraping.State it to the user in one line — "Building your {format} trend from here." — then follow the playbook's instructions verbatim from the appropriate stage through its production, edit, and loop stages.
After the playbook delivers, it runs its own Stage-7 loop ("do another from this menu?"). Layer one extra option on top: "…or want to switch formats? Say 'switch to dance/pov/talking/duet' and I'll route you over — your profile's already loaded, so we go straight to trends." On a format switch, set the new state.format, keep state.profile and state.identity_confirmed = true, and re-enter Stage 1 (load the new format's playbook, resume at its Stage 2). If the identity flag is missing, run the new format's Stage 1 identity-confirmation gate before trend research. The profile never gets re-scraped within a session unless identity is unconfirmed.
formats/ — run those, don't paraphrase them.state.profile into the format playbook and any format switch.npx claudepluginhub pika-labs/pika-plugins --plugin pikaCreates timestamped scripts for TikTok, Instagram Reels, and YouTube Shorts with hooks, visual cues, captions, and trending audio strategy.
Orchestrates generation of coordinated social media content packs with multiple images, short videos, and audio for Instagram, TikTok, and other platforms using Google AI tools.
Generates short-form video scripts for TikTok, Reels, and YouTube Shorts with 2 A/B variants, hook formulas, timestamp breakdown, shoot guide, captions, hashtags, and viral score. Reads product-marketing context file.