
fix-my-look
Use when the user asks for fix my look or a task matching the examples below. Change ANYTHING inside a video — background, scene, lighting, outfit, weather, mood — from a free-form prompt, while keeping the EXACT original facial identity, motion, speech, audio AND closest supported output ratio. Edits the first frame with gpt-image-2, then propagates that look across the clip with Kling reference-video using the original clip as the identity anchor. Triggers: "change anything in my video", "edit my video with a prompt", "change the background of this video", "change my outfit in this clip", "restyle this video without changing the person", "put me on a beach", "make this video at night", "/fix-my-look".
- Installs
- 956
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/pika-labs/pika-plugins --skill fix-my-look- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads fix-my-look automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
fix-my-look
Edit the source's first usable frame with gpt-image-2 from the user's prompt,
then propagate that look across the clip with kling reference-video while
locking the original face, motion and audio via the original video + audio as
references. All prep happens in one normalize_video
call for short clips, or one normalize call per segment for longer clips. The
output ratio uses the normalized clip's closest supported output ratio; this
skill does NOT reframe the source video.
Inputs
<source>— path or URL to a video file with audio<change_prompt>— what to change (e.g. "make it night with neon lights", "change my shirt to a leather jacket", "put me on a beach in Hawaii")
Empty-args menu
- "What's the source video path?"
- "What do you want to change? (e.g. 'put me on a beach', 'make it night')"
Workflow
Working dir: ~/Downloads/fix-my-look/<run-id>/.
Step 0 — Cost, timer and task IDs
Every tool named below is a Pika MCP tool, written by its bare name. Call it under whatever prefix your session exposes for the Pika MCP.
Start a timer when the source and change prompt are known. Before paid
generation, call estimate_cost for the planned
generate_image_edit,
generate_reference_video, any multi-segment
edit_concat, and any optional audio/lipsync repair
call. If cost is not surfaced by the host, say
Cost not surfaced by this harness in the final report instead of guessing.
When any tool returns a
task_id, copy the exact value into the run notes and reuse it verbatim; do not
hand-type long JWT-style task IDs.
Step 1 — Prepare the clip
Local file? upload_asset it first; an HTTPS media URL
passes directly. Decide the source windows before normalizing: use one 14.8s
window for sources <=15s, and split longer sources into ordered 14.8s windows.
Call
normalize_video(video_url=<source>, start_s=<offset>, max_duration_s=14.8, extract_audio=true, extract_face_frame=true)
once per window. Use the first window's face_frame_url for the edited still;
use each window's video_url as that segment's motion/identity reference. For
multi-window clips, also call
extract_audio_from_video(video_url=<source>) so the
final merged output can be restored to one continuous source audio track.
Wire the result into the rest: face_frame_url is the Step 2 edit target;
each normalized video_url is Kling's reference for that segment in Step 4;
set aspect_ratio = result.aspect_ratio ?? result.closest_aspect_ratio for
each normalize result, then carry that local aspect_ratio through the image
and video calls. If neither field is present, stop and report that normalization
output is missing an aspect label. Compute
duration = max(4, min(15, round(duration_s))) per segment, and use
resolution="720p"
unless the user asked for high res. If face_found is false, no clear face was
found and face_frame_url fell back to the t=0 frame — proceed but warn
identity may drift, or re-run with a start_s at a section where the subject
faces camera.
Reference-video providers can reject oversized reference assets. If the
normalize result or the downstream provider error shows a normalized video is
over the provider limit, retry normalize_video once
with crf=28 and the same start_s, max_duration_s, extract_audio, and
extract_face_frame values. If the reference is still too large, stop before
another paid video attempt and report that
normalize_video needs a worker-side 1080-edge /
reference-size cap. Do not patch this with local shell media commands.
Step 2 — Edit the frame with gpt-image-2 (the "change" stage)
generate_image_edit with provider="gpt-image-2",
aspect_ratio=<aspect_ratio>, resolution="2K",
images=[<face_frame_url>], quality="high", prompt:
"Modify the reference photograph as follows:
<change_prompt>. Keep the person's face, identity, hair, body and pose EXACTLY as in the reference. CRITICAL: preserve every object the subject is holding or touching — phones, products, drinks, bags, props, jewelry — in the exact same hand, position, orientation and scale; never remove, replace or restyle them. Change only the requested scene, background, clothing, lighting or environment, not who the person is."
Keep the "preserve held objects" clause verbatim on every re-render — without it gpt-image-2 silently drops products/phones the subject is holding.
If gpt-image-2 returns a content-policy false positive for fashion, glam, or beauty prompts, retry once with the same intent but a modest / editorial wording such as "polished event styling, opaque clothing, natural pose, non-sexual fashion portrait". For makeup prompts, explicitly preserve the original eye shape, eyelids, iris color and gaze; heavy eyeliner/eye shadow is a high-risk identity-drift source.
Step 3 — Show the edited frame and wait for approval
Surface the edited frame and STOP. Ask "Approve for video generation, or tweak and re-render?" Do NOT call video generation until approved. For tweaks, re-run Step 2 (locked clauses verbatim) and loop.
Step 4 — Propagate via Kling reference-video
For each normalized segment, call generate_reference_video
with 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],
prompt:
"Apply the change shown in <<<image_1>>> to <<<video_1>>>. Keep the person in <<<video_1>>> with the EXACT same face, identity, expressions, motion and timing; preserve the original video's kept sound track. The new scene/background/clothing/lighting should match <<<image_1>>>. CRITICAL: preserve every object the subject is holding or touching in <<<video_1>>> — phones, products, drinks, bags, props — in the same hand and orientation every frame. Keep mouth motion active through the final frame when the person is speaking. Do not alter the person's identity."
Append any extra creative direction (e.g. "very cinematic, soft golden light") after the locked text — never replace it.
Do not pass sound=true to Kling with a video input. Kling rejects that
combination with error:1201 sound on is not supported with video input; use
sound=false plus video_keep_sounds=[true] to keep the source video's audio.
If the source was split into multiple windows, call
edit_concat(video_urls=[<segment outputs in order>]).
After concat, run
edit_audio_replace(video_url=<concat_url>, audio_url=<full_source_audio_url>, duration_policy="video")
when the merged output audio is missing, drifted, or discontinuous.
Only try Seedance if the user explicitly asks for it, or if Kling fails and a second provider attempt is useful. Use the same segmenting rule and record the provider error plainly if Seedance rejects the input or drops speech/action.
Async handling: if any call returns a {task_id, status} envelope, poll
task_status({task_id}) in a tight loop until terminal.
Step 5 — Audio, duration and identity QA
Before reporting success, verify the generated video against the source:
- Duration must not be meaningfully cut off. If output duration differs from the intended source window or merged source duration by more than 0.5s, mark the run as failed / needs follow-up.
- If the source has speech, audio must be present through the tail and mouth
movement must not freeze before the spoken content ends. If words are missing,
garbled, silent, or visibly out of sync, do not call the run
PASS. - The approved frame corrections must persist into the video. If the provider reintroduces a removed artifact such as eyeglass glare, mark it as a propagation caveat or re-render from a stronger approved frame.
- Compare identity at start, middle, segment boundaries, and end. If Kling preserved motion but changed the face, call that out as a provider limitation instead of a pass.
If the video is visually acceptable but speech audio is missing, incomplete, or drifted, offer one paid repair pass:
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")
If the model froze the mouth near the end, do not keep escalating to sync-3
automatically; lip-sync cannot reliably recover a face track with no mouth motion.
Offer trim / regenerate instead.
Step 6 — Download + return
Download the result to ~/Downloads/fix-my-look/<run-id>/result.mp4 and return
that path plus the final report fields: source, edited frame URL, final video
URL, provider, job/task IDs, cost estimate or not surfaced, elapsed
time, QA notes, and follow-up issue.
Failure modes
| Symptom | Cause | Fix |
|---|---|---|
| Output face drifts from the original | gpt-image-2 over-edited the face OR the provider under-weighted the source video | Re-run Step 2 with a stronger "keep the face the same" clause; soften change_prompt. |
| Output looks like the original (no change) | Edited image too similar, OR you passed the raw frame not the edited output | Re-run Step 2 with a more dramatic prompt; confirm the edited frame URL. |
| Output aspect doesn't match source | Source aspect not in {16:9, 9:16, 1:1, 4:3, 3:4} | Step 1 returns aspect_ratio, or closest_aspect_ratio on older worker payloads; use it as the closest supported output label and ask the user for exotic aspects. |
| Provider rejects the normalized video as too large | normalize output can remain too large for 4K/iPhone sources | Retry normalize once with crf=28; if still too large, stop and file worker follow-up for a 1080-edge / reference-size cap. |
| Long source only returns the first short window | The caller normalized once with max_duration_s=14.8 and skipped segmenting | Split into 14.8s windows, generate each segment, then edit_concat in order and restore full source audio if needed. |
| Speaking clip loses sound, drops words, or freezes mouth at the tail | Provider regenerated speech/audio instead of preserving the source, or the face track has no mouth motion to drive | Mark as not pass. Offer one edit_audio_replace + edit_lipsync repair pass; if tail mouth motion is frozen, offer trim/regenerate instead. |
| Approved frame fix disappears in the video | Provider propagation reintroduced the original artifact | Re-render from a stronger approved frame or mark provider propagation caveat; do not claim the frame correction shipped. |
Kling rejects with error:1201 sound on is not supported with video input | sound=true was passed with a video reference | Retry the Kling call with sound=false and video_keep_sounds=[true]; do not use reference_audio for Kling video input. |
| Kling output is shorter than the normalized source | Provider returned a shorter render, or the caller accidentally passed a trimmed reference | Do not mark pass. Compare output duration to the normalized source, then regenerate that segment or ask the user for a shorter window. |
FAQ
What does the fix-my-look skill do?
Use when the user asks for fix my look or a task matching the examples below. Change ANYTHING inside a video — background, scene, lighting, outfit, weather, mood — from a free-form prompt, while keeping the EXACT original facial identity, motion, speech, audio AND closest supported output ratio. Edits the first frame with gpt-image-2, then propagates that look across the clip with Kling reference-video using the original clip as the identity anchor. Triggers: "change anything in my video", "edit my video with a prompt", "change the background of this video", "change my outfit in this clip", "restyle this video without changing the person", "put me on a beach", "make this video at night", "/fix-my-look".
How do I install fix-my-look?
Run npx skills add https://github.com/pika-labs/pika-plugins --skill fix-my-look in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/fix-my-look/ (personal) or .claude/skills/fix-my-look/ (project).
Which AI agents can use fix-my-look?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is fix-my-look safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains fix-my-look?
It is published by pika-labs in pika-labs/pika-plugins. It has 956 recorded installs.
More from pika-labs/pika-plugins
ugc-ads
pika-labs/pika-plugins
Use when the user asks for ugc ads or a task matching the examples below. Multi-cut jump-cut UGC product ad — HOOK + 3 JUMP CUTs + OUTRO, 15s, 9:16 vertical (3:4 optional, seedance only), POV first-person talking-head selfie, every beat has spoken dialogue with native lip-sync, 5-act narrative arc (set → name → reveal → twist → punchline). Six category essences (HAUL / APP / FOOD / BEAUTY / FITNESS / TECH) auto-picked from the input URL. Creator-style raw UGC talking-head with multi-beat conversational dialogue. Use when the user asks to "make a UGC ad", "jump-cut product ad", "POV product reveal", "creator-style ad", "haul-style ad", "unboxing ad", "TikTok-style product video", or "talking-head ad about [URL]".
build-a-brand
pika-labs/pika-plugins
Use when the user asks for build a brand or a task matching the examples below. Build a practical brand identity from any input — an idea, an existing website, a list of reference brands, product photos, or "I want to rebrand X". Default to a fast quick-brand path for founder-kit users, and offer the full 14-16-page guidelines as an opt-in upgrade. Use when someone wants a brand identity but does NOT need a full commerce launch (no Shopify, no product listings, no social posting). Trigger phrases: "build me a brand", "make me a brand", "design a brand identity", "brand guidelines for [X]", "i want a brand book", "create a brand from scratch", "brand for [idea]", "i want a brand that feels like [X] + [Y]", "rebrand my [thing]", "visual identity for [thing]", "build-a-brand".
founder-product-video
pika-labs/pika-plugins
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 user's actual product screenshots are composited onto product reveal shots after Seedance generation, so readable UI and brand text are real, not AI-imagined. Triggers — "founder video", "product video", "60s pitch video", "make a video of [founder] for [URL]", "talking founder explainer". Requires Pika MCP. Uses a supplied brand kit folder (brand.json or an exported build-a-brand kit with brand.md, tokens, logo assets); if no kit exists, run build-a-brand first.
app-sizzle
pika-labs/pika-plugins
Use when the user asks for app sizzle or a task matching the examples below. Generate cinematic 1080p iOS app teaser videos from real App Store screenshots, with a GPT-image-2 enhancement pass on each selected screen before generation. Output is a beat-driven cinematic teaser built from GPT-enhanced screenshots, ending with the brand logo/icon plus a deterministic COMING SOON overlay. Screens sourced from Pika MCP App Store fetch, a live website (auto-captured), user-supplied files, or URLs. Starts by sourcing real screens and brand assets before any generation. Triggers on: app sizzle, app teaser, app promo, iOS app promo video, app video, app product video, coming soon, seedance, motion graphics, make a promo for my app, make a video for [app], gpt enhance promo. NOT for: short-form consumer content like GRWM, vlogs, UGC, or non-app product ads (use content-video); app-sizzle is specifically for iOS app teaser videos sourced from App Store screens or real app UI.
app-store-screens
pika-labs/pika-plugins
Use when the user asks for app store screens or a task matching the examples below. Generate 5–6 App Store screenshots in a given brand's aesthetic from a brand.md, raw product screenshots, or a public App Store listing fetched through Pika MCP. Story-driven (hook → value → features → proof → close), splashy, on-brand. Outputs 1290×2796 PNGs ready to drop into App Store Connect. Use when someone wants App Store / store listing assets — including: "make me app store screenshots", "design app store screens for [brand]", "I have a brand.md and screenshots, generate store assets", "screenshot set for app launch", "iOS store screens", "app store creative", "store listing visuals", "splashy app store screens", "app-store-screens".
podcast
pika-labs/pika-plugins
Use when the user asks for podcast or a task matching the examples below. Two-host podcast video for any URL or free-form topic — 1 minute, 4 acts × 15s, native multi-shot dialogue, optional voice cloning for Host A. Use when the user asks to "make a podcast", "podcast about [thing]", "podcast review of [url]", "two-host explainer", "interview-style clip", "two people talking on camera", "I/me and X talk about Y", or "interview with [persona] about [topic]". Native audio is the deliverable; captions are skipped by default because podcast dialogue mistranscribes domain terms.
Popular media & creative skills
hyperframes
heygen-com/hyperframes
Read first to make, edit, animate or render any video with HyperFrames (HTML rendered to video), including launch films, explainers, music videos, charts, maps, vertical clips, title cards, captions and overlays. Holds the render contract, the work loop and what each kind of video needs.
media-use
heygen-com/hyperframes
Get or make any media for a HyperFrames video - music, sound effects, images, icons, logos, voiceover, avatar and generated video, transcripts, cutouts, colour grades and looks - with HeyGen or free local tools, and mix placed audio. Also for footage that looks dark, flat or dull, or should be stylized or hidden.
hyperframes-registry
heygen-com/hyperframes
About 450 ready-made HyperFrames blocks and components installed as editable source - transitions, overlays, titles, kinetic type, captions, charts, map overlays, 3D, camera moves. Use it before hand-building any named visual (CRT scanlines, glitch, film grain, a chart); also for hyperframes add and catalog.
hyperframes-creative
heygen-com/hyperframes
Non-animation creative direction for HyperFrames videos. Use for design spec (frame.md / design.md) handling, palettes, typography, narration, beat planning, audio-reactive visuals, composition patterns, and brand / style decisions. For atomic motion patterns and scene blueprints, use hyperframes-animation.
ai-video-generation
101-skills/superpowers
Generate AI videos with Google Veo, Seedance 2.0, HappyHorse, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 2.0, HappyHorse 1.0, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, reference-to-video, video editing, lipsync, avatar animation, video upscaling, foley sound. Use for: social media videos, marketing content, explainer videos, product demos, AI avatars. Triggers: video generation, ai video, text to video, image to video, veo, animate image, video from image, ai animation, video generator, generate video, t2v, i2v, ai video maker, create video with ai, runway alternative, pika alternative, sora alternative, kling alternative, seedance, happyhorse
ai-image-generation
101-skills/superpowers
Generate AI images with GPT-Image-2, FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI. Models: GPT-Image-2, FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4.5, Reve, ImagineArt. Capabilities: text-to-image, image-to-image, inpainting, LoRA, image editing, upscaling, text rendering. Use for: AI art, product mockups, concept art, social media graphics, marketing visuals, illustrations. Triggers: flux, image generation, ai image, text to image, stable diffusion, generate image, ai art, midjourney alternative, dall-e alternative, text2img, t2i, image generator, ai picture, create image with ai, generative ai, ai illustration, grok image, gemini image, gpt image, openai image, chatgpt image