Buckets:

mishig's picture
|
download
raw
236 kB

Flux

Flux — это серия моделей генерации изображений по текстовому описанию, основанных на диффузионных трансформерах. Чтобы узнать больше о Flux, ознакомьтесь с оригинальной статьей в блоге от создателей Flux, компании Black Forest Labs.

Оригинальные контрольные точки модели Flux можно найти здесь. Исходный код для инференса доступен здесь.

Запуск Flux на потребительском оборудовании может быть довольно дорогим. Однако вы можете применить ряд оптимизаций, чтобы ускорить его работу и снизить потребление памяти. Подробнее об этом читайте в этом разделе. Кроме того, для повышения эффективности использования памяти Flux можно квантовать, что, однако, приведёт к увеличению задержки вывода. Дополнительную информацию см. в этой статье. Полный список ресурсов доступен в этом gist.

Кэширование также может ускорить инференс за счёт хранения и повторного использования промежуточных результатов.

Flux доступен в следующих вариантах:

тип модели идентификатор модели
Дистилляция по временным шагам black-forest-labs/FLUX.1-schnell
Дистилляция с наведением black-forest-labs/FLUX.1-dev
Заполнение Inpainting/Outpainting (с дистиллированным руководством) black-forest-labs/FLUX.1-Fill-dev
Canny Control (с дистиллированным руководством) black-forest-labs/FLUX.1-Canny-dev
Управление глубиной (с дистиллированным руководством) black-forest-labs/FLUX.1-Depth-dev
Canny Control (LoRA) black-forest-labs/FLUX.1-Canny-dev-lora
Управление глубиной (LoRA) black-forest-labs/FLUX.1-Depth-dev-lora
Redux (адаптер) black-forest-labs/FLUX.1-Redux-dev
Kontext black-forest-labs/FLUX.1-kontext

Все контрольные точки имеют различное назначение, которое мы подробно описываем ниже.

Дистилляция по временным шагам

  • max_sequence_length не может превышать 256.
  • guidance_scale должен быть равен 0.
  • Поскольку это модель с дистилляцией по временным шагам, она выигрывает от меньшего количества шагов сэмплирования.
import torch
from diffusers import FluxPipeline

pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", dtype=torch.bfloat16)
pipe.enable_model_cpu_offload()

prompt = "A cat holding a sign that says hello world"
out = pipe(
    prompt=prompt,
    guidance_scale=0.,
    height=768,
    width=1360,
    num_inference_steps=4,
    max_sequence_length=256,
).images[0]
out.save("image.png")

Дистилляция с наведением

  • Вариант с дистилляцией guidance требует примерно 50 шагов сэмплирования для генерации хорошего качества.
  • Ограничений на max_sequence_length нет.
import torch
from diffusers import FluxPipeline

pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16)
pipe.enable_model_cpu_offload()

prompt = "a tiny astronaut hatching from an egg on the moon"
out = pipe(
    prompt=prompt,
    guidance_scale=3.5,
    height=768,
    width=1360,
    num_inference_steps=50,
).images[0]
out.save("image.png")

Заполнение Inpainting/Outpainting

  • Пайплайн Flux Fill не требует входного параметра strength, в отличие от обычных пайплайнов инпейнтинга.
  • Он поддерживает как inpainting, так и outpainting.
import torch
from diffusers import FluxFillPipeline
from diffusers.utils import load_image

image = load_image("https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/cup.png")
mask = load_image("https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/cup_mask.png")

