API de Wan 2.7 VideoEdit en Novita AI: Cómo editar videos con IA

API de Wan 2.7 VideoEdit en Novita AI: Cómo editar videos con IA

Wan 2.7 VideoEdit en Novita AI es el endpoint adecuado cuando ya tienes material de archivo y deseas que el modelo reestilice o reescriba la escena sin reconstruir el movimiento desde cero. Envías un video de origen a POST https://api.novita.ai/v3/async/wan2.7-videoedit, obtienes un task_id y luego consultas GET /v3/async/task-result hasta que el clip editado esté listo. Esta guía muestra la forma exacta de la solicitud, cuándo agregar imágenes de referencia y los detalles de implementación que importan antes de integrarlo en producción.

Cuándo Wan 2.7 VideoEdit es la herramienta adecuada

Usa Wan 2.7 VideoEdit cuando el tiempo y el movimiento de cámara en tu clip de origen ya sean lo suficientemente buenos y quieras que la IA cambie lo que ve el espectador, en lugar de cómo está compuesta la toma.

Usos típicos:

  • Tienes un clip de acción real y deseas convertirlo en un render anime, cinematográfico o estilizado.
  • Necesitas cambiar vestuario, entorno, accesorios o atmósfera mientras preservas el arco de movimiento original.
  • Quieres aplicar una transformación guiada por prompt al material de archivo y, opcionalmente, anclar el aspecto con una imagen de referencia.

No es el endpoint adecuado cuando:

  • Necesitas movimiento completamente nuevo solo a partir de texto. Usa Wan 2.7 T2V.
  • Quieres animar una imagen estática. Usa Wan 2.7 I2V.
  • Necesitas juego de roles de múltiples personajes con ranuras de referencia con nombre en una escena generada. Usa Wan 2.7 R2V.

Esa distinción importa porque VideoEdit comienza a partir de un clip de entrada. Si el movimiento original es incorrecto, el modelo no arreglará la coreografía.

Endpoint verificado y flujo de trabajo

Wan 2.7 VideoEdit en Novita AI usa un endpoint de envío y el endpoint compartido de resultado de tarea asíncrona:

Campo Valor
Endpoint de envío POST https://api.novita.ai/v3/async/wan2.7-videoedit
Consulta de resultado GET https://api.novita.ai/v3/async/task-result?task_id=<id>
Encabezado de autenticación Authorization: Bearer $NOVITA_API_KEY
Tipo de contenido application/json
Documentación oficial Referencia de API de Wan 2.7 VideoEdit

La API es asíncrona. Una llamada de envío exitosa devuelve un task_id, no la URL del video terminado. Tu aplicación debe persistir ese ID de tarea y construir lógica de polling o de trabajo en segundo plano a su alrededor.

Paso 1: Obtener una clave de API de Novita AI

Crea una clave desde Gestión de claves de Novita AI y mantenla en una variable de entorno:

export NOVITA_API_KEY="tu_api_key_aqui"

No codifiques la clave en el código del navegador, aplicaciones móviles o archivos de configuración incluidos en el repositorio.

Paso 2: Entender la forma de la solicitud

Wan 2.7 VideoEdit usa un cuerpo JSON plano. La solicitud no anida campos bajo input o parameters.

Como mínimo, envía:

  • video_url
  • prompt

Los campos opcionales documentados de los que normalmente te preocuparás primero son:

  • reference_image_url para una referencia de aspecto/estilo
  • resolution
  • duration
  • audio_setting
  • prompt_extend
  • seed

Paso 3: Enviar tu primera solicitud de VideoEdit

Esta es la solicitud práctica más pequeña:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "Convierte esta escena de pasillo de oficina en un corredor cyberpunk neón, preserva el movimiento de caminata y la trayectoria de la cámara",
    "resolution": "720P",
    "duration": 5
  }'

Respuesta esperada:

{
  "task_id": "abc123..."
}

