Invita y gana

Cómo funcionan las recompensas

Comparte tu enlace. Cuando un amigo se registre con él y recargue saldo, recibirás la recompensa indicada por sus recargas posteriores.

Qwen Image 2.1 + MiniMax H3: flujo local de vídeo con primer y último fotograma

Aprende cuándo elegir 768p totalmente local, cuándo compensa el 2K híbrido y cómo crear fotogramas con Qwen, ejecutar H3-Base en local, comparar H3 alojado con las mismas entradas y diagnosticar fallos.

Índice
Qwen Image 2.1 + MiniMax H3: flujo local de vídeo con primer y último fotograma

Puede que ya consigas buenos fotogramas inicial y final con Qwen. El problema real es si H3 puede unirlos en un único plano continuo, sin cambiar al protagonista, introducir un corte no pedido ni llamar “local” a una ruta 2K que depende de API. Esta guía propone una ruta clara: valida primero la cadena 768p totalmente local, pasa a 2K híbrido solo cuando la entrega lo exija y compara H3 local y alojado con entradas idénticas.

Empieza aquí: usa 768p local salvo que necesites 2K de verdad

Si quieres validar la entrega entre modelos, mantener los archivos en tu equipo o localizar cortes inesperados, empieza con 768p totalmente local. Elige 2K híbrido solo cuando la entrega final exija 2K y aceptes las llamadas remotas a H3-Context-IR y H3-Regenerate-2K.

Tu objetivoEmpieza conPor quéCuándo cambia la recomendación
Demostrar que funciona toda la cadena768p totalmente localHay menos variables y es más fácil separar los fallos de Qwen y H3Avanza cuando 768p sea estable y la entrega requiera realmente 2K
Mantener los archivos en tu máquina768p totalmente localLos fotogramas de Qwen y H3-Base pueden permanecer en localSi 2K es obligatorio pero no puedes usar API remotas, la ruta completa documentada no cumple el requisito; necesitarás otra solución 2K local
Entregar el vídeo final en 2K2K híbridoLa ruta oficial completa aún depende de dos módulos alojadosVuelve a 768p o cambia de solución si no puedes enviar los archivos fuera
Decidir si conviene más H3 local o alojadoValida primero 768p local y después haz una prueba emparejadaDe lo contrario, mezclarás errores de despliegue con calidad del modeloFija una opción a largo plazo tras repetir la prueba con varios tipos de plano

No prometas compatibilidad por el nombre de la GPU. El ejemplo SGLang de MiniMax usa cuatro GPU y la ejecución pública se hizo en un DGX Spark; ninguno aporta VRAM mínima ni demuestra funcionamiento en una GPU de consumo corriente.

Qué puede quedarse realmente en tu equipo

La generación de fotogramas con Qwen y H3-Base a 768p pueden ser locales; la ruta oficial completa a 2K no.

Etapa¿Puede ejecutarse en local?Límite documentado
Generar y editar el primer y último fotograma con Qwen Image 2.1SíEl repositorio oficial ofrece QwenImage21Pipeline, ejemplos locales con Diffusers, tamaños 2K nativos y hasta 10 imágenes de referencia
Convertir los fotogramas inicial y final en audio-vídeo con MiniMax H3-BaseSíEl checkpoint abierto FL2VA admite cero, una o dos imágenes; dos imágenes activan el modo de primer y último fotograma, con validación local a 768p
H3-Context-IRNo como implementación oficial completa en localMiniMax lo describe como un sistema alojado de preprocesamiento y orquestación, no incluido en la versión abierta; se usa por API o se sustituye por un preprocesador propio basado en la guía de prompts
H3-Regenerate-2KNo con los componentes abiertos actualesEl módulo no está publicado; el flujo oficial completo a 2K lo invoca por API
Comparación con H3 alojadoNoUna ejecución web/API es remota por definición y sirve como control emparejado