repo_id = "black-forest-labs/FLUX.1-Fill-dev"
pipe = FluxFillPipeline.from_pretrained(repo_id, dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(
    prompt="a white paper cup",
    image=image,
    mask_image=mask,
    height=1632,
    width=1232,
    max_sequence_length=512,
    generator=torch.Generator("cpu").manual_seed(0)
).images[0]
image.save(f"output.png")

Canny Control

Примечание: black-forest-labs/Flux.1-Canny-dev не является моделью ControlNetModel. Модели ControlNet представляют собой отдельный компонент от UNet/Transformer, остатки которого добавляются к фактической базовой модели. Canny Control — это альтернативная архитектура, которая достигает практически тех же результатов, что и модель ControlNet, за счет поканального объединения с входным управляющим условием и обеспечения того, чтобы трансформер обучался управлению структурой, следуя условию как можно точнее.

# !pip install -U controlnet-aux
import torch
from controlnet_aux import CannyDetector
from diffusers import FluxControlPipeline
from diffusers.utils import load_image

pipe = FluxControlPipeline.from_pretrained("black-forest-labs/FLUX.1-Canny-dev", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A robot made of exotic candies and chocolates of different kinds. The background is filled with confetti and celebratory gifts."
control_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png")

processor = CannyDetector()
control_image = processor(control_image, low_threshold=50, high_threshold=200, detect_resolution=1024, image_resolution=1024)

image = pipe(
    prompt=prompt,
    control_image=control_image,
    height=1024,
    width=1024,
    num_inference_steps=50,
    guidance_scale=30.0,
).images[0]
image.save("output.png")

Управление Canny Control также возможно с использованием варианта LoRA этого условия. Использование выглядит следующим образом:

# !pip install -U controlnet-aux
import torch
from controlnet_aux import CannyDetector
from diffusers import FluxControlPipeline
from diffusers.utils import load_image

pipe = FluxControlPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"
pipe.load_lora_weights("black-forest-labs/FLUX.1-Canny-dev-lora")

prompt = "A robot made of exotic candies and chocolates of different kinds. The background is filled with confetti and celebratory gifts."
control_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png")

processor = CannyDetector()
control_image = processor(control_image, low_threshold=50, high_threshold=200, detect_resolution=1024, image_resolution=1024)

image = pipe(
    prompt=prompt,
    control_image=control_image,
    height=1024,
    width=1024,
    num_inference_steps=50,
    guidance_scale=30.0,
).images[0]
image.save("output.png")

Управление глубиной

Примечание: black-forest-labs/Flux.1-Depth-dev — это не модель ControlNet. Модели ControlNetModel представляют собой отдельный компонент от UNet/Transformer, остатки которого добавляются к фактической базовой модели. Depth Control — это альтернативная архитектура, которая достигает практически тех же результатов, что и модель ControlNet, за счёт поканального объединения с входным управляющим условием и обеспечения того, чтобы трансформер обучался управлению структурой, следуя условию как можно точнее.

# !pip install git+https://github.com/huggingface/image_gen_aux
import torch
from diffusers import FluxControlPipeline, FluxTransformer2DModel
from diffusers.utils import load_image
from image_gen_aux import DepthPreprocessor

pipe = FluxControlPipeline.from_pretrained("black-forest-labs/FLUX.1-Depth-dev", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A robot made of exotic candies and chocolates of different kinds. The background is filled with confetti and celebratory gifts."
control_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png")

processor = DepthPreprocessor.from_pretrained("LiheYoung/depth-anything-large-hf")
control_image = processor(control_image)[0].convert("RGB")

image = pipe(
    prompt=prompt,
    control_image=control_image,
    height=1024,
    width=1024,
    num_inference_steps=30,
    guidance_scale=10.0,
    generator=torch.Generator().manual_seed(42),
).images[0]
image.save("output.png")

Управление глубиной также возможно с использованием варианта LoRA этого условия. Использование выглядит следующим образом:

# !pip install git+https://github.com/huggingface/image_gen_aux
import torch
from diffusers import FluxControlPipeline, FluxTransformer2DModel
from diffusers.utils import load_image
from image_gen_aux import DepthPreprocessor

pipe = FluxControlPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16).to("cuda")  # or "mps", "xpu", "cpu"
pipe.load_lora_weights("black-forest-labs/FLUX.1-Depth-dev-lora")

prompt = "A robot made of exotic candies and chocolates of different kinds. The background is filled with confetti and celebratory gifts."
control_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png")

processor = DepthPreprocessor.from_pretrained("LiheYoung/depth-anything-large-hf")
control_image = processor(control_image)[0].convert("RGB")

image = pipe(
    prompt=prompt,
    control_image=control_image,
    height=1024,
    width=1024,
    num_inference_steps=30,
    guidance_scale=10.0,
    generator=torch.Generator().manual_seed(42),
).images[0]
image.save("output.png")

Redux

  • Пайплайн Flux Redux представляет собой адаптер для базовых моделей FLUX.1. Он может использоваться как с flux-dev, так и с flux-schnell для генерации изображений по образцу (image-to-image).
  • Сначала можно использовать FluxPriorReduxPipeline, чтобы получить prompt_embeds и pooled_prompt_embeds, а затем передать их в FluxPipeline для генерации изображений по образцу.
  • При использовании FluxPriorReduxPipeline с базовым пайплайном можно установить text_encoder=None и text_encoder_2=None в базовом пайплайне, чтобы сэкономить VRAM.
import torch
from diffusers import FluxPriorReduxPipeline, FluxPipeline
from diffusers.utils import load_image
device = "cuda"  # or "mps", "xpu", "cpu"
dtype = torch.bfloat16

repo_redux = "black-forest-labs/FLUX.1-Redux-dev"
repo_base = "black-forest-labs/FLUX.1-dev" 
pipe_prior_redux = FluxPriorReduxPipeline.from_pretrained(repo_redux, dtype=dtype).to(device)
pipe = FluxPipeline.from_pretrained(
    repo_base, 
    text_encoder=None,
    text_encoder_2=None,
    dtype=torch.bfloat16
).to(device)

image = load_image("https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/style_ziggy/img5.png")
pipe_prior_output = pipe_prior_redux(image)
images = pipe(
    guidance_scale=2.5,
    num_inference_steps=50,
    generator=torch.Generator("cpu").manual_seed(0),
    **pipe_prior_output,
).images
images[0].save("flux-redux.png")

Kontext

Flux Kontext — это модель, которая позволяет управлять процессом генерации изображений в контексте, обеспечивая редактирование, доработку, пересветку, перенос стиля, кастомизацию персонажей и многое другое.

import torch
from diffusers import FluxKontextPipeline
from diffusers.utils import load_image

pipe = FluxKontextPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-Kontext-dev", dtype=torch.bfloat16
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png").convert("RGB")
prompt = "Make Pikachu hold a sign that says 'Black Forest Labs is awesome', yarn art style, detailed, vibrant colors"
image = pipe(
    image=image,
    prompt=prompt,
    guidance_scale=2.5,
    generator=torch.Generator().manual_seed(42),
).images[0]
image.save("flux-kontext.png")

Flux Kontext поставляется с проверщиком целостности, который следует запускать после этапа генерации изображения. Чтобы запустить проверщик, установите официальный репозиторий black-forest-labs/flux и добавьте следующий код:

from flux.content_filters import PixtralContentFilter

# ... pipeline invocation to generate images

integrity_checker = PixtralContentFilter(torch.device("cuda"))
image_ = np.array(image) / 255.0
image_ = 2 * image_ - 1
image_ = torch.from_numpy(image_).to("cuda", dtype=torch.float32).unsqueeze(0).permute(0, 3, 1, 2)
if integrity_checker.test_image(image_):
    raise ValueError("Your image has been flagged. Choose another prompt/image or try again.")

Kontext Inpainting

FluxKontextInpaintPipeline позволяет изменять изображение в пределах фиксированной маски. В настоящее время поддерживаются как текстовые условия, так и условия на основе опорного изображения.

import torch
from diffusers import FluxKontextInpaintPipeline
from diffusers.utils import load_image

prompt = "Change the yellow dinosaur to green one"
img_url = (
    "https://github.com/ZenAI-Vietnam/Flux-Kontext-pipelines/blob/main/assets/dinosaur_input.jpeg?raw=true"
)
mask_url = (
    "https://github.com/ZenAI-Vietnam/Flux-Kontext-pipelines/blob/main/assets/dinosaur_mask.png?raw=true"
)

source = load_image(img_url)
mask = load_image(mask_url)

pipe = FluxKontextInpaintPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-Kontext-dev", dtype=torch.bfloat16
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(prompt=prompt, image=source, mask_image=mask, strength=1.0).images[0]
image.save("kontext_inpainting_normal.png")
import torch
from diffusers import FluxKontextInpaintPipeline
from diffusers.utils import load_image

pipe = FluxKontextInpaintPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-Kontext-dev", dtype=torch.bfloat16
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "Replace this ball"
img_url = "https://images.pexels.com/photos/39362/the-ball-stadion-football-the-pitch-39362.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"
mask_url = "https://github.com/ZenAI-Vietnam/Flux-Kontext-pipelines/blob/main/assets/ball_mask.png?raw=true"
image_reference_url = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTah3x6OL_ECMBaZ5ZlJJhNsyC-OSMLWAI-xw&s"

source = load_image(img_url)
mask = load_image(mask_url)
image_reference = load_image(image_reference_url)

mask = pipe.mask_processor.blur(mask, blur_factor=12)
image = pipe(
    prompt=prompt, image=source, mask_image=mask, image_reference=image_reference, strength=1.0
).images[0]
image.save("kontext_inpainting_ref.png")

Сочетание Flux Turbo LoRAs с Flux Control, Fill и Redux

Мы можем объединять Flux Turbo LoRAs с Flux Control и другими пайплайнами, такими как Fill и Redux, чтобы обеспечить инференс за несколько шагов. Пример ниже показывает, как это сделать для Flux Control LoRA для глубины и turbo LoRA из ByteDance/Hyper-SD.

from diffusers import FluxControlPipeline
from image_gen_aux import DepthPreprocessor
from diffusers.utils import load_image
from huggingface_hub import hf_hub_download
import torch

control_pipe = FluxControlPipeline.from_pretrained("black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16)
control_pipe.load_lora_weights("black-forest-labs/FLUX.1-Depth-dev-lora", adapter_name="depth")
control_pipe.load_lora_weights(
    hf_hub_download("ByteDance/Hyper-SD", "Hyper-FLUX.1-dev-8steps-lora.safetensors"), adapter_name="hyper-sd"
)
control_pipe.set_adapters(["depth", "hyper-sd"], adapter_weights=[0.85, 0.125])
control_pipe.enable_model_cpu_offload()

prompt = "A robot made of exotic candies and chocolates of different kinds. The background is filled with confetti and celebratory gifts."
control_image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png")

processor = DepthPreprocessor.from_pretrained("LiheYoung/depth-anything-large-hf")
control_image = processor(control_image)[0].convert("RGB")

image = control_pipe(
    prompt=prompt,
    control_image=control_image,
    height=1024,
    width=1024,
    num_inference_steps=8,
    guidance_scale=10.0,
    generator=torch.Generator().manual_seed(42),
).images[0]
image.save("output.png")

Примечание о unload_lora_weights() при использовании Flux LoRAs

When unloading the Control LoRA weights, call pipe.unload_lora_weights(reset_to_overwritten_params=True) to reset the pipe.transformer completely back to its original form. The resultant pipeline can then be used with methods like DiffusionPipeline.from_pipe(). More details about this argument are available in this PR.

IP-Adapter

Ознакомьтесь с IP-Adapter, чтобы узнать больше о том, как работают IP-адаптеры.

IP-Adapter позволяет использовать изображения в качестве промпта для Flux наряду с текстовым промптом. Это особенно полезно, когда нужно описать сложные концепции, которые трудно передать только текстом, и у вас есть референсные изображения.

import torch
from diffusers import FluxPipeline
from diffusers.utils import load_image

pipe = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flux_ip_adapter_input.jpg").resize((1024, 1024))

pipe.load_ip_adapter(
    "XLabs-AI/flux-ip-adapter",
    weight_name="ip_adapter.safetensors",
    image_encoder_pretrained_model_name_or_path="openai/clip-vit-large-patch14"
)
pipe.set_ip_adapter_scale(1.0)

image = pipe(
    width=1024,
    height=1024,
    prompt="wearing sunglasses",
    negative_prompt="",
    true_cfg_scale=4.0,
    generator=torch.Generator().manual_seed(4444),
    ip_adapter_image=image,
).images[0]

image.save('flux_ip_adapter_output.jpg')
Примеры IP-Adapter с промптом «wearing sunglasses»

Оптимизация

Flux — очень большая модель, для загрузки всех компонентов моделирования требуется ~50 ГБ ОЗУ/Видеопамяти. Включите некоторые из оптимизаций ниже, чтобы снизить требования к памяти.

Групповая разгрузка

Групповая разгрузка снижает потребление VRAM за счёт разгрузки групп внутренних слоёв, а не всей модели или весов целиком. Необходимо применить apply_group_offloading() ко всем компонентам модели в конвейере. Параметр offload_type позволяет переключаться между разгрузкой на уровне блоков и на уровне листьев. Если установить его в значение leaf_level, то на CPU будут разгружаться параметры нижнего уровня (листья), а не модули целиком.

На устройствах CUDA, поддерживающих асинхронную передачу данных, установите use_stream=True, чтобы наложить передачу данных и вычисления друг на друга и ускорить инференс.

Возможно смешивать выгрузку на уровне блоков и на уровне листьев для разных компонентов в конвейере.

import torch
from diffusers import FluxPipeline
from diffusers.hooks import apply_group_offloading

model_id = "black-forest-labs/FLUX.1-dev"
dtype = torch.bfloat16
pipe = FluxPipeline.from_pretrained(
    model_id,
    dtype=dtype,
)

apply_group_offloading(
    pipe.transformer,
    offload_type="leaf_level",
    offload_device=torch.device("cpu"),
    onload_device=torch.device("cuda"),
    use_stream=True,
)
apply_group_offloading(
    pipe.text_encoder, 
    offload_device=torch.device("cpu"),
    onload_device=torch.device("cuda"),
    offload_type="leaf_level",
    use_stream=True,
)
apply_group_offloading(
    pipe.text_encoder_2, 
    offload_device=torch.device("cpu"),
    onload_device=torch.device("cuda"),
    offload_type="leaf_level",
    use_stream=True,
)
apply_group_offloading(
    pipe.vae, 
    offload_device=torch.device("cpu"),
    onload_device=torch.device("cuda"),
    offload_type="leaf_level",
    use_stream=True,
)

prompt="A cat wearing sunglasses and working as a lifeguard at pool."

generator = torch.Generator().manual_seed(181201)
image = pipe(
    prompt,
    width=576,
    height=1024,
    num_inference_steps=30,
    generator=generator
).images[0]
image

Запуск FP16-инференса

Flux может генерировать изображения высокого качества в формате FP16 (то есть для ускорения инференса на GPU Turing/Volta), но при этом результаты отличаются от тех, что получаются в FP32/BF16. Проблема в том, что при работе в FP16 некоторые активации в текстовых энкодерах необходимо ограничивать (clip), что влияет на итоговое изображение. Принудительный запуск текстовых энкодеров с инференсом в FP32 устраняет эту разницу в результатах. Подробности — здесь.

Код для инференса в FP16:

import torch
from diffusers import FluxPipeline

pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", dtype=torch.bfloat16) # can replace schnell with dev
# to run on low vram GPUs (i.e. between 4 and 32 GB VRAM)
pipe.enable_sequential_cpu_offload()
pipe.vae.enable_slicing()
pipe.vae.enable_tiling()

pipe.to(torch.float16) # casting here instead of in the pipeline constructor because doing so in the constructor loads all models into CPU memory at once

prompt = "A cat holding a sign that says hello world"
out = pipe(
    prompt=prompt,
    guidance_scale=0.,
    height=768,
    width=1360,
    num_inference_steps=4,
    max_sequence_length=256,
).images[0]
out.save("image.png")

Квантование

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

См. обзор Quantization, чтобы узнать больше о поддерживаемых бэкендах квантования и о том, как выбрать бэкенд, подходящий для вашей задачи. Пример ниже показывает, как загрузить квантованный FluxPipeline для инференса с помощью bitsandbytes.

import torch
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig, FluxTransformer2DModel, FluxPipeline
from transformers import BitsAndBytesConfig as BitsAndBytesConfig, T5EncoderModel

quant_config = BitsAndBytesConfig(load_in_8bit=True)
text_encoder_8bit = T5EncoderModel.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    subfolder="text_encoder_2",
    quantization_config=quant_config,
    dtype=torch.float16,
)

quant_config = DiffusersBitsAndBytesConfig(load_in_8bit=True)
transformer_8bit = FluxTransformer2DModel.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    subfolder="transformer",
    quantization_config=quant_config,
    dtype=torch.float16,
)

pipeline = FluxPipeline.from_pretrained(
    "black-forest-labs/FLUX.1-dev",
    text_encoder_2=text_encoder_8bit,
    transformer=transformer_8bit,
    dtype=torch.float16,
    device_map="balanced",
)

prompt = "a tiny astronaut hatching from an egg on the moon"
image = pipeline(prompt, guidance_scale=3.5, height=768, width=1360, num_inference_steps=50).images[0]
image.save("flux.png")

Загрузка одного файла для FluxTransformer2DModel

Модель FluxTransformer2DModel поддерживает загрузку контрольных точек в исходном формате, поставляемом Black Forest Labs. Это также полезно при попытке загрузить дообученные или квантованные версии моделей, опубликованные сообществом.

FP8 inference может быть нестабильной в зависимости от типа GPU, версии CUDA и версии torch, которые вы используете. Рекомендуется использовать библиотеку optimum-quanto для запуска FP8 inference на вашем компьютере.

Следующий пример демонстрирует, как запустить Flux с менее чем 16 ГБ видеопамяти.

Сначала установите optimum-quanto

pip install optimum-quanto

Затем выполните следующий пример

import torch
from diffusers import FluxTransformer2DModel, FluxPipeline
from transformers import T5EncoderModel, CLIPTextModel
from optimum.quanto import freeze, qfloat8, quantize

bfl_repo = "black-forest-labs/FLUX.1-dev"
dtype = torch.bfloat16

transformer = FluxTransformer2DModel.from_single_file("https://huggingface.co/Kijai/flux-fp8/blob/main/flux1-dev-fp8.safetensors", dtype=dtype)
quantize(transformer, weights=qfloat8)
freeze(transformer)

text_encoder_2 = T5EncoderModel.from_pretrained(bfl_repo, subfolder="text_encoder_2", dtype=dtype)
quantize(text_encoder_2, weights=qfloat8)
freeze(text_encoder_2)

pipe = FluxPipeline.from_pretrained(bfl_repo, transformer=None, text_encoder_2=None, dtype=dtype)
pipe.transformer = transformer
pipe.text_encoder_2 = text_encoder_2

pipe.enable_model_cpu_offload()

prompt = "A cat holding a sign that says hello world"
image = pipe(
    prompt,
    guidance_scale=3.5,
    output_type="pil",
    num_inference_steps=20,
    generator=torch.Generator("cpu").manual_seed(0)
).images[0]

image.save("flux-fp8-dev.png")

FluxPipeline[[diffusers.FluxPipeline]]

diffusers.FluxPipeline[[diffusers.FluxPipeline]]

diffusers.FluxPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

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

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, negative_prompt: str | list[str] = None, negative_prompt_2: str | list[str] | None = None, true_cfg_scale: float = 1.0, height: int | None = None, width: int | None = None, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 3.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = 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, negative_ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_ip_adapter_image_embeds: list[torch.Tensor] | None = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt.

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

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

true_cfg_scale (float, необязательный, по умолчанию 1.0) : Истинное классификаторное свободное наведение (масштаб наведения) включается, когда true_cfg_scale > 1 и указан negative_prompt.

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

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 3.5) : Встроенный масштаб руководства (embedded guidance scale) включается при установке guidance_scale > 1. Более высокое значение guidance_scale побуждает модель генерировать изображения, более точно соответствующие prompt, за счёт снижения качества изображения. Модели, дистиллированные по руководству (guidance-distilled), аппроксимируют истинное классификаторно-свободное руководство (classifier-free guidance) для guidance_scale > 1. Подробнее см. в статье.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

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

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch
>>> from diffusers import FluxPipeline

