content-director

Use when the user asks for content director or a task matching the examples below. All-in-one content director that bundles FOUR format specialists — talking-to-camera, silent POV, dance, and stitch/duet — behind a single front door. Ingests the user's Instagram or TikTok handle, then in Stage 0 ask

By pika-labs · 895 installs

npx skills add pika-labs/pika-plugins --skill content-director

Source repository · Upstream listing

Content Director — Bundle (format router) Tools below are Pika MCP tools, named bare — call each under whatever prefix your session exposes for the Pika MCP. 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 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. Parameters handle (required) — IG or TikTok handle in any of @name / name / full URL form. Saved as state.handle . Asked in Stage 0. format (optional) — one of 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. brief (optional) — goal / camera comfort / filming constraints / language. Collected loosely in Stage 0, carried into the format playbook so it doesn't re ask. Stage 0 — Pick a format (this is the whole skill) 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. Step 0a — Intake (print verbatim, then stop and wait) 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? 1. 🗣️ 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. 2. 🎬 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. 3. 💃 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. 4. 🤝 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: Save the handle as state.handle and any optional context as state.brief . If the user picked a number / named a format → skip to Stage 1 (Route) . If the user said "not sure" → go to 0b . If the user said "show me options" / "show me trends" / "pick a card for me" → go to 0c . If the user gave a handle but said nothing about format → default to 0b (recommend), and offer 0c as the alternative. Step 0b — Recommend a format from their profile Scrape the profile once ( scrape social on state.handle ; fall back to 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. Step 0c — Cross format sampler menu (~10 real cards across the four formats) 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: talking / pov — fingerprinted or culturally recognized viral formats. Reference clips ≥500K plays (broad) or ≥50K (niche) . See the virality receipts gate and the trend fingerprint gate. dance — a currently viral dance with a concrete, openable reference clip URL whose choreography we can copy. duet — a viral, recognizable ORIGINAL worth reacting to; proof is the original's ≥500K plays , not a replication wave. See the duet reaction model. 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 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: 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. Stage 1 — Load the format playbook 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 Step 1a — Loaded playbook capability surface 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: scrape social task status capture website transcribe audio analyze media create teleprompter handoff probe media edit trim edit concat edit reframe edit transcode edit video upscale edit audio replace edit audio mix edit audio stitch edit audio trim edit split scree