No se garantiza nada más en el momento del envío. Trata la solicitud como un paso de encolado de trabajo, no como una respuesta de edición síncrona.

Paso 4: Consultar el endpoint de resultado de la tarea

Usa el task_id devuelto con la API compartida de resultado de tarea:

curl -s "https://api.novita.ai/v3/async/task-result?task_id=abc123..." \
  -H "Authorization: Bearer $NOVITA_API_KEY"

Construye alrededor de estos estados:

Estado Significado
TASK_STATUS_QUEUED Aceptado y esperando ejecución
TASK_STATUS_PROCESSING La edición está en progreso
TASK_STATUS_SUCCEED El video editado está listo
TASK_STATUS_FAILED La tarea falló; inspecciona el cuerpo de la respuesta

Cuando la tarea tiene éxito, la respuesta incluye un array videos con la URL del video editado y el TTL de la URL. Descarga o mueve ese activo rápidamente en lugar de tratar la URL alojada como almacenamiento permanente.

Paso 5: Agregar una imagen de referencia cuando necesites un control visual más estricto

reference_image_url es opcional, pero cambia el comportamiento de edición de maneras útiles.

Úsala cuando:

  • Quieras que el clip final siga un aspecto, vestimenta o paleta de personaje particular.
  • Quieras dirigir la salida hacia una dirección artística específica en lugar de dejarlo todo al prompt de texto.
  • El movimiento del video de origen sea correcto, pero la identidad de la escena sea demasiado imprecisa solo con guía de texto.

Ejemplo de solicitud con una imagen de referencia:

curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "reference_image_url": "https://example.com/reference-look.png",
    "prompt": "Transforma al intérprete en el aspecto y la paleta de colores de la imagen de referencia manteniendo el mismo ritmo de baile",
    "resolution": "1080P",
    "duration": 6,
    "audio_setting": "auto"
  }'

Si tu resultado sigue desviándose, la solución habitual no es un prompt más largo. Es un prompt más ajustado más una mejor imagen de referencia.

Parámetros clave que realmente deberías considerar

Parámetro Tipo Obligatorio Qué hace
video_url string Video de origen a editar
prompt string Describe la transformación objetivo
reference_image_url string No Imagen de referencia para anclar aspecto y estilo
resolution string No Resolución de salida, los valores documentados incluyen 720P y 1080P
duration integer No Duración objetivo en segundos; 0 mantiene la duración completa del video de entrada
audio_setting string No Controla el comportamiento de generación de audio
prompt_extend boolean No Permite que el modelo expanda automáticamente prompts cortos
seed integer No Mejora la reproducibilidad entre reintentos

Consulta la referencia de parámetros oficial antes de asumir valores predeterminados. Los campos de modelos de video cambian con más frecuencia que los de modelos de texto, y las restricciones de salida son fáciles de equivocar si confías en la memoria.

Límites documentados y restricciones prácticas

Al 29 de julio de 2026, los documentos oficiales de Novita para Wan 2.7 VideoEdit documentan estos límites:

  • Resoluciones compatibles: 720P y 1080P
  • duration por defecto es 0, lo que significa la duración completa del video de entrada; el rango de duración de salida explícito documentado es de 2 a 10 segundos cuando lo configuras
  • Formatos de video de entrada: mp4 y mov
  • Límite de tamaño de video de entrada: hasta 100 MB
  • Formatos de imagen de referencia: jpg, jpeg, png, webp
  • Límite de tamaño de imagen de referencia: hasta 20 MB
  • Formato de video de salida: mp4

Estas restricciones son fáciles de pasar por alto cuando estás construyendo un pipeline de medios genérico. El error de integración más común es enviar un archivo de origen más largo o más grande de lo que el endpoint acepta.

Dos implicaciones prácticas:

  1. Si deseas que el clip editado conserve la longitud del origen, omite duration o establécela en 0 en lugar de forzar un recorte de 2 a 10 segundos.
  2. Si estás probando prompts rápidamente, usa primero 720P y cambia a 1080P solo cuando la transformación esté funcionando.

