# Модели латентной консистентности

  

Модели латентной согласованности (LCM) были предложены в работе [Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference](https://huggingface.co/papers/2310.04378) авторами Simian Luo, Yiqin Tan, Longbo Huang, Jian Li и Hang Zhao.

Аннотация к статье приведена ниже:

*Модели латентной диффузии (LDM) достигли выдающихся результатов в синтезе изображений высокого разрешения. Однако итеративный процесс выборки вычислительно затратен и приводит к медленной генерации. Вдохновлённые моделями согласованности (song et al.), мы предлагаем латентные модели согласованности (LCM), которые обеспечивают быстрое выведение с минимальным числом шагов для любых предобученных LDM, включая Stable Diffusion (rombach et al). Рассматривая управляемый обратный процесс диффузии как решение расширенного обыкновенного дифференциального уравнения потока вероятностей (PF-ODE), LCM спроектированы так, чтобы напрямую предсказывать решение такого ОДУ в латентном пространстве, что снижает необходимость в множественных итерациях и позволяет осуществлять быструю выборку с высокой точностью. Эффективно дистиллированные из предобученных диффузионных моделей с классификаторно-свободным управлением, высококачественная LCM 768 x 768 с 2~4 шагами требует всего 32 часов GPU A100 для обучения. Кроме того, мы вводим латентную согласованную дообучение (LCF), новый метод, разработанный специально для дообучения LCM на пользовательских наборах изображений. Оценка на наборе данных LAION-5B-Aesthetics показывает, что LCM достигают передовых результатов в генерации изображений по тексту с выведением за несколько шагов. Страница проекта: [this https URL](https://latent-consistency-models.github.io/).*

Демо для чекпоинта [SimianLuo/LCM_Dreamshaper_v7](https://huggingface.co/SimianLuo/LCM_Dreamshaper_v7) можно найти [здесь](https://huggingface.co/spaces/SimianLuo/Latent_Consistency_Model).

Пайплайны были предоставлены [luosiallen](https://luosiallen.github.io/), [nagolinc](https://github.com/nagolinc) и [dg845](https://github.com/dg845).

> [!TIP]
> LCM и LCM-LoRA доступны для Stable Diffusion v1.5, Stable Diffusion XL и модели SSD-1B. Их контрольные точки можно найти в коллекциях [Latent Consistency](https://hf.co/collections/latent-consistency/latent-consistency-models-weights-654ce61a95edd6dffccef6a8).

## Текст в изображение

Чтобы использовать LCM, необходимо загрузить контрольную точку LCM для поддерживаемой вами модели в [UNet2DConditionModel](/docs/diffusers/v0.43.0/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel) и заменить планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). После этого вы можете использовать конвейер как обычно, передавая текстовый промпт для генерации изображения всего за 4 шага.

При использовании LCM следует учитывать несколько моментов:

* Как правило, размер батча удваивается внутри конвейера для classifier-free guidance. Однако LCM применяет guidance с помощью guidance embeddings и не требует удвоения размера батча, что приводит к более быстрому инференсу. Недостаток в том, что negative prompts не работают с LCM, поскольку они не оказывают никакого влияния на процесс денойзинга.
* Оптимальный диапазон для `guidance_scale` составляет [3., 13.], так как именно с этими значениями обучалась UNet. Однако в большинстве случаев также эффективно отключить `guidance_scale`, установив значение 1.0.

```python
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image
```

    

Чтобы использовать LCM-LoRAs, необходимо заменить планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler) и загрузить веса LCM-LoRA с помощью метода [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights). После этого можно использовать пайплайн как обычно, передавая текстовый промпт для генерации изображения всего за 4 шага.

При использовании LCM-LoRAs следует учитывать несколько моментов:

* Как правило, размер батча удваивается внутри конвейера для classifier-free guidance. Однако LCM применяет guidance с помощью guidance embeddings и не требует удвоения размера батча, что приводит к более быстрому инференсу. Недостаток в том, что negative prompts не работают с LCM, поскольку они не оказывают никакого влияния на процесс денойзинга.
* Вы можете использовать guidance с LCM-LoRAs, но он очень чувствителен к высоким значениям `guidance_scale`, что может привести к артефактам на сгенерированном изображении. Лучшие значения, которые мы нашли, находятся в диапазоне [1.0, 2.0].
* Замените [stabilityai/stable-diffusion-xl-base-1.0](https://hf.co/stabilityai/stable-diffusion-xl-base-1.0) на любую дообученную модель. Например, попробуйте использовать чекпоинт [animagine-xl](https://huggingface.co/Linaqruf/animagine-xl) для генерации аниме-изображений с помощью SDXL.

```py
import torch
from diffusers import DiffusionPipeline, LCMScheduler

pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    variant="fp16",
    dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")

prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"
generator = torch.manual_seed(42)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=1.0
).images[0]
image
```

    

## Изображение в изображение

Чтобы использовать LCM для преобразования изображения в изображение, необходимо загрузить контрольную точку LCM для поддерживаемой вами модели в [UNet2DConditionModel](/docs/diffusers/v0.43.0/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel) и заменить планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). После этого вы можете использовать конвейер как обычно, передавая текстовый промпт и исходное изображение, чтобы сгенерировать изображение всего за 4 шага.

> [!TIP]
> Экспериментируйте с различными значениями `num_inference_steps`, `strength` и `guidance_scale`, чтобы получить наилучшие результаты.

```python
import torch
from diffusers import AutoPipelineForImage2Image, UNet2DConditionModel, LCMScheduler
from diffusers.utils import load_image

unet = UNet2DConditionModel.from_pretrained(
    "SimianLuo/LCM_Dreamshaper_v7",
    subfolder="unet",
    dtype=torch.float16,
)

pipe = AutoPipelineForImage2Image.from_pretrained(
    "Lykon/dreamshaper-7",
    unet=unet,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt,
    image=init_image,
    num_inference_steps=4,
    guidance_scale=7.5,
    strength=0.5,
    generator=generator
).images[0]
image
```

  
    
    изображение по умолчанию
  
  
    
    сгенерированное изображение
  

Чтобы использовать LCM-LoRAs для задачи image-to-image, необходимо заменить планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler) и загрузить веса LCM-LoRA с помощью метода [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights). После этого можно использовать пайплайн как обычно, передав текстовый промпт и исходное изображение, чтобы сгенерировать изображение всего за 4 шага.

> [!TIP]
> Экспериментируйте с различными значениями `num_inference_steps`, `strength` и `guidance_scale`, чтобы получить наилучшие результаты.

```py
import torch
from diffusers import AutoPipelineForImage2Image, LCMScheduler
from diffusers.utils import make_image_grid, load_image

pipe = AutoPipelineForImage2Image.from_pretrained(
    "Lykon/dreamshaper-7",
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/img2img-init.png")
prompt = "Astronauts in a jungle, cold color palette, muted colors, detailed, 8k"

generator = torch.manual_seed(0)
image = pipe(
    prompt,
    image=init_image,
    num_inference_steps=4,
    guidance_scale=1,
    strength=0.6,
    generator=generator
).images[0]
image
```

  
    
    изображение по умолчанию
  
  
    
    сгенерированное изображение
  

## Инпейнтинг

Чтобы использовать LCM-LoRAs для inpainting, необходимо заменить планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler) и загрузить веса LCM-LoRA с помощью метода [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights). После этого можно использовать пайплайн как обычно, передав текстовый промпт, исходное изображение и маску, чтобы сгенерировать изображение всего за 4 шага.

```py
import torch
from diffusers import AutoPipelineForInpainting, LCMScheduler
from diffusers.utils import load_image, make_image_grid

pipe = AutoPipelineForInpainting.from_pretrained(
    "stable-diffusion-v1-5/stable-diffusion-inpainting",
    dtype=torch.float16,
    variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

init_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint.png")
mask_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/inpaint_mask.png")

prompt = "concept art digital painting of an elven castle, inspired by lord of the rings, highly detailed, 8k"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    image=init_image,
    mask_image=mask_image,
    generator=generator,
    num_inference_steps=4,
    guidance_scale=4,
).images[0]
image
```

  
    
    изображение по умолчанию
  
  
    
    сгенерированное изображение
  

## Адаптеры

LCM совместимы с адаптерами, такими как LoRA, ControlNet, T2I-Adapter и AnimateDiff. Вы можете использовать скорость LCM в этих адаптерах для генерации изображений в определённом стиле или для условного управления моделью на основе другого входа, например, canny-изображения.

### LoRA

[LoRA](../../tutorials/using_peft_for_inference)-адаптеры можно быстро дообучить, чтобы они освоили новый стиль по нескольким изображениям, и подключить к предобученной модели для генерации изображений в этом стиле.

Загрузите контрольную точку LCM для поддерживаемой вами модели в [UNet2DConditionModel](/docs/diffusers/v0.43.0/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel) и замените планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). После этого вы можете использовать метод [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) для загрузки весов LoRA в LCM и генерации стилизованного изображения за несколько шагов.