MiniMax también documenta salidas de 4–15 segundos, 24 FPS, audio estéreo a 32 kHz y un lado corto predeterminado de 768 píxeles; el 2K se produce con H3-Regenerate-2K. Son límites del modelo, no una promesa de que cualquier configuración quepa en tu hardware.

Una prueba pública demuestra viabilidad, no un ganador universal

Usa el caso como diseño de prueba, no como veredicto de que H3 local siempre es mejor.

El cineasta Sam Wasserman publicó una ejecución local de idea a imagen y vídeo en un DGX Spark con Qwen Image 2.1 y MiniMax H3. El resultado adjunto dura aproximadamente ocho segundos. Después afirmó haber reutilizado el mismo prompt, las mismas especificaciones y los mismos fotogramas inicial y final en el H3 web de pago. Según su evaluación, el resultado web añadió un corte no deseado, mientras que el local mantuvo la secuencia prevista.

Es una prueba útil de viabilidad y un buen diseño de comparación. No demuestra que H3 local sea mejor en general. Las publicaciones no revelan comandos de instalación, memoria máxima, tiempo de generación, tratamiento del audio, semillas ni intentos fallidos. Además, el seguimiento es la valoración del mismo autor sobre una sola entrada, no una réplica independiente.

Paso 1: reduce la idea a un único plano continuo

Pide una localización, una cadena de acciones y un estado final. Escríbelos como contrato del plano: una especificación corta que permita comprobar tanto la instrucción como el resultado.

CampoQué definir
Sujeto y escenarioPersonas, objetos, vestuario, fondo y rasgos de identidad que deben permanecer estables
Estado inicialPosición, pose, mirada, distancia de cámara, composición e iluminación del primer fotograma
Estado finalSolo el cambio permitido al final; evita cambiar a la vez sujeto, lugar y posición de cámara
TrayectoriaCómo se mueve el sujeto, si se mueve la cámara y en qué orden ocurren las acciones
Restricciones de continuidadInstrucciones explícitas como “un único plano continuo”, “sin cortes” y “sin teletransporte”
Especificación de salidaDuración, relación de aspecto y necesidad de diálogo, ambiente o música
Restricciones negativasPersonajes, subtítulos, cambios de escena, sustitución de fondo o acciones que no se desean

Si la prueba pretende detectar cortes imprevistos, no pidas varias localizaciones, periodos temporales o un montaje en el mismo prompt. De lo contrario, el corte puede ser una interpretación razonable de la instrucción y no un fallo.

Por ejemplo, «camina desde la puerta hasta la mesa, toma la taza, sin cortes» sirve para una prueba de primer y último fotograma. «Pasa de la calle a una oficina y después muestra un recuerdo de infancia» necesita varias escenas y no permite medir limpiamente los cortes inesperados.

Paso 2: genera el primer fotograma y edítalo para crear el último

Crea el último fotograma editando el primero, en vez de generar dos imágenes sin relación. Así es más fácil conservar identidad, ropa, composición y fondo antes de que H3 empiece.

El ID oficial es Qwen/Qwen-Image-2.1. Qwen documenta un componente visual de 7B parámetros, ejecución local con Diffusers, generación y edición, 2K nativo y hasta 10 imágenes de referencia.

pip install "torch>=2.4.0" "transformers>=5.17" accelerate pillow
pip install git+https://github.com/huggingface/diffusers
from pathlib import Path

import torch
from diffusers import QwenImage21Pipeline

first_prompt = Path("first_prompt.txt").read_text(encoding="utf-8").strip()
last_edit_prompt = Path("last_edit_prompt.txt").read_text(encoding="utf-8").strip()

pipe = QwenImage21Pipeline.from_pretrained(
    "Qwen/Qwen-Image-2.1",
    torch_dtype=torch.bfloat16,
).to("cuda")

first = pipe(
    prompt=first_prompt,
    width=2752,
    height=1536,
    num_inference_steps=40,
    generator=torch.Generator("cuda").manual_seed(42),
).images[0]
first.convert("RGB").save("first.png")

