关于 fix-my-look
用于修改视频外观的工作流技能,面向希望改变场景、服装或光线,同时保留人物身份、动作和原音频的用户。先编辑首帧并等待确认,再将效果传播到视频片段。
主要功能
- 01编辑源视频首个可用画面
- 02通过参考视频传播画面风格
- 03保留人物身份、动作与音频
- 04长视频按片段处理并合并
- 05检查时长、音频和身份一致性
适用场景
- 01将视频背景改为夜景或海滩
- 02更改人物服装并保留其身份
- 03分段处理较长视频并保留连续音频
MCP 相关
使用 Pika MCP 工具完成视频规范化、图像编辑、参考视频生成及检查;具体调用前缀由会话提供。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pika-labs/ pika-plugins --skill fix-my-look安装后在 Claude Code 中输入/fix-my-look确认已加载。
详细介绍
fix-my-look
根据用户的提示词,使用 gpt-image-2 编辑源视频中第一个可用帧,
然后使用 kling 参考视频将这一外观扩展到整个片段,同时通过将原始视频 + 音频
作为参考来锁定原始人脸、动作和音频。短片的所有准备工作都在一次
normalize_video
调用中完成;较长片段则每个分段调用一次 normalize。输出比例采用标准化片段最接近的受支持输出比例;此
技能不会重新构图源视频。
输入
<source>— 带音频的视频文件路径或 URL<change_prompt>— 要进行的更改(例如:“把场景改成有霓虹灯的夜晚”、 “把我的衬衫换成皮夹克”、“把我放到夏威夷的海滩上”)
参数为空时的菜单
- “源视频的路径是什么?”
- “你想进行什么更改?(例如:‘把我放到海滩上’、‘把场景改成夜晚’)”
工作流
工作目录:~/Downloads/fix-my-look/<run-id>/。
步骤 0 — 费用、计时器和任务 ID
下方提到的所有工具都是 Pika MCP 工具,使用其裸名称。通过当前会话为 Pika MCP 提供的任意前缀调用这些工具。
源视频和更改提示词确定后,启动计时器。在付费生成之前,对计划调用的
generate_image_edit、
generate_reference_video、任何多片段
edit_concat,以及任何可选的音频/口型同步修复
调用,调用 estimate_cost。如果宿主未提供费用信息,请在最终报告中注明
Cost not surfaced by this harness,不要猜测。
任何工具返回
task_id 时,都要将其准确值复制到运行记录中,并逐字复用;不要
手动输入很长的 JWT 风格任务 ID。
步骤 1 — 准备片段
本地文件?先用 upload_asset 上传;HTTPS 媒体 URL
可直接传入。在标准化之前确定源视频窗口:源视频不超过 15 秒时,使用一个 14.8 秒
窗口;更长的源视频则按顺序拆分成多个 14.8 秒窗口。每个窗口调用一次
normalize_video(video_url=<source>, start_s=<offset>, max_duration_s=14.8, extract_audio=true, extract_face_frame=true)。
使用第一个窗口的 face_frame_url 作为编辑静帧;
使用每个窗口的 video_url 作为该分段的动作/身份参考。对于
多窗口片段,还要调用
extract_audio_from_video(video_url=<source>),以便
最终合并后的输出能恢复为一条连续的源音轨。
将结果传递给后续步骤:face_frame_url 是步骤 2 的编辑目标;
每个标准化后的 video_url 都是步骤 4 中 Kling 的参考视频;
对每个标准化结果,设置 aspect_ratio = result.aspect_ratio ?? result.closest_aspect_ratio,
然后在图像和视频调用中传递该局部 aspect_ratio。如果这两个字段都不存在,就停止并报告标准化
输出缺少宽高比标签。对每个分段计算
duration = max(4, min(15, round(duration_s))),并使用 resolution="720p"
除非用户要求高分辨率。如果 face_found 为 false,说明没有找到清晰的人脸,
face_frame_url 已回退到 t=0 的帧——继续处理,但要警告身份可能发生漂移;或者使用主体
面对镜头的片段重新运行,并设置相应的 start_s。
参考视频提供商可能会拒绝过大的参考素材。如果标准化结果或下游提供商错误表明标准化视频
超过了提供商限制,请使用相同的 start_s、max_duration_s、extract_audio 和
extract_face_frame 值,再次调用 normalize_video,并设置
crf=28。如果参考素材仍然过大,请在再次尝试付费视频生成之前停止,并报告
normalize_video 需要在 worker 端限制 1080 边长 /
参考素材大小。不要使用本地 shell 媒体命令来绕过此问题。
步骤 2 — 使用 gpt-image-2 编辑画面(“更改”阶段)
使用 generate_image_edit,参数为 provider="gpt-image-2"、
aspect_ratio=<aspect_ratio>、resolution="2K"、
images=[<face_frame_url>]、quality="high",提示词:
“按以下要求修改参考照片:
<change_prompt>。人物的面部、身份、头发、身体和姿势必须与参考照片完全一致。 关键:保留人物手持或触碰的所有物品——手机、产品、饮品、包、道具、珠宝——确保它们仍在同一只手中,位置、方向和比例完全相同;切勿移除、替换或重新设计这些物品。仅更改要求的场景、背景、服装、光线或环境,不要改变人物身份。”
每次重新生成时,都要逐字保留“保留手持物品”条款——若不加这条,gpt-image-2 会悄悄移除人物手持的产品或手机。
如果 gpt-image-2 针对时尚、魅力或美妆提示词错误触发内容政策限制,请用相同意图重试一次,但改用得体、偏编辑风格的措辞,例如“精致的活动造型、不透明服装、自然姿势、非情色时尚肖像”。对于妆容提示词,请明确保留原有的眼型、眼睑、虹膜颜色和视线方向;浓重的眼线或眼影是导致身份漂移的高风险来源。
步骤 3 — 展示编辑后的画面并等待批准
展示编辑后的画面,然后停止。询问:“批准生成视频,还是要调整后重新生成?”获得批准前,不要调用视频生成。若需调整,请重新运行步骤 2(锁定条款逐字不变)并循环执行。
步骤 4 — 通过 Kling 参考视频传播更改
对于每个标准化片段,调用 generate_reference_video,参数为 provider="kling"、reference_videos=[<segment video_url>]、reference_images=[<edited_frame_url>]、aspect_ratio=<aspect_ratio>、duration=<segment duration>、sound=false、video_keep_sounds=[true],提示词:
“将 <<<image_1>>> 中所示的更改应用到 <<<video_1>>>。<<<video_1>>> 中人物的面部、身份、表情、动作和时间节奏必须完全一致;保留原视频中保留的音轨。新的场景/背景/服装/光线应与 <<<image_1>>> 一致。关键:保留 <<<video_1>>> 中人物手持或触碰的所有物品——手机、产品、饮品、包、道具——确保每一帧中它们都在同一只手中,方向也保持一致。人物说话时,嘴部动作应持续到最后一帧。不要改变人物身份。”
任何额外的创意指导(例如“极具电影感,柔和的金色光线”)都应追加在锁定文本之后,切勿替换锁定文本。
输入视频时,不要向 Kling 传入 sound=true。Kling 会拒绝这种组合,并返回 error:1201 sound on is not supported with video input;请使用 sound=false 加 video_keep_sounds=[true],以保留源视频音频。
如果源视频被拆分为多个时间窗口,请调用 edit_concat(video_urls=[<segment outputs in order>])。
拼接后,如果合并输出的音频缺失、不同步或不连续,请运行
edit_audio_replace(video_url=<concat_url>, audio_url=<full_source_audio_url>, duration_policy="video")。
只有在用户明确要求使用 Seedance,或 Kling 失败且值得尝试第二个提供方时,才尝试 Seedance。使用相同的分段规则;如果 Seedance 拒绝输入或丢失语音/动作,请明确记录提供方错误。
异步处理:如果任何调用返回 {task_id, status} 信封,请持续紧密轮询 task_status({task_id}),直到任务进入终止状态。
步骤 5 — 音频、时长与身份 QA
报告成功之前,请将生成的视频与源素材进行核对:
- 时长不得出现明显截断。如果输出时长与预期源片段时长或合并后的源素材时长相差超过 0.5s,则将本次运行标记为失败 / 需要跟进。
- 如果源素材中有人声,音频必须持续到片尾,且口型不得在人声内容结束前冻结。如果有词语缺失、含混不清、无声或明显不同步,则不得将本次运行标记为
PASS。 - 已批准的帧修正必须保留到视频中。如果提供方重新引入已移除的瑕疵(例如眼镜反光),则将其标记为传播方面的注意事项,或从更完善的已批准帧重新渲染。
- 在开头、中间、片段边界和结尾处比较身份。如果 Kling 保留了动作却改变了面部特征,应指出这是提供方的限制,而不能判定为通过。
如果视频在视觉上可以接受,但语音音频缺失、不完整或发生漂移,则提供一次付费修复:
edit_audio_replace(video_url=<generated_video_url>, audio_url=<full_source_audio_url or segment_audio_url>, duration_policy="video")edit_lipsync(video_url=<audio_restored_url>, audio_url=<full_source_audio_url or segment_audio_url>, variant="v2-pro")
如果模型在结尾附近冻结了口部动作,不要自动继续升级到 sync-3;口型同步无法可靠地恢复没有口部动作的面部轨迹。建议裁剪 / 重新生成。
步骤 6 — 下载并返回
将结果下载到 ~/Downloads/fix-my-look/<run-id>/result.mp4,并返回该路径以及最终报告字段:源素材、编辑后帧 URL、最终视频 URL、提供方、作业 / 任务 ID、费用估算或 not surfaced、耗时、QA 备注和后续问题。
故障模式
| 症状 | 原因 | 解决方法 |
|---|---|---|
| 输出中的人脸与原始人脸不一致 | gpt-image-2 对人脸编辑过度,或提供商对源视频赋予的权重不足 | 使用更强的“保持人脸不变”要求重新运行 Step 2;减弱 change_prompt。 |
| 输出看起来和原始内容一样(没有变化) | 编辑后的图像与原图太相似,或你传入的是原始帧而非编辑后的输出 | 使用更明显的提示词重新运行 Step 2;确认编辑后帧的 URL。 |
| 输出画幅比例与源内容不匹配 | 源内容的画幅比例不属于 {16:9, 9:16, 1:1, 4:3, 3:4} | Step 1 会返回 aspect_ratio,较旧的 worker 负载则会返回 closest_aspect_ratio;使用它作为最接近的受支持输出标签,并就特殊画幅比例询问用户。 |
| 提供商以文件过大为由拒绝规范化后的视频 | 对于 4K/iPhone 源内容,规范化后的输出仍可能过大 | 使用 crf=28 重试一次规范化;若仍然过大,则停止并提交 worker 后续处理请求,限制为 1080 边长/参考尺寸。 |
| 较长的源内容只返回了第一个短片段 | 调用方只使用 max_duration_s=14.8 规范化了一次,没有进行分段 | 将内容拆分为 14.8 秒的窗口,分别生成各个片段,然后按顺序执行 edit_concat;必要时恢复完整的源音频。 |
| 说话片段丢失声音、漏掉词语,或结尾处嘴部静止 | 提供商重新生成了语音/音频,而非保留源内容;或者人脸轨迹没有可用于驱动的嘴部动作 | 标记为未通过。提供一次 edit_audio_replace + edit_lipsync 修复;如果结尾处嘴部动作静止,则改为提供裁剪或重新生成。 |
| 视频中已批准的帧修复消失 | 提供商传播过程重新引入了原始瑕疵 | 使用更强的已批准帧重新渲染,或标注提供商传播方面的注意事项;不要声称帧修正已交付。 |
Kling 因 error:1201 sound on is not supported with video input 拒绝请求 | 将 sound=true 与视频参考一同传入 | 使用 sound=false 和 video_keep_sounds=[true] 重试 Kling 调用;Kling 视频输入不要使用 reference_audio。 |
| Kling 输出比规范化后的源内容短 | 提供商返回了较短的渲染结果,或调用方误传了经过裁剪的参考内容 | 不要标记为通过。比较输出时长与规范化后源内容的时长,然后重新生成该片段,或请用户提供更短的窗口。 |