Animaciones con IA usando ComfyUI y AnimateDiff en GPUs de 6GB

Animaciones con IA usando ComfyUI y AnimateDiff en GPUs de 6GB

Esta guía detalla cómo configurar un pipeline completo para generar animaciones de personajes con IA, utilizando ComfyUI, AnimateDiff y LoRA entrenados con Kohya_ss, todo ejecutable en tarjetas gráficas con solo 6GB de VRAM bajo un entorno WSL/Ubuntu. Se cubren desde las instalaciones iniciales hasta la resolución de problemas comunes como distorsiones visuales y falta de coherencia entre fotogramas.

Preparación del entorno

Se requiere Ubuntu en WSL con Python 3.10 o superior. Con 6GB de memoria de video, la arquitectura SDXL queda fuera de alcance; Stable Diffusion 1.5 es la única opción viable.

Instalación de ComfyUI

cd ~
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
pip install -r requirements.txt --break-system-packages

El flag --break-system-packages es necesario en WSL donde no se utiliza un entorno virtual aislado, permitiendo sortear la restricción PEP 668.

Complemento ComfyUI Manager

Este gestor de extensiones es imprescindible para administrar plugins:

cd ~/ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

Extensiones de AnimateDiff

Tres complementos son obligatorios para el funcionamiento completo:

cd ~/ComfyUI/custom_nodes

# Motor principal de animación
git clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved.git

# Manejo de entrada y salida de vídeo
git clone https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite.git

# Nodos de preprocesamiento para ControlNet (pose, profundidad)
git clone https://github.com/Fannovel16/comfyui_controlnet_aux.git
pip install -r comfyui_controlnet_aux/requirements.txt --break-system-packages

Descarga de modelos

Modelo base SD 1.5

La versión recortada (pruned-emaonly) ocupa aproximadamente 4GB, la mitad que la versión completa, sin pérdida apreciable de calidad:

cd ~/ComfyUI/models/checkpoints
wget https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors

Modelo de movimiento AnimateDiff

⚠️ Advertencia importante: al descargar desde hf-mirror, el archivo puede fragmentarse en dos: uno incompleto de ~142MB y otro completo de ~1.7GB con extensión .ckpt.1.

cd ~/ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models
wget https://hf-mirror.com/guoyww/animatediff/resolve/main/mm_sd_v15_v2.ckpt

Para verificar y corregir:

ls -lh mm_sd_v15_v2.ckpt*

# Si el archivo .ckpt pesa solo 142MB, reemplazarlo:
mv mm_sd_v15_v2.ckpt mm_sd_v15_v2.ckpt.bak
mv mm_sd_v15_v2.ckpt.1 mm_sd_v15_v2.ckpt

Entrenamiento de LoRA con Kohya_ss

Un LoRA personalizado garantiza que el personaje mantenga consistencia visual a lo largo de todos los fotogramas.

Configuración de Kohya_ss

cd ~
git clone https://github.com/bmaltais/kohya_ss.git
cd kohya_ss
./setup.sh

Acceder a la interfaz web en http://127.0.0.1:7860.

Parámetros de entrenamiento

Sección Parámetro Valor recomendado
Dreambooth/LoRA Tipo de entrenamiento LoRA
Carpetas Directorio de imágenes Tu carpeta de datos de entrenamiento
Carpetas Directorio de salida ~/mis_loras_output/
Carpetas Directorio de modelos base ~/ComfyUI/models/checkpoints/
Parámetros básicos Tipo de LoRA Standard
Parámetros básicos Épocas 10
Parámetros avanzados Rango de red 32

Prepara entre 10 y 15 fotografías del personaje con distintos ángulos e iluminaciones. El archivo resultante (mi_personaje.safetensors) debe colocarse en ~/ComfyUI/models/loras/.

Construcción del flujo de trabajo en ComfyUI

Ejecutar ComfyUI:

cd ~/ComfyUI
python main.py --listen 0.0.0.0 --port 8188

En el navegador, abrir http://localhost:8188 y construir el grafo nodal paso a paso.

Fase 1: Carga del checkpoint y LoRA

  • Añadir nodo loaders → Load Checkpoint y seleccionar v1-5-pruned-emaonly.safetensors
  • Añadir nodo loaders → Load LoRA:
    • Conectar la salida MODEL del Checkpoint a la entrada model del LoRA
    • Conectar la salida CLIP del Checkpoint a la entrada clip del LoRA
    • Seleccionar mi_personaje.safetensors y fijar strength_model en 0.8

