Skills Agentes

Faceswap

Cambia caras en un vídeo con IA mediante la API de HeyGen. Úsalo para reemplazar una cara, aplicar la de una imagen origen sobre un vídeo o personalizar vídeos con la cara de alguien.

Solicitamcp__heygen__*
Estrellas
49.5k

en todo el repo

Actividad
36

0–100, la ruta de este skill

Actualizado
hace 4 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
1.8k tok

80 tok en reposo

Paquete
1 archivo

7 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add calesthio/OpenMontage --skill faceswap --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests, needs API credentials.

Qué hace

  • Cambia la cara de un vídeo con IA usando el endpoint `/v1/workflows/executions` de HeyGen
  • Toma la cara de una imagen origen y la aplica sobre el vídeo destino
  • Lanza el trabajo, consulta el estado y hace polling hasta completarlo
  • Se puede encadenar tras generar un vídeo de avatar, con ejemplos en curl, TypeScript y Python

Úsalo cuando

  • Reemplazar una cara de un vídeo por otra
  • Aplicar la cara de una imagen origen sobre un vídeo destino
  • Crear vídeos personalizados metiendo la cara de una persona

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Cambia la cara de este vídeo por la de esta foto
    • Personaliza este vídeo con mi cara
    • Haz un face swap sobre el vídeo del avatar

    SKILL.md

    En inglés

    Face Swap (HeyGen API)

    Swap a face from a source image into a target video using GPU-accelerated AI processing. The source image provides the face to swap in, and the target video receives the new face.

    Authentication

    All requests require the X-Api-Key header. Set the HEYGEN_API_KEY environment variable.

    curl -X POST "https://api.heygen.com/v1/workflows/executions" \
      -H "X-Api-Key: $HEYGEN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"workflow_type": "FaceswapNode", "input": {"source_image_url": "https://example.com/face.jpg", "target_video_url": "https://example.com/video.mp4"}}'
    

    Default Workflow

    1. Call POST /v1/workflows/executions with workflow_type: "FaceswapNode", a source face image, and a target video
    2. Receive a execution_id in the response
    3. Poll GET /v1/workflows/executions/{id} every 10 seconds until status is completed
    4. Use the returned video_url from the output

    Execute Face Swap

    Endpoint

    POST https://api.heygen.com/v1/workflows/executions

    Request Fields

    Field Type Req Description
    workflow_type string Y Must be "FaceswapNode"
    input.source_image_url string Y URL of the face image to swap in
    input.target_video_url string Y URL of the video to apply the face swap to

    curl

    curl -X POST "https://api.heygen.com/v1/workflows/executions" \
      -H "X-Api-Key: $HEYGEN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "workflow_type": "FaceswapNode",
        "input": {
          "source_image_url": "https://example.com/face-photo.jpg",
          "target_video_url": "https://example.com/original-video.mp4"
        }
      }'
    

    TypeScript

    interface FaceswapInput {
      source_image_url: string;
      target_video_url: string;
    }
    
    interface ExecuteResponse {
      data: {
        execution_id: string;
        status: "submitted";
      };
    }
    
    async function faceswap(input: FaceswapInput): Promise<string> {
      const response = await fetch("https://api.heygen.com/v1/workflows/executions", {
        method: "POST",
        headers: {
          "X-Api-Key": process.env.HEYGEN_API_KEY!,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          workflow_type: "FaceswapNode",
          input,
        }),
      });
    
      const json: ExecuteResponse = await response.json();
      return json.data.execution_id;
    }
    

    Python

    import requests
    import os
    
    def faceswap(source_image_url: str, target_video_url: str) -> str:
        payload = {
            "workflow_type": "FaceswapNode",
            "input": {
                "source_image_url": source_image_url,
                "target_video_url": target_video_url,
            },
        }
    
        response = requests.post(
            "https://api.heygen.com/v1/workflows/executions",
            headers={
                "X-Api-Key": os.environ["HEYGEN_API_KEY"],
                "Content-Type": "application/json",
            },
            json=payload,
        )
    
        data = response.json()
        return data["data"]["execution_id"]
    

    Response Format

    {
      "data": {
        "execution_id": "node-gw-f1s2w3p4",
        "status": "submitted"
      }
    }
    

    Check Status

    Endpoint

    GET https://api.heygen.com/v1/workflows/executions/{execution_id}

    curl

    curl -X GET "https://api.heygen.com/v1/workflows/executions/node-gw-f1s2w3p4" \
      -H "X-Api-Key: $HEYGEN_API_KEY"
    

    Response Format (Completed)

    {
      "data": {
        "execution_id": "node-gw-f1s2w3p4",
        "status": "completed",
        "output": {
          "video_url": "https://resource.heygen.ai/faceswap/output.mp4"
        }
      }
    }
    

    Polling for Completion

    async function faceswapAndWait(
      input: FaceswapInput,
      maxWaitMs = 600000,
      pollIntervalMs = 10000
    ): Promise<string> {
      const executionId = await faceswap(input);
      console.log(`Submitted face swap: ${executionId}`);
    
      const startTime = Date.now();
      while (Date.now() - startTime < maxWaitMs) {
        const response = await fetch(
          `https://api.heygen.com/v1/workflows/executions/${executionId}`,
          { headers: { "X-Api-Key": process.env.HEYGEN_API_KEY! } }
        );
        const { data } = await response.json();
    
        switch (data.status) {
          case "completed":
            return data.output.video_url;
          case "failed":
            throw new Error(data.error?.message || "Face swap failed");
          case "not_found":
            throw new Error("Workflow not found");
          default:
            await new Promise((r) => setTimeout(r, pollIntervalMs));
        }
      }
    
      throw new Error("Face swap timed out");
    }
    

    Usage Examples

    Basic Face Swap

    curl -X POST "https://api.heygen.com/v1/workflows/executions" \
      -H "X-Api-Key: $HEYGEN_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "workflow_type": "FaceswapNode",
        "input": {
          "source_image_url": "https://example.com/headshot.jpg",
          "target_video_url": "https://example.com/presentation.mp4"
        }
      }'
    

    Chain with Avatar Video

    Generate an avatar video first, then swap in a custom face:

    import time
    
    # Step 1: Generate avatar video
    avatar_execution_id = requests.post(
        "https://api.heygen.com/v1/workflows/executions",
        headers={"X-Api-Key": os.environ["HEYGEN_API_KEY"], "Content-Type": "application/json"},
        json={
            "workflow_type": "AvatarInferenceNode",
            "input": {
                "avatar": {"avatar_id": "Angela-inblackskirt-20220820"},
                "audio_list": [{"audio_url": "https://example.com/speech.mp3"}],
            },
        },
    ).json()["data"]["execution_id"]
    
    # Step 2: Wait for avatar video to complete
    while True:
        status = requests.get(
            f"https://api.heygen.com/v1/workflows/executions/{avatar_execution_id}",
            headers={"X-Api-Key": os.environ["HEYGEN_API_KEY"]},
        ).json()["data"]
        if status["status"] == "completed":
            avatar_video_url = status["output"]["video"]["video_url"]
            break
        time.sleep(10)
    
    # Step 3: Swap in a custom face
    faceswap_execution_id = faceswap(
        source_image_url="https://example.com/custom-face.jpg",
        target_video_url=avatar_video_url,
    )
    

    Best Practices

    1. Use a clear, front-facing face photo — the source image should show a single face with good lighting
    2. Face swap is GPU-intensive — expect 1-3 minutes processing time, poll every 10 seconds
    3. Source image quality matters — higher resolution face photos produce better results
    4. One face per source image — the source should contain exactly one face to swap in
    5. Works with any video — the target video can be an avatar video, a recording, or any video with visible faces
    6. Chain with other workflows — generate an avatar video first, then swap in a custom face for personalization

    Reproducido de calesthio/OpenMontage bajo licencia AGPL-3.0. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Necesita `HEYGEN_API_KEY` y las herramientas `mcp__heygen__*`.

    Necesita en el PATH:curl

    Variables de entorno:HEYGEN_API_KEY

    Detalles

    Creador
    calesthio
    Categoría
    Diseño y UI
    Licencia
    AGPL-3.0
    Recursos incluidos
    Solo SKILL.md
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de calesthio/OpenMontage

    Este repo incluye 89 skills. Si instalas uno, normalmente ya tienes los demás.

    Comfyui

    49.5k

    Úsalo al trabajar con workflows de ComfyUI en OpenMontage: comfyui_image/video/music, workflows propios, selección de output_node, modelos que faltan, LoRAs, poca VRAM e importación de workflows de la comunidad.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    diseno ui

    Genera vídeo cinematográfico de 4-30 s con ByteDance Seedance 2.5 por fal.ai, Volcengine Ark, Runway o ComfyUI. Cubre el contrato de prompt 2.5, cortes duros, locks de continuidad y voz.

    Costo de contexto al activarse
    3.2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 4 días
    diseno ui

    Genera narración expresiva y multilingüe con fish.audio (modelos S1 / S2) y reutiliza voces clonadas mediante reference_id.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    diseno ui

    Genera y edita conversacionalmente vídeos cortos con Google Gemini Omni Flash: itera con ediciones en lenguaje natural, clips de 3-10s a 720p con audio y texto en pantalla, e imágenes de referencia por etiquetas.

    Costo de contexto al activarse
    2.1k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    Permisos
    diseno ui

    Genera vídeo con MiniMax H3 (Hailuo 3.0) por la API oficial v2, fal.ai, Runway, nodos partner de ComfyUI o pesos abiertos locales. Clips de 4-15s a 2K con animación de primer/último fotograma.

    Costo de contexto al activarse
    582 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    diseno ui

    Genera, reconstruye, inspecciona y enruta activos 3D de producción para mundos de OpenMontage con Atlas Cloud, fal.ai, catálogos con licencia y Blender.

    Costo de contexto al activarse
    1.2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 9 días
    diseno ui

    Skills relacionados

    Genera, reconstruye, inspecciona y enruta activos 3D de producción para mundos de OpenMontage con Atlas Cloud, fal.ai, catálogos con licencia y Blender.

    Costo de contexto al activarse
    1.2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 9 días
    diseno ui

    Acestep

    49.5k

    Generación musical con ACE-Step 1.5: música de fondo, pistas con voz, versiones y extracción de stems para producción de vídeo.

    Costo de contexto al activarse
    2.3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 meses
    diseno ui

    Genera vídeos con IA desde texto usando varias pasarelas — HeyGen, fal.ai, Kling y Gemini — con soporte de imagen a vídeo y comparación entre VEO, Kling, Sora, Runway, Seedance y MiniMax.

    Costo de contexto al activarse
    3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    diseno ui