founder-product-video
Use when the user asks for founder product video or a task matching the examples below. Generate a 65-second founder-style product video from a product URL + user-supplied imagery. Output is a 16:9 1080p MP4 — 4 × 15s SeeDance acts of a talking founder + 5s branded end card + background music. The u
By pika-labs · 1,656 installs
npx skills add pika-labs/pika-plugins --skill founder-product-video
Source repository · Upstream listing
founder product video
You generate a 65 second founder style product video from a product URL plus user provided imagery: 60 seconds of talking founder body video plus a 5 second branded end card. The user's images (product photos / website screenshots / app screenshots) flow into the SeeDance acts as visual references, and digital product screens / brand wordmarks are composited after generation so readable UI is deterministic instead of model rendered.
No cutaways. No website CSS extraction. AI generation, deterministic render, captions, concat, and music mix go through Pika MCP tools by default. Lower third overlays are opt in and use MCP compose by default, with local ffmpeg only as an emergency fallback.
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 4,000 credits (~$40) for a typical four act Seedance founder video plus supporting assets. 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. For non interactive quick or config callers, require cost ack=proceed in the config; if it is absent, stop with the estimate instead of spending credits.
[0] Intake — run first, before any pipeline step
If invoked with empty args , print this menu verbatim and stop — wait for the user to paste inputs:
What founder video do you want to make? Required:
Product URL — https://... (anything with a real homepage)
Founder — name + role, e.g. "Eli Kim, CEO"
Founder photo — local path, https URL, OR generate (I'll create a portrait)
Optional (sensible defaults if omitted): brand kit path · custom on phone screenshots · music · aspect (16:9 / 9:16 / 1:1) · location image · voice style · product type
Example: /founder product video https://example.com founder "Eli Kim, CEO" photo ~/Pictures/eli.jpg
If args carry partial input in interactive mode , skip the menu and gather the missing required fields by asking one at a time — ask, wait, ask the next. Don't bundle questions into one block. If the user supplies a field unprompted (e.g. they pasted a URL in the trigger message), skip that question and confirm the value back to them once at the end. Don't start the pipeline until all required fields are answered. If the non interactive fast lane applies, use step [0.5] instead.
[0.5] Non interactive fast lane
Use this path when the caller passes quick or config <path , or when the
caller states they are running from CI, a subagent, a batch job, or any other
non interactive harness.
This section has precedence over the interactive ask/wait instructions below.
When it applies, use this fast lane and do not fall through to the multi turn
intake unless url or founder name/role is truly missing.
config <path points to a JSON file with pre baked values for the canonical
input contract: url , brand kit path or build brand , founder name ,
founder role , founder photo , assets , music url , aspect ratio ,
location image url , voice style , product type , and lower third .
quick means use defaults for optional extras, auto build the brand kit with
build a brand quick if brand kit is omitted, and use founder photo =
"generate" when no photo is supplied.
For quick or config , do not stop for confirmation at the brand kit
branch, founder photo generation prompt, optional extras prompt, script
choices, or end card/caption defaults. Record assumptions inline and continue.
If url or founder name/role cannot be found in args or config, stop once with
a single compact missing fields list instead of starting a multi turn Q&A loop.
1. Product URL (required) — https://... . Used to (a) derive the brief in step [1] and (b) feed the brand kit branch below.
2. Brand kit (required) — interactive mode: ask "Do you already have a brand kit folder, or should I build one first?"
If a path use it ( state.brand kit path = <path ). Accept either brand.json or an exported build a brand kit containing brand.md , tokens/tokens.json , and logo assets.
If "build" invoke the build a brand skill on the URL/brief and wait for the exported brand kit. This is a full identity workflow and may pause for user choices; surface those prompts in interactive mode.
Fast lane: if config provides brand kit path , use it. If config sets build brand or quick omits brand kit , invoke build a brand quick on the URL/brief and wait for the exported brand kit; do not surface build a brand prompts or stop for identity choices. After either branch, set state.brand kit path . Only stop with a single compact missing fields list if there is no path and the brand kit cannot be built.
3. Founder identity (required) — interactive mode: ask all three together:
founder name — e.g. "Avery"
founder role — e.g. "CEO, ExampleCo"
founder photo — local path / https URL / OR the literal string generate to auto create a portrait. If generate , prompt the user for a 1 line vibe ("warm, casual smart attire" / "Pixar style 3D animation" / etc.) — this becomes the seed prompt for generate image in step [4].
Fast lane: use founder values from args/config. If founder photo is omitted, set founder photo = "generate" and use a neutral founder portrait vibe derived from the product tone; do not stop for a separate photo vibe prompt.
Default to no lower third so the happy path stays lean. If the user explicitly asks for a lower third, record state.lower third = true ; in interactive mode confirm that edit video compose will add the transparent overlay after rendering.
4. Optional extras — interactive mode: offer these once as a single message, then proceed without waiting if no answer comes back in the same turn. Fast lane: use the defaults below without asking.
Custom imagery — list of assets (product photos / app screenshots) shown on the founder's phone. Default if omitted: use screenshots from brand.json.screenshots when present, otherwise look for obvious screenshots or product images inside the brand kit, otherwise capture the product URL with capture website(mode:"screenshot") before step [2]. Do not proceed to script or SeeDance without real product UI / product imagery unless product type is explicitly service and the user accepts an environment only video. In the fast lane, if no supplied/brand kit/captured asset exists, stop once with a compact missing assets error instead of silently shipping a generic talking head video.
Music — local path / https URL / OR generate (instrumental, ~60s). Default: generate via Kling background mode.
Lower third — optional. Default: off. If enabled, render the transparent .mov through MCP and overlay it onto the body with edit video compose .
Aspect ratio — 16:9 (default), 9:16 , 1:1 .
Location — defaults to a flat seamless backdrop in state.brand.colors.accent (clean studio shoot look, character against a single brand color, whatever the brand's accent is). Override with a path / URL / text description if the user wants office, outdoor, etc.
Voice style — VO direction string for SeeDance, e.g. "warm authentic founder energy, conversational". Default: derived from brief.tone .
Product type — digital physical apparel physical object consumable service . Default: auto derived in step [2] from asset analyses.
After Stage 0 completes, store all gathered values in state.inputs . If you already created a local work directory for this run, optionally persist the same object as <workdir /inputs.json ; do not require a predefined work directory environment variable. Then enter the pipeline at step [1].
[0.6] Avatar type probe for founder photos
Before any paid generate reference video call, run this Avatar type probe on the resolved founder photo/avatar URL after local upload or user supplied URL normalization. This applies to any founder photo used as the character reference — whether supplied via photo or generated.
Call analyze media once:
Route from the result:
recognized IP / copyright risk STOP only when avatar type is "recognized ip" , or recognized character names a specific character (for example "Batman" ), or when both moderation risk is "high" and recommendation is "reject" . Treat recognized character: null , empty string, "none" , "unknown" , "n/a" , and low/medium moderation risk as not enough to stop by themselves. Run this check before the real/stylized routes. A chibi Batman is still Batman even when avatar type is stylized / illustrated.
real human / AI generated realistic proceed normally.
stylized / illustrated proceed with a visible warning that stylized avatars may be less reliable for Seedance likeness and moderation, then continue only if the user supplied or accepted that avatar.
trademarked / copyrighted STOP before generation. Surface this message: Your founder photo appears to be a trademarked character ([X]). Most video providers will moderate this and refuse to generate. Pass photo <real looking photo url to override. For this skill, photo <real looking photo url is the accepted concrete flag; you may also mention the cross skill avatar <real looking photo url wording because users may know that convention.
Required inputs (canonical contract)
After Stage 0, these are the fields downstream steps consume:
url — the product website (https://). Drives step [1] brief.
brand kit path — brand kit folder. Required. End card AND lower third consume brand.json when present, otherwise brand.md , tokens/tokens.json , and logo assets from a build a brand export. See step [4.5].
founder name + founder role + founder photo — required from intake. Step [4] normalizes founder photo into founder photo url and character url before any SeeDance call.
assets — optional array of { url, role?, caption? } . Defaults to the screenshots captured by the brand kit; when the brand kit has no screenshots, capture the product URL before step [2] and store the returned image url as a real product UI asset. role is a hint string mapping the asset to a script beat ( hero , feature a , cta , etc.).
location image url — optional. Defaults to a generated solid color backdrop in state.brand.colors.accent .
music url — optional. Defaults to generate (Kling 60s background bed in step [7]).
aspect ratio — default 16:9 .
voice style — optional, defaults to brief.tone .
product type — optional, auto derived in step [2].
State
Keep a simple state object as you work and save every CDN URL there so a partial run can be resumed. Treat task status value completed as the successful terminal state ( failed and cancelled are the failure terminals), then unwrap result.structuredContent when present. The final video lives on Pika's CDN; no local workspace is required unless MCP compose is unavailable and you explicitly trigger the local lower third fallback in step [8b].
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 in state .
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