>>> pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "A cat holding a sign that says hello world"
>>> # Depending on the variant being used, the pipeline call will slightly vary.
>>> # Refer to the pipeline documentation for more details.
>>> image = pipe(prompt, num_inference_steps=4, guidance_scale=0.0).images[0]
>>> image.save("flux.png")

encode_prompt[[diffusers.FluxPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxImg2ImgPipeline[[diffusers.FluxImg2ImgPipeline]]

diffusers.FluxImg2ImgPipeline[[diffusers.FluxImg2ImgPipeline]]

diffusers.FluxImg2ImgPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux для инпейнтинга изображений.

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxImg2ImgPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, negative_prompt: str | list[str] = None, negative_prompt_2: str | list[str] | None = None, true_cfg_scale: float = 1.0, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, strength: float = 0.6, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 7.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = 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, negative_ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_ip_adapter_image_embeds: list[torch.Tensor] | None = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt

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

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

true_cfg_scale (float, необязательный, по умолчанию 1.0) : Истинное классификаторное свободное наведение (масштаб наведения) включается, когда true_cfg_scale > 1 и указан negative_prompt.

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если передается тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если передается массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C). Также можно передавать латенты изображений в качестве image, но при прямой передаче латентов они не кодируются повторно.

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

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

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 7.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

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

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch

>>> from diffusers import FluxImg2ImgPipeline
>>> from diffusers.utils import load_image

>>> device = "cuda"
>>> pipe = FluxImg2ImgPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=torch.bfloat16)
>>> pipe = pipe.to(device)

