Diffusers documentation
JoyAI-Image-Edit
JoyAI-Image-Edit
JoyAI-Image, görüntü anlama, metinden görüntüye üretim ve talimat yönlendirmeli görüntü düzenleme için birleşik çok modlu temel bir modeldir. 8B'lik Çok Modlu Büyük Dil Modeli (MLLM) ile 16B'lik Çok Modlu Difüzyon Dönüştürücüsünü (MMDiT) birleştirir. JoyAI-Image'in temel ilkesi, anlama, üretim ve düzenleme arasındaki kapalı döngülü iş birliğidir.
JoyAI-Image-Edit, nesne taşıma, nesne döndürme ve kamera kontrolü dahil olmak üzere genel görüntü düzenleme ve uzamsal düzenleme yeteneklerini destekler.
| Model | Açıklama | İndir |
|---|---|---|
| JoyAI-Image-Edit | Hassas ve kontrol edilebilir uzamsal manipülasyon ile talimat yönlendirmeli görüntü düzenleme | Hugging Face |
import torch
from diffusers import JoyImageEditPipeline
from diffusers.utils import load_image
pipeline = JoyImageEditPipeline.from_pretrained(
"jdopensource/JoyAI-Image-Edit-Diffusers", dtype=torch.bfloat16
)
pipeline.to("cuda") # or "mps", "xpu", "cpu"
image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg")
prompt = "Add wings to the astronaut."
output = pipeline(
image=image,
prompt=prompt,
num_inference_steps=40,
guidance_scale=4.0,
generator=torch.Generator("cuda").manual_seed(0),
).images[0]
output.save("joyimage_edit_output.png")Uzamsal düzenleme
JoyAI-Image üç uzamsal düzenleme istemci kalıbını destekler: Object Move, Object Rotation ve Camera Control. En iyi sonuçlar için aşağıdaki istemci şablonlarına mümkün olduğunca sadık kalın. Daha fazla bilgi için SpatialEdit belgesine başvurun.
Nesne Taşıma
Giriş görüntüsünde kırmızı bir kutuyla işaretlenmiş belirli bir bölgeye hedef nesneyi taşıyın.
Move the <object> into the red box and finally remove the red box.
Nesne Dönüşümü
Bir nesneyi belirli bir kanonik görünüme döndürün. Desteklenen <view> değerleri: front, right, left, rear, front right, front left, rear right, rear left.
Rotate the <object> to show the <view> side view.
Kamera Kontrolü
3D sahneyi değiştirmeden kamera bakış açısını değiştirin.
Move the camera.
- Camera rotation: Yaw {y_rotation}°, Pitch {p_rotation}°.
- Camera zoom: in/out/unchanged.
- Keep the 3D scene static; only change the viewpoint.JoyImageEditPipeline
sınıf diffusers.JoyImageEditPipeline
< source >( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLWantext_encoder: Qwen3VLForConditionalGenerationtokenizer: Qwen2Tokenizertransformer: JoyImageEditTransformer3DModelprocessor: Qwen3VLProcessortext_token_max_length: int = 2048 )
JoyImage mimarisini kullanarak görüntü düzenleme için difüzyon hattı.
Pipeline, metin ve görüntü koşullandırmasını Qwen3-VL metin kodlayıcı ile kodlar, latensleri 3-B dönüştürücü ile gürültüden arındırır ve sonucu WAN VAE ile çözer.
Model aktarma sırası: text_encoder -> transformer -> vae.
__call__
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 40timesteps: typing.List[int] = Nonesigmas: typing.List[float] = Noneguidance_scale: float = 4.0negative_prompt: typing.Union[str, typing.List[str], NoneType] = Nonenum_images_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds_mask: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 4096enable_denormalization: bool = True ) → [~pipelines.joyimage.JoyImageEditPipelineOutput] or torch.Tensor
Parametreler
- prompt (str veya List[str]) — Üretimi yönlendirmek için istem veya istemler.
- height (int) — Üretilen çıktının piksel cinsinden yüksekliği.
- width (int) — Üretilen çıktının piksel cinsinden genişliği.
- image (PipelineImageInput, isteğe bağlı) —
Koşullandırma için kullanılan referans görüntü. Sağlandığında, pipeline
num_items=2ile görüntü düzenleme modunda çalışır. - num_inference_steps (int, isteğe bağlı, varsayılan 40) — Gürültü azaltma adım sayısı. Daha fazla adım, genellikle daha yavaş çıkarım maliyetiyle kaliteyi artırır.
- timesteps (List[int], isteğe bağlı) —
Gürültü azaltma süreci için özel zaman adımları. Sağlandığında,
num_inference_stepslistenin uzunluğundan çıkarılır. - sigmas (List[float], isteğe bağlı) —
Gürültü azaltma süreci için özel sigmalar.
timestepsile birbirini dışlar. - guidance_scale (float, opsiyonel, varsayılan 4.0) — Sınıflandırıcı-ücretsiz yönlendirme ölçeği.
- negative_prompt (str veya List[str], isteğe bağlı) — İstenmeyen içeriği bastırmak için kullanılan negatif istem(ler).
- num_images_per_prompt (int, isteğe bağlı, varsayılan 1) — Her istem için üretilen örnek sayısı.
- generator (torch.Generator veya List[torch.Generator], isteğe bağlı) — Belirleyici örneklemeler için RNG üreteçleri.
- latents (torch.Tensor, opsiyonel) — Hedef slot için önceden oluşturulmuş gürültülü latensler. Sağlanmadığında, Gauss dağılımından örneklenir. Belirli bir başlangıç gürültü tensöründen üretim başlatmak için tohum olarak kullanılabilir.
- prompt_embeds (torch.Tensor, opsiyonel) —
Önceden hesaplanmış prompt gömümeleri. Sağlandığında
promptatlanabilir. - prompt_embeds_mask (torch.Tensor, opsiyonel) —
prompt_embedsiçin dikkat maskesi. - negative_prompt_embeds (torch.Tensor, opsiyonel) — Önceden hesaplanmış negatif prompt gömme değerleri.
- negative_prompt_embeds_mask (torch.Tensor, opsiyonel) —
negative_prompt_embedsiçin dikkat maskesi. - output_type (str, isteğe bağlı, varsayılan
"pil") — Çıktı biçimi. Ham latentleri döndürmek için"latent"geçirin. - return_dict (bool, isteğe bağlı, varsayılan True) — Bir JoyImageEditPipelineOutput mu yoksa düz bir tensör mü döndürüleceğini belirtir.
- callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, optional) —
Her gürültü azaltma adımının sonunda,
(self, step: int, timestep: int, callback_kwargs: Dict)imzasıyla çağrılan geri çağırma. - callback_on_step_end_tensor_inputs (List[str], opsiyonel, varsayılan
["latents"]) —callback_on_step_endiçincallback_kwargsiçinde yer alan tensör anahtarları. - max_sequence_length (int, opsiyonel, varsayılan 4096) — İstem kodlaması için maksimum dizi uzunluğu.
- enable_denormalization (bool, isteğe bağlı, varsayılan True) — VAE çözümlemesi öncesinde latentleri denormalize edin.
Dönüş değeri
[~pipelines.joyimage.JoyImageEditPipelineOutput] veya torch.Tensor
return_dict True ise, üretilen görüntü(ler)i içeren bir pipeline çıktı nesnesi döndürür.
Aksi halde görüntü tensörünü doğrudan döndürür.
Referans bir görüntü ve metin komutuna koşullu olarak düzenlenmiş bir görüntü oluşturun.
Örnekler:
>>> import torch
>>> from diffusers import JoyImageEditPipeline
>>> from diffusers.utils import load_image
>>> model_id = "jdopensource/JoyAI-Image-Edit-Diffusers"
>>> pipe = JoyImageEditPipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> image = load_image("https://huggingface.co/datasets/diffusers/docs-images/resolve/main/astronaut.jpg")
>>> output = pipe(
... image=image, # pass an image for editing; omit for text-to-image generation
... prompt="Add wings to the astronaut.",
... num_inference_steps=40,
... guidance_scale=4.0,
... generator=torch.manual_seed(0),
... )
>>> output.images[0].save("joyimage_edit.png")check_inputs
< source >( promptheightwidthnegative_prompt = Noneprompt_embeds = Nonenegative_prompt_embeds = Noneprompt_embeds_mask = Nonenegative_prompt_embeds_mask = Nonecallback_on_step_end_tensor_inputs = None )
Yükseltilen
ValueError
ValueError— Geçersiz argüman kombinasyonlarının herhangi birinde.
İleri geçişten önce pipeline girdilerini doğrulayın.
denormalize_latents
< source >( latent: Tensor )
Orijinal latent ölçeği geri getirmek için normalize_latents işlemini tersine çevirin.
encode_prompt
< source >( prompt: typing.Union[str, typing.List[str]]device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 1024template_type: str = 'image' )
Parametreler
- prompt — Prompt dizgesi veya prompt dizgileri listesi.
- device — Hedef cihaz.
- num_images_per_prompt — Her istem başına üretilecek çıktı sayısı.
- prompt_embeds — Ön hesaplanmış prompt gömüleri.
- prompt_embeds_mask — Ön hesaplanmış gömceler için dikkat maskesi.
- max_sequence_length — Maksimum çıktı dizisi uzunluğu.
- template_type — Prompt şablonu anahtarı (
"image"veya"multiple_images").
Bir metin komutunu gömme değerlerine kodlayın (yalnızca metin yolu).
Önceden hesaplanmış prompt_embeds, kodlamayı tamamen atlar.
encode_prompt_multiple_images
< source >( prompt: typing.Union[str, typing.List[str]]device: typing.Optional[torch.device] = Nonenum_images_per_prompt: int = 1images: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_embeds_mask: typing.Optional[torch.Tensor] = Nonetemplate_type: typing.Optional[str] = 'multiple_images'max_sequence_length: typing.Optional[int] = None )
Parametreler
- prompt — İsteğe bağlı olarak
<image>\njetonları içeren istemci dizgeleri. - device — Hedef cihaz.
- num_images_per_prompt — Her istem başına üretilecek çıktı sayısı.
- images — Satır içi görsel belirteçlerine karşılık gelen piksel tensörleri.
- prompt_embeds — Ön hesaplanmış prompt gömüleri.
- prompt_embeds_mask — Ön hesaplanmış gömceler için dikkat maskesi.
- template_type —
"multiple_images"olmalıdır. - max_sequence_length — Ayarlanırsa, çıktı bu uzunluğa kırpılır (son
max_sequence_lengthtoken korunur).
Qwen işlemcisi aracılığıyla satır içi görsel jetonları içeren istemleri kodlayın.
Her istemci dizgisindeki <image>\n yer tutucuları, çok modlu kodlayıcıya verilmeden önce Qwen görme özel belirteçleriyle değiştirilir.
normalize_latents
< source >( latent: Tensor )
VAE yapılandırmasındaki kanal başına istatistikleri kullanarak latentleri normalize edin.
VAE latents_mean ve latents_std değerlerini açığa çıkardığında (latent - mean) / std kullanılır; aksi takdirde scaling_factor ile ölçeklemeye geri düşülür.
prepare_latents
< source >( batch_size: intnum_channels_latents: intheight: intwidth: intvideo_length: intdtype: dtypedevice: devicegenerator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType]latents: typing.Optional[torch.Tensor] = Noneimage: typing.Optional[typing.List[PIL.Image.Image]] = Noneenable_denormalization: bool = True )
Parametreler
- batch_size — Toplumdaki örnek sayısı.
- num_channels_latents — Transformer yapılandırmasından gelen latent kanal boyutu.
- height — Piksel cinsinden uzamsal yükseklik.
- width — Piksel cinsinden uzamsal genişlik.
- video_length — Kare sayısı (görsel çıkarımı için 1).
- dtype — Latent tensör için kayan noktalı dtype.
- device — Hedef cihaz.
- generator — Yeniden üretilebilir örneklemeler için RNG üreteçleri.
- latents — Hedef slot için isteğe bağlı, kullanıcı tarafından sağlanan başlangıç gürültüsü.
Noneise rastgele gürültü örneklenir. - image — VAE kodlaması için koşullama yuvaları olarak kullanılacak isteğe bağlı PIL referans görselleri listesi.
- enable_denormalization — Kodlanmış referans latentlerin normalize edilip edilmeyeceği.
Yükseltilen
ValueError
ValueError—generator,batch_sizeile farklı uzunlukta bir liste ise.
Gürültü azaltma döngüsü için başlangıç gürültülü latent tensörünü hazırlayın.
JoyImageEditPipelineOutput
sınıf diffusers.JoyImageEditPipelineOutput
< source >( images: typing.Union[typing.List[PIL.Image.Image], numpy.ndarray] )
JoyImageEdit üretim hatları için çıktı sınıfı.