mcpField
B
baseball-trend

baseball-trend

github.com/pika-labs创意与媒体411.7k 次安装14 周前更新
代码仓库

关于 baseball-trend

baseball-trend 是一项固定流程的技能,可用用户提供的人像制作 15 秒虚构 MLB 转播观众镜头。它将参考照片转成转播静帧,再生成由解说员在播报中称呼该人物的视频。

主要功能

  1. 01基于参考照片生成转播静帧
  2. 02生成 15 秒视频
  3. 03姓名显示在字幕条并由解说员播报
  4. 04固定设定为洋基对红袜的芬威公园比赛
  5. 05生成前检查头像类型

适用场景

  1. 01用人像制作虚构的棒球转播出镜片段
  2. 02制作点名指定人物的短体育视频

MCP 相关

使用 Pika MCP 工具生成编辑图像和参考视频、分析媒体并跟踪异步任务。付费生成前需检查余额并获得用户批准。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/pika-labs/pika-plugins --skill baseball-trend

安装后在 Claude Code 中输入/baseball-trend确认已加载。

详细介绍

baseball-trend

15 秒的 ESPN 风格转播镜头:一位用户坐在本垒后方,置身于芬威球场一场虚构的洋基队对红袜队的美联冠军赛第 3 场比赛中,两位解说员在直播中报出他们的名字。

固定配方技能——以下提示词已校准。替换用户名,并保持标记的锚点不变。

费用透明度关卡

在调用任何付费 MCP 工具之前,先调用一次 identity_balance({verbose: true})。告知当前余额、近期消耗速率和剩余可用时长,然后用以下确切消息作为是否继续的关卡:

预计费用:约 3,000-5,500 个点数(约 $30-$55),用于 GPT-image-2 转播静帧、一到两次 Kling v3-omni pro 15 秒渲染(包括一次使用不同载荷的 Step 2 纠正重试),以及生成后 analyze_media QA。这超过 $5。回复 proceed 继续,或回复 cancel 停止。

在用户回复 proceed 之前,不要调用任何付费 MCP 工具。如果用户回复 cancel,则停止,不要生成。这是唯一的继续/取消关卡;收到 proceed 后,流水线将端到端运行。

语音选择说明

此技能使用 Kling-omni 原生的转播解说:两位男性解说员,符合 MLB 转播惯例。不会使用 identity_voice 设置,因为此固定配方不使用 Agent 端 TTS 或自定义语音 ID。

如果用户希望使用女性风格的解说员或任何自定义语音,baseball-trend 并不适合。请将他们转到 /pika:podcast,并采用棒球主题。该技能支持 Agent 端语音路径,并可满足明确指定的语音要求。

阶段 0 — 信息收集

如果调用时参数为空,且没有可用的先前上下文,则显示此菜单并停止:

谁应该出现在这段虚构的 MLB 转播镜头中? 必填:

  • 姓名——与字幕条和解说员对话中显示的内容完全一致
  • 参考照片——一张正面或 3/4 角度的人像,本地路径或 HTTPS URL

如果只缺少一个字段,只询问该字段。否则,按顺序逐一询问以下两个问题。

1. 用户名 (必填)——用于转播字幕条和解说员的评论,例如 "Jane Doe"。保存为 state.username。将以下提示词中的每个字面量 ${username} 替换为该用户名。

2. 参考图片 (必填)——一张正面或 3/4 角度的人像,光线良好,画面中只有一张脸。解析为 CDN URL,并保存为 state.reference_image_url:

  • https://… URL → 原样使用。

  • 本地路径 → 使用 upload_asset 上传文件,然后使用返回的公开 URL。

  • Claude Desktop 中行内粘贴的照片 → 目前行内粘贴的图片还无法传给 MCP 工具(Anthropic 的限制)。回复:

    提醒一下——目前 Claude Desktop 中粘贴的图片还无法传给 MCP 工具。你可以:

    • 粘贴 URL,如果图片已托管在某处——这是最快的方式。
    • 附上图片文件,我会在生成前上传。

    收到本地文件后:使用 upload_asset 将其转换为公开 URL,并使用 public_url。