>>> url = "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
>>> init_image = load_image(url).resize((1024, 1024))

>>> prompt = "cat wizard, gandalf, lord of the rings, detailed, fantasy, cute, adorable, Pixar, Disney, 8k"

>>> images = pipe(
...     prompt=prompt, image=init_image, num_inference_steps=4, strength=0.95, guidance_scale=0.0
... ).images[0]

encode_prompt[[diffusers.FluxImg2ImgPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxInpaintPipeline[[diffusers.FluxInpaintPipeline]]

diffusers.FluxInpaintPipeline[[diffusers.FluxInpaintPipeline]]

diffusers.FluxInpaintPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux для инпейнтинга изображений.

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxInpaintPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, negative_prompt: str | list[str] = None, negative_prompt_2: str | list[str] | None = None, true_cfg_scale: float = 1.0, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, masked_image_latents: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, padding_mask_crop: int | None = None, strength: float = 0.6, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 7.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = 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, negative_ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_ip_adapter_image_embeds: list[torch.Tensor] | None = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt

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

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

true_cfg_scale (float, необязательный, по умолчанию 1.0) : Истинное классификаторное свободное наведение (масштаб наведения) включается, когда true_cfg_scale > 1 и указан negative_prompt.

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если передается тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если передается массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C). Также можно передавать латенты изображений в качестве image, но при прямой передаче латентов они не кодируются повторно.

mask_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений для маскирования image. Белые пиксели в маске перекрашиваются, а чёрные сохраняются. Если mask_image — это изображение PIL, оно преобразуется в одноцветный канал (яркость) перед использованием. Если это массив numpy или тензор pytorch, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма для тензора pytorch — (B, 1, H, W), (B, H, W), (1, H, W), (H, W). А для массива numpy — (B, H, W, 1), (B, H, W), (H, W, 1) или (H, W).

masked_image_latents (torch.Tensor, list[torch.Tensor]) : Tensor, представляющий пакет изображений для маскирования image, сгенерированного VAE. Если не указано, тензор маскированных латентов будет сгенерирован с помощью mask_image.

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

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

padding_mask_crop (int, optional, по умолчанию None) : Размер поля (margin) для обрезки, применяемой к изображению и маске. Если None, обрезка не применяется к image и mask_image. Если padding_mask_crop не равно None, сначала находится прямоугольная область с тем же соотношением сторон, что и у изображения, содержащая всю замаскированную область, а затем эта область расширяется на основе padding_mask_crop. После этого image и mask_image обрезаются по расширенной области перед изменением размера до исходного размера изображения для инпейнтинга. Это полезно, когда замаскированная область мала, а изображение велико и содержит информацию, не относящуюся к инпейнтингу, например фон.

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 7.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

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

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

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

>>> pipe = FluxInpaintPipeline.from_pretrained("black-forest-labs/FLUX.1-schnell", torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")
>>> prompt = "Face of a yellow cat, high resolution, sitting on a park bench"
>>> img_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
>>> mask_url = "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
>>> source = load_image(img_url)
>>> mask = load_image(mask_url)
>>> image = pipe(prompt=prompt, image=source, mask_image=mask).images[0]
>>> image.save("flux_inpainting.png")

encode_prompt[[diffusers.FluxInpaintPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxControlNetInpaintPipeline[[diffusers.FluxControlNetInpaintPipeline]]

diffusers.FluxControlNetInpaintPipeline[[diffusers.FluxControlNetInpaintPipeline]]

diffusers.FluxControlNetInpaintPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, controlnet: diffusers.models.controlnets.controlnet_flux.FluxControlNetModel | list[diffusers.models.controlnets.controlnet_flux.FluxControlNetModel] | tuple[diffusers.models.controlnets.controlnet_flux.FluxControlNetModel] | diffusers.models.controlnets.controlnet_flux.FluxMultiControlNetModel)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux controlnet для инпейнтинга.

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxControlNetInpaintPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, masked_image_latents: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, strength: float = 0.6, padding_mask_crop: int | None = None, sigmas: list[float] | None = None, num_inference_steps: int = 28, guidance_scale: float = 7.0, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_mode: int | list[int] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2.

image (PIL.Image.Image или list[PIL.Image.Image] или torch.FloatTensor) : Изображение(я) для инпейнтинга.

mask_image (PIL.Image.Image или list[PIL.Image.Image] или torch.FloatTensor) : Маска или маски для inpainting. Белые пиксели на маске будут перерисованы, а чёрные — сохранены.

masked_image_latents (torch.FloatTensor, необязательный) : Предварительно сгенерированные латенты замаскированного изображения.

control_image (PIL.Image.Image или list[PIL.Image.Image] или torch.FloatTensor) : Условие входа для ControlNet. Изображение, управляющее генерацией.

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

width (int, optional, по умолчанию self.default_sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях.

strength (float, optional, по умолчанию 0.6) : Концептуально указывает, насколько сильно следует восстанавливать замаскированную область. Должно находиться в диапазоне от 0 до 1.

padding_mask_crop (int, optional) : Размер отступов, используемых при обрезке маски.

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, необязательный, по умолчанию 7.0) : Масштаб направленного действия, как определено в Classifier-Free Diffusion Guidance.

control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) : Доля от общего числа шагов, на которой ControlNet начинает применяться.

control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) : Доля от общего числа шагов, на которой ControlNet прекращает применяться.

control_mode (int или list[int], необязательный) : Режим для ControlNet. Если используется несколько ControlNet, это должно быть список.

controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) : Выходные данные ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном трансформере.

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

