# LEDITS++

  

LEDITS++ был предложен в статье [LEDITS++: Limitless Image Editing using Text-to-Image Models](https://huggingface.co/papers/2311.16711) Мануэлем Бракком, Феликсом Фридрихом, Катариной Корнмайер, Линоем Цабаном, Патриком Шрамовски, Кристьяном Керстингом и Аполинарио Пассосом.

Аннотация из статьи:

*Модели диффузии «текст в изображение» в последнее время вызывают всё больший интерес благодаря своей поразительной способности генерировать изображения высокого качества исключительно по текстовому вводу. Последующие исследования направлены на использование и применение их возможностей для реального редактирования изображений. Однако существующие методы «изображение в изображение» часто неэффективны, неточны и обладают ограниченной универсальностью. Они либо требуют длительной дообучения, либо излишне сильно отклоняются от входного изображения, и/или не поддерживают несколько одновременных правок. Для решения этих проблем мы представляем LEDITS++, эффективную, универсальную и точную технику текстового манипулирования изображениями. Новый подход к инверсии в LEDITS++ не требует настройки или оптимизации и обеспечивает результаты высокого качества за несколько шагов диффузии. Во-вторых, наша методология поддерживает несколько одновременных правок и не зависит от архитектуры модели. В-третьих, мы используем новую технику неявного маскирования, которая ограничивает изменения релевантными областями изображения. В рамках нашего исчерпывающего оценивания мы предлагаем новый бенчмарк TEdBench++. Наши результаты демонстрируют возможности LEDITS++ и его преимущества перед предыдущими методами. Страница проекта доступна по адресу https://leditsplusplus-project.static.hf.space .*

> [!TIP]
> Дополнительную информацию о LEDITS++ можно найти на [странице проекта](https://leditsplusplus-project.static.hf.space/index.html), а попробовать его в действии — в [демо](https://huggingface.co/spaces/editing-images/leditsplusplus).

> [!WARNING]
> Из-за некоторых проблем обратной совместимости с текущей реализацией [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) в diffusers данная реализация LEdits++ больше не может гарантировать идеальное инвертирование. Маловероятно, что эта проблема окажет заметное влияние на практические сценарии использования. Тем не менее мы предоставляем альтернативную реализацию, гарантирующую идеальное инвертирование, в отдельном [репозитории на GitHub](https://github.com/ml-research/ledits_pp).

Мы предоставляем два различных конвейера, основанных на разных предобученных моделях.

## LEditsPPPipelineStableDiffusion[[diffusers.LEditsPPPipelineStableDiffusion]]

#### diffusers.LEditsPPPipelineStableDiffusion[[diffusers.LEditsPPPipelineStableDiffusion]]

```python
diffusers.LEditsPPPipelineStableDiffusion(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: diffusers.schedulers.scheduling_ddim.DDIMScheduler | diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, requires_safety_checker: bool = True)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py#L269)

**Параметры:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ru/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder ([CLIPTextModel](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTextModel)) : Замороженный текстовый энкодер. Stable Diffusion использует текстовую часть [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), а именно вариант [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

tokenizer ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : Токенизатор класса [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.

scheduler ([DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) или [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler)) : планировщик, используемый в связке с `unet` для удаления шума из закодированных латентов изображения. Может быть одним из [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) или [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler). Если передан любой другой планировщик, он будет автоматически заменён на [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler).

safety_checker (`StableDiffusionSafetyChecker`) : модуль классификации, оценивающий, могут ли сгенерированные изображения считаться оскорбительными или вредными. Подробности см. в [карточке модели](https://huggingface.co/CompVis/stable-diffusion-v1-4).

feature_extractor ([CLIPImageProcessor](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPImageProcessor)): модель, извлекающая признаки из сгенерированных изображений для использования в качестве входных данных для `safety_checker`.

Пайплайн для текстового редактирования изображений с использованием LEDits++ и Stable Diffusion.

Эта модель наследуется от [DiffusionPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/overview#diffusers.DiffusionPipeline) и основана на [StableDiffusionPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/stable_diffusion/text2img#diffusers.StableDiffusionPipeline). Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.

#### __call__[[diffusers.LEditsPPPipelineStableDiffusion.__call__]]

```python
__call__(negative_prompt: str | list[str] | None = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, output_type: str | None = 'pil', return_dict: bool = True, editing_prompt: str | list[str] | None = None, editing_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, reverse_editing_direction: bool | list[bool] | None = False, edit_guidance_scale: float | list[float] | None = 5, edit_warmup_steps: int | list[int] | None = 0, edit_cooldown_steps: int | list[int] | None = None, edit_threshold: float | list[float] | None = 0.9, user_mask: typing.Optional[torch.Tensor] = None, sem_guidance: list[torch.Tensor] | None = None, use_cross_attn_mask: bool = False, use_intersect_mask: bool = True, attn_store_steps: list[int] | None = [], store_averaged_over_steps: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py#L720)

**Параметры:**

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Игнорируется, если не используется направляющая (то есть игнорируется, если `guidance_scale` меньше `1`).

generator (`torch.Generator`, *необязательный*) : Один или список [генераторов torch](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности генерации.

output_type (`str`, *необязательный*, по умолчанию `"pil"`) : Формат вывода для генерируемого изображения. Выберите между [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` или `np.array`.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли [LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) вместо обычного кортежа.

editing_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты для управления генерацией изображения. Изображение восстанавливается при установке `editing_prompt = None`. Направление управления промптом должно быть указано через `reverse_editing_direction`.

editing_prompt_embeds (`torch.Tensor>`, *необязательный*) : Предварительно вычисленные эмбеддинги, используемые для управления генерацией изображения. Направление управления эмбеддингом должно быть указано через `reverse_editing_direction`.

negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных (взвешивание промпта). Если не предоставлены, `negative_prompt_embeds` генерируются из входного аргумента `negative_prompt`.

reverse_editing_direction (`bool` или `list[bool]`, *необязательный*, по умолчанию `False`) : Указывает, следует ли увеличить или уменьшить соответствующий промпт в `editing_prompt`.

edit_guidance_scale (`float` или `list[float]`, *необязательный*, по умолчанию 5) : Масштаб руководства для управления генерацией изображения. Если передано в виде списка, значения должны соответствовать `editing_prompt`. `edit_guidance_scale` определяется как `s_e` из уравнения 12 в [статье LEDITS++](https://huggingface.co/papers/2301.12247).

edit_warmup_steps (`float` или `list[float]`, *необязательный*, по умолчанию 10) : Количество шагов диффузии (для каждого запроса), для которых направляющее поле не применяется.

edit_cooldown_steps (`float` или `list[float]`, *необязательный*, по умолчанию `None`) : Количество шагов диффузии (для каждого промпта), после которых гайданс больше не применяется.

edit_threshold (`float` или `list[float]`, *необязательный*, по умолчанию 0.9) : Порог маскирования для guidance. Порог должен быть пропорционален области изображения, которая изменяется. 'edit_threshold' определяется как 'λ' из уравнения 12 в [статье LEDITS++](https://huggingface.co/papers/2301.12247).

user_mask (`torch.Tensor`, *необязательный*) : Пользовательская маска для более точного контроля процесса редактирования. Это полезно, когда неявные маски LEDITS++ не соответствуют предпочтениям пользователя.

sem_guidance (`list[torch.Tensor]`, *необязательный*) : список заранее сгенерированных векторов управления, применяемых при генерации. Длина списка должна соответствовать `num_inference_steps`.

use_cross_attn_mask (`bool`, по умолчанию `False`) : Используется ли маски кросс-внимания. Маски кросс-внимания всегда используются, если use_intersect_mask установлен в true. Маски кросс-внимания определяются как 'M^1' из уравнения 12 [статьи LEDITS++](https://huggingface.co/papers/2311.16711).

use_intersect_mask (`bool`, по умолчанию `True`) : Определяет, вычисляется ли маскирующий член как пересечение масок кросс-внимания и масок, полученных из оценки шума. Маски кросс-внимания определяются как 'M^1', а маски, полученные из оценки шума, — как 'M^2' в уравнении 12 [статьи LEDITS++](https://huggingface.co/papers/2311.16711).

attn_store_steps (`list[int]`, *optional*) : Шаги, для которых карты внимания сохраняются в AttentionStore. Только для целей визуализации.

store_averaged_over_steps (`bool`, по умолчанию `True`) : Указывает, сохраняются ли карты внимания для 'attn_store_steps' в усреднённом виде по шагам диффузии. Если False, карты внимания для каждого шага сохраняются отдельно. Только для целей визуализации.

cross_attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

guidance_rescale (`float`, *необязательный*, по умолчанию 0.0) : Коэффициент rescale для guidance из статьи [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891). Коэффициент rescale для guidance должен исправлять переэкспозицию при использовании нулевого терминального SNR.

clip_skip (`int`, *optional*) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

callback_on_step_end (`Callable`, *необязательный*) : функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` будет содержать список всех тензоров, как указано в `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`, *optional*) : Список тензорных входных данных для функции `callback_on_step_end`. Тензоры, указанные в списке, будут переданы в качестве аргумента `callback_kwargs`. Вы сможете включать только переменные, перечисленные в атрибуте `._callback_tensor_inputs` вашего класса pipeline.

**Возвращает:** [LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) или `tuple`

[LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) if `return_dict` is True, otherwise a `tuple. When returning a tuple, the first element is a list with the generated images, and the second element is a list of `bool`s denoting whether the corresponding generated image likely represents "not-safe-for-work" (nsfw) content, according to the `safety_checker`.

Функция вызова конвейера для редактирования. Метод [invert()](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.LEditsPPPipelineStableDiffusion.invert) должен быть вызван заранее. Редактирование всегда выполняется для последнего инвертированного изображения (изображений).

Примеры:
```py
>>> import torch

>>> from diffusers import LEditsPPPipelineStableDiffusion
>>> from diffusers.utils import load_image

>>> pipe = LEditsPPPipelineStableDiffusion.from_pretrained(
...     "stable-diffusion-v1-5/stable-diffusion-v1-5", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")

>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/cherry_blossom.png"
>>> image = load_image(img_url).resize((512, 512))

>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.1)

>>> edited_image = pipe(
...     editing_prompt=["cherry blossom"], edit_guidance_scale=10.0, edit_threshold=0.75
... ).images[0]
```

#### invert[[diffusers.LEditsPPPipelineStableDiffusion.invert]]

```python
invert(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], source_prompt: str = '', source_guidance_scale: float = 3.5, num_inversion_steps: int = 30, skip: float = 0.15, generator: typing.Optional[torch.Generator] = None, cross_attention_kwargs: dict[str, typing.Any] | None = None, clip_skip: int | None = None, height: int | None = None, width: int | None = None, resize_mode: str | None = 'default', crops_coords: tuple[int, int, int, int] | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py#L1223)

**Параметры:**

image (`PipelineImageInput`) : Ввод для изображений, которые подлежат редактированию. Несколько входных изображений должны иметь одинаковое соотношение сторон по умолчанию.

source_prompt (`str`, по умолчанию `""`) : Промпт, описывающий входное изображение, который будет использоваться для управления процессом инверсии. Управление отключается, если `source_prompt` равно `""`.

source_guidance_scale (`float`, по умолчанию `3.5`) : Сила направленного управления при инверсии.

num_inversion_steps (`int`, по умолчанию `30`) : Общее количество выполняемых шагов инверсии после отбрасывания начальных `skip` шагов.

skip (`float`, по умолчанию `0.15`) : Доля начальных шагов, которая игнорируется при инверсии и последующей генерации. Меньшие значения приводят к более сильным изменениям входного изображения. `skip` должен находиться в диапазоне от `0` до `1`.

generator (`torch.Generator`, *необязательный*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности инверсии.

cross_attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в [`self.processor`](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

clip_skip (`int`, *optional*) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

height (`int`, *необязательный*, по умолчанию `None`) : Высота в пикселях предобработанного изображения. Если `None`, будет использована `get_default_height_width()` для получения значения по умолчанию.

width (`int`, *optional*`, defaults to `None`) : The width in preprocessed. If `None`, will use get_default_height_width()` to get the default width.

resize_mode (`str`, *optional*, по умолчанию `default`) : Режим изменения размера, может быть `default` или `fill`. Если `default`, изображение будет изменено в размер, чтобы поместиться в заданные ширину и высоту, при этом исходное соотношение сторон может не сохраняться. Если `fill`, изображение будет изменено в размер, чтобы поместиться в заданные ширину и высоту, с сохранением соотношения сторон, а затем центрировано в пределах этих размеров, при этом пустые области заполняются данными из изображения. Если `crop`, изображение будет изменено в размер, чтобы поместиться в заданные ширину и высоту, с сохранением соотношения сторон, а затем центрировано в пределах этих размеров, с обрезкой лишних частей. Обратите внимание, что resize_mode `fill` и `crop` поддерживаются только для входных изображений PIL.

crops_coords (`list[tuple[int, int, int, int]]`, *необязательный*, по умолчанию `None`) : Координаты обрезки для каждого изображения в батче. Если `None`, изображение не будет обрезано.

**Возвращает:** [LEditsPPInversionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPInversionPipelineOutput)

В выводе будут содержаться входное изображение (изображения) с изменённым размером и соответствующие реконструкции VAE.

Функция для пайплайна инверсии изображений, описанная в [статье LEDITS++](https://huggingface.co/papers/2301.12247). Если планировщик установлен в [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler), вместо этого будет выполнена инверсия, предложенная в [edit-friendly DPDM](https://huggingface.co/papers/2304.06140).

#### encode_prompt[[diffusers.LEditsPPPipelineStableDiffusion.encode_prompt]]

```python
encode_prompt(device, num_images_per_prompt, enable_edit_guidance, negative_prompt = None, editing_prompt = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, editing_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion.py#L521)

**Параметры:**

device : (`torch.device`): устройство torch

num_images_per_prompt (`int`) : количество изображений, которые должны быть сгенерированы для каждого промпта

enable_edit_guidance (`bool`) : следует ли выполнять редактирование или реконструировать входное изображение

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`).

editing_prompt (`str` или `list[str]`, *необязательный*) : Промпт(ы) для кодирования. Если не задан, необходимо передать `editing_prompt_embeds`.

editing_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, текстовые эмбеддинги будут сгенерированы из входного аргумента `prompt`.

negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

lora_scale (`float`, *необязательный*) : Масштаб LoRA, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.

clip_skip (`int`, *optional*) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

Кодирует промпт в скрытые состояния текстового энкодера.

## LEditsPPPipelineStableDiffusionXL[[diffusers.LEditsPPPipelineStableDiffusionXL]]

#### diffusers.LEditsPPPipelineStableDiffusionXL[[diffusers.LEditsPPPipelineStableDiffusionXL]]

```python
diffusers.LEditsPPPipelineStableDiffusionXL(vae: AutoencoderKL, text_encoder: CLIPTextModel, text_encoder_2: CLIPTextModelWithProjection, tokenizer: CLIPTokenizer, tokenizer_2: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: diffusers.schedulers.scheduling_dpmsolver_multistep.DPMSolverMultistepScheduler | diffusers.schedulers.scheduling_ddim.DDIMScheduler, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None, force_zeros_for_empty_prompt: bool = True, add_watermarker: bool | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L273)

**Параметры:**

vae ([AutoencoderKL](/docs/diffusers/v0.43.0/ru/api/models/autoencoderkl#diffusers.AutoencoderKL)) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder ([CLIPTextModel](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTextModel)) : замороженный текстовый энкодер. Stable Diffusion XL использует текстовую часть [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModel), а именно вариант [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14).

text_encoder_2 ([CLIPTextModelWithProjection](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTextModelWithProjection)) : второй замороженный текстовый энкодер. Stable Diffusion XL использует текстовую и пул-части [CLIP](https://huggingface.co/docs/transformers/model_doc/clip#transformers.CLIPTextModelWithProjection), а именно вариант [laion/CLIP-ViT-bigG-14-laion2B-39B-b160k](https://huggingface.co/laion/CLIP-ViT-bigG-14-laion2B-39B-b160k).

tokenizer ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : Токенизатор класса [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

tokenizer_2 ([CLIPTokenizer](https://huggingface.co/docs/transformers/v5.22.2/en/model_doc/clip#transformers.CLIPTokenizer)) : Второй токенизатор класса [CLIPTokenizer](https://huggingface.co/docs/transformers/v4.21.0/en/model_doc/clip#transformers.CLIPTokenizer).

unet ([UNet2DConditionModel](/docs/diffusers/v0.43.0/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel)) : Условная архитектура U-Net для удаления шума из закодированных латентов изображения.

scheduler ([DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) или [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler)) : планировщик, используемый в связке с `unet` для удаления шума из закодированных латентов изображения. Может быть одним из [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) или [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler). Если передан любой другой планировщик, он будет автоматически заменён на [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler).

force_zeros_for_empty_prompt (`bool`, *необязательный*, по умолчанию `"True"`) : Указывает, следует ли принудительно устанавливать эмбеддинги отрицательного промпта в 0. См. также конфигурацию `stabilityai/stable-diffusion-xl-base-1-0`.

add_watermarker (`bool`, *необязательный*) : Использовать ли библиотеку [invisible_watermark](https://github.com/ShieldMnt/invisible-watermark/) для добавления водяных знаков на выходные изображения. Если значение не задано, по умолчанию используется True, если пакет установлен, в противном случае водяной знак не добавляется.

Пайплайн для текстового редактирования изображений с использованием LEDits++ и Stable Diffusion XL.

Эта модель наследуется от [DiffusionPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/overview#diffusers.DiffusionPipeline) и основана на [StableDiffusionXLPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/stable_diffusion/stable_diffusion_xl#diffusers.StableDiffusionXLPipeline). Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации суперкласса.

Кроме того, конвейер наследует следующие методы загрузки:
- *LoRA*: [LEditsPPPipelineStableDiffusionXL.load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionXLLoraLoaderMixin.load_lora_weights)
- *Чекпоинт*: [loaders.FromSingleFileMixin.from_single_file()](/docs/diffusers/v0.43.0/ru/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file)

а также следующие методы сохранения:
- *LoRA*: `loaders.StableDiffusionXLPipeline.save_lora_weights`

#### __call__[[diffusers.LEditsPPPipelineStableDiffusionXL.__call__]]

```python
__call__(denoising_end: float | None = None, negative_prompt: str | list[str] | None = None, negative_prompt_2: str | list[str] | None = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, guidance_rescale: float = 0.0, crops_coords_top_left: tuple[int, int] = (0, 0), target_size: tuple[int, int] | None = None, editing_prompt: str | list[str] | None = None, editing_prompt_embeddings: typing.Optional[torch.Tensor] = None, editing_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, reverse_editing_direction: bool | list[bool] | None = False, edit_guidance_scale: float | list[float] | None = 5, edit_warmup_steps: int | list[int] | None = 0, edit_cooldown_steps: int | list[int] | None = None, edit_threshold: float | list[float] | None = 0.9, sem_guidance: list[torch.Tensor] | None = None, use_cross_attn_mask: bool = False, use_intersect_mask: bool = False, user_mask: typing.Optional[torch.Tensor] = None, attn_store_steps: list[int] | None = [], store_averaged_over_steps: bool = True, clip_skip: int | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], **kwargs)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L782)

**Параметры:**

denoising_end (`float`, *optional*) : When specified, determines the fraction (between 0.0 and 1.0) of the total denoising process to be completed before it is intentionally prematurely terminated. As a result, the returned sample will still retain a substantial amount of noise as determined by the discrete timesteps selected by the scheduler. The denoising_end parameter should ideally be utilized when this pipeline forms a part of a "Mixture of Denoisers" multi-pipeline setup, as elaborated in [**Refining the Image

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`).

negative_prompt_2 (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в `tokenizer_2` и `text_encoder_2`. Если не задан, `negative_prompt` используется в обоих текстовых кодировщиках

negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

ip_adapter_image : (`PipelineImageInput`, *необязательный*): Необязательное входное изображение для работы с IP-адаптерами.

output_type (`str`, *необязательный*, по умолчанию `"pil"`) : Формат вывода для генерируемого изображения. Выберите между [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` или `np.array`.

return_dict (`bool`, *необязательный*, по умолчанию `True`) : Возвращать ли `~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput` вместо обычного кортежа.

cross_attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

guidance_rescale (`float`, *optional*, defaults to 0.7) : Guidance rescale factor proposed by [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) `guidance_scale` is defined as `φ` in equation 16. of [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891). Guidance rescale factor should fix overexposure when using zero terminal SNR.

crops_coords_top_left (`tuple[int]`, *optional*, по умолчанию (0, 0)) : `crops_coords_top_left` можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции `crops_coords_top_left` вниз. Как правило, хорошо центрированные изображения получаются при установке `crops_coords_top_left` в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

target_size (`tuple[int]`, *optional*, по умолчанию (1024, 1024)) : В большинстве случаев `target_size` следует установить в желаемую высоту и ширину генерируемого изображения. Если не указано, по умолчанию будет `(width, height)`. Является частью микроусловий SDXL, как описано в разделе 2.2 статьи [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

editing_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты для управления генерацией изображения. Изображение восстанавливается при установке `editing_prompt = None`. Направление управления промптом должно быть указано через `reverse_editing_direction`.

editing_prompt_embeddings (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные эмбеддинги редактируемого текста. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, editing_prompt_embeddings будут сгенерированы из входного аргумента `editing_prompt`.

editing_pooled_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные пул-эмбеддинги редактируемого текста. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промптов. Если не предоставлено, editing_prompt_embeddings будет сгенерировано из входного аргумента `editing_prompt`.

reverse_editing_direction (`bool` или `list[bool]`, *необязательный*, по умолчанию `False`) : Указывает, следует ли увеличить или уменьшить соответствующий промпт в `editing_prompt`.

edit_guidance_scale (`float` или `list[float]`, *необязательный*, по умолчанию 5) : Масштаб руководства для управления генерацией изображения. Если передано в виде списка, значения должны соответствовать `editing_prompt`. `edit_guidance_scale` определяется как `s_e` из уравнения 12 в [статье LEDITS++](https://huggingface.co/papers/2301.12247).

edit_warmup_steps (`float` или `list[float]`, *необязательный*, по умолчанию 10) : Количество шагов диффузии (для каждого запроса), для которых не применяется управление.

edit_cooldown_steps (`float` или `list[float]`, *необязательный*, по умолчанию `None`) : Количество шагов диффузии (для каждого запроса), после которых гайданс больше не применяется.

edit_threshold (`float` или `list[float]`, *необязательный*, по умолчанию 0.9) : Порог маскирования для guidance. Порог должен быть пропорционален области изображения, которая изменяется. 'edit_threshold' определяется как 'λ' из уравнения 12 в [статье LEDITS++](https://huggingface.co/papers/2301.12247).

sem_guidance (`list[torch.Tensor]`, *необязательный*) : список заранее сгенерированных векторов управления, применяемых при генерации. Длина списка должна соответствовать `num_inference_steps`.

use_cross_attn_mask : Используется ли маски кросс-внимания. Маски кросс-внимания всегда используются, когда use_intersect_mask установлено в true. Маски кросс-внимания определяются как 'M^1' из уравнения 12 [статьи LEDITS++](https://huggingface.co/papers/2311.16711).

use_intersect_mask : Определяет, вычисляется ли маскирующий член как пересечение масок кросс-внимания и масок, полученных из оценки шума. Маски кросс-внимания определяются как 'M^1', а маски, полученные из оценки шума, — как 'M^2' в уравнении 12 [статьи LEDITS++](https://huggingface.co/papers/2311.16711).

user_mask : Маска, заданная пользователем, для ещё более точного контроля над процессом редактирования. Это полезно в тех случаях, когда неявные маски LEDITS++ не соответствуют предпочтениям пользователя.

attn_store_steps : Шаги, для которых карты внимания сохраняются в AttentionStore. Только для целей визуализации.

store_averaged_over_steps : Указывает, сохраняются ли карты внимания для 'attn_store_steps' в усреднённом виде по шагам диффузии. Если False, карты внимания для каждого шага сохраняются отдельно. Только для целей визуализации.

clip_skip (`int`, *optional*) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

callback_on_step_end (`Callable`, *необязательный*) : функция, вызываемая в конце каждого шага денойзинга во время инференса. Функция вызывается со следующими аргументами: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict)`. `callback_kwargs` будет содержать список всех тензоров, как указано в `callback_on_step_end_tensor_inputs`.

callback_on_step_end_tensor_inputs (`list`, *optional*) : Список тензорных входных данных для функции `callback_on_step_end`. Тензоры, указанные в списке, будут переданы в качестве аргумента `callback_kwargs`. Вы сможете включать только переменные, перечисленные в атрибуте `._callback_tensor_inputs` вашего класса pipeline.

**Возвращает:** [LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput) или `tuple`

[LEditsPPDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPDiffusionPipelineOutput), если `return_dict` равно True, иначе кортеж. При возврате кортежа первым элементом является список с сгенерированными изображениями.

Функция вызова конвейера для редактирования. Метод [invert()](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.LEditsPPPipelineStableDiffusionXL.invert) должен быть вызван заранее. Редактирование всегда выполняется для последнего инвертированного изображения (изображений).

Примеры:
```py
>>> import torch

>>> from diffusers import LEditsPPPipelineStableDiffusionXL
>>> from diffusers.utils import load_image

>>> pipe = LEditsPPPipelineStableDiffusionXL.from_pretrained(
...     "stabilityai/stable-diffusion-xl-base-1.0", variant="fp16", torch_dtype=torch.float16
... )
>>> pipe.vae.enable_tiling()
>>> pipe = pipe.to("cuda")

>>> img_url = "https://www.aiml.informatik.tu-darmstadt.de/people/mbrack/tennis.jpg"
>>> image = load_image(img_url).resize((1024, 1024))

>>> _ = pipe.invert(image=image, num_inversion_steps=50, skip=0.2)

>>> edited_image = pipe(
...     editing_prompt=["tennis ball", "tomato"],
...     reverse_editing_direction=[True, False],
...     edit_guidance_scale=[5.0, 10.0],
...     edit_threshold=[0.9, 0.85],
... ).images[0]
```

#### invert[[diffusers.LEditsPPPipelineStableDiffusionXL.invert]]

```python
invert(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], source_prompt: str = '', source_guidance_scale = 3.5, negative_prompt: str = None, negative_prompt_2: str = None, num_inversion_steps: int = 50, skip: float = 0.15, generator: typing.Optional[torch.Generator] = None, crops_coords_top_left: tuple[int, int] = (0, 0), num_zero_noise_steps: int = 3, cross_attention_kwargs: dict[str, typing.Any] | None = None, height: int | None = None, width: int | None = None, resize_mode: str | None = 'default', crops_coords: tuple[int, int, int, int] | None = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L1414)

**Параметры:**

image (`PipelineImageInput`) : Ввод для изображений, которые подлежат редактированию. Несколько входных изображений должны иметь одинаковое соотношение сторон по умолчанию.

source_prompt (`str`, по умолчанию `""`) : Промпт, описывающий входное изображение, который будет использоваться для управления процессом инверсии. Управление отключается, если `source_prompt` равно `""`.

source_guidance_scale (`float`, по умолчанию `3.5`) : Сила направленного управления при инверсии.

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`. Игнорируется, если не используется направляющее влияние (то есть игнорируется, если `guidance_scale` меньше `1`).

negative_prompt_2 (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в `tokenizer_2` и `text_encoder_2`. Если не задан, `negative_prompt` используется в обоих текстовых кодировщиках

num_inversion_steps (`int`, по умолчанию `50`) : Общее количество выполняемых шагов инверсии после отбрасывания начальных `skip` шагов.

skip (`float`, по умолчанию `0.15`) : Доля начальных шагов, которая игнорируется при инверсии и последующей генерации. Меньшие значения приводят к более сильным изменениям входного изображения. `skip` должен находиться в диапазоне от `0` до `1`.

generator (`torch.Generator`, *необязательный*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) для обеспечения детерминированности инверсии.

crops_coords_top_left (`tuple[int]`, *optional*, по умолчанию (0, 0)) : `crops_coords_top_left` можно использовать для генерации изображения, которое выглядит как «обрезанное» из позиции `crops_coords_top_left` вниз. Как правило, хорошо центрированные изображения получаются при установке `crops_coords_top_left` в (0, 0). Является частью микроусловий SDXL, описанных в разделе 2.2 статьи [https://huggingface.co/papers/2307.01952](https://huggingface.co/papers/2307.01952).

num_zero_noise_steps (`int`, по умолчанию `3`) : Количество последних шагов диффузии, на которых текущее изображение не будет подвергаться повторному шумлению. Если ни один шаг не установлен в ноль, SD-XL в сочетании с [DPMSolverMultistepScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/multistep_dpm_solver#diffusers.DPMSolverMultistepScheduler) будет создавать артефакты шума.

cross_attention_kwargs (`dict`, *необязательный*) : Словарь kwargs, который при указании передается в `AttentionProcessor`, определенный в `self.processor` в [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py).

**Возвращает:** [LEditsPPInversionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/ledits_pp#diffusers.pipelines.LEditsPPInversionPipelineOutput)

В выводе будут содержаться входное изображение (изображения) с изменённым размером и соответствующие реконструкции VAE.

Функция для пайплайна инверсии изображений, описанная в [статье LEDITS++](https://huggingface.co/papers/2301.12247). Если планировщик установлен в [DDIMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/ddim#diffusers.DDIMScheduler), вместо этого будет выполнена инверсия, предложенная в [edit-friendly DPDM](https://huggingface.co/papers/2304.06140).

#### encode_prompt[[diffusers.LEditsPPPipelineStableDiffusionXL.encode_prompt]]

```python
encode_prompt(device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, negative_prompt: str | None = None, negative_prompt_2: str | None = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None, lora_scale: float | None = None, clip_skip: int | None = None, enable_edit_guidance: bool = True, editing_prompt: str | None = None, editing_prompt_embeds: typing.Optional[torch.Tensor] = None, editing_pooled_prompt_embeds: typing.Optional[torch.Tensor] = None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L399)

**Параметры:**

device : (`torch.device`): устройство torch

num_images_per_prompt (`int`) : количество изображений, которые должны быть сгенерированы для каждого промпта

negative_prompt (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать `negative_prompt_embeds`.

negative_prompt_2 (`str` или `list[str]`, *необязательный*) : Промпт или промпты, которые не должны направлять генерацию изображения, и которые передаются в `tokenizer_2` и `text_encoder_2`. Если не задан, `negative_prompt` используется в обоих текстовых кодировщиках

negative_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

negative_pooled_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные отрицательные пул-эмбеддинги текста. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промптов. Если не предоставлены, пул-эмбеддинги negative_prompt_embeds будут сгенерированы из входного аргумента `negative_prompt`.

lora_scale (`float`, *optional*) : масштаб lora, который будет применён ко всем слоям LoRA текстового энкодера, если слои LoRA загружены.

clip_skip (`int`, *optional*) : Количество слоев, которые пропускаются в CLIP при вычислении эмбеддингов промпта. Значение 1 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

enable_edit_guidance (`bool`) : Указывает, следует ли направлять процесс в сторону редактирующего промпта.

editing_prompt (`str` или `list[str]`, *необязательный*) : Промпт(ы) для кодирования. Если не задан и 'enable_edit_guidance' равно True, необходимо передать `editing_prompt_embeds`.

editing_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные эмбеддинги редактируемого текста. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлено и 'enable_edit_guidance' равно True, editing_prompt_embeds будут сгенерированы из входного аргумента `editing_prompt`.

editing_pooled_prompt_embeds (`torch.Tensor`, *необязательный*) : Предварительно сгенерированные пул-эмбеддинги редактируемого текста. Можно использовать для простой настройки текстовых входных данных, *например* для взвешивания промпта. Если не предоставлены, пул-эмбеддинги editing_pooled_prompt_embeds будут сгенерированы из входного аргумента `editing_prompt`.

Кодирует промпт в скрытые состояния текстового энкодера.

#### get_guidance_scale_embedding[[diffusers.LEditsPPPipelineStableDiffusionXL.get_guidance_scale_embedding]]

```python
get_guidance_scale_embedding(w: Tensor, embedding_dim: int = 512, dtype: dtype = torch.float32)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_leditspp_stable_diffusion_xl.py#L696)

**Параметры:**

w (`torch.Tensor`) : Генерирует векторы эмбеддингов с заданным масштабом руководства (guidance scale) для последующего обогащения эмбеддингов временных шагов.

embedding_dim (`int`, *необязательный*, по умолчанию 512) : Размерность генерируемых эмбеддингов.

dtype (`torch.dtype`, *необязательный*, по умолчанию `torch.float32`) : Тип данных для генерируемых эмбеддингов.

**Возвращает:** `torch.Tensor`

Векторы встраиваний с формой `(len(w), embedding_dim)`.

См. https://github.com/google-research/vdm/blob/dc27b98a554f65cdc654b800da5aa1846545d41b/model_vdm.py#L298

## LEditsPPDiffusionPipelineOutput[[diffusers.pipelines.LEditsPPDiffusionPipelineOutput]]

#### diffusers.pipelines.LEditsPPDiffusionPipelineOutput[[diffusers.pipelines.LEditsPPDiffusionPipelineOutput]]

```python
diffusers.pipelines.LEditsPPDiffusionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, nsfw_content_detected: list[bool] | None)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_output.py#L10)

**Параметры:**

images (`list[PIL.Image.Image]` или `np.ndarray`) : список денойзированных изображений PIL длиной `batch_size` или массив NumPy формы `(batch_size, height, width, num_channels)`.

nsfw_content_detected (`list[bool]`) : список, указывающий, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw), или `None`, если проверка безопасности не могла быть выполнена.

Класс вывода для пайплайнов диффузии LEdits++.

## LEditsPPInversionPipelineOutput[[diffusers.pipelines.LEditsPPInversionPipelineOutput]]

#### diffusers.pipelines.LEditsPPInversionPipelineOutput[[diffusers.pipelines.LEditsPPInversionPipelineOutput]]

```python
diffusers.pipelines.LEditsPPInversionPipelineOutput(images: list[PIL.Image.Image] | numpy.ndarray, vae_reconstruction_images: list[PIL.Image.Image] | numpy.ndarray)
```

[Источник](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/pipelines/ledits_pp/pipeline_output.py#L28)

**Параметры:**

input_images (`list[PIL.Image.Image]` или `np.ndarray`) : список обрезанных и измененных по размеру входных изображений в формате PIL длиной `batch_size` или массив NumPy формы ` (batch_size, height, width, num_channels)`.

vae_reconstruction_images (`list[PIL.Image.Image]` или `np.ndarray`) : список реконструкций VAE для всех входных изображений в формате PIL длиной `batch_size` или массив NumPy формы ` (batch_size, height, width, num_channels)`.

Класс вывода для пайплайнов диффузии LEdits++.