last = pipe(
    prompt=last_edit_prompt,
    image=first,
    width=2752,
    height=1536,
    num_inference_steps=40,
    generator=torch.Generator("cuda").manual_seed(43),
).images[0]
last.convert("RGB").save("last.png")

El código combina las interfaces oficiales de generación y edición de una imagen; tú aportas first_prompt y last_edit_prompt. Usa el tamaño 16:9 documentado 2752 × 1536, 40 pasos y PNG RGB opacos. La documentación pública de H3 no especifica el tratamiento del canal alfa en esta entrega, por lo que los fotogramas opacos eliminan una variable salvo que hayas validado RGBA por separado.

Registra, como mínimo:

  • ID del modelo, versión del framework, prompt inicial y prompt de edición final;
  • ambas semillas, ancho, alto, pasos y lista de referencias;
  • SHA-256, dimensiones y modo de color de los dos archivos;
  • estabilidad de identidad, vestuario, composición, iluminación y fondo;
  • si el último fotograma muestra solo el estado final y no toda la secuencia de movimiento.

Qwen también documenta enable_model_cpu_offload() para memoria limitada. Eso demuestra que existe una vía de descarga a CPU; no establece VRAM mínima ni garantiza velocidad para este flujo combinado.

Paso 3: haz que H3 local y alojado lean las mismas entradas

No vuelvas a introducir los parámetros de memoria en dos interfaces. Guarda imágenes, prompt y ajustes de salida en un único manifiesto; una semilla, duración o reescritura distinta puede invalidar toda la comparación.

experiment_id: "qwen-h3-001"
qwen_model: "Qwen/Qwen-Image-2.1"
h3_model: "MiniMaxAI/MiniMax-H3"
h3_variant: "fl2va"
prompt_file: "prompt.txt"
first_frame: "first.png"
last_frame: "last.png"
prompt_sha256: "<sha256>"
first_frame_sha256: "<sha256>"
last_frame_sha256: "<sha256>"
duration_seconds: "<same value>"
aspect_ratio: "<same value>"
local_seed: "<record if exposed>"
hosted_seed: "<record or not_exposed>"

Las ejecuciones local y alojada deben leer este registro. Si la interfaz alojada oculta la semilla, reescribe el prompt o limita la duración, anota not_exposed o conserva el prompt reescrito. No finjas igualdad cuando no puede verificarse: las diferencias solo se interpretan después de controlar las entradas visibles.

Paso 4: haz funcionar primero H3-Base local a 768p

Acepta primero el resultado a 768p y deja el 2K para después. Que los fotogramas de Qwen sean 2K no convierte el vídeo local de H3-Base en 2K.

MiniMax publica dos checkpoints especializados. Aquí se usa MiniMax-H3 Base FL2VA, compatible con generación de audio-vídeo desde texto, primer fotograma, último fotograma o ambos en BF16. Los comandos oficiales de descarga y servicio SGLang son:

hf download MiniMaxAI/MiniMax-H3 \
  --include "FL2VA/*" \
  --local-dir MiniMax-H3

sglang serve \
  --model-path MiniMaxAI/MiniMax-H3 \
  --num-gpus 4 \
  --ulysses-degree 4 \
  --performance-mode speed \
  --host 0.0.0.0 \
  --port 30010 \
  --model-variant fl2va

El segundo comando es el ejemplo de cuatro GPU de MiniMax. No es la configuración publicada del DGX Spark de Wasserman ni un requisito mínimo. Ajústalo únicamente con la documentación del framework y registra cada cambio; no lo presentes como garantía para todas las máquinas.

Haz que SGLang pueda ver ambos fotogramas

FL2VA admite una o dos condiciones de imagen con role: "keyframe". La guía oficial de H3 para SGLang define frame_index: 0 como primer fotograma, frame_index: -1 como último y [0, -1] como el conjunto de ambos extremos. El script reproducible de MiniMax muestra el caso de un solo primer fotograma; la petición siguiente usa los mismos campos con las dos imágenes.