Ejemplo en Python: Enviar y consultar

import os
import time
import requests

API_KEY = os.environ["NOVITA_API_KEY"]
BASE_URL = "https://api.novita.ai"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json",
}


def submit_video_edit(
    video_url: str,
    prompt: str,
    reference_image_url: str | None = None,
    resolution: str = "720P",
    duration: int = 0,
    audio_setting: str = "auto",
    prompt_extend: bool = True,
    seed: int | None = None,
) -> str:
    payload = {
        "video_url": video_url,
        "prompt": prompt,
        "resolution": resolution,
        "duration": duration,
        "audio_setting": audio_setting,
        "prompt_extend": prompt_extend,
    }
    if reference_image_url:
        payload["reference_image_url"] = reference_image_url
    if seed is not None:
        payload["seed"] = seed

    resp = requests.post(
        f"{BASE_URL}/v3/async/wan2.7-videoedit",
        headers=HEADERS,
        json=payload,
        timeout=60,
    )
    resp.raise_for_status()
    return resp.json()["task_id"]


def poll_result(task_id: str, interval: int = 5, timeout: int = 300) -> dict:
    deadline = time.time() + timeout
    while time.time() < deadline:
        resp = requests.get(
            f"{BASE_URL}/v3/async/task-result",
            headers=HEADERS,
            params={"task_id": task_id},
            timeout=60,
        )
        resp.raise_for_status()
        data = resp.json()
        status = data.get("task", {}).get("status")

        if status == "TASK_STATUS_SUCCEED":
            return data
        if status == "TASK_STATUS_FAILED":
            reason = data.get("task", {}).get("reason", "unknown")
            raise RuntimeError(f"La tarea {task_id} falló: {reason}")

        time.sleep(interval)

    raise TimeoutError(f"La tarea {task_id} no se completó en {timeout}s")


if __name__ == "__main__":
    task_id = submit_video_edit(
        video_url="https://example.com/source-clip.mp4",
        prompt="Cambia la escena callejera a una ciudad retrofuturista lluviosa de noche, preserva el plano de seguimiento original",
        reference_image_url="https://example.com/reference-frame.png",
        resolution="720P",
        duration=0,
        seed=42,
    )
    print(f"Tarea enviada: {task_id}")

    result = poll_result(task_id)
    video = result["videos"][0]
    print("URL del video editado:", video["video_url"])
    print("TTL de la URL:", video["video_url_ttl"])

Ejemplo en cURL con polling en shell

TASK_ID=$(curl -s -X POST https://api.novita.ai/v3/async/wan2.7-videoedit \
  -H "Authorization: Bearer $NOVITA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "video_url": "https://example.com/source-clip.mp4",
    "prompt": "Convierte el clip en una escena de ciudad anime dibujada a mano, preserva el movimiento de carrera",
    "resolution": "720P",
    "duration": 0,
    "prompt_extend": true
  }' | jq -r '.task_id')

while true; do
  RESULT=$(curl -s "https://api.novita.ai/v3/async/task-result?task_id=$TASK_ID" \
    -H "Authorization: Bearer $NOVITA_API_KEY")
  STATUS=$(echo "$RESULT" | jq -r '.task.status')

  if [ "$STATUS" = "TASK_STATUS_SUCCEED" ]; then
    echo "$RESULT" | jq -r '.videos[0].video_url'
    break
  fi

  if [ "$STATUS" = "TASK_STATUS_FAILED" ]; then
    echo "$RESULT"
    break
  fi

  sleep 5
done

Si estás integrando desde un servicio backend, envuelve este bucle de polling en un trabajador en lugar de mantener abierta una solicitud de usuario durante toda la ventana de generación.

Precios, créditos y qué verificar antes de estimar costos