收到两个答案后,运行费用透明度关卡,然后简短确认一次(“正在为 {username} 生成本垒后方转播镜头……”),并启动流水线。通过费用关卡后不再设置其他继续/取消关卡——流水线将端到端运行。

阶段 0.5 — 参考图像的头像类型探测

在调用任何付费的 generate_image_edit 或 generate_reference_video 之前,先对 state.reference_image_url 运行此头像类型探测。棒球趋势方案会将主体变成虚构的广播嘉宾,因此,源自 IP 的头像以及名人/公众人物参考图尤其容易无法通过审核。

调用一次 analyze_media:

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."

根据结果分流:

  • 识别出 IP/存在版权风险 -> 仅在以下情况下停止:avatar_type 为 "recognized_ip";或 recognized_character 指明了某个具体角色(例如 "Batman");或 moderation_risk 为 "high" 且 recommendation 为 "reject"。recognized_character: null、空字符串、"none"、"unknown"、"n/a",以及低/中 moderation_risk,单独出现时都不足以停止。请在真实人物/风格化路线之前运行此检查。即使 avatar_type 为风格化/插画风格,Q 版蝙蝠侠也仍然是蝙蝠侠。
  • 真实人物/AI 生成的写实头像 -> 正常继续。
  • 风格化/插画风格 -> 继续,并明确警告:风格化头像可能降低相似度,也可能被图像/视频审核拦截。
  • 商标角色/受版权保护的角色 -> 生成前停止。向用户显示此消息: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. 对于此技能,如果用户没有传入 --avatar <real-looking-photo-url> 形式的覆盖参数,请向用户索要替换用的参考照片 URL 或路径。

流水线

依次执行两个 Pika MCP 阶段。主要引擎已锁定:静态图使用 gpt-image-2,视频使用 kling-v3-omni。静态图阶段唯一的回退方案是下方记录的 seedream 流程,仅在 OpenAI 因 moderation_blocked 拒绝生成广播静态图时使用。

长时间运行任务的 task_status 轮询

当任何长时间运行的生成调用返回 task_id 时,无论是否同时返回初始状态,包括 {task_id}、{task_id, status: "queued"},或初始状态为 queued、running 或 processing,都要立即记录任务 ID 和开始时间。

  • 紧密循环调用 task_status({task_id}),直到任务进入终止状态(completed | failed | cancelled)。不要手动等待,也不要使用 Bash 轮询;工作线程会在每次状态调用期间保持等待。
  • 当状态为 queued、running 或 processing 时,每 60 秒输出一行可见的进度信息:Seedance i2v queued for {N}m {S}s... still processing。轮询 GPT-image-2 或 Kling 任务时,替换提供商/阶段标签。
  • 状态为 completed 时,提取返回的结果 URL 并继续。
  • 状态为 failed 或 cancelled 时,向用户显示失败信息,包括 task_id、状态和最后一条状态消息。
  • 从最初提交开始总计 15 分钟后,如果任务仍未进入终止状态,则调用 task_cancel({task_id}),然后向用户显示失败信息。如果取消操作报告任务已处于终止状态,则再调用一次状态查询,并报告该终止结果。
  • 原始任务仍处于 queued、running 或 processing 状态时,不要重复提交请求。
步骤 1 — 转播静帧(generate_image_edit)

字幕条和比分栏会在第 0 帧烘焙到静帧中(这是关键环节——如果要求 Kling 在片段中途“弹出”字幕条,它会在第 4–5 秒出现,并伴有明显闪烁,从而破坏趋势;将其烘焙到首帧中,可让 Kling 将其视为像素锁定的内嵌 UI)。