La URI file:// la resuelve el proceso servidor de SGLang, no el terminal que ejecuta curl. Si ambos están en el mismo host, sirven las rutas absolutas obtenidas con realpath. Si SGLang corre en un contenedor o en otra máquina, monta o copia allí los dos archivos y cambia FIRST_URI y LAST_URI por rutas que el servidor pueda leer.

Guarda el contrato del plano en prompt.txt. Para 768p totalmente local puede contener tu propio prompt estructurado. En la ruta 2K híbrida, coloca el resultado de H3-Context-IR en el mismo campo prompt y después envía la salida de H3-Base a H3-Regenerate-2K.

Envía FL2VA, espera la finalización y guarda el MP4

El script sigue el ciclo asíncrono documentado: crea la tarea con POST /v1/videos y lee .id, consulta GET /v1/videos/{id} y solo llama a GET /v1/videos/{id}/content cuando status pasa a completed. El cookbook oficial trata failed como fallo terminal; cualquier otro estado no vacío permanece en el bucle de espera.

set -euo pipefail

BASE_URL="${BASE_URL:-http://127.0.0.1:30010}"
FIRST_URI="${FIRST_URI:-file://$(realpath first.png)}"
LAST_URI="${LAST_URI:-file://$(realpath last.png)}"
PROMPT_FILE="${PROMPT_FILE:-prompt.txt}"
OUTPUT_FILE="${OUTPUT_FILE:-fl2va.mp4}"

payload=$(
  jq -n \
    --rawfile prompt "$PROMPT_FILE" \
    --arg first "$FIRST_URI" \
    --arg last "$LAST_URI" \
    '{
      model: "MiniMaxAI/MiniMax-H3",
      task: "fl2va",
      prompt: $prompt,
      seconds: 8,
      conditions: [
        {
          type: "image",
          uri: $first,
          role: "keyframe",
          frame_index: 0
        },
        {
          type: "image",
          uri: $last,
          role: "keyframe",
          frame_index: -1
        }
      ],
      target: {
        short_edge: 768,
        aspect_ratio: "auto",
        duration_seconds: 8
      },
      seed: 0
    }'
)

response=$(
  curl --fail-with-body --silent --show-error \
    --request POST \
    --url "$BASE_URL/v1/videos" \
    --header 'Content-Type: application/json' \
    --data-binary "$payload"
)

video_id=$(printf '%s\n' "$response" | jq -er '.id')
printf 'video_id=%s\n' "$video_id"

while true; do
  task_json=$(
    curl --fail-with-body --silent --show-error \
      --request GET \
      --url "$BASE_URL/v1/videos/$video_id"
  )
  status=$(printf '%s\n' "$task_json" | jq -er '.status')
  printf 'status=%s\n' "$status"

  case "$status" in
    completed)
      break
      ;;
    failed)
      printf '%s\n' "$task_json" | jq .
      exit 1
      ;;
    *)
      sleep 1
      ;;
  esac
done

curl --fail-with-body --silent --show-error --location \
  --request GET \
  --url "$BASE_URL/v1/videos/$video_id/content" \
  --output "$OUTPUT_FILE"

test -s "$OUTPUT_FILE"

if command -v ffprobe >/dev/null 2>&1; then
  ffprobe -v error \
    -show_entries stream=codec_type,codec_name,r_frame_rate,sample_rate,channels \
    -of default=noprint_wrappers=1 \
    "$OUTPUT_FILE"
fi

printf 'saved=%s\n' "$OUTPUT_FILE"

curl --fail-with-body se detiene ante una respuesta que no sea 2xx y jq -e falla si faltan .id o .status. Con failed, el script imprime el JSON completo de la tarea y sale con código distinto de cero; para considerar éxito también exige que la descarga funcione y que el MP4 no esté vacío.