Novita AI expone los precios de los modelos de video en sus páginas de modelos y precios, pero esos números pueden cambiar. Para Wan 2.7 VideoEdit, verifica las tarifas actuales directamente desde la página de precios de Novita AI y la entrada del modelo enlazada desde la documentación oficial antes de publicar estimaciones de costos orientadas al cliente.

Para la planificación de ingeniería, la suposición más segura es:

  • El costo escala con la configuración del clip generado, no solo con una tarifa fija por solicitud.
  • Las ejecuciones en 1080P son la línea base incorrecta para iteración.
  • Los clips más cortos son más fáciles de validar y más baratos de depurar.

Si estás construyendo herramientas internas, trata la consulta de precios como un aspecto de configuración, no como una constante incrustada en el código.

Errores comunes de integración

Enviar cargas sin procesar en lugar de una URL accesible. La forma de solicitud documentada espera entradas de medios basadas en URL. Asegúrate de que tu clip de origen ya esté disponible en una URL estable a la que tu servidor pueda hacer referencia.

Usar VideoEdit para cambios de movimiento. VideoEdit es un endpoint de transformación, no de coreografía. Si el movimiento original es incorrecto, regenera con T2V o I2V.

Confundir los límites de video de origen e imagen de referencia. El video de origen es el activo más grande: mp4/mov, hasta 100 MB. El límite más pequeño de 20 MB se aplica a reference_image_url, no a video_url.

Consultar demasiado agresivamente. Golpear el endpoint de resultado de tarea cada segundo es innecesario para trabajos de video de varios segundos. Un intervalo de 5 a 10 segundos suele ser un mejor punto de partida.

Ignorar el TTL de la URL. La URL de resultado es temporal. Persiste el activo rápidamente si el clip editado es importante para procesos posteriores.

Saltarse la especificidad del prompt. “Hazlo mejor” no es un prompt de edición. Describe el estilo objetivo, el entorno, el tratamiento del sujeto y qué movimiento debe permanecer sin cambios.

¿Qué endpoint de Wan 2.7 deberías elegir?

Usa esta regla rápida:

  • Elige VideoEdit cuando ya tengas un video de origen.
  • Elige I2V cuando tengas una imagen de origen o quieras continuar desde un flujo de trabajo basado en imágenes.
  • Elige T2V cuando solo tengas texto.
  • Elige R2V cuando la consistencia de identidad y el control de personaje de referencia importen más que editar un clip existente.

Esa separación es lo que mantiene tu integración simple. Los equipos a menudo usan en exceso texto a video para trabajos que en realidad son problemas de edición basados en prompts.

Preguntas frecuentes

¿Cuál es el endpoint de Novita AI para Wan 2.7 VideoEdit?

POST https://api.novita.ai/v3/async/wan2.7-videoedit. Devuelve un task_id, luego consultas GET https://api.novita.ai/v3/async/task-result?task_id=<id> para obtener la finalización.

¿Puedo proporcionar una imagen de referencia junto con el video de origen?

Sí. La forma de solicitud documentada admite un reference_image_url opcional junto con video_url y prompt, lo cual es útil para dirigir el aspecto final de manera más ajustada.

¿Qué duración de video admite Wan 2.7 VideoEdit en Novita AI?

Según lo documentado al 29 de julio de 2026, duration por defecto es 0, lo que significa la duración completa del video de entrada. Si configuras explícitamente duration, el rango documentado es de 2 a 10 segundos.

¿Wan 2.7 VideoEdit acepta videos de origen grandes?

Sí, dentro del límite documentado. La documentación oficial lista entrada mp4/mov de hasta 100 MB. El límite separado de 20 MB se aplica a la imagen de referencia opcional.

¿Debería usar Wan 2.7 VideoEdit o Wan 2.7 I2V?

Usa VideoEdit si ya tienes un clip y deseas transformarlo. Usa I2V si tu punto de partida es una imagen estática o un flujo de trabajo basado en imágenes.

Artículos recomendados