generator (torch.Generator или list[torch.Generator], необязательно) : Один или несколько генераторов torch для обеспечения детерминированности генерации.

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

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

pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста.

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

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

joint_attention_kwargs (dict, необязательный) : Дополнительные именованные аргументы, передаваемые в механизм совместного внимания.

callback_on_step_end (Callable, необязательный) : функция, вызываемая в конце каждого шага денойзинга во время инференса.

callback_on_step_end_tensor_inputs (list[str], необязательный) : Список тензорных входных данных для функции callback_on_step_end.

max_sequence_length (int, необязательный, по умолчанию 512) : Максимальная длина генерируемой последовательности.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch
>>> from diffusers import FluxControlNetInpaintPipeline
>>> from diffusers.models import FluxControlNetModel
>>> from diffusers.utils import load_image

>>> controlnet = FluxControlNetModel.from_pretrained(
...     "InstantX/FLUX.1-dev-controlnet-canny", torch_dtype=torch.float16
... )
>>> pipe = FluxControlNetInpaintPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-schnell", controlnet=controlnet, torch_dtype=torch.float16
... )
>>> pipe.to("cuda")

>>> control_image = load_image(
...     "https://huggingface.co/InstantX/FLUX.1-dev-Controlnet-Canny-alpha/resolve/main/canny.jpg"
... )
>>> init_image = load_image(
...     "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo.png"
... )
>>> mask_image = load_image(
...     "https://raw.githubusercontent.com/CompVis/latent-diffusion/main/data/inpainting_examples/overture-creations-5sI6fQgYIuo_mask.png"
... )

>>> prompt = "A girl holding a sign that says InstantX"
>>> image = pipe(
...     prompt,
...     image=init_image,
...     mask_image=mask_image,
...     control_image=control_image,
...     control_guidance_start=0.2,
...     control_guidance_end=0.8,
...     controlnet_conditioning_scale=0.7,
...     strength=0.7,
...     num_inference_steps=28,
...     guidance_scale=3.5,
... ).images[0]
>>> image.save("flux_controlnet_inpaint.png")

encode_prompt[[diffusers.FluxControlNetInpaintPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxControlNetImg2ImgPipeline[[diffusers.FluxControlNetImg2ImgPipeline]]

diffusers.FluxControlNetImg2ImgPipeline[[diffusers.FluxControlNetImg2ImgPipeline]]

diffusers.FluxControlNetImg2ImgPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, controlnet: diffusers.models.controlnets.controlnet_flux.FluxControlNetModel | list[diffusers.models.controlnets.controlnet_flux.FluxControlNetModel] | tuple[diffusers.models.controlnets.controlnet_flux.FluxControlNetModel] | diffusers.models.controlnets.controlnet_flux.FluxMultiControlNetModel)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux controlnet для генерации изображений по изображению.

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxControlNetImg2ImgPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, strength: float = 0.6, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 7.0, control_guidance_start: float | list[float] = 0.0, control_guidance_end: float | list[float] = 1.0, control_mode: int | list[int] | None = None, controlnet_conditioning_scale: float | list[float] = 1.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2.

image (PIL.Image.Image или list[PIL.Image.Image] или torch.FloatTensor) : Изображение(я) для обработки с помощью конвейера.

control_image (PIL.Image.Image или list[PIL.Image.Image] или torch.FloatTensor) : Условие входа для ControlNet. Изображение, управляющее генерацией.

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

width (int, optional, по умолчанию self.default_sample_size * self.vae_scale_factor) : Ширина генерируемого изображения в пикселях.

strength (float, optional, по умолчанию 0.6) : Концептуально указывает, насколько трансформировать эталонное изображение image. Значение должно быть в диапазоне от 0 до 1.

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, необязательный, по умолчанию 7.0) : Масштаб направленного действия, как определено в Classifier-Free Diffusion Guidance.

control_mode (int или list[int], необязательный) : Режим для ControlNet. Если используется несколько ControlNet, это должно быть список.

controlnet_conditioning_scale (float или list[float], необязательный, по умолчанию 1.0) : Выходные данные ControlNet умножаются на controlnet_conditioning_scale перед добавлением к остаточному соединению в исходном трансформере.

control_guidance_start (float или list[float], необязательный, по умолчанию 0.0) : Доля от общего числа шагов, на которой ControlNet начинает применяться.

control_guidance_end (float или list[float], необязательный, по умолчанию 1.0) : Доля от общего числа шагов, на которой ControlNet прекращает применяться.

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

generator (torch.Generator или list[torch.Generator], необязательно) : Один или несколько генераторов torch для обеспечения детерминированности генерации.

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

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

pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста.

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

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

joint_attention_kwargs (dict, необязательный) : Дополнительные именованные аргументы, передаваемые в механизм совместного внимания.

callback_on_step_end (Callable, необязательный) : функция, вызываемая в конце каждого шага денойзинга во время инференса.

callback_on_step_end_tensor_inputs (list[str], необязательный) : Список тензорных входных данных для функции callback_on_step_end.

max_sequence_length (int, необязательный, по умолчанию 512) : Максимальная длина генерируемой последовательности.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch
>>> from diffusers import FluxControlNetImg2ImgPipeline, FluxControlNetModel
>>> from diffusers.utils import load_image

>>> device = "cuda" if torch.cuda.is_available() else "cpu"

>>> controlnet = FluxControlNetModel.from_pretrained(
...     "InstantX/FLUX.1-dev-Controlnet-Canny-alpha", torch_dtype=torch.bfloat16
... )

>>> pipe = FluxControlNetImg2ImgPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-schnell", controlnet=controlnet, torch_dtype=torch.float16
... )

>>> pipe.text_encoder.to(torch.float16)
>>> pipe.controlnet.to(torch.float16)
>>> pipe.to("cuda")

>>> control_image = load_image("https://huggingface.co/InstantX/SD3-Controlnet-Canny/resolve/main/canny.jpg")
>>> init_image = load_image(
...     "https://raw.githubusercontent.com/CompVis/stable-diffusion/main/assets/stable-samples/img2img/sketch-mountains-input.jpg"
... )

>>> prompt = "A girl in city, 25 years old, cool, futuristic"
>>> image = pipe(
...     prompt,
...     image=init_image,
...     control_image=control_image,
...     control_guidance_start=0.2,
...     control_guidance_end=0.8,
...     controlnet_conditioning_scale=1.0,
...     strength=0.7,
...     num_inference_steps=2,
...     guidance_scale=3.5,
... ).images[0]
>>> image.save("flux_controlnet_img2img.png")