```python
from diffusers import StableDiffusionXLPipeline, UNet2DConditionModel, LCMScheduler
import torch

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", unet=unet, dtype=torch.float16, variant="fp16",
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")

prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt, num_inference_steps=4, generator=generator, guidance_scale=8.0
).images[0]
image
```

    

Замените планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). Затем с помощью метода [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) загрузите веса LCM-LoRA и стилевой LoRA, который вы хотите использовать. Соедините оба адаптера LoRA с помощью метода `~loaders.UNet2DConditionLoadersMixin.set_adapters` и сгенерируйте стилизованное изображение за несколько шагов.

```py
import torch
from diffusers import DiffusionPipeline, LCMScheduler

pipe = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    variant="fp16",
    dtype=torch.float16
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl", adapter_name="lcm")
pipe.load_lora_weights("TheLastBen/Papercut_SDXL", weight_name="papercut.safetensors", adapter_name="papercut")

pipe.set_adapters(["lcm", "papercut"], adapter_weights=[1.0, 0.8])

prompt = "papercut, a cute fox"
generator = torch.manual_seed(0)
image = pipe(prompt, num_inference_steps=4, guidance_scale=1, generator=generator).images[0]
image
```

    

### ControlNet

[ControlNet](./controlnet) — это адаптеры, которые можно обучать на разнообразных входных данных, таких как канни-контур, оценка позы или глубина. ControlNet можно вставить в конвейер, чтобы обеспечить модели дополнительное условие и контроль для более точной генерации.