调用 generate_image_edit,并使用以下参数:

  • provider:gpt-image-2
  • images:[state.reference_image_url]
  • aspect_ratio:16:9
  • quality:medium(默认值,速度更快;现在也提供 high,但每次调用约需 2 分钟——仅在保真度很重要时使用)
  • output_format:png
  • prompt(原文使用,将 ${username} 替换为用户名):
A screenshot from a live MLB game TV broadcast on ESPN. The camera cuts to the audience — our reference image person, sitting smiling in premium field-level seats behind home plate at Fenway Park, smiling naturally and unaware they're on camera. Hardlock: Do not alter their facial structure and maintain their likeness. The subject must match the reference person.

The image looks exactly like a real TV screenshot — broadcast color grading, slight compression artifacts, interlacing grain, telephoto broadcast camera feel. It's the New York Yankees vs Boston Red Sox, MLB American League Championship Series (ALCS), Game 3, Boston home stadium (Fenway Park). Yankees lead 2-0 in the ALCS so far.

CRITICAL — broadcast graphics that MUST be visible in this image:
1. A real ESPN-style bottom scorebug for MLB, showing Yankees vs Red Sox with team logos, inning, outs, balls/strikes count, and score (with a small runners-on-base diamond), looking like a real live broadcast scorebug.
2. Directly above the scorebug, a clean broadcast-style lower-third name graphic / chyron that reads exactly: "${username}" — set in a classic ESPN sans-serif, in the network's color treatment. The chyron sits in the lower-left area, above the scorebug, like a real broadcast identifier for the on-camera guest.
3. The ESPN network logo watermark in a corner.

All three graphics must look like real burned-in broadcast UI — not Photoshop overlays. 16:9 aspect ratio.

将返回的 URL 保存为 state.broadcast_still_url。

重试上限:步骤 1 的静帧生成总共最多尝试 3 次,包括主要静帧、自检后重试、无效图像重试、quality 降级,以及下方的一次性 seedream 备用方案。每次付费生成静帧之前,都要记录 state.step1_attempt_count。

OpenAI 内容审核备用方案:如果步骤 1 的 gpt-image-2 调用返回 moderation_blocked,应将其视为“真人 + ESPN 品牌直播画面 + 真实 MLB 球队背景”这一已知政策限制。不要继续用相同的 OpenAI 调用反复重试。使用相同的 images、aspect_ratio 和提示词文本尝试一次 seedream,省略 quality 和 output_format,因为这两个字段仅适用于 gpt-image-2。

  • 如果 seedream 成功,将该 URL 保存为 state.broadcast_still_url,设置 state.broadcast_still_provider = "seedream_fallback",然后继续进行下方的自检。备用方案仅尝试一次:本次运行中不要再次调用 gpt-image-2,也不要第二次调用 seedream。

  • 如果 seedream 也失败,或返回政策/安全限制,则停止并向用户显示以下确切消息:

    OpenAI declined this image. Try using a fresh AI-generated headshot instead of a personal photo, or pick a non-MLB sport variant.

步骤 2 前的 Agent 自检:字幕条必须正确拼写用户名,比分栏必须看起来像真实的转播 UI。如果主要的 gpt-image-2 静帧在任一方面有误,只要步骤 1 的尝试次数尚未达到上限,就针对每项未通过的自检重试一次步骤 1(后续所有内容都会像素锁定到这一帧)。如果 state.broadcast_still_provider = "seedream_fallback" 后任一方面有误,则不要重试步骤 1;停止并使用上方相同的消息,请用户提供新生成的 AI 头像或选择非 MLB 体育项目。如果一次性备用方案路径尚未在 QA 中失败,这是 Agent 自己的检查——不要询问用户。达到任一上限后,停止并请用户提供更好的参考照片,或允许交付当前最佳结果;附上最佳静帧/视频 URL,并说明未通过的检查项。

步骤 2 — 15 秒直播视频(generate_reference_video)

