Diffusers documentation

JoyAI-Image-Edit-Plus

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

and get access to the augmented documentation experience

to get started

JoyAI-Image-Edit-Plus

JoyAI-Image é um modelo de fundação multimodal unificado para compreensão de imagens, geração de imagens a partir de texto e edição de imagens guiada por instruções. Ele combina um Modelo de Linguagem Grande Multimodal (MLLM) de 8B com um Transformer de Difusão Multimodal (MMDiT) de 16B.

JoyAI-Image-Edit-Plus é um modelo de edição guiado por instruções para múltiplas imagens que aceita várias imagens de referência e uma instrução de texto para gerar uma nova imagem que combina elementos das referências de acordo com a instrução. Ele suporta de 1 a 5 imagens de referência por amostra.

ModelDescriçãoDownload
JoyAI-Image-Edit-PlusEdição guiada por instruções com múltiplas imagens e composição de elementos a partir de múltiplas referênciasHugging Face
import torch
from PIL import Image
from diffusers import JoyImageEditPlusPipeline

pipeline = JoyImageEditPlusPipeline.from_pretrained(
    "jdopensource/JoyAI-Image-Edit-Plus-Diffusers", dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"

images = [
    Image.open("reference_0.png").convert("RGB"),
    Image.open("reference_1.png").convert("RGB"),
]

target_h, target_w = pipeline.image_processor.get_default_height_width(images[-1])

output = pipeline(
    images=images,
    prompt="Combine the person from the second image with the scene from the first image.",
    negative_prompt="low quality, blurry, deformed",
    height=target_h,
    width=target_w,
    num_inference_steps=30,
    guidance_scale=4.0,
    generator=torch.Generator("cuda").manual_seed(42),
).images[0]
output.save("joyimage_edit_plus_output.png")

JoyImageEditPlusPipeline

classe diffusers.JoyImageEditPlusPipeline

< >

( scheduler: FlowMatchEulerDiscreteSchedulervae: AutoencoderKLWantext_encoder: Qwen3VLForConditionalGenerationtokenizer: Qwen2Tokenizertransformer: JoyImageEditPlusTransformer3DModelprocessor: Qwen3VLProcessortext_token_max_length: int = 2048 )

Parâmetros

  • scheduler (FlowMatchEulerDiscreteScheduler) — Um scheduler a ser usado em combinação com transformer para desruidar os latentes da imagem codificada.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar e decodificar imagens para e a partir de representações latentes.
  • text_encoder (Qwen3VLForConditionalGeneration) — Codificador de texto multimodal para codificação de prompts com compreensão de imagens embutidas.
  • tokenizer (Qwen2Tokenizer) — Tokenizer para processamento de texto.
  • transformer (JoyImageEditPlusTransformer3DModel) — Arquitetura de Transformer condicional (MMDiT) para desruidar os latentes da imagem codificada.
  • processor (Qwen3VLProcessor) — Processador para entradas multimodais (texto + imagens).
  • text_token_max_length (int, padrão 2048) — Comprimento máximo de tokens para a codificação de texto.

Pipeline de difusão para edição guiada por instruções de múltiplas imagens usando JoyImage Edit Plus.

Suporta múltiplas imagens de referência com diferentes resoluções. Cada imagem de referência é codificada independentemente pelo VAE e convertida em patches, depois concatenada com os patches de ruído do alvo para a remoção de ruído conjunta.

__call__

< >

( images: list[PIL.Image.Image] | list[list[PIL.Image.Image]] | None = Noneprompt: str | list[str] = Noneheight: int | None = Nonewidth: int | None = Nonenum_inference_steps: int = 30timesteps: list[int] = Nonesigmas: list[float] = Noneguidance_scale: float = 4.0negative_prompt: str | list[str] | None = Nonegenerator: typing.Union[torch.Generator, 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: str | None = 'pil'return_dict: bool = Truecallback_on_step_end: typing.Union[typing.Callable[[int, int, dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 4096 ) → JoyImageEditPlusPipelineOutput or tuple

Parâmetros

  • images (list[Image.Image] ou list[list[Image.Image]], opcional) — Imagens de referência para edição. Cada imagem pode ter uma resolução diferente. Se uma lista plana for fornecida, ela é tratada como uma única amostra com múltiplas referências.
  • prompt (str ou list[str], opcional) — O prompt ou os prompts para orientar a geração da imagem. Se não for definido, é necessário passar prompt_embeds em vez disso.
  • height (int, opcional) — A altura em pixels da imagem gerada. Se None, determinada a partir da última imagem de referência.
  • width (int, opcional) — A largura em pixels da imagem gerada. Se None, é determinada a partir da última imagem de referência.
  • num_inference_steps (int, opcional, padrão 30) — O número de etapas de desruido. Mais etapas de desruido geralmente resultam em uma imagem de maior qualidade, à custa de uma inferência mais lenta.
  • timesteps (list[int], opcional) — Timesteps personalizados para usar no processo de remoção de ruído. Se não definidos, é usado espaçamento igual.
  • sigmas (list[float], opcional) — Sigmas personalizados para usar no processo de desruidamento.
  • guidance_scale (float, opcional, padrão 4.0) — Escala de orientação sem classificador. Valores maiores incentivam o modelo a gerar imagens mais alinhadas com o prompt, em detrimento de uma menor qualidade de imagem.
  • negative_prompt (str ou list[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não definido, um prompt em branco é usado para a orientação sem classificador.
  • generator (torch.Generator ou list[torch.Generator], opcional) — Um ou uma lista de geradores do torch para tornar a geração determinística.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pré-gerados para serem usados como entradas para a geração de imagens.
  • prompt_embeds (torch.Tensor, opcional) — Incorporações de texto pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto.
  • prompt_embeds_mask (torch.Tensor, opcional) — Máscara de atenção para embeddings de texto pré-gerados.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas.
  • negative_prompt_embeds_mask (torch.Tensor, opcional) — Máscara de atenção para embeddings de texto negativos pré-gerados.
  • output_type (str, opcional, padrão "pil") — O formato de saída da imagem gerada. Escolha entre "pil" (PIL.Image.Image), "np" (np.ndarray), "pt" (torch.Tensor) ou "latent" para saída latente bruta.
  • return_dict (bool, opcional, padrão True) — Se deve ou não retornar um JoyImageEditPlusPipelineOutput em vez de uma tupla simples.
  • callback_on_step_end (Callable, opcional) — Uma função chamada no final de cada etapa de desruidamento com os argumentos: o pipeline, o índice da etapa, o timestep e um dict de entradas de tensor do callback.
  • callback_on_step_end_tensor_inputs (list[str], opcional, padrão ["latents"]) — A lista de entradas de tensor para a função callback_on_step_end.
  • max_sequence_length (int, opcional, padrão 4096) — Comprimento máximo da sequência para o codificador de texto.

Se return_dict for True, JoyImageEditPlusPipelineOutput é retornado; caso contrário, uma tuple é retornada, onde o primeiro elemento é uma lista de imagens geradas.

Função invocada ao chamar o pipeline para geração.

Exemplos:

>>> import torch
>>> from diffusers import JoyImageEditPlusPipeline
>>> from diffusers.utils import load_image

>>> model_id = "jdopensource/JoyAI-Image-Edit-Plus-Diffusers"
>>> pipe = JoyImageEditPlusPipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> images = [
...     load_image("dog.png"),
...     load_image("person.png"),
... ]
>>> output = pipe(
...     images=images,
...     prompt="Let the person lovingly play with the dog.",
...     height=1024,
...     width=1024,
...     num_inference_steps=30,
...     guidance_scale=4.0,
...     generator=torch.manual_seed(42),
... )
>>> output.images[0].save("output.png")

encode_prompt_multiple_images

< >

( prompt: str | list[str]device: typing.Optional[torch.device] = Noneimages: list[PIL.Image.Image] | None = Nonemax_sequence_length: int | None = None )

Codifique prompts com tokens <image> inline por meio do processador Qwen3-VL.

prepare_latents

< >

( batch_size: intnum_channels_latents: intheight: intwidth: intdtype: dtypedevice: devicegenerator: typing.Union[torch.Generator, list[torch.Generator], NoneType]reference_images: list[list[PIL.Image.Image]] | None = Nonelatents: typing.Optional[torch.Tensor] = None ) → padded_latents

Parâmetros

  • latents — Ruído pré-computado opcional para o slot de destino. Formato (B, C, 1, H', W'), onde H' e W' são as dimensões do espaço latente. Quando None, um ruído aleatório é amostrado.

Retorna

padded_latents

[B, max_patches, C, pt, ph, pw] target_mask: [B, max_patches] (True para patches de destino) shape_list: lista por amostra de tuplas (t, h, w) para cada componente

Prepare um tensor latente 6D com preenchimento (padding) contendo o ruído alvo + os latentes da imagem de referência.

JoyImageEditPlusPipelineOutput

classe diffusers.JoyImageEditPlusPipelineOutput

< >

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

Classe de saída para pipelines de edição de múltiplas imagens do JoyImage Edit Plus.

Update on GitHub