Дополнительные модели ControlNet, обученные на других входных данных, можно найти в репозитории [lllyasviel](https://hf.co/lllyasviel).

Загрузите модель ControlNet, обученную на canny-изображениях, и передайте её в [ControlNetModel](/docs/diffusers/v0.43.0/ru/api/models/controlnet#diffusers.ControlNetModel). Затем загрузите модель LCM в [StableDiffusionControlNetPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/controlnet#diffusers.StableDiffusionControlNetPipeline) и замените планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). Теперь передайте canny-изображение в конвейер и сгенерируйте изображение.

> [!TIP]
> Экспериментируйте с различными значениями `num_inference_steps`, `controlnet_conditioning_scale`, `cross_attention_kwargs` и `guidance_scale`, чтобы получить наилучшие результаты.

```python
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image, make_image_grid

image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)

controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "SimianLuo/LCM_Dreamshaper_v7",
    controlnet=controlnet,
    dtype=torch.float16,
    safety_checker=None,
).to("cuda")  # or "mps", "xpu", "cpu"
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

generator = torch.manual_seed(0)
image = pipe(
    "the mona lisa",
    image=canny_image,
    num_inference_steps=4,
    generator=generator,
).images[0]
make_image_grid([canny_image, image], rows=1, cols=2)
```

    

Загрузите модель ControlNet, обученную на canny-изображениях, и передайте её в [ControlNetModel](/docs/diffusers/v0.43.0/ru/api/models/controlnet#diffusers.ControlNetModel). Затем вы можете загрузить модель Stable Diffusion v1.5 в [StableDiffusionControlNetPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/controlnet#diffusers.StableDiffusionControlNetPipeline) и заменить планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). Используйте метод [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) для загрузки весов LCM-LoRA, передайте canny-изображение в конвейер и сгенерируйте изображение.

> [!TIP]
> Экспериментируйте с различными значениями `num_inference_steps`, `controlnet_conditioning_scale`, `cross_attention_kwargs` и `guidance_scale`, чтобы получить наилучшие результаты.

```py
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionControlNetPipeline, ControlNetModel, LCMScheduler
from diffusers.utils import load_image

image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((512, 512))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image)

controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny", dtype=torch.float16)
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "stable-diffusion-v1-5/stable-diffusion-v1-5",
    controlnet=controlnet,
    dtype=torch.float16,
    safety_checker=None,
    variant="fp16"
).to("cuda")  # or "mps", "xpu", "cpu"

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5")

generator = torch.manual_seed(0)
image = pipe(
    "the mona lisa",
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=1.5,
    controlnet_conditioning_scale=0.8,
    cross_attention_kwargs={"scale": 1},
    generator=generator,
).images[0]
image
```

    

### T2I-Adapter

[T2I-Adapter](../../using-diffusers/legacy_adapters#t2i-adapter) — это ещё более лёгкий адаптер, чем ControlNet, который обеспечивает дополнительный вход для условного управления предобученной моделью. Он работает быстрее, чем ControlNet, но результаты могут быть немного хуже.

Дополнительные контрольные точки T2I-Adapter, обученные на других входных данных, можно найти в репозитории [TencentArc](https://hf.co/TencentARC).

Загрузите T2IAdapter, обученный на canny-изображениях, и передайте его в [StableDiffusionXLAdapterPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/stable_diffusion/adapter#diffusers.StableDiffusionXLAdapterPipeline). Затем загрузите контрольную точку LCM в [UNet2DConditionModel](/docs/diffusers/v0.43.0/ru/api/models/unet2d-cond#diffusers.UNet2DConditionModel) и замените планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler). Теперь передайте canny-изображение в конвейер и сгенерируйте изображение.

```python
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid

# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1216))

adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda")  # or "mps", "xpu", "cpu"

unet = UNet2DConditionModel.from_pretrained(
    "latent-consistency/lcm-sdxl",
    dtype=torch.float16,
    variant="fp16",
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    unet=unet,
    adapter=adapter,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"

generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=5,
    adapter_conditioning_scale=0.8,
    adapter_conditioning_factor=1,
    generator=generator,
).images[0]
```

    

Загрузите T2IAdapter, обученный на canny-изображениях, и передайте его в [StableDiffusionXLAdapterPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/stable_diffusion/adapter#diffusers.StableDiffusionXLAdapterPipeline). Замените планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler) и используйте метод [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) для загрузки весов LCM-LoRA. Передайте canny-изображение в конвейер и сгенерируйте изображение.

```py
import torch
import cv2
import numpy as np
from PIL import Image

from diffusers import StableDiffusionXLAdapterPipeline, UNet2DConditionModel, T2IAdapter, LCMScheduler
from diffusers.utils import load_image, make_image_grid

# detect the canny map in low resolution to avoid high-frequency details
image = load_image(
    "https://hf.co/datasets/huggingface/documentation-images/resolve/main/diffusers/input_image_vermeer.png"
).resize((384, 384))

image = np.array(image)

low_threshold = 100
high_threshold = 200

image = cv2.Canny(image, low_threshold, high_threshold)
image = image[:, :, None]
image = np.concatenate([image, image, image], axis=2)
canny_image = Image.fromarray(image).resize((1024, 1024))

adapter = T2IAdapter.from_pretrained("TencentARC/t2i-adapter-canny-sdxl-1.0", dtype=torch.float16, variant="fp16").to("cuda")  # or "mps", "xpu", "cpu"

pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0",
    adapter=adapter,
    dtype=torch.float16,
    variant="fp16",
).to("cuda")

pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

pipe.load_lora_weights("latent-consistency/lcm-lora-sdxl")

prompt = "the mona lisa, 4k picture, high quality"
negative_prompt = "extra digit, fewer digits, cropped, worst quality, low quality, glitch, deformed, mutated, ugly, disfigured"

generator = torch.manual_seed(0)
image = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    image=canny_image,
    num_inference_steps=4,
    guidance_scale=1.5,
    adapter_conditioning_scale=0.8,
    adapter_conditioning_factor=1,
    generator=generator,
).images[0]
```

    

### AnimateDiff

[AnimateDiff](./animatediff) — это адаптер, добавляющий движение к изображению. Его можно использовать с большинством моделей Stable Diffusion, фактически превращая их в модели «генерации видео». Для получения хороших результатов с моделью видео обычно требуется генерация нескольких кадров (16–24), что может быть очень медленным процессом для обычной модели Stable Diffusion. LCM-LoRA позволяет ускорить этот процесс, требуя всего 4–8 шагов для каждого кадра.

Загрузите [AnimateDiffPipeline](/docs/diffusers/v0.43.0/ru/api/pipelines/animatediff#diffusers.AnimateDiffPipeline) и передайте в него `MotionAdapter`. Затем замените планировщик на [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler) и объедините оба адаптера LoRA с помощью метода `~loaders.UNet2DConditionLoadersMixin.set_adapters`. Теперь вы можете передать промпт в пайплайн и сгенерировать анимированное изображение.

```py
import torch
from diffusers import MotionAdapter, AnimateDiffPipeline, DDIMScheduler, LCMScheduler
from diffusers.utils import export_to_gif

adapter = MotionAdapter.from_pretrained("guoyww/animatediff-motion-adapter-v1-5")
pipe = AnimateDiffPipeline.from_pretrained(
    "frankjoshua/toonyou_beta6",
    motion_adapter=adapter,
).to("cuda")  # or "mps", "xpu", "cpu"

# set scheduler
pipe.scheduler = LCMScheduler.from_config(pipe.scheduler.config)

# load LCM-LoRA
pipe.load_lora_weights("latent-consistency/lcm-lora-sdv1-5", adapter_name="lcm")
pipe.load_lora_weights("guoyww/animatediff-motion-lora-zoom-in", weight_name="diffusion_pytorch_model.safetensors", adapter_name="motion-lora")

pipe.set_adapters(["lcm", "motion-lora"], adapter_weights=[0.55, 1.2])

prompt = "best quality, masterpiece, 1girl, looking at viewer, blurry background, upper body, contemporary, dress"
generator = torch.manual_seed(0)
frames = pipe(
    prompt=prompt,
    num_inference_steps=5,
    guidance_scale=1.25,
    cross_attention_kwargs={"scale": 1},
    num_frames=24,
    generator=generator
).frames[0]
export_to_gif(frames, "animation.gif")
```

    

## LatentConsistencyModelPipeline[[diffusers.LatentConsistencyModelPipeline]]

#### diffusers.LatentConsistencyModelPipeline[[diffusers.LatentConsistencyModelPipeline]]

```python
diffusers.LatentConsistencyModelPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: LCMScheduler, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = None, requires_safety_checker: bool = True)
```

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

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

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)) : замороженный текстовый энкодер ([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` для токенизации текста.

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

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ru/api/schedulers/overview#diffusers.SchedulerMixin)) : планировщик, используемый в связке с `unet` для удаления шума из закодированных латентов изображения. В настоящее время поддерживается только [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler).

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

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

requires_safety_checker (`bool`, *необязательный*, по умолчанию `True`) : Указывает, требуется ли конвейеру компонент проверки безопасности.

Пайплайн для генерации изображений по тексту с использованием латентной модели согласованности.

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

Пайплайн также наследует следующие методы загрузки:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/ru/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) для загрузки эмбеддингов текстовой инверсии
- [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) для загрузки весов LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.save_lora_weights) для сохранения весов LoRA
- [from_single_file()](/docs/diffusers/v0.43.0/ru/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) для загрузки файлов `.ckpt`
- [load_ip_adapter()](/docs/diffusers/v0.43.0/ru/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) для загрузки IP-адаптеров

#### __call__[[diffusers.LatentConsistencyModelPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 4, original_inference_steps: int = None, timesteps: list[int] = None, guidance_scale: float = 8.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, 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, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, 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/latent_consistency_models/pipeline_latent_consistency_text2img.py#L640)

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

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

height (`int`, *необязательный*, по умолчанию `self.unet.config.sample_size * self.vae_scale_factor`) : Высота генерируемого изображения в пикселях.

width (`int`, *необязательный*, по умолчанию `self.unet.config.sample_size * self.vae_scale_factor`) : Ширина генерируемого изображения в пикселях.

num_inference_steps (`int`, *optional*, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

original_inference_steps (`int`, *optional*) : исходное количество шагов инференса, используемое для создания линейно распределённого расписания временных шагов, из которого мы выберем `num_inference_steps` равномерно распределённых временных шагов в качестве итогового расписания, следуя методу Skipping-Step из статьи (см. раздел 4.3). Если не задано, по умолчанию используется атрибут `original_inference_steps` планировщика.

timesteps (`list[int]`, *optional*) : Пользовательские шаги для процесса денойзинга. Если не заданы, используются равномерно распределённые `num_inference_steps` шагов по исходному расписанию шагов обучения/дистилляции LCM. Должны быть в порядке убывания.

guidance_scale (`float`, *optional*, по умолчанию 7.5) : Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовым `prompt`, ценой снижения качества изображения. Guidance scale активируется, когда `guidance_scale > 1`. Обратите внимание, что в оригинальной статье о latent consistency models используется другая формулировка CFG, в которой значения guidance scale уменьшены на 1 (то есть в формулировке из статьи CFG активируется, когда `guidance_scale > 0`).

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

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

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

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

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

ip_adapter_image_embeds (`list[torch.Tensor]`, *необязательный*) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы `(batch_size, num_images, emb_dim)`. Если `do_classifier_free_guidance` установлен в `True`, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента `ip_adapter_image`.

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

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

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 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

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.

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

Если `return_dict` равно `True`, возвращается [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput), иначе возвращается `tuple`, где первый элемент — это список сгенерированных изображений, а второй — список значений `bool`, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

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

>>> pipe = DiffusionPipeline.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)

>>> prompt = "Self-portrait oil painting, a beautiful cyborg with golden hair, 8k"

>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(prompt=prompt, num_inference_steps=num_inference_steps, guidance_scale=8.0).images
>>> images[0].save("image.png")
```

#### enable_freeu[[diffusers.LatentConsistencyModelPipeline.enable_freeu]]

```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```

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

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

s1 (`float`) : Коэффициент масштабирования для этапа 1, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления.

s2 (`float`) : Коэффициент масштабирования для этапа 2, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления.

b1 (`float`) : Коэффициент масштабирования для этапа 1, усиливающий вклад признаков базовой модели.

b2 (`float`) : Коэффициент масштабирования для этапа 2, усиливающий вклад признаков базовой модели.

Включает механизм FreeU, как описано в https://huggingface.co/papers/2309.11497.

Суффиксы после коэффициентов масштабирования обозначают этапы, на которых они применяются.

Сочетания значений, которые хорошо работают для различных пайплайнов, таких как Stable Diffusion v1, v2 и Stable Diffusion XL, приведены в [официальном репозитории](https://github.com/ChenyangSi/FreeU).

#### disable_freeu[[diffusers.LatentConsistencyModelPipeline.disable_freeu]]

```python
disable_freeu()
```

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

Отключает механизм FreeU, если он включен.

#### encode_prompt[[diffusers.LatentConsistencyModelPipeline.encode_prompt]]

```python
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_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/latent_consistency_models/pipeline_latent_consistency_text2img.py#L226)

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

prompt (`str` или `list[str]`, *необязательный*) : промпт для кодирования

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

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

do_classifier_free_guidance (`bool`) : использовать ли классификаторное свободное наведение (classifier free guidance)

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

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 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

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

#### get_guidance_scale_embedding[[diffusers.LatentConsistencyModelPipeline.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/latent_consistency_models/pipeline_latent_consistency_text2img.py#L517)

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

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

## LatentConsistencyModelImg2ImgPipeline[[diffusers.LatentConsistencyModelImg2ImgPipeline]]

#### diffusers.LatentConsistencyModelImg2ImgPipeline[[diffusers.LatentConsistencyModelImg2ImgPipeline]]

```python
diffusers.LatentConsistencyModelImg2ImgPipeline(vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, unet: UNet2DConditionModel, scheduler: LCMScheduler, safety_checker: StableDiffusionSafetyChecker, feature_extractor: CLIPImageProcessorPil, image_encoder: transformers.models.clip.modeling_clip.CLIPVisionModelWithProjection | None = None, requires_safety_checker: bool = True)
```

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

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

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)) : замороженный текстовый энкодер ([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` для токенизации текста.

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

scheduler ([SchedulerMixin](/docs/diffusers/v0.43.0/ru/api/schedulers/overview#diffusers.SchedulerMixin)) : планировщик, используемый в связке с `unet` для удаления шума из закодированных латентов изображения. В настоящее время поддерживается только [LCMScheduler](/docs/diffusers/v0.43.0/ru/api/schedulers/lcm#diffusers.LCMScheduler).

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

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

requires_safety_checker (`bool`, *необязательный*, по умолчанию `True`) : Указывает, требуется ли конвейеру компонент проверки безопасности.

Пайплайн для генерации изображений по изображению с использованием латентной модели согласованности.

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

Пайплайн также наследует следующие методы загрузки:
- [load_textual_inversion()](/docs/diffusers/v0.43.0/ru/api/loaders/textual_inversion#diffusers.loaders.TextualInversionLoaderMixin.load_textual_inversion) для загрузки эмбеддингов текстовой инверсии
- [load_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.load_lora_weights) для загрузки весов LoRA
- [save_lora_weights()](/docs/diffusers/v0.43.0/ru/api/loaders/lora#diffusers.loaders.StableDiffusionLoraLoaderMixin.save_lora_weights) для сохранения весов LoRA
- [from_single_file()](/docs/diffusers/v0.43.0/ru/api/loaders/single_file#diffusers.loaders.FromSingleFileMixin.from_single_file) для загрузки файлов `.ckpt`
- [load_ip_adapter()](/docs/diffusers/v0.43.0/ru/api/loaders/ip_adapter#diffusers.loaders.IPAdapterMixin.load_ip_adapter) для загрузки IP-адаптеров

#### __call__[[diffusers.LatentConsistencyModelImg2ImgPipeline.__call__]]

```python
__call__(prompt: str | list[str] = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, num_inference_steps: int = 4, strength: float = 0.8, original_inference_steps: int = None, timesteps: list[int] = None, guidance_scale: float = 8.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, 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, ip_adapter_image_embeds: list[torch.Tensor] | None = None, output_type: str | None = 'pil', return_dict: bool = True, cross_attention_kwargs: dict[str, typing.Any] | None = None, 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/latent_consistency_models/pipeline_latent_consistency_img2img.py#L709)

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

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

image (`torch.Tensor`, `PIL.Image.Image`, `np.ndarray`, `list[torch.Tensor]`, `list[PIL.Image.Image]` или `list[np.ndarray]`) : `Image` или тензор, представляющий пакет изображений, используемый в качестве начальной точки. Также можно передавать латенты изображений как `image`, но при прямой передаче латентов они не кодируются повторно.

num_inference_steps (`int`, *optional*, по умолчанию 50) : Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к изображению более высокого качества, но за счёт более медленного вывода.

strength (`float`, *optional*, по умолчанию 0.8) : Определяет степень трансформации исходного `image`. Значение должно быть в диапазоне от 0 до 1. `image` используется как отправная точка, и чем выше `strength`, тем больше шума добавляется. Количество шагов денойзинга зависит от количества шума, добавленного изначально. Когда `strength` равно 1, добавляется максимальное количество шума, и процесс денойзинга выполняется в течение полного числа итераций, указанного в `num_inference_steps`. Значение 1 фактически игнорирует `image`.

original_inference_steps (`int`, *optional*) : исходное количество шагов инференса, используемое для создания линейно распределённого расписания временных шагов, из которого мы выберем `num_inference_steps` равномерно распределённых временных шагов в качестве итогового расписания, следуя методу Skipping-Step из статьи (см. раздел 4.3). Если не задано, по умолчанию используется атрибут `original_inference_steps` планировщика.

timesteps (`list[int]`, *optional*) : Пользовательские шаги для процесса денойзинга. Если не заданы, используются равномерно распределённые `num_inference_steps` шагов по исходному расписанию шагов обучения/дистилляции LCM. Должны быть в порядке убывания.

guidance_scale (`float`, *optional*, по умолчанию 7.5) : Более высокое значение guidance scale побуждает модель генерировать изображения, тесно связанные с текстовым `prompt`, ценой снижения качества изображения. Guidance scale активируется, когда `guidance_scale > 1`. Обратите внимание, что в оригинальной статье о latent consistency models используется другая формулировка CFG, в которой значения guidance scale уменьшены на 1 (то есть в формулировке из статьи CFG активируется, когда `guidance_scale > 0`).

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

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

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

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

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

ip_adapter_image_embeds (`list[torch.Tensor]`, *необязательный*) : Предварительно сгенерированные эмбеддинги изображений для IP-Adapter. Должен представлять собой список, длина которого равна количеству IP-адаптеров. Каждый элемент должен быть тензором формы `(batch_size, num_images, emb_dim)`. Если `do_classifier_free_guidance` установлен в `True`, должен содержать отрицательный эмбеддинг изображения. Если не указан, эмбеддинги вычисляются из входного аргумента `ip_adapter_image`.

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

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

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 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

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.

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

Если `return_dict` равно `True`, возвращается [StableDiffusionPipelineOutput](/docs/diffusers/v0.43.0/ru/api/pipelines/stable_diffusion/img2img#diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput), иначе возвращается `tuple`, где первый элемент — это список сгенерированных изображений, а второй — список значений `bool`, указывающих, содержит ли соответствующее сгенерированное изображение контент, нежелательный для просмотра на рабочем месте (nsfw).

Функция вызова конвейера для генерации.

Примеры:
```py
>>> from diffusers import AutoPipelineForImage2Image
>>> import torch
>>> import PIL

>>> pipe = AutoPipelineForImage2Image.from_pretrained("SimianLuo/LCM_Dreamshaper_v7")
>>> # To save GPU memory, torch.float16 can be used, but it may compromise image quality.
>>> pipe.to(torch_device="cuda", torch_dtype=torch.float32)

>>> prompt = "High altitude snowy mountains"
>>> image = PIL.Image.open("./snowy_mountains.png")

>>> # Can be set to 1~50 steps. LCM support fast inference even <= 4 steps. Recommend: 1~8 steps.
>>> num_inference_steps = 4
>>> images = pipe(
...     prompt=prompt, image=image, num_inference_steps=num_inference_steps, guidance_scale=8.0
... ).images

>>> images[0].save("image.png")
```

#### enable_freeu[[diffusers.LatentConsistencyModelImg2ImgPipeline.enable_freeu]]

```python
enable_freeu(s1: float, s2: float, b1: float, b2: float)
```

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

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

s1 (`float`) : Коэффициент масштабирования для этапа 1, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления.

s2 (`float`) : Коэффициент масштабирования для этапа 2, ослабляющий вклад признаков пропуска. Это делается для смягчения «эффекта чрезмерного сглаживания» в процессе улучшенного шумоподавления.

b1 (`float`) : Коэффициент масштабирования для этапа 1, усиливающий вклад признаков базовой модели.

b2 (`float`) : Коэффициент масштабирования для этапа 2, усиливающий вклад признаков базовой модели.

Включает механизм FreeU, как описано в https://huggingface.co/papers/2309.11497.

Суффиксы после коэффициентов масштабирования обозначают этапы, на которых они применяются.

Сочетания значений, которые хорошо работают для различных пайплайнов, таких как Stable Diffusion v1, v2 и Stable Diffusion XL, приведены в [официальном репозитории](https://github.com/ChenyangSi/FreeU).

#### disable_freeu[[diffusers.LatentConsistencyModelImg2ImgPipeline.disable_freeu]]

```python
disable_freeu()
```

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

Отключает механизм FreeU, если он включен.

#### encode_prompt[[diffusers.LatentConsistencyModelImg2ImgPipeline.encode_prompt]]

```python
encode_prompt(prompt, device, num_images_per_prompt, do_classifier_free_guidance, negative_prompt = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_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/latent_consistency_models/pipeline_latent_consistency_img2img.py#L241)

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

prompt (`str` или `list[str]`, *необязательный*) : промпт для кодирования

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

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

do_classifier_free_guidance (`bool`) : использовать ли классификаторное свободное наведение (classifier free guidance)

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

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 означает, что для вычисления эмбеддингов промпта будет использоваться выход предпоследнего слоя.

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

#### get_guidance_scale_embedding[[diffusers.LatentConsistencyModelImg2ImgPipeline.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/latent_consistency_models/pipeline_latent_consistency_img2img.py#L576)

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

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

## StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]

#### diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput[[diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput]]

```python
diffusers.pipelines.stable_diffusion.StableDiffusionPipelineOutput(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/stable_diffusion/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`, если проверка безопасности не могла быть выполнена.

Класс вывода для пайплайнов Stable Diffusion.

