# DreamLite

DreamLite es un modelo de texto a imagen y edición de imágenes de ByteDance. Combina un U-Net 2D personalizado (`DreamLiteUNetModel`) con el codificador multimodal `Qwen3-VL` como codificador de prompts / instrucciones de imagen, y utiliza un VAE `AutoencoderTiny` (estilo TAESD) para la codificación y decodificación rápida de latentes.

Se exponen dos pipelines:

| Pipeline | Modos | CFG | Caso de uso |
|---|---|---|---|
| [DreamLitePipeline](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipeline) | texto a imagen **y** edición de imagen (seleccionado automáticamente según si `image` es `None`) | CFG dual de 3 ramas (`guidance_scale` en la rama de texto, `image_guidance_scale` en la rama de imagen, al estilo de InstructPix2Pix) | Máxima calidad |
| [DreamLiteMobilePipeline](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLiteMobilePipeline) | texto a imagen **y** edición de imagen (seleccionado automáticamente según si `image` es `None`) | Ninguna — destilada, un solo paso de UNet por iteración | En el dispositivo / baja latencia |

Puntos de control oficiales:

* Modelo base: [carlofkl/DreamLite-base](https://huggingface.co/carlofkl/DreamLite-base)
* Modelo móvil destilado: [carlofkl/DreamLite-mobile](https://huggingface.co/carlofkl/DreamLite-mobile)

> [!TIP]
> Ambos pipelines detectan automáticamente el modo de texto a imagen frente a edición de imagen según si se proporciona el argumento `image`. No existe una clase `Img2Img` separada.

> [!TIP]
> Al cargar una imagen de entrada para editarla, se prefiere `diffusers.utils.load_image(...)` sobre `PIL.Image.open(...)` sin procesar. `load_image` aplica una conversión a RGB y la orientación EXIF, dos aspectos que el pipeline asume. Un `Image.open` simple de una fuente RGBA / con paleta / rotada por EXIF producirá silenciosamente una condición latente diferente y degradará la calidad de la salida.

## Texto a imagen (Base)

```python
import torch
from diffusers import DreamLitePipeline

pipe = DreamLitePipeline.from_pretrained("carlofkl/DreamLite-base", revision="diffusers", dtype=torch.bfloat16)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(
    prompt="a dog running on the grass",
    negative_prompt="",
    height=1024,
    width=1024,
    num_inference_steps=28,
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]
image.save("dreamlite_t2i.png")
```

## Edición de imágenes (Base)

Pase una `image` para entrar en modo de edición. Tanto `guidance_scale` (rama de texto) como `image_guidance_scale` (rama de imagen) están activos aquí.

```python
import torch
from diffusers import DreamLitePipeline
from diffusers.utils import load_image

pipe = DreamLitePipeline.from_pretrained("carlofkl/DreamLite-base", revision="diffusers", dtype=torch.bfloat16)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

source = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")

image = pipe(
    prompt="turn the cat into a corgi",
    image=source,
    height=1024,
    width=1024,
    num_inference_steps=28,
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]
image.save("dreamlite_edit.png")
```

## Texto a imagen (móvil)

El pipeline móvil está destilado y omite por completo el CFG: una sola pasada de UNet por paso. Acepta los mismos argumentos `prompt` / `height` / `width` / `num_inference_steps`, pero **ignora** `guidance_scale` y `image_guidance_scale` si se pasan (se registra una advertencia).

```python
import torch
from diffusers import DreamLiteMobilePipeline

pipe = DreamLiteMobilePipeline.from_pretrained("carlofkl/DreamLite-mobile", revision="diffusers", dtype=torch.bfloat16)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(
    prompt="a dog running on the grass",
    height=1024,
    width=1024,
    num_inference_steps=4,
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]
image.save("dreamlite_mobile_t2i.png")
```

## Edición de imágenes (Móvil)

```python
import torch
from diffusers import DreamLiteMobilePipeline
from diffusers.utils import load_image

pipe = DreamLiteMobilePipeline.from_pretrained("carlofkl/DreamLite-mobile", revision="diffusers", dtype=torch.bfloat16)
pipe = pipe.to("cuda")  # or "mps", "xpu", "cpu"

source = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")

image = pipe(
    prompt="turn the cat into a corgi",
    image=source,
    height=1024,
    width=1024,
    num_inference_steps=4,
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]
image.save("dreamlite_mobile_edit.png")
```

## Notas y limitaciones

* Ambos pipelines fuerzan `batch_size = 1` internamente; `num_images_per_prompt` controla cuántas muestras se extraen del mismo prompt, en lugar de realizar un lote en paralelo.
* El codificador de prompts es `Qwen3-VL`, que es un modelo multimodal. Por lo tanto, cargar el pipeline completo requiere suficiente memoria de GPU tanto para la U-Net como para el codificador de texto Qwen3-VL (~4 GB + ~0.7 GB en bf16 para la versión base).
* El VAE es `AutoencoderTiny` y expone `encoder_block_out_channels`; `vae_scale_factor` se deriva de él en el momento de la inicialización de la pipeline.

## DreamLitePipeline[[diffusers.DreamLitePipeline]]

#### diffusers.DreamLitePipeline[[diffusers.DreamLitePipeline]]

```python
diffusers.DreamLitePipeline(text_encoder: Qwen3VLForConditionalGeneration, tokenizer: AutoTokenizer, processor: Qwen3VLProcessor, vae: AutoencoderTiny, unet: DreamLiteUNetModel, scheduler: FlowMatchEulerDiscreteScheduler)
```

[Fuente](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/dreamlite/pipeline_dreamlite.py#L155)

Pipeline DreamLite para la generación de imágenes a partir de texto y la edición de imágenes basada en instrucciones.

El mismo pipeline admite ambos modos; el modo de operación se detecta automáticamente a partir de las entradas:

- `image is None` -> texto a imagen (CFG único en el texto).
- `image is not None` -> imagen a imagen / edición por instrucción (CFG dual: texto + imagen).

Componentes: text_encoder ([*~transformers.Qwen3VLForConditionalGeneration*]): codificador de texto/visión multimodal utilizado para generar incrustaciones de condicionamiento. tokenizer ([*~transformers.AutoTokenizer*]): tokenizador para el modo solo texto (generate). processor ([*~transformers.Qwen3VLProcessor*]): procesador multimodal para el modo de edición (plantilla de texto + imagen). vae ([*~diffusers.AutoencoderTiny*]): VAE diminuto apto para móviles para codificar/decodificar latentes. unet ([*~diffusers.DreamLiteUNetModel*]): DreamLite UNet (GQA + qk_norm + convoluciones separables en profundidad). scheduler ([*~diffusers.FlowMatchEulerDiscreteScheduler*]): planificador Euler de flow-matching con desplazamiento dinámico.

Nota: `batch_size` se fuerza actualmente a `1`; `num_images_per_prompt` está soportado.

#### __call__[[diffusers.DreamLitePipeline.__call__]]

```python
__call__(prompt: typing.Optional[str] = None, negative_prompt: typing.Optional[str] = None, image: typing.Optional[PIL.Image.Image] = None, height: typing.Optional[int] = None, width: typing.Optional[int] = None, guidance_scale: float = 3.5, image_guidance_scale: float = 1.5, num_inference_steps: int = 30, sigmas: typing.Optional[typing.List[float]] = None, num_images_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, output_type: typing.Optional[str] = 'pil', return_dict: bool = True, max_sequence_length: int = 200, text_pad_embedding: typing.Optional[torch.Tensor] = None)
```

[Fuente](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/dreamlite/pipeline_dreamlite.py#L388)

**Parámetros:**

prompt : Prompt de texto.

negative_prompt : Prompt de texto negativo (por defecto, cadena vacía).

image : Imagen de entrada opcional. Si se proporciona, la canalización se ejecuta en modo **edición / imagen a imagen** con guía libre de clasificador dual; de lo contrario, se ejecuta en modo **texto a imagen**.

height : Resolución de salida (altura). El valor predeterminado es `default_sample_size * vae_scale_factor` (1024). El mismo valor predeterminado se aplica tanto en T2I como en I2I; pase un valor explícito para sobrescribirlo.

width : Resolución de salida (ancho). El valor predeterminado es `default_sample_size * vae_scale_factor` (1024). El mismo valor predeterminado se aplica tanto en T2I como en I2I; pase un valor explícito para sobrescribirlo.

guidance_scale : Escala CFG en la rama de texto (ambos modos).

image_guidance_scale : Escala CFG adicional en la rama de imagen (solo en modo de edición).

num_inference_steps : Número de pasos de desruido.

sigmas : Sigmas de FlowMatch explícitos opcionales; por defecto, se utiliza un linspace uniforme.

num_images_per_prompt : Imágenes de salida por indicación (nota: `batch_size` se fuerza a 1).

generator : Generador(es) aleatorio(s).

output_type : `"pil"`, `"np"`, `"pt"` o `"latent"`.

return_dict : Si es True, devuelve un [DreamLitePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipelineOutput); en caso contrario, una tupla `(images,)`.

max_sequence_length : Número máximo de tokens del prompt del usuario que se conservan después de eliminar el prefijo de la plantilla de chat. Solo se aplica al modo `generate` (el modo `edit` utiliza el relleno nativo del procesador multimodal).

text_pad_embedding : Embedding aprendido opcional para posiciones enmascaradas.

**Devuelve:**

[DreamLitePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipelineOutput) o `tuple`.

Ejecuta el pipeline DreamLite.

## DreamLiteMobilePipeline[[diffusers.DreamLiteMobilePipeline]]

#### diffusers.DreamLiteMobilePipeline[[diffusers.DreamLiteMobilePipeline]]

```python
diffusers.DreamLiteMobilePipeline(text_encoder: Qwen3VLForConditionalGeneration, tokenizer: AutoTokenizer, processor: Qwen3VLProcessor, vae: AutoencoderTiny, unet: DreamLiteUNetModel, scheduler: FlowMatchEulerDiscreteScheduler)
```

[Fuente](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/dreamlite/pipeline_dreamlite_mobile.py#L156)

Pipeline **Mobile** de DreamLite: una variante destilada y sin guía libre de clasificador de [DreamLitePipeline](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipeline) para inferencia rápida en pocos pasos (4 pasos por defecto).

El modo de operación se detecta automáticamente a partir de las entradas (igual que en la pipeline base):

- `image is None` -> texto a imagen.
- `image is not None` -> imagen a imagen / edición por instrucción.

Dado que la guía sin clasificador se **elimina mediante destilación**, `guidance_scale` y `image_guidance_scale` se aceptan por compatibilidad de API con [DreamLitePipeline](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipeline), pero se ignoran en el bucle de desruido. `negative_prompt` está ausente intencionalmente.

Components (idéntico a la pipeline base): text_encoder ([*~transformers.Qwen3VLForConditionalGeneration*]): Codificador multimodal de texto/visión. tokenizer ([*~transformers.AutoTokenizer*]): Tokenizador para el modo solo texto (generate). processor ([*~transformers.Qwen3VLProcessor*]): Procesador multimodal para el modo de edición. vae ([*~diffusers.AutoencoderTiny*]): VAE diminuto apto para móviles. unet ([*~diffusers.DreamLiteUNetModel*]): DreamLite UNet. scheduler ([*~diffusers.FlowMatchEulerDiscreteScheduler*]): Programador de Euler de flow-matching con desplazamiento dinámico.

Nota: `batch_size` se fuerza actualmente a `1`; `num_images_per_prompt` está soportado.

#### __call__[[diffusers.DreamLiteMobilePipeline.__call__]]

```python
__call__(prompt: typing.Union[str, typing.List[str]] = None, image: typing.Optional[PIL.Image.Image] = None, height: typing.Optional[int] = None, width: typing.Optional[int] = None, num_inference_steps: int = 4, guidance_scale: typing.Optional[float] = None, image_guidance_scale: typing.Optional[float] = None, sigmas: typing.Optional[typing.List[float]] = None, num_images_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, output_type: typing.Optional[str] = 'pil', return_dict: bool = True, max_sequence_length: int = 200, text_pad_embedding: typing.Optional[torch.Tensor] = None)
```

[Fuente](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/dreamlite/pipeline_dreamlite_mobile.py#L384)

**Parámetros:**

prompt : Prompt de texto.

image : Imagen de entrada opcional. Si se proporciona, se ejecuta en modo **edición / imagen a imagen**; de lo contrario, se ejecuta en modo **texto a imagen**.

height : Resolución de salida (altura). El valor predeterminado es `default_sample_size * vae_scale_factor` (1024).

width : Resolución de salida (ancho). El valor predeterminado es `default_sample_size * vae_scale_factor` (1024).

num_inference_steps : Número de pasos de desruido. El valor predeterminado es **4** (destilado).

guidance_scale : Aceptado por paridad de API con [DreamLitePipeline](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipeline); **ignorado** porque CFG se destiló.

image_guidance_scale : Aceptado por paridad de API con [DreamLitePipeline](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipeline); **ignorado** porque CFG se destiló.

sigmas : Sigmas de FlowMatch explícitos opcionales; por defecto, se utiliza un linspace uniforme.

num_images_per_prompt : Imágenes de salida por indicación (nota: `batch_size` se fuerza a 1).

generator : Generador(es) aleatorio(s).

output_type : `"pil"`, `"np"`, `"pt"` o `"latent"`.

return_dict : Si es True, devuelve un [DreamLitePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipelineOutput); en caso contrario, `(images,)`.

max_sequence_length : Número máximo de tokens del prompt del usuario que se conservan después de eliminar el prefijo de la plantilla de chat. Solo se aplica al modo `generate` (el modo `edit` utiliza el relleno nativo del procesador multimodal).

text_pad_embedding : Embedding aprendido opcional para posiciones enmascaradas.

**Devuelve:**

[DreamLitePipelineOutput](/docs/diffusers/v0.43.0/es/api/pipelines/dreamlite#diffusers.DreamLitePipelineOutput) o `tuple`.

Ejecuta el pipeline de DreamLite Mobile destilado.

## DreamLitePipelineOutput[[diffusers.DreamLitePipelineOutput]]

#### diffusers.DreamLitePipelineOutput[[diffusers.DreamLitePipelineOutput]]

```python
diffusers.DreamLitePipelineOutput(images: typing.Union[typing.List[PIL.Image.Image], numpy.ndarray])
```

[Fuente](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/dreamlite/pipeline_output.py#L25)

**Parámetros:**

images (`List[PIL.Image.Image]` o `np.ndarray`) : Lista de imágenes PIL desruidas de longitud `batch_size` o matriz NumPy de forma `(batch_size, height, width, num_channels)`. Las imágenes PIL o la matriz NumPy presentan las imágenes desruidas del pipeline de difusión.

Clase de salida para las tuberías de DreamLite.

