pika-labs/pika-plugins1 file

Baseball Trend

>

Specification
Skill ID
pika-labs/pika-plugins/baseball-trend
Publisher
pika-labs
Repository
pika-plugins
Installs
0
Files
1
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/baseball-trendInstalls these files
  • SKILL.md

What this skill tells the agent

baseball-trend

15-second ESPN-style broadcast cutaway of a user, sitting behind home plate at a fake Yankees vs Red Sox ALCS Game 3 game at Fenway Park, with two announcers naming them on air.

Fixed-recipe skill — the prompts below are calibrated. Substitute the username and keep the marked anchors intact.

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-5,500 credits (~$30-$55) for the GPT-image-2 broadcast still, one or two Kling v3-omni pro 15s renders (includes one Step 2 corrective retry with a changed payload), 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, the pipeline runs end-to-end.

Voice selection note

This skill uses Kling-omni's native broadcast commentary: two male announcers, matching MLB broadcast convention. The identity_voice setting is NOT consumed because this fixed recipe does not use agent-side TTS or custom voice IDs.

If the user wants a female-coded announcer or any custom voice, baseball-trend is the wrong skill. Route them to /pika:podcast with a baseball framing, which has an agent-side voice path and can honor explicit voice choices.

Stage 0 — Intake

If invoked with empty args and no usable prior context, print this menu and stop:

Who should appear in the fake MLB broadcast cutaway? Required: - Name — exactly as it should appear in the chyron and announcer dialogue - Reference photo — one front-facing or 3/4 portrait, local path or HTTPS URL

If only one field is missing, ask only for that field. Otherwise ask the two questions below one at a time.

1. Username (required) — used both in the broadcast chyron and in the announcers' commentary, e.g. "Jane Doe". Save as state.username. This replaces every literal ${username} in the prompts below.

2. Reference image (required) — one front-facing 3/4 portrait, good lighting, one face. Resolve to a CDN URL and save as state.reference_image_url:

  • `https://…` URL → use as-is.
  • Local path → upload the file with upload_asset, then use the returned public URL.
  • Claude Desktop, photo pasted inline → inline pastes don't reach MCP tools yet (Anthropic limitation). Reply with:
Heads up — pasted images don't reach MCP tools on Claude Desktop yet. Two options: - Paste a URL if it's already hosted somewhere — 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 public_url.

After both answers are in, run the Cost transparency gate, then echo one short confirmation ("Generating behind-home-plate cutaway for {username}…") and start the pipeline. No further yes/no gates after the cost gate — the pipeline runs end-to-end.

Stage 0.5 — Avatar-type probe for the reference image

Before any paid generate_image_edit or generate_reference_video call, run this Avatar-type probe on state.reference_image_url. The baseball-trend recipe turns the subject into a fake broadcast guest, so IP-derived avatars and celebrity/public-figure references are especially likely to fail moderation.

Call analyze_media once:

query: "Classify this image for paid video generation. Is it a photograph of a real human face, an AI-generated realistic portrait, a stylized / illustrated character, or a recognizable trademarked / copyrighted character such as Batman, Pikachu, or Mickey Mouse? Return strict JSON only: { \"avatar_type\": \"real_human\" | \"ai_realistic\" | \"stylized_illustrated\" | \"recognized_ip\", \"recognized_character\": string | null, \"moderation_risk\": \"low\" | \"medium\" | \"high\", \"recommendation\": \"proceed\" | \"warn\" | \"reject\" }. Use null for `recognized_character` when no specific character is recognized; never write \"none\", \"unknown\", or explanatory prose in that field."

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 can reduce likeness quality and may be blocked by image/video moderation.
  • trademarked / copyrighted -> STOP before generation. Surface this message: Your identity avatar appears to be a trademarked character ([X]). Most video providers will moderate this and refuse to generate. Pass --avatar <real-looking-photo-url> to override, or update your identity avatar at pika.me first. For this skill, ask for a replacement reference photo URL or path if the user did not pass an --avatar <real-looking-photo-url> style override.

Pipeline

Two Pika MCP stages, sequential. Primary engines are locked: gpt-image-2 for the still, kling-v3-omni for the video. The only still-stage fallback is the documented seedream pass below when OpenAI declines the broadcast still with moderation_blocked.

Long-running task_status polling

When any long-running generation 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 GPT-image-2 or Kling 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.

Step 1 — Broadcast still (generate_image_edit)

The chyron + scorebug get baked into the still at frame 0 (load-bearing — when Kling is asked to "pop in" the chyron mid-clip it appears at second 4–5 with a visible flash and breaks the trend; baking it into the first frame makes Kling treat it as pixel-locked burned-in UI).

Call generate_image_edit with:

  • provider: gpt-image-2
  • images: [state.reference_image_url]
  • aspect_ratio: 16:9
  • quality: medium (default for speed; high is now exposed but ~2 min/call — use only when fidelity matters)
  • output_format: png
  • prompt (verbatim, ${username} substituted):

Use this skill in a project

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

Use this skill