image_types: ["first_frame"] 会将 state.broadcast_still_url 锁定为 Kling 的字面第 0 帧,让字幕条和比分栏在完整的 15 秒内保持像素级静止。

调用 generate_reference_video,参数如下:

  • provider:kling
  • kling_model:kling-v3-omni
  • duration:15
  • aspect_ratio:16:9
  • quality_mode:pro
  • reference_images:[state.broadcast_still_url]
  • image_types:["first_frame"]
  • sound:true
  • prompt_adherence:strict (关键参数——没有它,比分栏会动起来,人物身份也会在片段后段发生偏移)
  • negative_prompt (必须原样保留,是关键参数——缺少这些条目时,Kling 偶尔会改变比分栏的形状或让字幕条淡出):
scene cuts, camera angle changes, scorebug animation, chyron pop-in, chyron fade-in, chyron text changes, graphics animating, exaggerated acting, direct address to camera, blurry face, identity drift, distorted anatomy
single announcer, one announcer only, single narrator, announcer monologue
  • prompt(必须原样保留,将 ${username} 替换为实际用户名;已预先精简,以符合 Kling 的 2500 字符上限;在顶部锁定第 0 帧上的字幕条):
First frame is the provided reference image. The ESPN scorebug AND the "${username}" lower-third chyron are ALREADY on screen at frame 0 — keep them visible, unchanged, pixel-locked across all 15 seconds. Do NOT animate them, do NOT change their text.

Realistic live MLB broadcast cutaway of the subject in premium field-level seats behind home plate at Yankees vs Red Sox ALCS Game 3 at Fenway Park. It feels like the broadcast camera found a notable guest between innings.

The subject stays seated, smiling naturally, not over-performing, not locked into eye contact. Occasionally glances toward the field, then camera, then back to the field. One continuous take. No cuts. No angle changes.

