# DreamLite

DreamLite est un modèle de génération d’images à partir de texte et d’édition d’images de ByteDance. Il associe un U-Net 2D sur mesure (`DreamLiteUNetModel`) à l’encodeur multimodal `Qwen3-VL` en tant qu’encodeur de prompt / d’instruction d’image, et utilise un VAE `AutoencoderTiny` (de type TAESD) pour un encodage/décodage latent rapide.

Deux pipelines sont exposés :

| Pipeline | Modes | CFG | Cas d'usage |
|---|---|---|---|
| [DreamLitePipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipeline) | text-to-image **et** édition d'image (sélection automatique selon que `image` est `None`) | CFG double à 3 branches (`guidance_scale` sur la branche texte, `image_guidance_scale` sur la branche image, à la InstructPix2Pix) | Qualité maximale |
| [DreamLiteMobilePipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLiteMobilePipeline) | text-to-image **et** édition d'image (sélection automatique selon que `image` est `None`) | Aucun — distillé, un seul passage avant UNet par étape | Sur l'appareil / faible latence |

Points de contrôle officiels :

* Modèle de base : [carlofkl/DreamLite-base](https://huggingface.co/carlofkl/DreamLite-base)
* Modèle mobile distillé : [carlofkl/DreamLite-mobile](https://huggingface.co/carlofkl/DreamLite-mobile)

> [!TIP]
> Les deux pipelines détectent automatiquement le mode texte-vers-image ou édition d'image en fonction de la présence de l'argument `image`. Il n'existe pas de classe `Img2Img` distincte.

> [!TIP]
> Lors du chargement d'une image d'entrée pour l'édition, privilégiez `diffusers.utils.load_image(...)` par rapport à `PIL.Image.open(...)` brut. `load_image` impose une conversion en RGB et applique l'orientation EXIF, deux éléments que le pipeline suppose. Un simple `Image.open` d'une source RGBA / palette / avec rotation EXIF produira silencieusement un conditionnement latent différent et dégradera la qualité de la sortie.

## Texte vers image (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")
```

## Édition d'images (Base)

Passez une `image` pour entrer en mode édition. Les deux paramètres `guidance_scale` (branche texte) et `image_guidance_scale` (branche image) sont actifs ici.

```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")
```

## Texte vers image (Mobile)

Le pipeline mobile est distillé et ignore entièrement le CFG — un seul passage avant de UNet par étape. Il accepte les mêmes arguments `prompt` / `height` / `width` / `num_inference_steps`, mais **ignore** `guidance_scale` et `image_guidance_scale` s'ils sont passés (un avertissement est journalisé).

```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")
```

## Édition d'images (Mobile)

```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")
```

## Notes et limitations

* Les deux pipelines imposent `batch_size = 1` en interne ; `num_images_per_prompt` contrôle le nombre d'échantillons tirés d'un même prompt, plutôt que le lot parallèle.
* L'encodeur de prompt est `Qwen3-VL`, un modèle multimodal. Le chargement du pipeline complet nécessite donc une mémoire GPU suffisante pour le U-Net et l'encodeur de texte Qwen3-VL (~4 Go + ~0,7 Go en bf16 pour la version de base).
* Le VAE est `AutoencoderTiny` et expose `encoder_block_out_channels` ; `vae_scale_factor` est dérivé de celui-ci lors de l’initialisation du pipeline.

## DreamLitePipeline[[diffusers.DreamLitePipeline]]

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

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

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

Pipeline DreamLite pour la génération d'images à partir de texte et l'édition d'images basée sur des instructions.

Le même pipeline prend en charge les deux modes ; le mode de fonctionnement est détecté automatiquement à partir des entrées :

- `image is None` -> texte-vers-image (CFG unique sur le texte).
- `image is not None` -> image-versus-image / édition par instruction (CFG double : texte + image).

Composants : text_encoder ([*~transformers.Qwen3VLForConditionalGeneration*]) : encodeur texte/vision multimodal utilisé pour générer les embeddings de conditionnement. tokenizer ([*~transformers.AutoTokenizer*]) : tokeniseur pour le mode texte uniquement (generate). processor ([*~transformers.Qwen3VLProcessor*]) : processeur multimodal pour le mode édition (modèle texte + image). vae ([*~diffusers.AutoencoderTiny*]) : petit VAE adapté aux mobiles pour l'encodage/décodage latent. unet ([*~diffusers.DreamLiteUNetModel*]) : UNet DreamLite (GQA + qk_norm + convolutions séparables en profondeur). scheduler ([*~diffusers.FlowMatchEulerDiscreteScheduler*]) : planificateur Euler de flow-matching avec décalage dynamique.

Note : `batch_size` est actuellement forcé à `1` ; `num_images_per_prompt` est pris en charge.

#### __appel__[[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)
```

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

**Paramètres :**

prompt : Invite de texte.

negative_prompt : Prompt de texte négatif (valeur par défaut : chaîne vide).

image : Image d'entrée facultative. Si fournie, le pipeline s'exécute en mode **édition / image-vers-image** avec un guidage sans classifieur double ; sinon, il s'exécute en mode **texte-vers-image**.

height : Résolution de sortie (hauteur). La valeur par défaut est `default_sample_size * vae_scale_factor` (1024). La même valeur par défaut s'applique à la fois pour T2I et I2I ; passez une valeur explicite pour l'écraser.

width : Résolution de sortie (largeur). La valeur par défaut est `default_sample_size * vae_scale_factor` (1024). La même valeur par défaut s'applique à la fois pour T2I et I2I ; passez une valeur explicite pour l'écraser.

guidance_scale : échelle CFG sur la branche texte (les deux modes).

image_guidance_scale : Échelle CFG supplémentaire sur la branche image (mode édition uniquement).

num_inference_steps : Nombre d'étapes de débruitage.

sigmas : Sigmas FlowMatch explicites facultatifs ; par défaut, un linspace uniforme est utilisé.

num_images_per_prompt : Images de sortie par invite (remarque : `batch_size` est forcé à 1).

generator : Générateur(s) aléatoire(s).

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

return_dict : Si True, renvoie un [DreamLitePipelineOutput](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipelineOutput) ; sinon, un tuple `(images,)`.

max_sequence_length : Nombre maximal de jetons de l'invite utilisateur conservés après suppression du préfixe du modèle de discussion. S'applique uniquement au mode `generate` (le mode `edit` utilise le rembourrage natif du processeur multimodal).

text_pad_embedding : Embedding appris optionnel pour les positions masquées.

**Retourne :**

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

Exécutez le 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)
```

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

Pipeline **Mobile** de DreamLite : une variante distillée, sans guidance sans classifieur, de [DreamLitePipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipeline) pour une inférence rapide en peu d'étapes (4 étapes par défaut).

Le mode de fonctionnement est détecté automatiquement à partir des entrées (comme pour le pipeline de base) :

- `image is None` -> texte-vers-image.
- `image is not None` -> image-to-image / édition par instruction.

Étant donné que le guidage sans classifieur est **distillé**, `guidance_scale` et `image_guidance_scale` sont acceptés pour la parité de l'API avec [DreamLitePipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipeline) mais sont ignorés dans la boucle de débruitage. `negative_prompt` est intentionnellement absent.

Components (identique au pipeline de base) : text_encoder ([*~transformers.Qwen3VLForConditionalGeneration*]) : encodeur texte/vision multimodal. tokenizer ([*~transformers.AutoTokenizer*]) : tokenizer pour le mode texte uniquement (generate). processor ([*~transformers.Qwen3VLProcessor*]) : processeur multimodal pour le mode édition. vae ([*~diffusers.AutoencoderTiny*]) : VAE miniature adapté aux mobiles. unet ([*~diffusers.DreamLiteUNetModel*]) : UNet DreamLite. scheduler ([*~diffusers.FlowMatchEulerDiscreteScheduler*]) : planificateur Euler de flow-matching avec décalage dynamique.

Note : `batch_size` est actuellement forcé à `1` ; `num_images_per_prompt` est pris en charge.

#### __appel__[[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)
```

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

**Paramètres :**

prompt : Invite de texte.

image : Image d'entrée facultative. Si fournie, exécute en mode **édition / image-vers-image** ; sinon, exécute en mode **texte-vers-image**.

height : Résolution de sortie (hauteur). Par défaut, `default_sample_size * vae_scale_factor` (1024).

width : Résolution de sortie (largeur). Par défaut, `default_sample_size * vae_scale_factor` (1024).

num_inference_steps : Nombre d'étapes de débruitage. Valeur par défaut : **4** (distillé).

guidance_scale : Accepté pour la parité de l'API avec [DreamLitePipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipeline) ; **ignoré** car le CFG a été distillé.

image_guidance_scale : Accepté pour la parité de l'API avec [DreamLitePipeline](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipeline) ; **ignoré** car le CFG a été distillé.

sigmas : Sigmas FlowMatch explicites facultatifs ; par défaut, un linspace uniforme est utilisé.

num_images_per_prompt : Images de sortie par invite (remarque : `batch_size` est forcé à 1).

generator : Générateur(s) aléatoire(s).

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

return_dict : Si True, renvoie un [DreamLitePipelineOutput](/docs/diffusers/v0.43.0/fr/api/pipelines/dreamlite#diffusers.DreamLitePipelineOutput) ; sinon `(images,)`.

max_sequence_length : Nombre maximal de jetons de l'invite utilisateur conservés après suppression du préfixe du modèle de discussion. S'applique uniquement au mode `generate` (le mode `edit` utilise le rembourrage natif du processeur multimodal).

text_pad_embedding : Embedding appris optionnel pour les positions masquées.

**Retourne :**

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

Exécutez le pipeline DreamLite Mobile distillé.

## DreamLitePipelineOutput[[diffusers.DreamLitePipelineOutput]]

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

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

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

**Paramètres :**

images (`List[PIL.Image.Image]` ou `np.ndarray`) : Liste d'images PIL débruitées de longueur `batch_size` ou tableau NumPy de forme `(batch_size, height, width, num_channels)`. Les images PIL ou le tableau NumPy présentent les images débruitées du pipeline de diffusion.

Classe de sortie pour les pipelines DreamLite.

