Ir al contenido principal

Video Character Swap: referencias, elección del objetivo y revisión

Referencias de cuerpo completo, clip de 5 a 30 s, el índice de vista previa correcto y la revisión de ropa, contacto, oclusión y personas intactas.

Autor
Lydia
Publicado
Lectura
11 min de lectura
Actualizado
Una mujer adulta ficticia con chaqueta de trabajo azul marino cruza un taller llevando una caja de herramientas gris cerrada, mientras un hombre adulto con camisa crema se apoya en un banco de trabajo junto a una cámara sobre un trípode; Ilustración, no un resultado de CharacterSwap.

Use Character Swap cuando el reemplazo deba cambiar el aspecto completo de una persona, incluida la complexión y la ropa, mientras la escena, el movimiento de cámara y el audio original se mantienen. Character Swap le permite elegir a qué persona del clip se cambia: analice el clip final, revise las vistas previas numeradas y luego envíe el índice de vista previa elegido junto con una a tres imágenes del reemplazo. Si la ropa original debe mantenerse, use en su lugar un flujo de head swap o face swap.

En SpicyAPI, el análisis y la edición son tareas de pago separadas. Un clip de siete segundos cuesta en total $0.72 a 480p o $1.28 a 720p: un análisis más la edición, que redondea hacia arriba hasta diez segundos. El Playground ejecuta ambos pasos en el navegador y la API acepta las mismas entradas. Necesita autorización tanto para el material como para la semejanza de la persona en las imágenes de referencia.

Prepare una escena de siete segundos y un reemplazo de cuerpo completo

Nuestro ejemplo es un plano de siete segundos de alguien que lleva una caja de herramientas cerrada hasta un banco mientras otro adulto está de pie a su lado. La persona que transporta se reemplaza por una adulta ficticia con chaqueta de trabajo azul marino y pantalón gris carbón, el aspecto de las ilustraciones de abajo. El banco, la caja de herramientas, la otra persona y la actuación original se mantienen.

Exporte exactamente el clip de siete segundos que quiere editar. Conserve el agarre inicial, la acción de transportarlo y la liberación cuando la caja de herramientas llega al banco. La entrada es un MP4 de 5 a 30 segundos de hasta 90 MB. Subir el archivo es la vía más fiable; un enlace directo debe apuntar al propio MP4, porque una página con un reproductor falla (se devuelve el cargo). Recortar o recodificar después del análisis exige un análisis nuevo.

El tracker sigue a las personas que se mantienen razonablemente grandes y visibles, así que corte al tramo que importa y evite periodos largos en los que la persona que quiere está completamente oculta. Un corte más corto también cuesta menos, porque la edición se factura en bloques de cinco segundos.

Para el reemplazo, prepare una vista de cuerpo completo frontal y otra de tres cuartos de la misma adulta, con el mismo atuendo. Se acepta una referencia clara; tres es el máximo por objetivo. Un retrato de cabeza y hombros deja la complexión y la ropa al cálculo, así que muestre mangas, manos y calzado, e ilumine las referencias como el material en lugar de elegir el retrato más nítido. No combine el rostro de una persona, el pantalón de otra y una chaqueta diferente en la tercera imagen. El servicio recibe eso como referencias para un reemplazo, no como capas de ropa asignadas por separado.

Un briefing utilizable para generar la imagen es:

Retrato de referencia de cuerpo completo de una mujer adulta ficticia, de unos 30 años, con chaqueta de trabajo azul marino lisa, pantalón gris carbón y zapatos planos oscuros. Pose relajada de frente, manos visibles, mangas y calzado legibles, fondo neutro. Sin caja de herramientas, sin otras personas, sin letras.

Genere o fotografíe un segundo ángulo del mismo diseño ya establecido si hace falta. La edición de character swap no tiene campo de prompt de texto, ni selector de ropa ni máscara de cuerpo, así que la ropa deseada tiene que estar en las imágenes de referencia.

Dos retratos editoriales de cuerpo completo muestran una mujer adulta ficticia con chaqueta de trabajo azul marino y pantalón gris carbón de frente y en un ángulo de tres cuartos; en la vista angulada una mano está en un bolsillo.

Ilustración de un juego de referencias de cuerpo completo, frontal y de tres cuartos.

Pruébelo primero en el Playground

  1. Abra la página del modelo Video Character Swap y quédese en la pestaña Playground en la vista Form. Inicie sesión con una cuenta con saldo para ejecutar.
  2. En Step 1, Find the people in your clip, añada el MP4 de siete segundos en Input video (subirlo es más fiable que un enlace) y elija la Resolution que quiere para el clip final, 480p o 720p. La edición debe usar el mismo valor.
  3. Pulse Find people in this clip ($0.08). Todas las personas detectadas aparecen en Step 2, Choose who to replace, una vista previa recortada por persona.
  4. Elija la vista previa de la persona que lleva la caja de herramientas, añada una a tres imágenes de referencia del reemplazo y ejecute la edición. Un Seed es opcional.

