Skip to content
Back to skills

Ai Face Swap

ASecurity

Swap faces between photos realistically using each::sense AI. Transfer a face from one image onto another while preserving lighting, skin tone, and expression. Supports single and multi-face swaps with natural blending. Use for: entertainment, memes, movie poster parodies, cosplay previews, creative projects, social media content. Triggers: face swap, swap face, face replacement, face transfer, put my face on, face change, switch faces, face paste, face morph, swap heads

  • 29 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added June 2, 2026
toolspythongobashexpressapidocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Scanned June 2, 2026

npx -y skills add awesome-genmedia/skills --skill ai-face-swap --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ai Face Swap?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ai Face Swap
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/awesome-genmedia-ai-face-swap/badge)](https://www.skillsdirectory.com/skills/awesome-genmedia-ai-face-swap)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ai-face-swap
description: "Swap faces between photos realistically using each::sense AI. Transfer a face from one image onto another while preserving lighting, skin tone, and expression. Supports single and multi-face swaps with natural blending. Use for: entertainment, memes, movie poster parodies, cosplay previews, creative projects, social media content. Triggers: face swap, swap face, face replacement, face transfer, put my face on, face change, switch faces, face paste, face morph, swap heads"
allowed-tools: Bash(curl *), WebFetch
---

# AI Face Swap

Swap faces between photos with realistic blending and natural results using [each::sense](https://docs.eachlabs.ai/sense/overview) — the intelligent AI agent that automatically selects the best model for your request.

## Quick Start

> Requires an each::labs API key. Get one at [eachlabs.ai](https://eachlabs.ai).

### Using curl

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Swap the face from the first image onto the person in the second image. Keep the lighting, skin tone, and expression natural."},
              {"type": "image_url", "image_url": {"url": "https://example.com/source-face.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/target-photo.jpg"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Using Python (OpenAI SDK)

```python
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_EACHLABS_API_KEY",
    base_url="https://eachsense-agent.core.eachlabs.run/v1"
)

response = client.chat.completions.create(
    model="eachsense/beta",
    messages=[{
        "role": "user",
        "content": "Swap the face from the first image onto the person in the second image. Keep the lighting, skin tone, and expression natural."
    }],
    # Images are included in the message content array above
)

print(response.choices[0].message.content)
```

### With Reference Image

Face swap requires reference images. Provide the source face and target photo via `image_urls`:

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [{"role": "user", "content": [
              {"type": "text", "text": "Swap the face from image one onto the person in image two, matching the lighting and angle perfectly"},
              {"type": "image_url", "image_url": {"url": "https://example.com/my-face.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/target-body.jpg"}}
            ]
          }
    ],
    "stream": false
  }'
```

> Images are sent inside messages using the OpenAI multimodal content format. Maximum 4 images per request.

### Streaming

Set `"stream": true` for real-time SSE responses, or `"stream": false` for complete result in a single response. Streaming is useful for showing progress in UIs; non-streaming is simpler for scripts and automation.

## How It Works

1. **Source image** — The photo containing the face you want to use
2. **Target image** — The photo where the face will be placed
3. **AI processing** — The model detects both faces, maps landmarks, and blends the source face onto the target while adjusting lighting, color, and perspective

## Best Practices for Input Photos

### Source Face (Image 1)
- Clear, well-lit, front-facing photo
- High resolution (at least 512x512)
- Minimal obstructions (no sunglasses, hands over face)
- Neutral or clear expression works best

### Target Photo (Image 2)
- Face clearly visible and not heavily occluded
- Similar angle to source face yields best results
- Good lighting and resolution

## Prompt Engineering Tips

### Specify the Direction

Always clarify which image is the source face and which is the target:

```
Swap the face from [image 1 description] onto [image 2 description]
```

### Quality Hints

Include quality instructions for better results:

```
Match the skin tone and lighting. Blend naturally around the jawline and hairline.
Preserve the original expression and head angle of the target.
```

## Examples

### Portrait Face Swap

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Take the face from the first photo and place it on the person in the second photo. The result should look like a natural portrait with proper skin tone matching and seamless blending around the edges."},
              {"type": "image_url", "image_url": {"url": "https://example.com/person-a-headshot.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/person-b-portrait.jpg"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Creative Costume Swap

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Swap my face from the first image onto the person wearing the medieval knight armor in the second image. Keep the armor and background unchanged, only replace the face."},
              {"type": "image_url", "image_url": {"url": "https://example.com/my-selfie.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/knight-portrait.jpg"}}
            ]
          }
    ],
    "stream": false
  }'
```

### Group Photo Swap

```bash
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "In the group photo (second image), swap the face of the person on the far left with the face from the first image. Keep everyone else unchanged."},
              {"type": "image_url", "image_url": {"url": "https://example.com/new-face.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/group-photo.jpg"}}
            ]
          }
    ],
    "stream": false
  }'
```

## Workflow

```bash
# Step 1: Basic face swap
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Swap the face from image one onto the person in image two. Natural blending, match skin tone."},
              {"type": "image_url", "image_url": {"url": "https://example.com/source.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/target.jpg"}}
            ]
          }
    ],
    "stream": false
  }'

# Step 2: Refine if needed
curl -X POST https://eachsense-agent.core.eachlabs.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $EACHLABS_API_KEY" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": "Swap the face from image one onto the person in image two. Natural blending, match skin tone."
      },
      {
        "role": "assistant",
        "content": "..."
      },
      {
        "role": "user",
        "content": [
              {"type": "text", "text": "Good result but the skin tone looks slightly off. Please adjust the skin tone to better match the target photo lighting and make the blend around the jawline smoother."},
              {"type": "image_url", "image_url": {"url": "https://example.com/source.jpg"}},
              {"type": "image_url", "image_url": {"url": "https://example.com/target.jpg"}}
            ]
          }
    ],
    "stream": false
  }'
```

## Related Skills

- [AI Beauty Filter](../ai-beauty-filter/SKILL.md) — Enhance the swapped result
- [AI Face Restoration](../ai-face-restoration/SKILL.md) — Fix quality issues after swap
- [AI Expression Editor](../ai-expression-editor/SKILL.md) — Adjust expression post-swap
- [AI Caricature](../ai-caricature/SKILL.md) — Turn the result into a caricature
- [AI Aging Filter](../ai-aging-filter/SKILL.md) — Age the swapped face

## Related Models

- [face-swap](../../../models/face-swap/SKILL.md) — Dedicated face swap model
- [flux-kontext-pro](../../../models/flux-kontext-pro/SKILL.md) — Image editing with context
- [pulid-flux](../../../models/pulid-flux/SKILL.md) — Identity-preserving generation

## Documentation

- [each::sense Overview](https://docs.eachlabs.ai/sense/overview)
- [each::labs API](https://docs.eachlabs.ai)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.