Diffusers documentation
P-H3-Image
P-H3-Image
P-H3-Image adalah model gambar dari Pruna AI yang berbasis pada MiniMax-H3, untuk generasi gambar dari teks dan pengeditan gambar berbasis instruksi. Anda dapat menemukan checkpoint di PrunaAI/P-H3-Image.
import torch
from diffusers import ComponentsManager, ModularPipeline
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda") # or "mps", "xpu"
pipe = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
prompt = (
"A German Expressionist oil painting of a Berlin street at night in the manner of Ernst Ludwig Kirchner, "
"with gaunt figures hurrying past a glowing gas lamp."
)
image = pipe(prompt=prompt, height=3360, width=2496, generator=torch.Generator().manual_seed(3), output="images")[0]
edited = pipe(prompt="let it snow on the street", image=image, output="images")[0]Setiap permintaan melewati prompt upsampler terlebih dahulu. Dengan setiap komponen di akselerator, pipeline membutuhkan sekitar 101 GB dalam bfloat16 pada 8 megapiksel, sehingga contoh menggunakan auto offloading: ComponentsManager memindahkan setiap komponen ke akselerator ketika sebuah blok membutuhkannya, dan pipeline berjalan di GPU 80 GB.
Komponen
| Komponen | Kelas |
|---|---|
transformer | MiniMaxH3Transformer3DModel |
text_encoder | Qwen3VLForConditionalGeneration (Qwen3-VL-4B) |
text_connector | PH3ImageTextConnector |
vae | AutoencoderKLPH3Image |
tokenizer, processor | Tokenizer dari text encoder, dan Qwen3VLProcessor dengan image processor MiniMax-H3 |
scheduler, audio_scheduler | MiniMaxH3Scheduler |
prompt_upsampler, prompt_upsampler_processor | Qwen3_5ForConditionalGeneration (berdasarkan Qwen3.5-9B) dan prosesor-nya |
Alur Kerja
Alur kerja dipilih pada input image:
text2imagemenghasilkan gambar dariprompt. Nilai default untukheightdanwidthadalah 2912, dan dibulatkan ke kelipatan 32. Model ini bekerja paling baik pada resolusi 8 megapiksel, misalnya 2912x2912, 3872x2176, atau 2176x3872.image_conditionedmengeditimageberdasarkan instruksi dalamprompt, dan bekerja paling baik pada resolusi 4 atau 8 megapiksel. Gambar dikodekan pada sekitarvision_pixels(satu megapiksel) untuk text encoder dan pada ukuran aslinya untuk VAE, dengan skala diperbesar hinggareference_min_pixels(satu megapiksel) atau diperkecil hinggareference_max_pixels(delapan megapiksel) jika berada di luar rentang tersebut. Tanpaheightdanwidth, hasil edit dihasilkan pada ukuran gambar pertama, yang akan diperbesar hinggacanvas_min_pixels(empat megapiksel) jika ukurannya lebih kecil. Nilaiheightdanwidthyang diberikan, dibulatkan ke kelipatan 32, mengubah kanvas tetapi tidak mengubah gambar.imagejuga dapat berupa daftar hingga 8 gambar: gambar pertama yang diedit dan sisanya sebagai referensi, seperti<Picture 2>,<Picture 3>, dan seterusnya.
Upsampling prompt
P-H3-Image dirancang untuk merender prompt lengkap, bukan permintaan singkat, sehingga pipeline menjalankan prompt upsampler terlebih dahulu pada setiap permintaan. Model ini memikirkan permintaan tersebut lalu menulis prompt: prompt teks-ke-gambar yang detail untuk rasio aspek height dan width, atau, saat mengedit, ringkasan tentang apa yang harus dipertahankan dan apa yang harus diubah pada gambar. Prompt yang ditulisnya dikembalikan sebagai output prompt.
out = pipe(prompt=prompt, height=3360, width=2496, output=["images", "prompt"])
print(out["prompt"])max_new_tokens membatasi total token untuk penalaran dan prompt, yaitu 1024 token untuk teks-ke-gambar dan 1536 untuk edit secara default. Jika upsampler tidak mengembalikan prompt yang dapat digunakan, pipeline akan melempar error alih-alih merendernya.
Untuk merender prompt sesuai yang diberikan, ambil langkah dari blok. Blok yang diambil juga berjalan secara mandiri, misalnya untuk menampilkan prompt kepada pengguna sebelum merendernya:
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")
blocks = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image").blocks
upsampler_block = blocks.sub_blocks.pop("prompt_upsampler")
upsampler = upsampler_block.init_pipeline("PrunaAI/P-H3-Image", components_manager=manager)
upsampler.load_components(dtype=torch.bfloat16)
upsampled = upsampler(prompt=prompt, height=3360, width=2496, output="prompt")
pipe = blocks.init_pipeline("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
image = pipe(prompt=upsampled, height=3360, width=2496, output="images")[0]Tanpa langkah tersebut, prompt edit dalam bentuk apa pun yang ditulis oleh upsampler, ringkasan enam bagian atau paragraf yang dimulai dengan Edit <Picture 1>., akan dienkod sesuai dengan yang tertulis; instruksi lain akan diberi awalan tersebut.
Sampling
- 8 langkah dijalankan di atas
sample_sigmascheckpoint. Luluskansigmasuntuk menggunakan grid lain. - Model ini telah melalui distilasi panduan, sehingga tidak ada
negative_promptatauguidance_scale.
PH3ImageModularPipeline
kelas diffusers.PH3ImageModularPipeline
< source >( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )
A ModularPipeline untuk P-H3-Image, sebuah model gambar berbasis MiniMax-H3, untuk teks-ke-gambar (text2image) dan
pengeditan berbasis instruksi (image_conditioned).
Gambar tersebut adalah satu frame laten, yang dinoise dalam satu urutan terpadu dengan dua laten audio yang dibuang.
import torch
from diffusers import ComponentsManager, ModularPipeline
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")
pipe = ModularPipeline.from_pretrained("PrunaAI/P-H3-Image", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)
prompt = (
"A German Expressionist oil painting of a Berlin street at night in the manner of Ernst Ludwig Kirchner, "
"with gaunt figures hurrying past a glowing gas lamp."
)
image = pipe(prompt=prompt, height=3360, width=2496, output="images")[0]PH3ImageBlocks
Blok pipeline modular untuk P-H3-Image: text2image, dan pengeditan berbasis instruksi (image_conditioned) ketika image diteruskan. prompt melewati prompt upsampler terlebih dahulu; hapus langkah prompt_upsampler untuk merendernya
sebagaimana diberikan.
Alur kerja yang didukung:
text2image: membutuhkanpromptimage_conditioned: membutuhkanprompt,image
Komponen:
image_processor (VaeImageProcessor) prompt_upsampler (Qwen3_5ForConditionalGeneration): Upsampler prompt. prompt_upsampler_processor (AutoProcessor): Prosesornya. text_encoder
(Qwen3VLForConditionalGeneration) text_connector (PH3ImageTextConnector) tokenizer (Qwen2Tokenizer)
processor (Qwen3VLProcessor) vae (AutoencoderKLPH3Image) scheduler (MiniMaxH3Scheduler) audio_scheduler
(MiniMaxH3Scheduler) transformer (MiniMaxH3Transformer3DModel)
Konfigurasi:
reference_min_pixels (default: 1048576) reference_max_pixels (default: 8388608) canvas_min_pixels (default:
4194304) vision_pixels (default: 1000000) sample_sigmas (default: [1.0, 0.984753, 0.967905, 0.951688,
0.925372, 0.881923, 0.810083, 0.528718, 0.0]): Grid sampling checkpoint, digunakan ketika sigmas tidak
dilewatkan.
Inputs:
image (Image | list, optional):
The image to edit, or a list of at most 8 images: the first is edited, the others are references.
height (int, optional):
Height of the generated image in pixels, rounded to a multiple of 32. Defaults to 2912 for text2image,
which works best at 8 megapixels. An edit defaults to the first image’s size, at least canvas_min_pixels, and works best at 4 or 8 megapixels.
width (int, optional):
Width of the generated image in pixels, rounded to a multiple of 32. Defaults to 2912 for text2image,
which works best at 8 megapixels. An edit defaults to the first image’s size, at least canvas_min_pixels, and works best at 4 or 8 megapixels.
prompt (str):
The prompt, or the edit instruction when image is passed. A single string.
max_new_tokens (int, optional, defaults to 1536 or 1024, depending on the workflow):
The most tokens the upsampler may generate, its reasoning included.
vision_images (list, optional):
The images of the edit resized for the text encoder, the image to edit first.
reference_images (list, optional):
The images of the edit resized for the VAE, the image to edit first.
condition_latents (list, optional):
The conditioning latents of the images of the edit. Their shapes give the geometry of the reference
blocks.
generator (Generator, optional):
The generator of the request. The conditioning noise is drawn from it first, one draw per condition,
before the noise of the generated rows.
latents (Tensor):
Pre-generated image noise of shape (1, latent_channels, 1, latent_height, latent_width), used instead
of the draw.
sigmas (list, optional):
A custom sampling grid, strictly decreasing and ending at 0. Defaults to the checkpoint’s sample_sigmas.
*denoiser_input_fields (None,optional):
The structural description of the packed sequence the transformer reads by name: token_tags, position_ids and the three row-index tensors.
attention_kwargs (dict,optional):
Additional kwargs for attention processors.
output_type (str,optional*, defaults to pil):
Output format: ‘pil’, ‘np’, ‘pt’.
Output:
images (list):
Gambar yang dihasilkan.
PH3ImageTextConnector
kelas diffusers.PH3ImageTextConnector
< source >( hidden_state_indices: tuple = (13, 19, 25, 31, 36)text_hidden_size: int = 2560out_channels: int = 5120 )
Parameter
- hidden_state_indices (
tuple[int, ...], defaultnya(13, 19, 25, 31, 36)) — Entri mana darihidden_statestext encoder yang dibaca, sesuai penomoranoutput_hidden_states(0adalah output embedding,iadalah output decoder layeri, dan yang terakhir adalah hidden state final yang telah dinormalisasi). - text_hidden_size (
int, defaultnya2560) — Ukuran tersembunyi dari encoder teks. - out_channels (
int, defaultnya5120) — Jumlah channel dari conditioning yang dibaca oleh transformer MiniMax-H3.
Memetakan hidden states dari encoder teks Qwen3-VL milik P-H3-Image ke kondisi teks yang dibaca oleh transformer-nya.
Hidden states yang terdaftar dalam hidden_state_indices digabungkan, distandardisasi, diproyeksikan secara linear, dan didestandardisasi. Token pertama adalah attention sink dengan kondisioning yang sama untuk setiap prompt, sehingga diganti dengan sink_embedding.
forward
< source >( hidden_states: tuple ) → torch.Tensor
Parameter
- hidden_states (
tuple[torch.Tensor, ...]) — Hidden states dari text encoder, sebagaimana dikembalikan olehoutput_hidden_states=True: satu tensor dengan bentuk(batch_size, num_tokens, text_hidden_size)untuk setiap entri.
Mengembalikan
torch.Tensor
kondisi, dengan bentuk (batch_size, num_tokens, out_channels), dalam dtype dari parameter konektor.