Diffusers documentation
Ideogram 4
Ideogram 4
Ideogram 4 es un modelo de texto a imagen basado en flow-matching que utiliza un codificador de texto multimodal y un esquema de guía libre de clasificador asimétrico: un unconditional_transformer dedicado produce la rama negativa con características de texto puestas a cero, mientras que el transformer principal consume la secuencia completa empaquetada de texto + imagen.
Los valores predeterminados del pipeline son la configuración recomendada para obtener la mejor calidad, por lo que una llamada simple a pipe(prompt) produce resultados de la mejor calidad desde el inicio: 48 pasos de flow-matching en una programación logit-normal (mu=0.0, std=1.5) con classifier-free guidance mantenido en 7.0 para los pasos principales y reducido a 3.0 para los 3 pasos finales de “pulido”.
Los parámetros clave de tiempo de inferencia se exponen a través de la llamada de pipeline:
num_inference_steps,muystdcontrolan el flujo de correspondencia logit-normal con resolución consciente.guidance_scale(o unguidance_schedulecompleto por paso) combina las velocidades condicionales y no condicionales.
Texto a imagen
import torch
from diffusers import Ideogram4Pipeline
pipe = Ideogram4Pipeline.from_pretrained("ideogram-ai/ideogram-v4", dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "A photo of a cat holding a sign that says hello world"
# The defaults are the recommended settings for best quality.
image = pipe(prompt, height=1024, width=1024, generator=torch.Generator("cuda").manual_seed(0)).images[0]
image.save("ideogram4.png")Ampliación de prompts
Ideogram 4 se entrena con una descripción en JSON estructurada en lugar de un prompt libre, por lo que es mejor expandir un prompt corto a ese esquema nativo antes de la generación. Hay dos formas de generar la descripción.
Remoto (API de Ideogram)
Para obtener los mejores resultados, expanda el prompt con la API magic-prompt alojada de Ideogram y pase la descripción devuelta directamente a la pipeline (obtenga una clave en developer.ideogram.ai):
import json
import requests
import torch
from diffusers import Ideogram4Pipeline
pipe = Ideogram4Pipeline.from_pretrained("ideogram-ai/ideogram-4-nf4", dtype=torch.bfloat16)
pipe.to("cuda") # or "mps", "xpu", "cpu"
# Expand the prompt into a structured JSON caption with Ideogram's hosted magic-prompt API.
response = requests.post(
"https://api.ideogram.ai/v1/ideogram-v4/magic-prompt",
headers={"Api-Key": "your_ideogram_api_key"},
json={"text_prompt": "A photo of a cat holding a sign that says hello world", "aspect_ratio": "1x1"},
).json()
caption = json.dumps(response["json_prompt"])
# The caption is already upsampled, so pass it directly (no prompt_upsampling).
image = pipe(caption, height=1024, width=1024, generator=torch.Generator("cuda").manual_seed(0)).images[0]
image.save("ideogram4_upsampled.png")Local (en el dispositivo)
Para un pipeline totalmente local, cargue una pequeña Ideogram4PromptEnhancerHead (la cabeza LM de Qwen3-VL) como el componente opcional prompt_enhancer_head y pase prompt_upsampling=True. La cabeza se injerta en el text_encoder compartido, por lo que no se carga un segundo codificador de texto. Instale outlines para descripciones con restricciones de esquema (el punto de control nf4 también requiere bitsandbytes):
import torch
from diffusers import Ideogram4Pipeline, Ideogram4PromptEnhancerHead
prompt_enhancer_head = Ideogram4PromptEnhancerHead.from_pretrained(
"diffusers/qwen3-vl-8b-instruct-lm-head", dtype=torch.bfloat16
)
pipe = Ideogram4Pipeline.from_pretrained(
"ideogram-ai/ideogram-4-nf4", prompt_enhancer_head=prompt_enhancer_head, dtype=torch.bfloat16
)
pipe.to("cuda") # or "mps", "xpu", "cpu"
prompt = "A photo of a cat holding a sign that says hello world"
image = pipe(
prompt,
height=1024,
width=1024,
prompt_upsampling=True,
generator=torch.Generator("cuda").manual_seed(0),
).images[0]
image.save("ideogram4_upsampled.png")Ideogram4Pipeline
clase diffusers.Ideogram4Pipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLFlux2text_encoder: PreTrainedModeltokenizer: AutoTokenizertransformer: Ideogram4Transformer2DModelunconditional_transformer: Ideogram4Transformer2DModelprompt_enhancer_head: diffusers.pipelines.ideogram4.prompt_enhancer.Ideogram4PromptEnhancerHead | None = None )
Parámetros
- scheduler (FlowMatchEulerDiscreteScheduler) — Programador de flow-matching. El pipeline reemplaza el programa de sigma predeterminado con un programa logit-normal consciente de la resolución.
- vae (
AutoencoderKLFlux2) — Autoencoder variacional utilizado para decodificar los latentes de vuelta en imágenes. - text_encoder (
PreTrainedModel) — Codificador de texto multimodal. El pipeline consume estados ocultos de un conjunto fijo de capas intermedias del decodificador (verQWEN3_VL_ACTIVATION_LAYERS). - tokenizer (
AutoTokenizer) — Tokenizer asociado atext_encoder. - transformer (Ideogram4Transformer2DModel) — Transformador de flujo condicional.
- unconditional_transformer (Ideogram4Transformer2DModel) — Transformador de flow-matching incondicional (asymmetric-CFG).
Pipeline de texto a imagen para Ideogram4.
Ideogram4 es un modelo de flow-matching entrenado con guía libre de clasificador asimétrica: un transformer consume características condicionadas por texto junto con los latentes de la imagen, mientras que un unconditional_transformer separado realiza el desruido con características de texto puestas a cero. Las dos predicciones de velocidad se combinan linealmente en cada paso.
__call__
< source >( prompt: str | list[str] | None = Noneheight: int = 2048width: int = 2048num_inference_steps: int = 48guidance_scale: float | None = Noneguidance_schedule: typing.Union[list[float], torch.Tensor, NoneType] = (7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 3.0, 3.0, 3.0)mu: float = 0.0std: float = 1.5prompt_upsampling: bool = Falseprompt_upsampling_temperature: float = 1.0max_sequence_length: int = 2048num_images_per_prompt: int = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneoutput_type: str = 'pil'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[ForwardRef('Ideogram4Pipeline'), int, int, dict[str, typing.Any]], dict[str, typing.Any]]] = Nonecallback_on_step_end_tensor_inputs: list = ['latents'] )
Parámetros
- prompt (
strolist[str]) — Prompt(s) para guiar la generación de imágenes. - height (
int, opcional, valor predeterminado 2048) — Altura de la imagen de salida en píxeles; debe ser un múltiplo devae_scale_factor * patch_size. - width (
int, opcional, valor predeterminado 2048) — Ancho de la imagen de salida en píxeles; debe ser un múltiplo devae_scale_factor * patch_size. - num_inference_steps (
int, opcional, valor predeterminado 48) — Número de pasos de flow-matching. El valor predeterminado es la configuración recomendada para obtener la mejor calidad. - guidance_scale (
float, opcional) — Escala de guía sin clasificador constante aplicada en cada paso. Las predicciones de velocidad condicionales y no condicionales se combinan comov = guidance_scale * v_pos + (1 - guidance_scale) * v_neg. Es mutuamente excluyente conguidance_schedule(establecer ambos provoca un error). El valor predeterminado esNone. - guidance_schedule (
list[float]otorch.Tensor, opcional) — Programa de escala de guía por paso; debe tener longitudnum_inference_steps. La primera entrada corresponde al primer paso (nivel de ruido más alto). Es mutuamente excluyente conguidance_scale; se debe establecer exactamente uno. Por defecto, utiliza el programa recomendado (7.0 para los pasos principales, bajando a 3.0 para los últimos 3 pasos de “pulido”). Para usar una escala constante en su lugar, paseguidance_scaleyguidance_schedule=None. - mu (
float, opcional, valor predeterminado 0.0) — Media base del programa de flow-matching logit-normal. La media del programa se desplaza la mitad del logaritmo de la proporción de resolución relativa a 512x512. - std (
float, opcional, valor predeterminado 1.5) — Desviación estándar del programa de flow-matching logit-normal. - prompt_upsampling (
bool, opcional, valor predeterminadoFalse) — Si esTrue, reescribeprompten la descripción JSON estructurada nativa de Ideogram4 mediante upsample_prompt() antes de codificarlo. Requiere el componente opcionalprompt_enhancer_head; instalaoutlinespara descripciones con esquema restringido. Se reutilizageneratorpara que el muestreo sea reproducible. - prompt_upsampling_temperature (
float, opcional, valor predeterminado 1.0) — Temperatura de muestreo para el upsampling de prompts cuandoprompt_upsampling=True. - max_sequence_length (
int, opcional, valor predeterminado 2048) — Número máximo de tokens de texto por indicación. - num_images_per_prompt (
int, opcional, valor predeterminado 1) — Número de imágenes a generar por indicación. - generator (
torch.Generatorolist[torch.Generator], opcional) — Generador(es) utilizados para hacer la muestreo determinista. - latents (
torch.Tensor, opcional) — Ruido pregenerado de forma(batch_size, num_image_tokens, latent_dim). - output_type (
str, opcional, valor predeterminado"pil") — Uno de"pil","np","pt"o"latent". - return_dict (
bool, opcional, valor predeterminadoTrue) — Si se debe devolver un Ideogram4PipelineOutput. - attention_kwargs (
dict, opcional) — Un diccionario de kwargs que se pasa al procesador de atención de cada transformer. Una entrada"scale"escala los pesos de LoRA cargados (p. ej.{"scale": 0.7}) cuando el backend PEFT está activo. - callback_on_step_end (
Callable, opcional) — Callback que se invoca al final de cada paso de desruido. - callback_on_step_end_tensor_inputs (
list[str], opcional) — Nombres de los tensores que se expondrán al callback a través decallback_kwargs.
Ejecuta la generación de texto a imagen.
Ejemplos:
>>> import torch
>>> from diffusers import Ideogram4Pipeline
>>> pipe = Ideogram4Pipeline.from_pretrained("ideogram-ai/ideogram-v4", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A photo of a cat holding a sign that says hello world"
>>> # The defaults are the recommended settings for best quality.
>>> image = pipe(prompt, height=2048, width=2048, generator=torch.Generator("cuda").manual_seed(0)).images[0]
>>> image.save("ideogram4.png")encode_prompt
< source >( prompt: str | list[str]grid_h: intgrid_w: intmax_sequence_length: intdevice: device )
Prepara el condicionamiento para la secuencia empaquetada de texto+imagen (una entrada por prompt).
Devuelve una tupla plana (prompt_embeds, position_ids, segment_ids, indicator). La rama incondicional no lleva texto, por lo que el pipeline construye sus entradas (a ceros) directamente en lugar de codificar un prompt negativo.
upsample_prompt
< source >( prompt: str | list[str]height: int = 2048width: int = 2048temperature: float = 1.0max_new_tokens: int = 1024generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonedevice: typing.Optional[torch.device] = None )
Reescribe cada indicación en la descripción JSON estructurada nativa de Ideogram4.
Requiere el componente opcional prompt_enhancer_head, que se injerta en el cuerpo compartido text_encoder para hacerlo generativo. La generación está restringida por el esquema cuando outlines está instalado; de lo contrario, se ejecuta sin restricciones. Pasa generator (el mismo aceptado por __call__) para hacer que el muestreo sea reproducible.
Ideogram4PromptEnhancerHead
clase diffusers.Ideogram4PromptEnhancerHead
< source >( hidden_size: int = 4096vocab_size: int = 151936 )
LM head que hace que el text_encoder sin cabeza de Qwen3-VL sea generativo para el muestreo de prompts.
Un componente de pipeline opcional (prompt_enhancer_head): sus pesos se cargan mediante un from_pretrained normal (su propio repositorio pequeño, o incluido en el repositorio del modelo) en lugar de una descarga dentro del pipeline. En el momento del upsample, el pipeline lo combina con el cuerpo compartido text_encoder para formar el modelo generativo.
Ideogram4PipelineOutput
clase diffusers.pipelines.ideogram4.Ideogram4PipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Clase de salida para el pipeline de Ideogram 4.