encode_prompt[[diffusers.FluxControlNetImg2ImgPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxControlPipeline[[diffusers.FluxControlPipeline]]

diffusers.FluxControlPipeline[[diffusers.FluxControlPipeline]]

diffusers.FluxControlPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

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

Справочник: https://bfl.ai/flux-1-tools

call[[diffusers.FluxControlPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 3.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt

control_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] or list[list[PIL.Image.Image]]): Вводное условие ControlNet, задающее направление для unet при генерации. Если тип указан как torch.Tensor, значение передаётся в ControlNet без изменений. В качестве изображения также допускается PIL.Image.Image. Размеры выходного изображения по умолчанию совпадают с размерами image. Если переданы высота и/или ширина, image масштабируется соответственно. Если в init указано несколько ControlNet, изображения необходимо передавать в виде списка, чтобы каждый элемент списка мог быть корректно сгруппирован в батч для входа в один ControlNet.

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

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 3.5) : Встроенный масштаб направляющего сигнала включается при установке guidance_scale > 1. Более высокое значение guidance_scale побуждает модель генерировать изображения, более точно соответствующие промпту, за счёт снижения качества изображения. Модели, дистиллированные с использованием направляющего сигнала, аппроксимируют истинный классификаторно-свободный направляющий сигнал для guidance_scale > 1. Подробнее см. в статье.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch
>>> from controlnet_aux import CannyDetector
>>> from diffusers import FluxControlPipeline
>>> from diffusers.utils import load_image

>>> pipe = FluxControlPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-Canny-dev", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> prompt = "A robot made of exotic candies and chocolates of different kinds. The background is filled with confetti and celebratory gifts."
>>> control_image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png"
... )

>>> processor = CannyDetector()
>>> control_image = processor(
...     control_image, low_threshold=50, high_threshold=200, detect_resolution=1024, image_resolution=1024
... )

>>> image = pipe(
...     prompt=prompt,
...     control_image=control_image,
...     height=1024,
...     width=1024,
...     num_inference_steps=50,
...     guidance_scale=30.0,
... ).images[0]
>>> image.save("output.png")

encode_prompt[[diffusers.FluxControlPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxControlImg2ImgPipeline[[diffusers.FluxControlImg2ImgPipeline]]

diffusers.FluxControlImg2ImgPipeline[[diffusers.FluxControlImg2ImgPipeline]]

diffusers.FluxControlImg2ImgPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux для инпейнтинга изображений.

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxControlImg2ImgPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, control_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, height: int | None = None, width: int | None = None, strength: float = 0.6, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 7.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если передается тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если передается массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C). Также можно передавать латенты изображений в качестве image, но при прямой передаче латентов они не кодируются повторно.

control_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image], list[np.ndarray], : list[list[torch.Tensor]], list[list[np.ndarray]] or list[list[PIL.Image.Image]]): Вводное условие ControlNet, задающее направление для unet при генерации. Если тип указан как torch.Tensor, значение передаётся в ControlNet без изменений. В качестве изображения также допускается PIL.Image.Image. Размеры выходного изображения по умолчанию совпадают с размерами image. Если переданы высота и/или ширина, image масштабируется соответственно. Если в init указано несколько ControlNet, изображения необходимо передавать в виде списка, чтобы каждый элемент списка мог быть корректно сгруппирован в батч для входа в один ControlNet.

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

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

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 7.0) : Масштаб руководства, определённый в Classifier-Free Diffusion Guidance. guidance_scale определяется как w из уравнения 2 в Imagen Paper. Масштаб руководства активируется при установке guidance_scale > 1. Более высокий масштаб руководства способствует генерации изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch
>>> from controlnet_aux import CannyDetector
>>> from diffusers import FluxControlImg2ImgPipeline
>>> from diffusers.utils import load_image

>>> pipe = FluxControlImg2ImgPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-Canny-dev", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> prompt = "A robot made of exotic candies and chocolates of different kinds. Abstract background"
>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/watercolor-painting.jpg"
... )
>>> control_image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/robot.png"
... )

>>> processor = CannyDetector()
>>> control_image = processor(
...     control_image, low_threshold=50, high_threshold=200, detect_resolution=1024, image_resolution=1024
... )

>>> image = pipe(
...     prompt=prompt,
...     image=image,
...     control_image=control_image,
...     strength=0.8,
...     height=1024,
...     width=1024,
...     num_inference_steps=50,
...     guidance_scale=30.0,
... ).images[0]
>>> image.save("output.png")

encode_prompt[[diffusers.FluxControlImg2ImgPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxPriorReduxPipeline[[diffusers.FluxPriorReduxPipeline]]

diffusers.FluxPriorReduxPipeline[[diffusers.FluxPriorReduxPipeline]]

diffusers.FluxPriorReduxPipeline(image_encoder: SiglipVisionModel, feature_extractor: SiglipImageProcessorPil, image_embedder: ReduxImageEncoder, text_encoder: CLIPTextModel = None, tokenizer: CLIPTokenizer = None, text_encoder_2: T5EncoderModel = None, tokenizer_2: T5Tokenizer = None)

Источник

Параметры:

image_encoder (SiglipVisionModel) : модель зрения SIGLIP для кодирования входного изображения.

feature_extractor (SiglipImageProcessor) : Обработчик изображений для предобработки изображений для модели SIGLIP.

image_embedder (ReduxImageEncoder) : кодировщик изображений Redux для обработки эмбеддингов SIGLIP.

text_encoder (CLIPTextModel, необязательный) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel, необязательный) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer, необязательный) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast, необязательный) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux Redux для генерации изображений по изображению.

Справочник: https://blackforestlabs.ai/flux-1-tools/

call[[diffusers.FluxPriorReduxPipeline.call]]

__call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, prompt_embeds_scale: float | list[float] | None = 1.0, pooled_prompt_embeds_scale: float | list[float] | None = 1.0, return_dict: bool = True)

Источник

Параметры:

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если это тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если это массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C)

prompt (str или list[str], необязательный) : Промпт или промпты для управления генерацией изображения. экспериментальная функция: чтобы использовать эту функцию, убедитесь, что текстовые энкодеры явно загружены в пайплайн. Промпты будут проигнорированы, если текстовые энкодеры не загружены.

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2.

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

pooled_prompt_embeds (torch.FloatTensor, необязательный) : Предварительно сгенерированные пул-эмбеддинги текста.

prompt_embeds_scale (float или list[float], необязательный, по умолчанию 1.0) : Коэффициент масштабирования (или список коэффициентов для каждого изображения), применяемый к эмбеддингам redux-промпта перед их возвратом.

pooled_prompt_embeds_scale (float или list[float], необязательный, по умолчанию 1.0) : Коэффициент масштабирования (или список коэффициентов для каждого изображения), применяемый к объединённым эмбеддингам промпта перед их возвратом.

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

Возвращает: ~pipelines.flux.FluxPriorReduxPipelineOutput или tuple

~pipelines.flux.FluxPriorReduxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

>>> import torch
>>> from diffusers import FluxPriorReduxPipeline, FluxPipeline
>>> from diffusers.utils import load_image

>>> device = "cuda"
>>> dtype = torch.bfloat16

>>> repo_redux = "black-forest-labs/FLUX.1-Redux-dev"
>>> repo_base = "black-forest-labs/FLUX.1-dev"
>>> pipe_prior_redux = FluxPriorReduxPipeline.from_pretrained(repo_redux, torch_dtype=dtype).to(device)
>>> pipe = FluxPipeline.from_pretrained(
...     repo_base, text_encoder=None, text_encoder_2=None, torch_dtype=torch.bfloat16
... ).to(device)

