ManzGPU

Crea y edita imágenes

Hype-Generator 3000™: It's a game-changer

Aprende a utilizar stable-diffusion.cpp con modelos de creación de imágenes con capacidades de edición como Qwen-Image-Edit.

1. Introducción

En las guías anteriores hemos visto como crear imágenes desde cero mediante texto (T2I) y como transformarlas añadiendo ruido sobre una imagen de base (I2I). Ahora vamos a dar un paso más y utilizaremos modelos de edición, capaces de modificar una imagen siguiendo instrucciones en lenguaje natural.

Generación de imagen con capacidades de edición

A diferencia del img2img clásico, donde el modelo regenera la imagen completa según el valor de --strength, los modelos de edición «entienden» la imagen de referencia y aplican únicamente el cambio solicitado, conservando intacto el resto: la identidad de los personajes, el fondo, la iluminación, el estilo, etc.

Imagen original Prompt Model LLM VAE Imagen editada

Esto permite hacer ediciones tan espectaculares como «cámbiale la chaqueta por un abrigo rojo», «haz que el personaje toque la guitarra», «colócalo de perfil» o «elimina el objeto del fondo», sin necesidad de máscaras, o ediciones y retoques manuales mediante un software.

2. Modelos de edición

Actualmente, el referente de los modelos de edición abiertos es Qwen Image Edit de Alibaba. Sin embargo, existen varios modelos con capacidades de edición como Mage Flow, Boogu Edit o LongCat Image Edit, entre otros.

Al igual que ocurre con otros modelos modernos, sus componentes se encuentran en ficheros separados y hay que indicarlos para hacerlo funcionar:

ComponenteFicheroFunción
Modelo de difusión qwen-image-edit-2511.gguf Genera y edita la imagen
VAE qwen_image_vae.safetensors Codifica/decodifica la imagen
LLM Qwen2.5-VL-7B-Instruct.gguf Traduce la instrucción y entiende la escena
Proyector de visión mmproj-BF16.gguf Entiende la imagen y la conecta con el LLM

La gran diferencia respecto a los modelos de generación tradicionales es que el LLM es multimodal (VL, Vision-Language): además de traducir el prompt, recibe a través del proyector (--llm_vision) la imagen de referencia, por lo que puede ver la imagen y seguir órdenes concretas sobre los elementos que la componen.

En nuestro caso, vamos a utilizar:

  • Qwen Image Edit 2511 → 41GB, cuantizado a Q3_K_M9.9GB
  • Qwen Image Vae, sin cuantizar → 0.2GB
  • Qwen 2.5 7B con vision → 15.2GB, cuantizado a Q4_04.4GB
  • Proyector (mmproj), sin cuatizar → 1.3GB

En total 15.8GB. Esto hace que entre justo en 16GB, pero que la mayor parte de la inferencia se haga a máxima velocidad. En caso de no entrar, tendría que usarse RAM e irá notablemente más lento, pero la mayor parte funcionará en VRAM.

Recuerda que los ficheros .gguf son versiones cuantizadas del modelo original. Cuanto más agresiva es la cuantización, menos memoria necesitan, pero pierden algo de calidad respecto al modelo sin cuantizar. Si la generación te va muy lenta, tienes dos vías posibles: ser más agresivo con la cuantización o aumentar a hardware más potente.

3. Uso básico

Para editar imágenes utilizaremos sd-cli, que explicamos como instalarlo en la primera guía de la serie de stable-diffusion.cpp. Para editar una imagen con sd-cli, indicamos la imagen original con el parámetro -r y describimos la edición deseada en el prompt:

sd-cli \
  --diffusion-model qwen-image-edit-2511-Q3_K_M.gguf \
  --vae qwen_image_vae.safetensors \
  --llm Qwen2.5-VL-7B-Instruct-Q4_0.gguf \
  --llm_vision mmproj-BF16.gguf \
  --model-args qwen_image_zero_cond_t \
  -r original.jpg \
  -p "Preserve face-identity of character of Picture. Change to playing guitar, full body. Convert to clay polish style" \
  -W 1024 \
  -H 1024 \
  --offload-to-cpu \
  --diffusion-fa \
  --max-vram 15 \
  --mmap \
  --cfg-scale 2.5 \
  --steps 20 \
  --sampling-method euler \
  --scheduler beta \
  --seed -1 \
  -o output.png

Recuerda no olvidarte de parámetros como --offload-to-cpu, --diffusion-fa y --mmap para optimizar el rendimiento y evitar que la generación se demore demasiado. En mi caso también establezco el parámetro --max-vram para indicar que no exceda el uso de VRAM (tengo una GPU de 16GB, pongo como máximo 15GB).

Además, observa que en este caso no necesitamos el --strength que usamos en img2img. El modelo decide por sí mismo qué modificar y qué conservar. Eso sí, conviene escribir el prompt pensando en ambos aspectos: qué cambiar y qué mantener:

Change the jacket to a red coat, preserve the face identity, the background and the lighting

Consejo: Las instrucciones funcionan mejor en inglés y deben ser directas y sin ambigüedades, aunque muchas veces no suele haber problema si las escribes en español. Si el resultado no conserva algún detalle importante, indícalo explícitamente con frases como preserve the face-identity o keep the background unchanged.

4. Usando LoRAs

Los LoRA (Low-Rank Adapters) son pequeños complementos que amplían las capacidades de un modelo base sin necesidad de sustituirlo. Para utilizarlos, colocamos los ficheros .safetensors en una carpeta e indicamos su ruta con --lora-model-dir.

Más tarde, los invocamos dentro del prompt con la sintaxis <lora:nombre:peso>:

..., <lora:qwen-image-edit-2511-multiple-angles-lora:1>,
     <lora:Qwen-Image-Lightning-8steps-V2.0:1>

Algunos LoRAs especialmente interesantes para Qwen Image Edit son:

LoRAUtilidad
multiple-angles-lora Cambia el ángulo de cámara (de frente, perfil, cuerpo completo...) manteniendo la identidad.
lightning-8steps Acelera la generación usando solamente ~8-10 pasos (steps).

El peso (valor numérico final) indica cuánta fuerza tiene el LoRA, donde 1.0 suele ser su intensidad estándar.

5. Ejemplo completo

Vamos a juntarlo todo. En este ejemplo editamos la fotografía original.jpg, donde aparezco en mis vacaciones en Japón. Vamos a editar la imagen para que el personaje (yo) aparezca tocando la guitarra, conservando su identidad facial, eliminando el fondo y cambiando el estilo:

sd-cli.exe \
  --diffusion-model qwen-image-edit-2511-Q3_K_M.gguf \
  --vae qwen_image_vae.safetensors \
  --llm Qwen2.5-VL-7B-Instruct-Q4_0.gguf \
  --llm_vision mmproj-BF16.gguf \
  --lora-model-dir loras \
  --model-args qwen_image_zero_cond_t \
  --offload-to-cpu \
  -t 6 \
  --diffusion-fa \
  --max-vram 15 \
  --mmap \
  --cfg-scale 2.5 \
  --flow-shift 3 \
  --steps 8 \
  -W 1024 \
  -H 1024 \
  --sampling-method euler \
  --scheduler beta \
  -v \
  -r original.jpg \
  --seed -1 \
  --negative-prompt "text, deformed, bad quality, malformed" \
  --prompt "<lora:qwen-image-edit-2511-multiple-angles-lora:1>, <lora:Qwen-Image-Lightning-8steps-V2.0:1>, Preserve face-identity of character of Picture and change to playing guitar, full body" \
  -o output.png

Analicemos las partes más importantes del comando:

ParámetroFunción
--lora-model-dir Buscará los LoRA que invocamos en el prompt en la carpeta loras/.
--offload-to-cpu Mueve componentes a CPU cuando no se necesitan, ahorrando VRAM.
-t 6 Número de hilos de CPU a utilizar.
--diffusion-fa Activa flash attention en el modelo de difusión para optimizar VRAM.
--max-vram 15 Limita el uso de VRAM (en GB) para evitar desbordamientos.
--mmap Mapea el modelo en memoria, acelerando la carga y reduciendo RAM.
--flow-shift 3 Reparte el ruido entre pasos. Valores bajos favorecen la coherencia en edición.
--steps 20 Pasos de refinado. Con el LoRA Lightning bastan pocos, ~8-10 pasos.

Fíjate también en cómo está construido el prompt: primero indicamos qué debe conservarse (preserve face-identity), después qué debe cambiarse (playing guitar, full body) y por último los LoRA que vamos a utilizar. Esta estructura de conservar → cambiar → activar da muy buenos resultados.

Este es el resultado aplicando tres estilos distintos sobre la misma fotografía. Puedes cambiar entre ellos con el deslizador o pulsando directamente sobre cada etiqueta:

6. Consejos y buenas prácticas

Sigue los siguientes consejos para conseguir buena calidad en tus ediciones locales de imagen:

ConsejoDetalle
Instrucciones directas Un prompt claro por edición. Si quieres varios cambios, sé explícito con cada uno de ellos.
Indica qué conservar Si algún detalle es importante (rostro, tatuajes, ropa...), menciónalo con preserve o keep.
Negative prompt Usa --negative-prompt para evitar artefactos típicos: texto deformado, mala calidad, etc.
Resolución Mantén en -W y -H unas dimensiones similares a la imagen original para no distorsionarla.
Misma semilla Usa la misma semilla con --seed para comparar variaciones de la misma edición.
LoRA Lightning Si tu GPU va justa, el LoRA Lightning te permite bajar a --steps 10 y ganar mucho tiempo.

Recuerda: Si quieres profundizar más en los parámetros generales (CFG, steps, sampling, scheduler), consulta la guía principal de StableDiffusion.cpp.