La posición 0 es la primera vista previa devuelta, no necesariamente la persona más a la izquierda o la más grande, porque el orden viene del rastreo y no de la posición en pantalla. Si la persona que transporta es la segunda vista previa, ese es el índice 1. Mantenga el orden devuelto al guardar vistas previas: nombres de archivo alfabéticos o una galería ordenada pueden cambiar el índice en silencio.

Si la persona prevista no tiene vista previa, no pague una edición adivinando un número cercano. Ninguna imagen de referencia puede recuperar a una persona que no tiene vista previa, así que use una toma en la que esa persona se vea claramente. Un análisis que no encuentra a nadie termina como fallido y se libera su reserva; un análisis exitoso se cobra aunque decida no hacer el swap.

Después, llámelo desde el código

Instale el SDK de Python (pip install spicyapi), defina SPICY_API_KEY y ejecute lo siguiente. Sube el clip y dos referencias, ejecuta el análisis, imprime los enlaces de las vistas previas, pregunta qué índice cambiar y luego envía la edición. Ambas tareas se cobran.

python
import uuid

from spicyapi import SpicyClient, output_assets

client = SpicyClient()  # reads SPICY_API_KEY from the environment
RESOLUTION = "720p"     # must be identical in both calls

clip = client.upload_file("./workshop-seven-seconds.mp4")
front = client.upload_file("./replacement-front.png")
angled = client.upload_file("./replacement-three-quarter.png")

analysis_task = client.create_task(
    model="spicyapi/character-swap-v1/video-analyze",
    input_data={"video_url": clip["uri"], "resolution": RESOLUTION},
    idempotency_key=str(uuid.uuid4()),  # new key per new request; reuse only to retry the same one
)
print("Resume analysis:", analysis_task["taskId"], flush=True)
analysis = client.wait_for_terminal(analysis_task["taskId"])
if analysis["state"] != "succeeded":
    raise RuntimeError(f"Analysis {analysis_task['taskId']} ended as {analysis['state']}")

previews = output_assets(analysis)
if not previews or any(p.get("pending") or p.get("unavailable") or not p.get("url") for p in previews):
    raise RuntimeError(f"Analysis {analysis_task['taskId']} has no ready previews; retrieve it before editing")
for index, preview in enumerate(previews):  # keep the returned order
    print(index, preview["url"])
chosen = int(input("Index of the person to replace: "))
if not 0 <= chosen < len(previews):
    raise ValueError("Choose one of the returned preview indices before creating an edit")

edit_task = client.create_task(
    model="spicyapi/character-swap-v1/video-edit",
    input_data={
        "analysis_task_id": analysis["taskId"],  # video_url is inherited from the analysis
        "resolution": RESOLUTION,
        "swap_targets": [{"object_index": chosen,
                          "image_urls": [front["uri"], angled["uri"]]}],
        "seed": 42,
    },
    idempotency_key=str(uuid.uuid4()),  # new key per new request; reuse only to retry the same one
)
print("Resume edit:", edit_task["taskId"], flush=True)
edit = client.wait_for_terminal(edit_task["taskId"])
if edit["state"] != "succeeded":
    raise RuntimeError(f"Edit {edit_task['taskId']} ended as {edit['state']}")
assets = output_assets(edit)
if not assets or any(a.get("pending") or a.get("unavailable") or not a.get("url") for a in assets):
    raise RuntimeError(f"Task {edit_task['taskId']} has no ready output; check this task before a new run")
print(assets[0]["url"])  # copy it to your own storage now

Las subidas, la espera, los errores y los reintentos están en la guía de subject swap, la documentación de tareas y la referencia del SDK de Python. Use la misma clave de API para ambos pasos y ejecute la edición dentro de las 24 horas siguientes al análisis (un clip subido también caduca a las 24 horas); un análisis puede alimentar varias ediciones facturadas por separado. Las personas que no liste quedan intactas, y un índice pertenece a este análisis, así que no lo reutilice como ID de personaje en otro plano.

La intención de un reemplazo de personaje completo es conservar la escena, el movimiento de cámara, la coreografía y el audio original. Ese alcance no promete píxeles de fondo sin cambios ni una voz nueva.

O deje que un agente lo ejecute

Si un asistente debe ejecutar el swap, dele la CLI o el servidor MCP. Ambos muestran el precio y le piden confirmar antes de una llamada de pago. La Skill añade instrucciones por encima de cualquiera de los dos.

  • CLI. spicyapi ejecuta una tarea desde un terminal (npx @spicyapi/cli funciona sin instalar):

``bash spicyapi files upload ./workshop-seven-seconds.mp4 # prints a spicy:// URI spicyapi tasks create --model spicyapi/character-swap-v1/video-analyze \ --input-file analysis.json --idempotency-key workshop-analysis-v1 --wait ``