>>> image = load_image(
...     "https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/style_ziggy/img5.png"
... )
>>> pipe_prior_output = pipe_prior_redux(image)
>>> images = pipe(
...     guidance_scale=2.5,
...     num_inference_steps=50,
...     generator=torch.Generator("cpu").manual_seed(0),
...     **pipe_prior_output,
... ).images
>>> images[0].save("flux-redux.png")

encode_prompt[[diffusers.FluxPriorReduxPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxFillPipeline[[diffusers.FluxFillPipeline]]

diffusers.FluxFillPipeline[[diffusers.FluxFillPipeline]]

diffusers.FluxFillPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux Fill для инпейнтинга/аутпейнтинга изображений.

Справочник: https://blackforestlabs.ai/flux-1-tools/

call[[diffusers.FluxFillPipeline.call]]

__call__(prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, image: typing.Optional[torch.FloatTensor] = None, mask_image: typing.Optional[torch.FloatTensor] = None, masked_image_latents: typing.Optional[torch.FloatTensor] = None, height: int | None = None, width: int | None = None, strength: float = 1.0, num_inference_steps: int = 50, sigmas: list[float] | None = None, guidance_scale: float = 30.0, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если это тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если это массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C).

mask_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений для маскирования image. Белые пиксели в маске перекрашиваются, а чёрные сохраняются. Если mask_image — это изображение PIL, оно преобразуется в одноцветный канал (яркость) перед использованием. Если это массив numpy или тензор pytorch, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма для тензора pytorch — (B, 1, H, W), (B, H, W), (1, H, W), (H, W). А для массива numpy — (B, H, W, 1), (B, H, W), (H, W, 1) или (H, W).

masked_image_latents (torch.Tensor, list[torch.Tensor]) : Tensor, представляющий пакет изображений для маскирования image, сгенерированного VAE. Если не указано, тензор маскированных латентов будет сгенерирован с помощью mask_image.

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

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

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 30.0) : Масштаб направленного генерирования, определённый в Classifier-Free Diffusion Guidance. guidance_scale соответствует w из уравнения 2 в Imagen Paper. Направленное генерирование включается при установке guidance_scale > 1. Более высокое значение масштаба направленного генерирования способствует созданию изображений, тесно связанных с текстовым prompt, обычно за счёт снижения качества изображения.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

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

>>> image = load_image("https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/cup.png")
>>> mask = load_image("https://huggingface.co/datasets/YiYiXu/testing-images/resolve/main/cup_mask.png")

>>> pipe = FluxFillPipeline.from_pretrained("black-forest-labs/FLUX.1-Fill-dev", torch_dtype=torch.bfloat16)
>>> pipe.enable_model_cpu_offload()  # save some VRAM by offloading the model to CPU

>>> image = pipe(
...     prompt="a white paper cup",
...     image=image,
...     mask_image=mask,
...     height=1632,
...     width=1232,
...     guidance_scale=30,
...     num_inference_steps=50,
...     max_sequence_length=512,
...     generator=torch.Generator("cpu").manual_seed(0),
... ).images[0]
>>> image.save("flux_fill.png")

encode_prompt[[diffusers.FluxFillPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxKontextPipeline[[diffusers.FluxKontextPipeline]]

diffusers.FluxKontextPipeline[[diffusers.FluxKontextPipeline]]

diffusers.FluxKontextPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

Пайплайн Flux Kontext для генерации изображений по изображению и по тексту.

Справочная информация: https://bfl.ai/announcements/flux-1-kontext-dev

call[[diffusers.FluxKontextPipeline.call]]

__call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, negative_prompt: str | list[str] = None, negative_prompt_2: str | list[str] | None = None, true_cfg_scale: float = 1.0, height: int | None = None, width: int | None = None, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 3.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = 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, negative_ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_ip_adapter_image_embeds: list[torch.Tensor] | None = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512, max_area: int = 1048576, _auto_resize: bool = True)

Источник

Параметры:

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который будет использоваться в качестве начальной точки. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если передается тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если передается массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C). Также можно передавать латенты изображений в качестве image, но при прямой передаче латентов они не кодируются повторно.

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt.

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

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

true_cfg_scale (float, optional, по умолчанию 1.0) : Если значение больше 1.0 и указан negative_prompt, включает истинное наведение без классификатора (true classifier-free guidance).

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

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

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 3.5) : Встроенный масштаб направляющего сигнала включается при установке guidance_scale > 1. Более высокое значение guidance_scale побуждает модель генерировать изображения, более точно соответствующие промпту, за счёт снижения качества изображения. Модели, дистиллированные с использованием направляющего сигнала, аппроксимируют истинный классификаторно-свободный направляющий сигнал для guidance_scale > 1. Подробнее см. в статье.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

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

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

max_area (int, по умолчанию 1024 ** 2) : Максимальная площадь генерируемого изображения в пикселях. Высота и ширина будут скорректированы так, чтобы уместиться в этой площади, сохраняя при этом соотношение сторон.

_auto_resize (bool, необязательный, по умолчанию True) : Указывает, следует ли автоматически изменять размер входного изображения до предпочтительных разрешений.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

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

>>> pipe = FluxKontextPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-Kontext-dev", torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")

>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/yarn-art-pikachu.png"
... ).convert("RGB")
>>> prompt = "Make Pikachu hold a sign that says 'Black Forest Labs is awesome', yarn art style, detailed, vibrant colors"
>>> image = pipe(
...     image=image,
...     prompt=prompt,
...     guidance_scale=2.5,
...     generator=torch.Generator().manual_seed(42),
... ).images[0]
>>> image.save("output.png")

encode_prompt[[diffusers.FluxKontextPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

FluxKontextInpaintPipeline[[diffusers.FluxKontextInpaintPipeline]]

diffusers.FluxKontextInpaintPipeline[[diffusers.FluxKontextInpaintPipeline]]

diffusers.FluxKontextInpaintPipeline(scheduler: FlowMatchEulerDiscreteScheduler, vae: AutoencoderKL, text_encoder: CLIPTextModel, tokenizer: CLIPTokenizer, text_encoder_2: T5EncoderModel, tokenizer_2: T5Tokenizer, transformer: FluxTransformer2DModel, image_encoder: CLIPVisionModelWithProjection = None, feature_extractor: CLIPImageProcessorPil = None)

Источник

Параметры:

transformer (FluxTransformer2DModel) : архитектура условного Transformer (MMDiT) для удаления шума из закодированных латентов изображения.

scheduler (FlowMatchEulerDiscreteScheduler) : планировщик, используемый в связке с transformer для удаления шума из закодированных латентов изображения.

vae (AutoencoderKL) : Модель вариационного автоэнкодера (VAE) для кодирования изображений в латентные представления и декодирования из них.

text_encoder (CLIPTextModel) : CLIP, а именно вариант clip-vit-large-patch14.

text_encoder_2 (T5EncoderModel) : T5, а именно вариант google/t5-v1_1-xxl.

tokenizer (CLIPTokenizer) : Токенизатор класса CLIPTokenizer.

tokenizer_2 (T5TokenizerFast) : Второй токенизатор класса T5TokenizerFast.

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

Ссылка: https://blackforestlabs.ai/announcing-black-forest-labs/

call[[diffusers.FluxKontextInpaintPipeline.call]]

__call__(image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, image_reference: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, mask_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]] = None, prompt: str | list[str] = None, prompt_2: str | list[str] | None = None, negative_prompt: str | list[str] = None, negative_prompt_2: str | list[str] | None = None, true_cfg_scale: float = 1.0, height: int | None = None, width: int | None = None, strength: float = 1.0, padding_mask_crop: int | None = None, num_inference_steps: int = 28, sigmas: list[float] | None = None, guidance_scale: float = 3.5, num_images_per_prompt: int | None = 1, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, latents: typing.Optional[torch.FloatTensor] = None, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = 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, negative_ip_adapter_image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor], NoneType] = None, negative_ip_adapter_image_embeds: list[torch.Tensor] | None = None, negative_prompt_embeds: typing.Optional[torch.FloatTensor] = None, negative_pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, output_type: str | None = 'pil', return_dict: bool = True, joint_attention_kwargs: dict[str, typing.Any] | None = None, callback_on_step_end: typing.Optional[typing.Callable[[int, int], NoneType]] = None, callback_on_step_end_tensor_inputs: list[str] = ['latents'], max_sequence_length: int = 512, max_area: int = 1048576, _auto_resize: bool = True)

