Diffusers documentation
P-H3-Image
P-H3-Image
P-H3-Image, Pruna AI tarafından MiniMax-H3 tabanlı olarak geliştirilmiş, metinden görüntüye üretim ve talimata dayalı görüntü düzenleme için kullanılan bir görüntü modelidir. Kontrol noktasını PrunaAI/P-H3-Image adresinde bulabilirsiniz.
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]Her istek önce prompt upsampler üzerinden geçer. Hızlandırıcıdaki her bileşenle birlikte, hattın 8 megapikselde bfloat16 ile yaklaşık 101 GB'a ihtiyacı vardır; bu nedenle örnekler otomatik boşaltmayı kullanır: ComponentsManager, bir blok gerektiğinde her bileşeni hızlandırıcıya taşır ve hat 80 GB'lık bir GPU üzerinde çalışır.
Bileşenler
| Bileşen | Sınıf |
|---|---|
transformer | MiniMaxH3Transformer3DModel |
text_encoder | Qwen3VLForConditionalGeneration (Qwen3-VL-4B) |
text_connector | PH3ImageTextConnector |
vae | AutoencoderKLPH3Image |
tokenizer, processor | Metin kodlayıcısının belirteçleyicisi ve MiniMax-H3'ün görüntü işleyicisine sahip bir Qwen3VLProcessor |
scheduler, audio_scheduler | MiniMaxH3Scheduler |
prompt_upsampler, prompt_upsampler_processor | Qwen3_5ForConditionalGeneration (Qwen3.5-9B tabanlı) ve işlemcisi |
İş Akışları
İş akışı, image girdisinde seçilir:
text2image,promptüzerinden üretim yapar.heightvewidthvarsayılan olarak 2912'dir ve 32'nin katlarına yuvarlanır. Model, 8 megapikselde en iyi sonucu verir; örneğin 2912x2912, 3872x2176 veya 2176x3872.image_conditioned,imageöğesinipromptiçindeki talimata göre düzenler ve 4 veya 8 megapiksel çözünürlükte en iyi sonucu verir. Görsel, metin kodlayıcı için yaklaşıkvision_pixels(bir megapiksel) çözünürlükte, VAE için ise kendi boyutunda kodlanır; bu aralığın dışında kalması durumundareference_min_pixels(bir megapiksel) değerine yükseltilir veyareference_max_pixels(sekiz megapiksel) değerine düşürülür.heightvewidthbelirtilmediğinde, düzenleme ilk görselin boyutunda oluşturulur; bu boyut daha küçüksecanvas_min_pixels(dört megapiksel) değerine yükseltilir. 32'nin katlarına yuvarlanarak geçirilenheightvewidthdeğerleri tuvali değiştirir ancak görselleri değiştirmez.imageayrıca en fazla 8 görselden oluşan bir liste de olabilir: ilk görsel düzenlenir, diğerleri ise<Picture 2>,<Picture 3>vb. şeklinde referans olarak kullanılır.
Prompt örnekleme
P-H3-Image, kısa istekler yerine tam istekleri işlemek üzere tasarlandığından, pipeline her istekte önce prompt upsampler'ı çalıştırır. İsteği değerlendirir ve ardından prompt'u yazar: height ve width en-boy oranına uygun ayrıntılı bir metinden-görsele prompt veya düzenleme sırasında görsellerde nelerin korunup nelerin değiştirileceğine dair bir özet. Yazdığı prompt, prompt çıktısı olarak geri döner.
out = pipe(prompt=prompt, height=3360, width=2496, output=["images", "prompt"])
print(out["prompt"])max_new_tokens, akıl yürütme ve istemi birlikte sınırlar; varsayılan olarak metinden görüntüye için 1024, düzenlemeler için 1536 token'dur. Upsampler kullanılabilir bir istem döndürmezse, pipeline bunu render etmek yerine bir hata fırlatır.
prompt değerini olduğu gibi görüntülemek için bloklardan adımı çıkarın. Çıkarılan blok ayrıca kendi başına da çalışır; örneğin prompt'u görüntülemesinden önce kullanıcıya göstermek için:
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]Adım olmadan, upsampler'ın yazdığı her iki biçimdeki düzenleme komutu, altı bölümlük özet veya Edit <Picture 1>. ile başlayan bir paragraf, olduğu gibi kodlanır; diğer tüm talimatlar bu önekle eklenir.
Örnekleme
- 8 adım, kontrol noktasının
sample_sigmasüzerinde çalışır. Başka bir ızgara kullanmak içinsigmasparametresini iletin. - Model rehberlik damıtılmıştır, bu nedenle bir rehber,
negative_promptveyaguidance_scaleyoktur.
PH3ImageModularPipeline
sınıf 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 )
MiniMax-H3 tabanlı bir görüntü modeli olan P-H3-Image için metinden görüntüye (text2image) ve talimata dayalı düzenleme (image_conditioned) için bir ModularPipeline.
Görsel, iki adet atılan ses latentini içeren tek bir paketlenmiş dizide gürültüden arındırılmış tek bir latent karedir.
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
P-H3-Image için modüler pipeline blokları: text2image ve image geçirildiğinde talimata dayalı düzenleme (image_conditioned). prompt önce prompt upsampler'dan geçer; verilen haliyle render etmek için prompt_upsampler adımını kaldırın.
Desteklenen iş akışları:
text2image:promptgerektiririmage_conditioned:promptveimagegerektirir
Bileşenler:
image_processor (VaeImageProcessor) prompt_upsampler (Qwen3_5ForConditionalGeneration): İstem yükseltici. prompt_upsampler_processor (AutoProcessor): İşlemcisi. text_encoder
(Qwen3VLForConditionalGeneration) text_connector (PH3ImageTextConnector) tokenizer (Qwen2Tokenizer)
processor (Qwen3VLProcessor) vae (AutoencoderKLPH3Image) scheduler (MiniMaxH3Scheduler) audio_scheduler
(MiniMaxH3Scheduler) transformer (MiniMaxH3Transformer3DModel)
Yapılandırmalar:
reference_min_pixels (varsayılan: 1048576) reference_max_pixels (varsayılan: 8388608) canvas_min_pixels (varsayılan:
4194304) vision_pixels (varsayılan: 1000000) sample_sigmas (varsayılan: [1.0, 0.984753, 0.967905, 0.951688,
0.925372, 0.881923, 0.810083, 0.528718, 0.0]): sigmas geçirilmediğinde kullanılan kontrol noktası örneklem ızgarası.
Girdiler:
image (Image | list, isteğe bağlı):
Düzenlenecek görüntü veya en fazla 8 görüntünün listesi: ilki düzenlenir, diğerleri referans olarak kullanılır.
height (int, isteğe bağlı):
Üretilen görüntünün piksel cinsinden yüksekliği, 32'nin katına yuvarlanır. text2image için varsayılan değer 2912'dir,
bu da 8 megapikselde en iyi sonucu verir. Bir düzenleme, en az canvas_min_pixels olmak üzere ilk görüntünün boyutuna ayarlanır ve 4 veya 8 megapikselde en iyi sonucu verir.
width (int, isteğe bağlı):
Üretilen görüntünün piksel cinsinden genişliği, 32'nin katına yuvarlanır. text2image için varsayılan değer 2912'dir,
bu da 8 megapikselde en iyi sonucu verir. Bir düzenleme, en az canvas_min_pixels olmak üzere ilk görüntünün boyutuna ayarlanır ve 4 veya 8 megapikselde en iyi sonucu verir.
prompt (str):
İstemi veya image geçirildiğinde düzenleme talimatı. Tek bir dize.
max_new_tokens (int, isteğe bağlı, iş akışına bağlı olarak varsayılan 1536 veya 1024):
Upsampler'ın akıl yürütmesi dahil olmak üzere üretebileceği en fazla token sayısı.
vision_images (list, isteğe bağlı):
Metin kodlayıcı için yeniden boyutlandırılan düzenleme görüntüleri, düzenlenecek görüntü ilk sırada.
reference_images (list, isteğe bağlı):
VAE için yeniden boyutlandırılan düzenleme görüntüleri, düzenlenecek görüntü ilk sırada.
condition_latents (list, isteğe bağlı):
Düzenleme görüntülerinin koşullandırma latentleri. Biçimleri, referans
bloklarının geometrisini verir.
generator (Generator, isteğe bağlı):
İsteğin üreteci. Koşullandırma gürültüsü, üretilen satırların gürültüsünden önce, her koşul için bir çekim olacak şekilde buradan çekilir.
latents (Tensor):
(1, latent_channels, 1, latent_height, latent_width) biçiminde önceden üretilmiş görüntü gürültüsü, çekim yerine kullanılır.
sigmas (list, isteğe bağlı):
Sıkı şekilde azalan ve 0 ile biten özel bir örneklem ızgarası. Varsayılan olarak checkpoint'in sample_sigmas değerini kullanır.
*denoiser_input_fields (None,isteğe bağlı):
Transformer'ın adıyla okuduğu paketlenmiş dizinin yapısal tanımı: token_tags, position_ids ve üç satır-dizin tensörü.
attention_kwargs (dict,isteğe bağlı):
Dikkat işleyicileri için ek kwargs.
output_type (str,isteğe bağlı*, varsayılan pil):
Çıktı biçimi: ‘pil’, ‘np’, ‘pt’.
Çıktılar:
images (list):
Oluşturulan görüntüler.
PH3ImageTextConnector
sınıf diffusers.PH3ImageTextConnector
< source >( hidden_state_indices: tuple = (13, 19, 25, 31, 36)text_hidden_size: int = 2560out_channels: int = 5120 )
Parametreler
- hidden_state_indices (
tuple[int, ...], varsayılan(13, 19, 25, 31, 36)) — Metin kodlayıcısınınhidden_statesgirdilerinden hangilerinin,output_hidden_statesnumaralandırmasına göre okunacağı (0gömme çıktısı,ii. çözücü katmanının çıktısı ve sonuncu girdi son normlanmış gizli durumu). - text_hidden_size (
int, varsayılan2560) — Metin kodlayıcısının gizli boyutu. - out_channels (
int, varsayılan5120) — Koşullandırma MiniMax-H3’ün dönüştürücüsünün okuduğu kanal sayısı.
P-H3-Image'ın Qwen3-VL metin kodlayıcısının gizli durumlarını, dönüştürücüsünün okuduğu metin koşullamasına eşler.
hidden_state_indices içinde listelenen gizli durumlar birleştirilir, standartlaştırılır, doğrusal olarak projekte edilir ve standartlaştırma işlemi geri alınır. İlk token, her istem için aynı koşullandırmaya sahip bir dikkat yutucusudur (attention sink) bu nedenle sink_embedding ile değiştirilir.
forward
< source >( hidden_states: tuple ) → torch.Tensor
Parametreler
- hidden_states (
tuple[torch.Tensor, ...]) —output_hidden_states=Trueparametresiyle döndürüldüğü gibi metin kodlayıcısının gizli durumları: her giriş için(batch_size, num_tokens, text_hidden_size)biçiminde bir tensör.
Dönüş değeri
torch.Tensor
(batch_size, num_tokens, out_channels) biçiminde, bağlayıcının parametrelerinin veri türündeki koşullandırma.