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.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-Plus

JoyAI-Image — это единая мультимодальная базовая модель для понимания изображений, генерации изображений по тексту и редактирования изображений по инструкциям. Она объединяет мультимодальную большую языковую модель (MLLM) на 8 млрд параметров и мультимодальный диффузионный трансформер (MMDiT) на 16 млрд параметров.

JoyAI-Image-Edit-Plus — это модель редактирования по текстовым инструкциям, работающая с несколькими изображениями. Она принимает несколько референсных изображений и текстовую инструкцию, чтобы сгенерировать новое изображение, сочетающее элементы из референсов в соответствии с инструкцией. Поддерживается от 1 до 5 референсных изображений на один пример.

МодельОписаниеЗагрузить
JoyAI-Image-Edit-PlusРедактирование по инструкции с несколькими изображениями с композицией элементов из нескольких источниковHugging 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

класс diffusers.JoyImageEditPlusPipeline

< >

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

Параметры

  • scheduler (FlowMatchEulerDiscreteScheduler) — планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.
  • text_encoder (Qwen3VLForConditionalGeneration) — Мультимодальный текстовый энкодер для кодирования промптов с пониманием встроенных изображений.
  • tokenizer (Qwen2Tokenizer) — Токенизатор для обработки текста.
  • transformer (JoyImageEditPlusTransformer3DModel) — условная архитектура Transformer (MMDiT) для удаления шума из закодированных латентов изображения.
  • processor (Qwen3VLProcessor) — Процессор для мультимодальных входных данных (текст + изображения).
  • text_token_max_length (int, по умолчанию 2048) — Максимальная длина последовательности токенов для кодирования текста.

Diffusion pipeline для редактирования нескольких изображений по инструкциям с использованием JoyImage Edit Plus.

Поддерживает несколько эталонных изображений с различными разрешениями. Каждое эталонное изображение независимо кодируется VAE и преобразуется в патчи, после чего конкатенируется с целевыми шумовыми патчами для совместного шумоподавления.

__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 = Nonesigmas: list = 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 = ['latents']max_sequence_length: int = 4096 ) → JoyImageEditPlusPipelineOutput or tuple

Параметры

  • images (list[Image.Image] или list[list[Image.Image]], необязательный) — Справочные изображения для редактирования. Каждое изображение может иметь различное разрешение. Если передан плоский список, он рассматривается как один образец с несколькими справочными изображениями.
  • prompt (str или list[str], необязательный) — Промпт или промпты для управления генерацией изображения. Если не задан, необходимо передать prompt_embeds вместо него.
  • height (int, необязательный) — Высота генерируемого изображения в пикселях. Если None, определяется по последнему опорному изображению.
  • width (int, необязательный) — Ширина генерируемого изображения в пикселях. Если None, определяется по последнему опорному изображению.
  • num_inference_steps (int, необязательный, по умолчанию 30) — Количество шагов денойзинга. Увеличение числа шагов денойзинга обычно приводит к повышению качества изображения за счет замедления инференса.
  • timesteps (list[int], необязательный) — Пользовательские шаги для процесса удаления шума. Если не заданы, используется равномерное распределение.
  • sigmas (list[float], необязательный) — Пользовательские сигмы для использования в процессе удаления шума.
  • guidance_scale (float, необязательный, по умолчанию 4.0) — Масштаб классификаторно-свободного управления. Более высокие значения побуждают модель генерировать изображения, более точно соответствующие prompt, за счёт снижения качества изображения.
  • negative_prompt (str или list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, для classifier-free guidance используется пустой промпт.
  • generator (torch.Generator или list[torch.Generator], необязательный) — Один или список генераторов torch для обеспечения детерминированности генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты, используемые в качестве входных данных для генерации изображений.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой корректировки текстовых входных данных.
  • prompt_embeds_mask (torch.Tensor, необязательный) — Маска внимания для предсгенерированных текстовых эмбеддингов.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги.
  • negative_prompt_embeds_mask (torch.Tensor, необязательный) — Маска внимания для предварительно сгенерированных отрицательных текстовых эмбеддингов.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного изображения. Выберите один из вариантов: "pil" (PIL.Image.Image), "np" (np.ndarray), "pt" (torch.Tensor) или "latent" для вывода в латентном пространстве.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать JoyImageEditPlusPipelineOutput вместо обычного кортежа.
  • callback_on_step_end (Callable, необязательный) — Функция, вызываемая в конце каждого шага денойзинга с аргументами: пайплайн, индекс шага, timestep и словарь тензорных входных данных для callback.
  • callback_on_step_end_tensor_inputs (list[str], необязательный, по умолчанию ["latents"]) — Список тензорных входных данных для функции callback_on_step_end.
  • max_sequence_length (int, необязательный, по умолчанию 4096) — Максимальная длина последовательности для текстового энкодера.

Возвращает

JoyImageEditPlusPipelineOutput или tuple

Если return_dict равно True, возвращается JoyImageEditPlusPipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных изображений.

Функция, вызываемая при обращении к конвейеру для генерации.

Примеры:

>>> 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 )

Кодируйте промпты с встроенными токенами <image> с помощью процессора 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

Параметры

  • latents — Необязательный заранее вычисленный шум для целевого слота. Форма (B, C, 1, H', W'), где H' и W' — размеры в латентном пространстве. Если None, шум выбирается случайно.

Возвращает

padded_latents

[B, max_patches, C, pt, ph, pw] target_mask: [B, max_patches] (True для целевых патчей) shape_list: список кортежей (t, h, w) для каждого компонента в каждом образце

Подготовьте 6D тензор латентов с заполнением, содержащий целевой шум и латенты референсного изображения.

JoyImageEditPlusPipelineOutput

класс diffusers.JoyImageEditPlusPipelineOutput

< >

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

Класс вывода для пайплайнов многоизображенияльного редактирования JoyImage Edit Plus.

Update on GitHub