Источник

Параметры:

image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений для инпейнтинга (какие части изображения будут замаскированы с помощью mask_image и перерисованы в соответствии с prompt и image_reference). Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если передается тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если передается массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C). Также можно передавать латенты изображений в качестве image, но при прямой передаче латентов они не кодируются повторно.

image_reference (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений, который используется как отправная точка для маскированной области. Для массивов numpy и тензоров pytorch ожидаемый диапазон значений составляет [0, 1]. Если передается тензор или список тензоров, ожидаемая форма должна быть (B, C, H, W) или (C, H, W). Если передается массив numpy или список массивов, ожидаемая форма должна быть (B, H, W, C) или (H, W, C). Также можно передавать латенты изображений в качестве image, но при прямой передаче латентов они не кодируются повторно.

mask_image (torch.Tensor, PIL.Image.Image, np.ndarray, list[torch.Tensor], list[PIL.Image.Image] или list[np.ndarray]) : Image, массив numpy или тензор, представляющие пакет изображений для маскирования image. Белые пиксели в маске перекрашиваются, а чёрные сохраняются. Если mask_image — это изображение PIL, оно преобразуется в одноцветный канал (яркость) перед использованием. Если это массив numpy или тензор pytorch, он должен содержать один цветовой канал (L) вместо трёх, поэтому ожидаемая форма для тензора pytorch — (B, 1, H, W), (B, H, W), (1, H, W), (H, W). А для массива numpy — (B, H, W, 1), (B, H, W), (H, W, 1) или (H, W).

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут переданы в tokenizer_2 и text_encoder_2. Если не задано, вместо этого будет использоваться prompt.

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

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

true_cfg_scale (float, необязательный, по умолчанию 1.0) : Истинное классификаторное свободное наведение (масштаб наведения) включается, когда true_cfg_scale > 1 и указан negative_prompt.

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

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

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

padding_mask_crop (int, optional, по умолчанию None) : Размер поля (margin) для обрезки, применяемой к изображению и маске. Если None, обрезка не применяется к image и mask_image. Если padding_mask_crop не равно None, сначала находится прямоугольная область с тем же соотношением сторон, что и у изображения, содержащая всю замаскированную область, а затем эта область расширяется на основе padding_mask_crop. После этого image и mask_image обрезаются по расширенной области перед изменением размера до исходного размера изображения для инпейнтинга. Это полезно, когда замаскированная область мала, а изображение велико и содержит информацию, не относящуюся к инпейнтингу, например фон.

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

sigmas (list[float], optional) : Пользовательские сигмы для процесса денойзинга в планировщиках, поддерживающих аргумент sigmas в методе set_timesteps. Если не задано, будет использовано поведение по умолчанию при передаче num_inference_steps.

guidance_scale (float, optional, по умолчанию 3.5) : Встроенный масштаб направляющего сигнала включается при установке guidance_scale > 1. Более высокое значение guidance_scale побуждает модель генерировать изображения, более точно соответствующие prompt, за счёт снижения качества изображения. Модели, дистиллированные с использованием направляющего сигнала, аппроксимируют истинный classifier-free guidance для guidance_scale > 1. Подробнее см. в статье.

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

generator (torch.Generator или list[torch.Generator], необязательный) : Один или список генераторов torch для обеспечения детерминированности генерации.

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

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

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

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

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

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

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

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

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

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

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

joint_attention_kwargs (dict, необязательный) : Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.

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.

max_sequence_length (int по умолчанию 512) : Максимальная длина последовательности, используемая с prompt.

max_area (int, по умолчанию 1024 ** 2) : Максимальная площадь генерируемого изображения в пикселях. Высота и ширина будут скорректированы так, чтобы уместиться в этой площади, сохраняя при этом соотношение сторон.

_auto_resize (bool, необязательный, по умолчанию True) : Указывает, следует ли автоматически изменять размер входного изображения до предпочтительных разрешений.

Возвращает: ~pipelines.flux.FluxPipelineOutput или tuple

~pipelines.flux.FluxPipelineOutput, если return_dict равно True, иначе tuple. При возврате кортежа первым элементом является список с сгенерированными изображениями.

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

Примеры:

Инпейнтинг только с текстом

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

>>> prompt = "Change the yellow dinosaur to green one"
>>> img_url = (
...     "https://github.com/ZenAI-Vietnam/Flux-Kontext-pipelines/blob/main/assets/dinosaur_input.jpeg?raw=true"
... )
>>> mask_url = (
...     "https://github.com/ZenAI-Vietnam/Flux-Kontext-pipelines/blob/main/assets/dinosaur_mask.png?raw=true"
... )

>>> source = load_image(img_url)
>>> mask = load_image(mask_url)

>>> pipe = FluxKontextInpaintPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-Kontext-dev", torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")

>>> image = pipe(prompt=prompt, image=source, mask_image=mask, strength=1.0).images[0]
>>> image.save("kontext_inpainting_normal.png")

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

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

>>> pipe = FluxKontextInpaintPipeline.from_pretrained(
...     "black-forest-labs/FLUX.1-Kontext-dev", torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")

>>> prompt = "Replace this ball"
>>> img_url = "https://images.pexels.com/photos/39362/the-ball-stadion-football-the-pitch-39362.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500"
>>> mask_url = (
...     "https://github.com/ZenAI-Vietnam/Flux-Kontext-pipelines/blob/main/assets/ball_mask.png?raw=true"
... )
>>> image_reference_url = (
...     "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTah3x6OL_ECMBaZ5ZlJJhNsyC-OSMLWAI-xw&s"
... )

>>> source = load_image(img_url)
>>> mask = load_image(mask_url)
>>> image_reference = load_image(image_reference_url)

>>> mask = pipe.mask_processor.blur(mask, blur_factor=12)
>>> image = pipe(
...     prompt=prompt, image=source, mask_image=mask, image_reference=image_reference, strength=1.0
... ).images[0]
>>> image.save("kontext_inpainting_ref.png")

encode_prompt[[diffusers.FluxKontextInpaintPipeline.encode_prompt]]

encode_prompt(prompt: str | list[str], prompt_2: str | list[str] | None = None, device: typing.Optional[torch.device] = None, num_images_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.FloatTensor] = None, pooled_prompt_embeds: typing.Optional[torch.FloatTensor] = None, max_sequence_length: int = 512, lora_scale: float | None = None)

Источник

Параметры:

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

prompt_2 (str или list[str], необязательный) : Промпт или промпты, которые будут отправлены в tokenizer_2 и text_encoder_2. Если не задано, во всех text-encoders используется prompt

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

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

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

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

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

Xet Storage Details

Size:
236 kB
·
Xet hash:
c187b344b4be748e21a33f0ea6f89cd99cef946da7b60c0707e9b51f00eeb2fd

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.