Fase 2: Codificación de texto CLIP

Insertar dos nodos conditioning → CLIP Text Encode, ambos alimentados desde la salida CLIP del LoRA.

Prompt positivo:

1girl, a girl sitting at desk in dark office at night, computer screen light on face, short black hair, white shirt, tired expression, cinematic lighting, solo

Prompt negativo:

long hair, blonde, curly hair, 2girls, multiple people, ugly, deformed, blurry, low quality

Fase 3: Espacio latente

Usar AnimateDiff → ADE_EmptyLatentImageLarge:

  • width: 512
  • height: 512
  • batch_size: 24 (equivalente a 3 segundos a 8fps)

Fase 4: Carga del modelo de movimiento

Conectar AnimateDiff → ADE_AnimateDiffLoaderGen1:

  • model procede de la salida del nodo LoRA
  • model_name: mm_sd_v15_v2.safetensors
  • beta_schedule: autoselect

Fase 5: Muestreador

El nodo sampling → KSampler actúa como eje central del pipeline:

Origen de conexión Entrada del KSampler
AnimateDiff Loader → MODEL model
CLIP positivo → CONDITIONING positive
CLIP negativo → CONDITIONING negative
Latente vacío → LATENT latent_image

Valores: seed=randomize, steps=20, cfg=7, sampler=euler, scheduler=simple, denoise=1

Fase 6: Decodificación y exportación

  • vae → VAE Decode: conectar la salida LATENT del KSampler a samples y la salida VAE del checkpoint a vae
  • VideoHelperSuite → VHS VideoCombine: conectar IMAGE del VAE Decode a images
    • frame_rate: 8
    • format: image/gif o video/h264-mp4
    • loop_count: 0
    • save_output: activado
  • image → Preview Image: conectar la salida IMAGE del VideoCombine para vista previa

Pulsar Ctrl + Enter para iniciar la generación. Los archivos se guardan en ~/ComfyUI/output/.

Para enviar la salida directamente al escritorio de Windows desde WSL:

mkdir -p /mnt/c/Users/Usuario/Desktop/SalidaComfyUI
rm -rf ~/ComfyUI/output
ln -s /mnt/c/Users/Usuario/Desktop/SalidaComfyUI ~/ComfyUI/output

Resolución de problemas frecuentes

Archivo del modelo de movimiento incompleto

Síntoma: error al cargar el modelo o generación de fotogramas totalmente negros/ruidosos.

Causa: descarga interrumpida que deja un archivo parcial de ~142MB. El archivo completo se guarda con extensión .ckpt.1.

Solución: inspeccionar el tamaño con ls -lh; si pesa menos de 1GB, eliminarlo y renombrar el archivo .ckpt.1 a .ckpt.

Transiciones bruscas entre fotogramas

Síntoma: deformaciones del personaje y efectos de "derrretimiento" entre frames.

Causa: la ventana de contexto por defecto es demasiado reducida para mantener continuidad de movimiento.

Solución: añadir el nodo AnimateDiff → ADE_ContextOptions:

  • context_length: 16
  • context_stride: 1
  • context_overlap: 4

Conectar su salida CONTEXT_OPTIONS a la entrada correspondiente del AnimateDiff Loader. Esto fuerza al modelo a procesar ventanas de 16 frames con 4 fotogramas de traslape, incrementando notablemente la coherencia temporal.

Personaje inestable a pesar del LoRA

Síntoma: el rostro varía entre fotogramas, especialmente en movimientos amplios.

Causa: solo se configuró strength_model pero no strength_clip. El parámetro CLIP controla cuánto enfluye el LoRA sobre la interpretación del texto; si es bajo, el prompt genérico ahoga las características del personaje.

Solución: igualar ambos valores en el nodo Load LoRA:

strength_model: 0.8
strength_clip: 0.8

Si persiste, reducir la intensidad del movimiento añadiendo AnimateDiff → ADE_AnimateDiffSettings con motion_scale: 0.7 (conectar a la entrada ad_settings del Loader). Valores entre 0.5 y 1.0 permiten equilibrar dinamismo y estabilidad.

Etiquetas: ComfyUI AnimateDiff StableDiffusion1.5 LoRA Kohya_ss

Publicado el 7-14 19:40