Diffusers documentation
Ideogram 4
Ideogram 4
Ideogram 4 adalah model teks-ke-gambar berbasis flow-matching yang menggunakan encoder teks multimodal dan skema panduan bebas-klasifikasi asimetris: unconditional_transformer khusus menghasilkan cabang negatif dengan fitur teks yang dinolkan, sementara transformer utama mengonsumsi urutan teks + gambar yang dikemas penuh.
Nilai bawaan pipeline adalah pengaturan yang direkomendasikan untuk kualitas terbaik, sehingga pemanggilan pipe(prompt) sederhana menghasilkan hasil berkualitas terbaik langsung dari awal: 48 langkah flow-matching pada jadwal logit-normal (mu=0.0, std=1.5) dengan classifier-free guidance dipertahankan pada 7.0 untuk langkah utama dan diturunkan ke 3.0 untuk 3 langkah “polish” terakhir.
Parameter utama saat inferensi dapat diatur melalui panggilan pipeline:
num_inference_steps,mu, danstdmengontrol jadwal flow-matching logit-normal yang sadar resolusi.guidance_scale(atauguidance_schedulelengkap per langkah) mencampurkan kecepatan kondisional dan non-kondisional.
Teks-ke-gambar
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")Upsampling prompt
Ideogram 4 dilatih pada caption JSON terstruktur, bukan prompt bebas, sehingga prompt pendek sebaiknya diperluas ke skema native tersebut sebelum generasi. Ada dua cara untuk menghasilkan caption.
Remote (API Ideogram)
Untuk hasil terbaik, perluas prompt dengan API magic-prompt yang dihosting oleh Ideogram dan lewati caption yang dikembalikan langsung ke pipeline (dapatkan kunci di 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")Lokal (di perangkat)
Untuk pipeline yang sepenuhnya lokal, muat Ideogram4PromptEnhancerHead kecil (head LM Qwen3-VL) sebagai komponen opsional prompt_enhancer_head dan teruskan prompt_upsampling=True. Head ini disambungkan ke text_encoder yang dibagikan, sehingga tidak ada text encoder kedua yang dimuat. Instal outlines untuk caption dengan kendala skema (checkpoint nf4 juga membutuhkan 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
kelas diffusers.Ideogram4Pipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLFlux2text_encoder: PreTrainedModeltokenizer: AutoTokenizertransformer: Ideogram4Transformer2DModelunconditional_transformer: Ideogram4Transformer2DModelprompt_enhancer_head: diffusers.pipelines.ideogram4.prompt_enhancer.Ideogram4PromptEnhancerHead | None = None )
Parameter
- scheduler (FlowMatchEulerDiscreteScheduler) — Scheduler flow-matching. Pipeline ini menimpa jadwal sigma default dengan jadwal logit-normal yang sadar resolusi.
- vae (
AutoencoderKLFlux2) — Variational auto-encoder yang digunakan untuk mendekode latents kembali menjadi gambar. - text_encoder (
PreTrainedModel) — Encoder teks multimodal. Pipeline mengonsumsi hidden states dari himpunan lapisan decoder antara yang tetap (lihatQWEN3_VL_ACTIVATION_LAYERS). - tokenizer (
AutoTokenizer) — Tokenizer yang berpasangan dengantext_encoder. - transformer (Ideogram4Transformer2DModel) — Transformer flow-matching bersyarat.
- unconditional_transformer (Ideogram4Transformer2DModel) — Transformer flow-matching tanpa syarat (asymmetric-CFG).
Pipeline teks-ke-gambar untuk Ideogram4.
Ideogram4 adalah model flow-matching yang dilatih dengan panduan classifier-free asimetris: sebuah transformer mengonsumsi fitur yang dikondisikan teks bersama dengan latens gambar, sementara unconditional_transformer yang terpisah melakukan denoising dengan fitur teks yang dinolkan. Kedua prediksi kecepatan tersebut dicampur secara linear pada setiap langkah.
__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'] )
Parameter
- prompt (
strataulist[str]) — Prompt untuk memandu pembuatan gambar. - height (
int, opsional, default 2048) — Tinggi gambar output dalam piksel; harus merupakan kelipatan darivae_scale_factor * patch_size. - width (
int, opsional, default 2048) — Lebar gambar output dalam piksel; harus merupakan kelipatan darivae_scale_factor * patch_size. - num_inference_steps (
int, opsional, default 48) — Jumlah langkah flow-matching. Default adalah pengaturan yang direkomendasikan untuk kualitas terbaik. - guidance_scale (
float, opsional) — Skala panduan klasifikasi bebas (classifier-free guidance) konstan yang diterapkan pada setiap langkah. Prediksi kecepatan kondisional dan tidak kondisional dicampur sebagaiv = guidance_scale * v_pos + (1 - guidance_scale) * v_neg. Saling eksklusif denganguidance_schedule(menetapkan keduanya akan memicu error). Nilai defaultnya adalahNone. - guidance_schedule (
list[float]atautorch.Tensor, opsional) — Jadwal skala panduan per langkah; harus memiliki panjangnum_inference_steps. Entri pertama berkorespondensi dengan langkah pertama (tingkat kebisingan terbesar). Saling eksklusif denganguidance_scale; tepat satu harus disetel. Secara default menggunakan jadwal yang direkomendasikan (7,0 untuk langkah utama, menurun ke 3,0 untuk 3 langkah “polish” terakhir). Untuk menggunakan skala konstan, berikanguidance_scaledanguidance_schedule=None. - mu (
float, opsional, default 0.0) — Rata-rata dasar dari jadwal flow-matching logit-normal. Rata-rata jadwal digeser sebesar setengah log dari rasio resolusi relatif terhadap 512x512. - std (
float, opsional, default 1.5) — Standar deviasi dari jadwal flow-matching logit-normal. - prompt_upsampling (
bool, opsional, defaultFalse) — JikaTrue, tulis ulangpromptmenjadi caption JSON terstruktur native Ideogram4 melalui upsample_prompt() sebelum encoding. Memerlukan komponen opsionalprompt_enhancer_head; pasangoutlinesuntuk caption dengan kendala skema.generatordigunakan kembali agar upsampling dapat direproduksi. - prompt_upsampling_temperature (
float, opsional, default 1.0) — Suhu sampling untuk prompt upsampling ketikaprompt_upsampling=True. - max_sequence_length (
int, opsional, default 2048) — Jumlah maksimum token teks per prompt. - num_images_per_prompt (
int, opsional, default 1) — Jumlah gambar yang akan dihasilkan per prompt. - generator (
torch.Generatorataulist[torch.Generator], opsional) — Generator yang digunakan untuk membuat sampling menjadi deterministik. - latents (
torch.Tensor, opsional) — Noise yang telah dibuat sebelumnya dengan bentuk(batch_size, num_image_tokens, latent_dim). - output_type (
str, opsional, defaultnya"pil") — Salah satu dari"pil","np","pt", atau"latent". - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikan Ideogram4PipelineOutput. - attention_kwargs (
dict, opsional) — Kamus kwargs yang diteruskan ke pemroses perhatian (attention processor) dari setiap transformer. Entri"scale"menyesuaikan bobot LoRA yang dimuat (mis.{"scale": 0.7}) saat backend PEFT aktif. - callback_on_step_end (
Callable, opsional) — Callback yang dipanggil di akhir setiap langkah denoising. - callback_on_step_end_tensor_inputs (
list[str], opsional) — Nama-nama tensor yang akan diekspos ke callback melaluicallback_kwargs.
Jalankan generasi teks-ke-gambar.
Contoh:
>>> 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 )
Siapkan kondisioning untuk urutan teks+gambar yang dikemas (satu entri per prompt).
Mengembalikan tuple datar (prompt_embeds, position_ids, segment_ids, indicator). Cabang tanpa syarat tidak membawa teks, sehingga pipeline membangun inputnya (yang dinolkan) secara langsung alih-alih mengodekan prompt negatif.
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 )
Tulis ulang setiap prompt menjadi caption JSON terstruktur native Ideogram4.
Memerlukan komponen opsional prompt_enhancer_head, yang disambungkan ke tubuh text_encoder bersama untuk membuatnya generatif. Generasi dibatasi oleh skema jika outlines terpasang, jika tidak, ia berjalan tanpa batasan. Sampaikan generator (yang sama yang diterima oleh __call__) untuk membuat sampling dapat direproduksi.
Ideogram4PromptEnhancerHead
kelas diffusers.Ideogram4PromptEnhancerHead
< source >( hidden_size: int = 4096vocab_size: int = 151936 )
LM head yang membuat text_encoder Qwen3-VL tanpa head menjadi generatif untuk upsampling prompt.
Komponen pipeline opsional (prompt_enhancer_head): bobotnya dimuat melalui from_pretrained biasa (repo kecilnya sendiri, atau dibundel di repo model) alih-alih diunduh di dalam pipeline. Saat upsample, pipeline menggabungkannya dengan tubuh text_encoder bersama untuk membentuk model generatif.
Ideogram4PipelineOutput
kelas diffusers.pipelines.ideogram4.Ideogram4PipelineOutput
< source >( images: list[PIL.Image.Image] | numpy.ndarray )
Kelas output untuk pipeline Ideogram 4.