Specification
Skill ID
pika-labs/pika-plugins/app-sizzle
Publisher
pika-labs
Repository
pika-plugins
Installs
0
Files
3
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

pika-labs/pika-plugins/app-sizzleInstalls these files
  • SKILL.md
  • references/liquid-glass.md
  • references/template-a-cinematic.md

What this skill tells the agent

App Sizzle — GPT-Image-2 Enhanced iOS App Teaser

Generate a polished 15-second app teaser from real app screens. Each selected screen is passed through GPT-image-2 before Seedance so compressed captures become cleaner references without inventing UI.

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 3,000-4,000 credits (~$30-$40) for a typical run with screenshot enhancement plus Seedance video. 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.

Generation contract: use resolution="1080p", duration=15, and sound=True. Skip fast=true because it caps Seedance at 720p. The skill owns duration and sound so the user only has to supply app identity, screens, logo, and aspect ratio.

The visual aesthetic is derived from the app's personality — not defaulted to liquid glass. The agent reads the app's soul from its icon, screenshots, and category, then chooses a treatment. The user provides the app identity and assets; the agent decides everything else (mode, prompt, camera, style).


Pre-generation wall-clock guard

Start a timer at skill start once the required app identity and screen/logo source are available and the cost gate has passed. Time spent waiting for the user's proceed reply, or for non-interactive cost_ack=proceed, is not prep time and must not trigger this guard. If required inputs or real assets are missing, stop at Stage 0 or Stage 0.5 and ask for them; do not bypass the asset gate. For runs with required inputs in hand, the first paid generation call is the GPT-image-2 generate_image_edit enhancement pass, and it must be invoked within 5 minutes of skill start. If you have not invoked the first generate_image_edit enhancement within 5 minutes of skill start, stop before any paid generation call and report failed_pre_generation_timeout with what you have so far: fetched assets, selected screens, feature map, arc, enhancement-prompt status, Seedance prompt draft if any, and the exact blocker. Do not keep refining analysis, enhancement wording, prompt wording, or camera language.

Print a single-line progress checkpoint after each prep stage and right before the paid generation call:

  • Stage 1/3 done — assets sourced and screened, analyzing screenshots.
  • Stage 2/3 done — feature map and arc written, locking enhancement prompts.
  • Stage 3/3 done — enhancement prompts locked, calling GPT-image-2 now.

Feature-map and enhancement-prompt writing is maximum 2 passes before the first generate_image_edit call. After the max 2 passes, ship what you have to generate_image_edit; do not continue polishing enhancement wording, screen analysis, or arc language. Seedance prompt writing is maximum 2 passes after enhancements complete; then ship what you have to generate_reference_video.

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, GPT-image-2, overlay, or edit 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.

Mode: Reference-to-Video

Primary: generate_reference_video(provider="seedance", resolution="1080p") with 3–5 screenshots + the app icon/logo as the final reference.

Fallback to provider="kling", quality_mode="pro" (= 1080p) when:

  • Seedance returns non-audio partner_validation_failed (celebrity faces, screen-recording UI)
  • Seedance returns insufficient_balance
  • Seedance stays queued/running until it returns a timeout such as seedance timed out after ...

Do not treat generated-audio moderation as an immediate Kling fallback. See the Seedance generated-audio moderation recovery runbook in Generate Video first.

Kling prompt uses <<<image_1>>> … <<<image_5>>> tokens instead of @Image1 … @Image5. Drop the resolution param (Kling uses quality_mode instead). See Gotchas.


Stage 0 — Asset Sourcing

If invoked with empty args and no relevant prior context, print this menu verbatim and stop. Do not call tools until the user supplies the app identity and screen source.

To make your app promo, I need:

1. App name + one-line description of what it does
   (e.g. "Nova — an AI journaling app for iOS")

2. Where should I pull the app screens from?
   — iOS App Store: give me the App Store URL or app name → I'll use
     `fetch_appstore_screens` to fetch screenshots, metadata, and icon
   — Web app / website: give me the URL → I'll capture it with Pika MCP
   — Local files / URLs: drop the paths and I'll upload them

3. Brand logo — path or URL (preferred) or skip to use the App Store icon
   The logo anchors the end card and prevents Seedance from hallucinating brand text.
   If you don't have a logo file, use the fetched App Store icon as the fallback.

4. Aspect ratio: 16:9 (landscape/YouTube) / 9:16 (Reels/TikTok) / 1:1. Optional: `variants=16:9,9:16,1:1` to export multiple deliverables from one render.

If the trigger message or prior context already supplies part of this, ask only for the missing required fields before touching any tool. These are the only questions the user needs to answer; the agent decides mode, prompt, camera, and style.

Once answered, the agent:

  1. Sources the screens (MCP App Store fetch / website capture / upload local files)
  2. Analyzes each screen (Stage 1) — reads every screenshot, maps UI → feature
  3. Designs the narrative arc (Stage 2) — builds a 15s story structure before touching the prompt
  4. Selects the 3–5 best screens for the promo (ordered by narrative role)
  5. Uploads logo + screens to get public URLs
  6. Writes the screen-specific prompt (Template A or B)
  7. Generates at 1080p

Stage 0.5 — Asset Gate

Before calling any generation tool, verify both assets are in hand:

AssetRequiredIf missing
Real app screenshots (≥1 actual sourced image)YesStop and ask for screenshots
Brand logo OR app iconYesUse the fetch_appstore_screens icon when App Store sourcing is used; otherwise stop and ask for a logo/icon

If either is missing, tell the user exactly what's needed and wait. Real assets are what keep the teaser grounded; text-to-video placeholders make Seedance invent UI.

Avoid:

  • Generate using text-to-video as a substitute when screens were expected
  • Describe imaginary UI in the prompt ("a dark dashboard with…") without a real reference image
  • Proceed with "I'll use a placeholder for now"
  • Make up what the app looks like from its name or description

Use this skill in a project

Open any RiverX project, search the Skills panel for pika-labs/pika-plugins/app-sizzle, and install it in one click.

Use this skill