Si está instalado ffprobe, el script muestra los flujos multimedia. El contrato documentado de SGLang es un MP4 con vídeo H.264 a 24 FPS y una pista AAC estéreo a 32 kHz. Si la tarea marca completed pero el archivo está vacío, no se decodifica o tiene propiedades inesperadas, no pases a la comparación alojada: revisa primero el log de SGLang, las URI visibles desde el servidor y el JSON enviado.

Los campos y endpoints proceden del script FL2VA reproducible oficial de MiniMax, del cookbook MiniMax-H3 de SGLang y de la guía de la API de vídeo de SGLang. La ruta totalmente local termina aquí con un MP4 H3-Base a 768p; el 2K completo sigue siendo la ruta híbrida descrita antes.

Paso 5: compara con H3 alojado solo cuando la cadena local sea estable

No compares calidad mientras la cadena local siga fallando. De lo contrario, no podrás separar errores de despliegue, diferencias de entrada y comportamiento del modelo. Cambia únicamente el lugar de ejecución:

  1. Sube los mismos bytes de ambos fotogramas y comprueba sus hashes.
  2. Reutiliza prompt, duración, relación, idioma e intención de audio.
  3. Registra si web/API reescribe el prompt, muestra una semilla o usa H3-Context-IR.
  4. Conserva los originales; no edites, recodifiques ni añadas música antes de comparar.
  5. Oculta las etiquetas de origen y revisa a ciegas para reducir el sesgo de “local debe ser mejor” o “de pago debe ser mejor”.

Para comparar costes, registra tu factura de API, el tiempo de ocupación de la máquina y el consumo eléctrico. Las etiquetas «local» y «web de pago» no indican por sí solas qué ruta es más barata para tu carga.

Paso 6: elige la mejor ruta para tus planos con una sola tabla

Comprueba primero si el vídeo cumple el encargo creativo y compara después tiempo y hardware. Un resultado de mayor resolución que introduce cortes repetidos puede ser la peor opción de producción.

CriterioCómo revisarloQué registrar
Fidelidad al primer fotograma¿El inicio conserva sujeto, composición y objetos, o los sustituye enseguida?Desviación y código de tiempo
Llegada al último fotograma¿Alcanza de forma natural el estado final o salta a la imagen final?Estado final y calidad de transición
Continuidad de plano único¿Aparecen cortes, teletransportes, sustituciones de escena o saltos temporales no pedidos?Tiempo del corte y capturas antes/después
Estabilidad de identidad y fondo¿Permanecen rostro, ropa, manos, utilería y geometría del fondo?Elemento afectado y duración
Trayectoria¿Sujeto y cámara siguen el orden y dirección acordados?Dirección errónea, cambio de velocidad o bloqueo
AudioSi se pidió, ¿hay pista, está sincronizada y libre de chasquidos o contenido ajeno?Propiedades, desfase y segmento anómalo
Especificación¿Duración, relación, FPS y resolución coinciden con la configuración?Metadatos reales
RecursosTiempo de pared, pico de memoria del acelerador, RAM y reintentosRegistros brutos de cada ejecución, no estimaciones
Repetibilidad¿El mismo problema reaparece al repetir la entrada controlada?Resultados repetidos y parámetros aleatorios visibles

MiniMax indica que H3 genera estéreo a 32 kHz. Las publicaciones de Wasserman no explican si el audio se activó, conservó o posprocesó. Puedes inspeccionar tu resultado, pero no citar ese caso como validación de calidad sonora.

Corrige la capa anterior en lugar de repetirlo todo

Un primer fotograma incorrecto se corrige en Qwen, un problema de continuidad en H3 y una discrepancia de resolución empieza por comprobar si elegiste 768p local o 2K híbrido. Diagnosticar por capas ahorra tiempo frente a cambiar todos los parámetros a la vez.

