Diffusers documentation

JoyAI-Image-Edit

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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.

ModelAçıklamaİndir
JoyAI-Image-EditHassas ve kontrol edilebilir uzamsal manipülasyon ile talimat yönlendirmeli görüntü düzenlemeHugging 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

< >

( 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__

< >

( 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=2 ile 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_steps listenin uzunluğundan çıkarılır.
  • sigmas (List[float], isteğe bağlı) — Gürültü azaltma süreci için özel sigmalar. timesteps ile 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 prompt atlanabilir.
  • prompt_embeds_mask (torch.Tensor, opsiyonel) — prompt_embeds iç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_embeds iç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_end için callback_kwargs iç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

< >

( 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

< >

( latent: Tensor )

Parametreler

  • latent — Normalize edilmiş latent tensör.

Orijinal latent ölçeği geri getirmek için normalize_latents işlemini tersine çevirin.

encode_prompt

< >

( 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

< >

( 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>\n jetonları 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_length token 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

< >

( latent: Tensor )

Parametreler

  • latent — vae.encode'den gelen ham latent tensör.

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

< >

( 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ü. None ise 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_size ile 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

< >

( images: typing.Union[typing.List[PIL.Image.Image], numpy.ndarray] )

JoyImageEdit üretim hatları için çıktı sınıfı.

Update on GitHub