analysis.json contiene {"video_url": "spicy://...", "resolution": "720p"}. Mire las vistas previas y luego ejecute el comando con video-edit, su propia clave workshop-edit-v1 y un input.json con analysis_task_id, resolution y swap_targets. Reutilice una clave solo para una petición sin cambios; una fuente, un objetivo o un conjunto de referencias nuevo necesita una clave nueva.

  • Servidor MCP. Añada el servidor MCP (su fragmento de configuración está en esa página) a su asistente y luego pregunte: "Analiza ./workshop-seven-seconds.mp4 a 720p con Character Swap y muéstrame las vistas previas." Después de elegir la persona, diga: "Reemplaza el índice 1 usando ./replacement-front.png y ./replacement-three-quarter.png." Llama a spicyapi_upload_file, luego a spicyapi_task_create (que se detiene para su confirmación de precio) y luego a spicyapi_task_wait.
  • Skill. npx skills add spicyapi-ai/spicy-skill instala la Agent Skill, que enseña a un asistente de programación a leer el esquema en vivo y reutilizar claves de idempotencia. No puede ejecutar tareas por sí mismo, así que úsela con la CLI o MCP. Qué vista previa cambiar sigue siendo su decisión.

Entienda el cargo antes de hacer variantes

Los precios provienen del catálogo público (octubre de 2026).

EtapaPrecioEjemplo con siete segundos
Análisis$0.08 por petición$0.08
Edición, 480p$0.064 por segundo facturado10 segundos facturados: $0.64
Edición, 720p$0.12 por segundo facturado10 segundos facturados: $1.20

La duración de la edición se redondea a bloques completos de cinco segundos, con un mínimo de cinco segundos y un tope de treinta segundos. Una fuente de 5 segundos usa un bloque; 5,1 segundos usan dos. Antes del envío, la estimación de la edición reserva el máximo de treinta segundos, $1.92 a 480p o $3.60 a 720p, y la diferencia se devuelve cuando la tarea se liquida. Una comprobación de presupuesto debe por tanto permitir la reserva, no solo el importe final esperado. Una petición rechazada en la creación (resolución distinta, ID de análisis equivocado, índice repetido) no crea ni cobra nada.

Dos ediciones a 720p de la fuente de siete segundos, reutilizando un análisis, cuestan $2.48 en total: $0.08 más dos veces $1.20. Cambiar las referencias o el seed es una edición de pago nueva, no una revisión gratuita.

Repare el problema correcto

SíntomaAcción
La edición cambia a la persona de al ladoVuelva a abrir las vistas previas ordenadas originales y corrija object_index; nuevas imágenes de referencia no arreglan una selección equivocada
La petición dice que el análisis no se encontró o pertenece a otro modeloUse el ID de tarea de su propia tarea video-analyze, creada con la misma clave de API
La petición rechaza la fuente o la resoluciónOmita video_url en la edición, use la resolución analizada o analice de nuevo la fuente nueva
El análisis es demasiado antiguoEjecute el análisis de nuevo y elija el objetivo en las vistas previas nuevas
La cara está bien pero cambia la ropaUse referencias de cuerpo completo coherentes que muestren la misma chaqueta, el mismo pantalón y el mismo calzado
El reemplazo parece pegadoLas referencias están iluminadas de forma distinta al material; rehágalas con la misma dirección de luz y el mismo tono
Las manos atraviesan la caja de herramientasUse un agarre más claro o un reemplazo con proporciones más compatibles; un retrato nítido por sí solo no describe el contacto
La identidad cambia después de un crucePruebe una fuente con menos oclusión sostenida; inspeccione el retorno desde detrás de la otra persona
La tarea terminó bien pero el archivo está pendienteSiga recogiendo la tarea existente; no cree otra edición de pago para recuperar una descarga
Un editor adulto ficticio sostiene un lápiz y una hoja transparente sobre una fotografía impresa de una mujer y un hombre trabajando en un banco con una caja de herramientas gris.

Ilustración de la revisión de un fotograma impreso.

Observe a la persona que transporta, la caja de herramientas y el adulto no seleccionado juntos a velocidad normal. Después inspeccione el agarre, el contacto con el banco y la liberación. Una cara nueva puede verse excelente mientras la acción central falla. Si solo el último medio segundo tiene un defecto, puede bastar con recortar; si el agarre está roto de principio a fin, elija una fuente más clara o use un alcance de reemplazo de cabeza más estrecho cuando el cuerpo y la ropa originales puedan quedarse.

Copie el clip aceptado a su propio almacenamiento antes de que caduque: los resultados se conservan unos 14 días (véase retención y entrega de medios).

También en English · 日本語 · 한국어 · Deutsch · Français · Português (Brasil) · Русский · Italiano · Polski