Action timeline:
0-4s: smiling casually in his seat as the camera lands on him; looks around naturally, not paying attention to camera.
4-7s: relaxed natural wave toward the camera (crowd cheers when he waves the first time); glances up at the Jumbotron above him then back to camera.
7-11s: cheers briefly with visible excitement, reacting to the playoff atmosphere; turns to his friend on the left, exchanges words, laughs (we don't hear him speak).
11-15s: claps naturally while smiling.

Keep all movement subtle, believable, human. No exaggerated acting. No direct talking to camera.

Broadcast styling: live sports TV look, telephoto broadcast camera, natural ballpark lighting, slight compression / interlacing grain, authentic crowd movement, realistic field-level framing.

Audio: two distinct male voices, not a single narrator. Announcer A is play-by-play; Announcer B is the color commentator. Alternate A/B lines with natural broadcast handoffs so both voices are clearly heard:
Announcer A: "${username} is here tonight at Fenway, taking in this massive playoff matchup."
Announcer B: "You can see he's enjoying himself behind home plate for Game 3."
Announcer A: "Great atmosphere in the building tonight."
Announcer B: "And ${username} is getting a lot of love from the crowd."
The announcers are OFF-SCREEN; the subject does not lip-sync or talk to camera.

Constraints: Preserve identity strongly. Keep him seated behind home plate throughout. No constant eye contact with camera. No talking to camera. No exaggerated gestures. No scene cuts. Scorebug + chyron do not change at any point. Genuine MLB TV broadcast crowd cutaway feel.

将返回的视频 URL 保存为 state.broadcast_video_url。如果生成是异步完成的,请持续跟进 MCP 工具返回的状态句柄,直到视频进入终止状态。

步骤 2 的 Kling 视频生成最多可尝试 2 次(初始渲染 + 一次针对画面漂移、比分栏/字幕条移动或播报员发音错误的修正重试)。kling-v3-omni 不支持 seed,而且完全相同的 Kling 负载可能会指向相同的任务/资源。不要只为寻求变化而提交相同的 Kling 负载。修正重试前,必须实质性修改负载:使用更新后的 state.broadcast_still_url、恢复缺失的严格参数/negative_prompt 条目,或缩短/澄清 A/B 播报员部分。跟踪 state.step2_attempt_count。任一上限用尽后,请停止并请求更好的参考照片,或征求用户同意交付最佳尝试;同时提供最佳静帧/视频 URL 和未通过的检查项。

步骤 3 — 交付

返回两个 Pika CDN URL:静帧图片 URL 和最终视频 URL。如果宿主客户端需要本地媒体标记,请先确认两个 CDN URL 均可访问,再在此技能之外创建本地预览。

单行摘要:“{username} 的本垒后方转场镜头 — 15 秒,16:9,1080p,Kling v3-omni,双播报员原生解说。”

生成后质量门槛

宣布成功前,对 state.broadcast_video_url 调用 analyze_media 并请求结构化判定:

Return JSON only: {
  "verdict": "clean" | "degraded" | "catastrophic",
  "announcer_count": 0 | 1 | 2,
  "observations": string[],
  "audio_warning": string | null,
  "quality_warning": string | null,
  "re_roll_suggestion": string | null
}
Check that the chyron still reads the exact username, the subject's identity stays stable throughout, the scorebug remains stable, the final clip has no black frames or wrong-sport shots, and the audio contains two distinct male announcer voices — not just one narrator.
  • 如果 announcer_count < 2,至少将结果视为 degraded,包含 audio_warning,且只有在更改 A/B 音频负载后才能使用步骤 2 的一次修正重试。不要提交相同的 Kling 负载。
  • 如果 verdict 为 clean,正常返回静帧 URL 和最终视频 URL。
  • 如果 verdict 为 degraded,返回 URL 以及 quality_warning 和 audio_warning,供用户在发布前检查。
  • 如果 verdict 为 catastrophic,不要将本次运行视为完成;请提供判定结果和 re_roll_suggestion,不要宣布成功。

关键短语(不要删掉)

这些短语是经验证的行为依赖项,而非文风要求——删掉就会破坏此流程:

  • 在静帧提示词中:Hardlock: Do not alter their facial structure and maintain their likeness + The subject must match the reference person(没有这些短语,首帧就会发生身份偏移,后续所有内容都会继承这种偏移)。
  • 在视频提示词中:Preserve identity strongly + The ESPN scorebug AND the "${username}" lower-third chyron are ALREADY on screen at frame 0 — keep them visible, unchanged, pixel-locked(没有这些短语,Kling 会在片段中途重新动画化字幕条)。
  • 完整的 negative_prompt 列表——其中每个条目都对应以往运行中出现的一种特定失败模式。
  • prompt_adherence: "strict" 和 image_types: ["first_frame"]——参见上方的内联说明。

引擎选择:仅用 Kling(有一项注意事项)

在多次 NBA 同类运行中,Seedance 都会触发两阶段 partner_validation_failed 422 拦截:

  • 输入端(body.image_urls):如果参考图中有可辨认的真人,就会拒绝。
  • 输出端(body.generated_video):生成完成后,如果生成的片段中出现看起来可辨认的人脸,就会拒绝——而每个转播切镜画面里都有满是人脸的观众。

对于这一趋势,无论主体是谁,输出端拦截都无法避免,因此 Seedance 在这里实际上无法使用。对于普通用户照片,可用的引擎是 Kling。

Kling 注意事项——也会拦截可辨认的名人。 Kling 有自己的内容审核机制,会拦截名人参考图。使用名人参考图,并要求匹配转播字幕条的提示词,可能会在提交时失败,并返回 task_status: failed, task_status_msg: "Failure to pass the risk control system"。这是正常行为——只有使用非公众人物的参考图,且字幕条姓名与面孔相符,这种趋势效果才成立。如果用户提供了名人照片,请向其说明审核拦截,并请其改用非名人参考图。

Kling 的权衡:prompt 上限为 2500 个字符(上面的配方已预先精简)。kling-v3-omni 没有 seed;完全相同的 Kling 负载可能会合并为同一个任务/资源,因此纠正性重试必须实质性地更改首帧静帧、提示词、negative_prompt 或音频措辞。不要提交完全相同的 Kling 负载来生成变体。

运行时预期

典型运行时长为 4-7 分钟:

步骤耗时备注
上传参考图5-30s用户提供 HTTPS 时跳过
转播静帧60-120s如果字幕条或比分牌有误,应在生成视频前重新生成;重试次数不得超过步骤 1 的重试预算
Kling 视频3-5 min一次 15s 的专业渲染,带原生解说
交付检查<30s验证最终 URL 和明显的身份/字幕条连续性

失败模式

症状原因修复方法
字幕条在片段中途突然出现(闪现约 4–5 秒)字幕条未烘焙到静帧中在 Step 1 重试预算内重新运行 Step 1;在 Step 2 前确认 state.broadcast_still_url 中能看到字幕条
比分牌在片段中动画播放或变形prompt_adherence 不是 strict,或 negative_prompt 被删减恢复严格遵循,并还原完整的 negative_prompt
片段后段出现身份漂移(约 10 秒后面部发生变化)参考图太小/Kling 无法稳定保持面部特征仅在实质性修改载荷后使用 Step 2 的一次纠正重试;通常是在 Step 1 预算仍有剩余时,重新运行 Step 1,并对静帧采用更紧凑的面部裁剪
只能听到一位解说员的声音Kling 将 A/B 解说合并成了一位原生旁白在 Step 2 的一次纠正重试前,缩短或明确 A/B 解说员台词;达到重试上限后,提示音频警告,并询问是否交付效果最佳的尝试
解说员读错用户名原生音频是一次录制完成的在 Step 2 的一次纠正重试前,添加发音提示或缩短解说员台词;否则提示音频警告
Step 1 上 OpenAI 返回 moderation_blockedgpt-image-2 对真人、ESPN 品牌直播画面和真实 MLB 球队背景触发安全审核在 Step 1 预算仍有剩余时,使用相同参考图和提示词尝试一次 seedream。如果也被拦截,请告知用户:“OpenAI 拒绝生成此图片。请尝试使用新生成的 AI 头像,而不是个人照片,或选择非 MLB 的体育变体。”
Seedance 返回 partner_validation_failed 422尝试使用了 Seedance,而不是 Kling仅使用 Kling——请参阅上文的引擎选择部分
Kling 返回 task_status: failed,且 task_status_msg: "Failure to pass the risk control system"参考照片中是可辨认的名人/公众人物请用户提供非名人的参考图。Kling 会正确拦截冒充模式(名人面孔 + 虚假赛事字幕条)
openai v1/images/edits 中的 generate_image_edit 返回 400 invalid_image_file参考图是由 iPhone HEIC 转换而来的 JPEG,带有大量 EXIF 信息,和/或纵横比极端(例如 2316×3088)上传前重新编码参考图:convert in.jpg -strip -auto-orient -resize 1536x1536\> out.png,然后上传清理后的 PNG
quality: "high" 运行缓慢(每次调用约 2 分钟)gpt-image-2 high 是刻意降低速度以换取保真度的档位,并非缺陷——根据清单,上游通常需要约两分钟耐心等待——大多数运行都能顺利完成。如果某次运行确实失败,请在 Step 1 重试预算内重试一次;只有问题持续存在时才退回 quality: "medium"

不要做的事

  • 不要更换体育项目。NBA/NFL/足球变体 → 分叉此 skill;不要将其参数化。
  • 不要给字幕条添加后缀(例如“ - AI Creator”)。字幕条只能是用户名——趋势效果取决于它看起来像真实的广播标识。
  • 不要添加后期编辑——不要使用 add_captions、generate_music、edit_*。Kling 会直接烘焙比分牌、字幕条和原生解说;之后添加任何内容都会破坏直播效果。

评论

支持 Markdown