SíntomaRevisar primeroAcción
El primer fotograma ya es incorrectoEtapa QwenCorrige prompt, referencias y semilla; no intentes reparar una mala composición dentro de H3
Cambian identidad o fondo al finalActivo de entrega QwenEdita desde el primer fotograma, reduce cambios y reutiliza referencias estables
Aparece un corte inesperadoPrompt H3 y restriccionesExige un plano continuo, elimina lenguaje de montaje/varias escenas y repite con los mismos hashes
No se alcanza el finalDuración o plan de movimientoAcorta la cadena de acciones y define inicio–proceso–final
Audio ausente o discordanteVariante H3, cliente y contenedorConfirma checkpoint y ruta de audio-vídeo; marca como no comparables las ejecuciones sin audio equivalente
Qwen agota memoriaDespliegue de imagenPrueba el CPU offload documentado y mide la penalización; no deduzcas una VRAM mínima universal
H3 no arranca en el hardwareDespliegue H3Sigue la guía del framework; el ejemplo oficial usa cuatro GPU, sin garantía para hardware de consumo
Local se queda en 768p y 2K pide APILímite del flujoEs la arquitectura documentada, no un fallo; acepta 768p o adopta el 2K híbrido
Local y alojado divergen muchoEntradas y preprocesamientoComprueba reescritura del prompt, Context-IR, semilla, duración, relación y recodificación antes de atribuirlo al modelo

Cómo elegir H3 local o alojado para uso continuo

Decide con tu conjunto de planos, no con la mejor muestra aislada. Incluye cámara estática, acción humana, transformación de objetos, diálogo y ambiente, y conserva éxitos y fallos; separa estas medidas:

  • duración del clip, como los aproximadamente ocho segundos del caso público;
  • tiempo de generación, desde el envío hasta el archivo terminado, no revelado en ese caso;
  • especificaciones del modelo, procedentes del proveedor;
  • uso real de hardware, medido en tu sistema y no inferido por el nombre del equipo;
  • una valoración visual, válida para esa ejecución pero no convertible directamente en una tasa global de victoria.

Si los archivos no pueden salir de tu equipo, mantén 768p local como opción predeterminada. Si la entrega final debe ser 2K y aceptas API remotas, usa 2K híbrido. Si lo principal es la continuidad, revisa a ciegas H3 local y alojado sobre el mismo conjunto de planos y prioriza la ruta que supere tu tabla con mayor regularidad. El caso público demuestra que la ruta local funciona y evitó un corte en una prueba con la misma entrada; no sustituye tus repeticiones.

Comprueba estos ocho puntos antes de ejecutar

  • La ejecución se etiqueta como “768p totalmente local” o “2K híbrido”, sin mezclar términos.
  • Modelo Qwen, prompts, semillas, dimensiones y referencias están registrados para ambos fotogramas.
  • Imágenes y prompt tienen hash, y ambas ejecuciones H3 consumen las mismas entradas.
  • La ejecución local usa fl2va y se acepta primero como resultado H3-Base 768p.
  • Reescrituras y parámetros ocultos del servicio alojado se documentan con honestidad.
  • Los vídeos originales permanecen sin editar y comparten la misma rúbrica de continuidad, cortes, audio y especificación.
  • Tiempo, memoria máxima, reintentos y fallos proceden de registros.
  • Las conclusiones se limitan a muestras, hardware y fecha verificados.

Conclusión

La recomendación inicial es clara: crea localmente el primer y último fotograma con Qwen Image 2.1 y valida 768p local con MiniMax H3-Base fl2va. Cambia a H3-Context-IR → H3-Base local → H3-Regenerate-2K solo cuando el 2K sea obligatorio y puedas usar API remotas.

En cualquier ruta, fija fotogramas, prompt, duración y relación de aspecto, y compara continuidad, cortes inesperados, audio, tiempo y uso de hardware con las mismas entradas. Así una demostración vistosa se convierte en un flujo que puedes auditar, comparar y adoptar con criterio.

Referencias

Hechos verificados: 26 de septiembre de 2026.

¿Quieres optimizar tu flujo de trabajo con LLM?

Conecta modelos mediante una API, gestiona claves y controla el gasto en IA.

Empezar gratis