Diffusers documentation

AnyFlow

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

and get access to the augmented documentation experience

to get started

LoRA

AnyFlow

AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation от NVIDIA, Национального университета Сингапура и Массачусетского технологического института, авторы: Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou.

Кратко: AnyFlow — это первый фреймворк видео-диффузии с произвольным числом шагов, построенный на flow maps, который позволяет одной модели (двусторонней или каузальной) адаптироваться к произвольным бюджетам инференса.

Модели согласованности значительно продвинули генерацию видео за малое число шагов. Однако их качество часто снижается в моделях диффузии видео с произвольным числом шагов из-за формулировки на основе неподвижных точек. Чтобы преодолеть это ограничение, мы представляем AnyFlow — первый фреймворк дистилляции диффузионных моделей видео с произвольным числом шагов, построенный на потоковых картах. Вместо обучения только отображения z_t → z_0, AnyFlow обучает переходы z_t → z_r на произвольных временных интервалах, что позволяет одной модели адаптироваться к разным бюджетам вычислений при инференсе. Мы разработали улучшенный рецепт обучения прямой потоковой карты, который дообучает предобученные диффузионные модели видео до моделей потоковых карт, и внедрили обратную симуляцию потоковой карты (Flow Map Backward Simulation) для обеспечения дистилляции on-policy для моделей потоковых карт. Обширные эксперименты на архитектурах с двунаправленным и каузальным вниманием, в масштабах от 1,3B до 14B параметров, на задачах генерации видео по тексту и по изображению показывают, что AnyFlow превосходит базовые решения на основе согласованности, сохраняя высокую точность и гибкость выборки при различных бюджетах шагов.

Пайплайны AnyFlow были предоставлены командой AnyFlow. Исходный код доступен на GitHub, страница проекта находится по адресу nvlabs.github.io/AnyFlow, а предобученные модели можно найти в коллекции nvidia/anyflow на Hugging Face.

Доступные модели:

ЧекпоинтBackboneОписание
nvidia/AnyFlow-Wan2.1-T2V-1.3B-DiffusersWan2.1 1.3BДвунаправленный T2V
nvidia/AnyFlow-Wan2.1-T2V-14B-DiffusersWan2.1 14BДвунаправленный T2V
nvidia/AnyFlow-FAR-Wan2.1-1.3B-DiffusersFAR + Wan2.1 1.3BCausal T2V / I2V / V2V
nvidia/AnyFlow-FAR-Wan2.1-14B-DiffusersFAR + Wan2.1 14BCausal T2V / I2V / V2V

AnyFlowPipeline предназначена для двунаправленных диффузионных моделей в генерации видео по тексту (T2V). AnyFlowFARPipeline — это причинная диффузионная модель, работающая по блокам, которая поддерживает генерацию видео по тексту (T2V), генерацию видео по изображению (I2V) и продолжение видео (V2V).

Генерация с AnyFlow (двусторонний T2V)

import torch
from diffusers import AnyFlowPipeline
from diffusers.utils import export_to_video

pipe = AnyFlowPipeline.from_pretrained(
    "nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = (
    "An astronaut runs smoothly and appears almost weightless on the lunar surface, "
    "as seen from a low-angle shot that highlights the vast, desolate background of the moon. "
    "The moon's craters and rocky terrain are clearly visible, creating a stark contrast against "
    "the running astronaut who moves with graceful, fluid motions."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_t2v.mp4", fps=16)

Генерация с AnyFlow (FAR Causal)

Causal pipeline выбирает между T2V / I2V / V2V с помощью аргумента video (или video_latents): опустите оба для обычного text-to-video, либо передайте video=<tensor> формы (B, T, C, H, W) в диапазоне [0, 1] с T = 4n + 1, чтобы использовать существующие кадры как условие. Для I2V используйте один кадр условия, а для продолжения V2V — более длинный клип. Если у вас уже есть предварительно закодированные латенты в раскладке модели, передайте их через video_latents=<tensor>, чтобы пропустить кодирование VAE. video и video_latents взаимоисключающи.

Опубликованные контрольные точки содержат в конфигурации трансформера параметр chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2] (сумма 21), соответствующий каноническим 81 исходным кадрам (21 латентный кадр при временном шаге VAE, равном 4). При изменении num_frames передавайте соответствующий chunk_partition со суммой (num_frames - 1) // 4 + 1, иначе конвейер вызовет ValueError.

t2v
i2v
v2v
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video

pipe = AnyFlowFARPipeline.from_pretrained(
    "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda")  # or "mps", "xpu", "cpu"

prompt = (
    "An astronaut runs smoothly and appears almost weightless on the lunar surface, "
    "as seen from a low-angle shot that highlights the vast, desolate background of the moon."
)
video = pipe(prompt, num_inference_steps=4, num_frames=81).frames[0]
export_to_video(video, "anyflow_far_t2v.mp4", fps=16)

Примечания

  • Classifier-free guidance встроена в опубликованные контрольные точки, поэтому при выводе не выполняется второй проход с наведением. Оставляйте значение по умолчанию guidance_scale=1.0, если ваш собственный контрольный пункт не требует иного.
  • FlowMapEulerDiscreteScheduler является универсальным. Вы можете подключить его к любому чекпоинту, дистиллированному по flow-map, с помощью from_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).
  • AnyFlowPipeline использует AnyFlowTransformer3DModel (двусторонний). AnyFlowFARPipeline использует AnyFlowFARTransformer3DModel, который добавляет patch-эмбеддинг сжатых кадров и каузальную блок-маску FAR.
  • Загрузка LoRA поддерживается через WanLoraLoaderMixin, тот же миксин, который используется в исходных пайплайнах Wan.
  • Для рецептов обучения (обучение forward flow-map и дистилляция on-policy) обратитесь к исходному фреймворку обучения AnyFlow по адресу NVlabs/AnyFlow; обучение не входит в область применения diffusers.

AnyFlowPipeline

класс diffusers.AnyFlowPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )

Параметры

  • tokenizer ([AutoTokenizer]) — токенизатор из google/umt5-xxl.
  • text_encoder ([UMT5EncoderModel]) — текстовый энкодер google/umt5-xxl.
  • transformer ([AnyFlowTransformer3DModel]) — Двунаправленный 3D-трансформер flow-map.
  • vae ([AutoencoderKLWan]) — VAE, кодирующий/декодирующий видео в латентные представления и обратно.
  • scheduler ([FlowMapEulerDiscreteScheduler]) — сэмплер flow-map. Пайплайн вызывает scheduler.step(..., timestep, sample, r_timestep) на каждом шаге инференса.

Пайплайн двунаправленной генерации видео из текста для дистиллированных чекпоинтов flow-map AnyFlow, представленный в AnyFlow.

AnyFlow обучается переходам на произвольных интервалахzt→zrz_t \to z_r вместо фиксированногоzt→z0z_t \to z_0 соответствия, как в моделях согласованности, поэтому одну дистиллированную контрольную точку можно оценивать при 1, 2, 4, 8, 16… NFE без повторного обучения. Этот конвейер работает с полным тензором видео за один двунаправленный проход; для пофрагментного авто регрессионного (каузального) генерирования используйте AnyFlowFARPipeline.

Сэмплирование выполняется простым методом Эйлера в форме средней скорости (z_r = z_t - (t - r) * u) без повторного добавления шума. Опубликованные чекпоинты NVIDIA включают классификаторно-свободное наведение (classifier-free guidance) в весах модели, поэтому рекомендуемое значение по умолчанию — guidance_scale=1.0.

Эта модель наследуется от [DiffusionPipeline]. См. документацию суперкласса для общих методов, реализованных для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.).

__call__

< >

( prompt: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = True ) → ~AnyFlowPipelineOutput or tuple

Параметры

  • prompt (str или List[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, передайте вместо него prompt_embeds.
  • video (torch.Tensor, необязательный) — условные кадры до VAE формы (B, T, C, H, W) в диапазоне [0, 1]. Если переданы, пайплайн кодирует их с помощью VAE и сохраняет соответствующий латентный префикс фиксированным во время сэмплирования. Взаимоисключается с video_latents.
  • video_latents (torch.Tensor, необязательный) — Предварительно закодированные VAE-латенты в формате AnyFlow (B, T_latent, C, H_latent, W_latent). Позволяет пропустить кодирование VAE на стороне пайплайна. Взаимоисключается с video.
  • negative_prompt (str или List[str], необязательный) — Промпт или промпты, которые следует избегать при генерации видео. Игнорируется, если не используется guidance (guidance_scale < 1).
  • height (int, по умолчанию 480) — Высота генерируемого видео в пикселях.
  • width (int, по умолчанию 832) — Ширина генерируемого видео в пикселях.
  • num_frames (int, по умолчанию 81) — Количество кадров в сгенерированном видео. Должно удовлетворять условию (num_frames - 1) % vae_scale_factor_temporal == 0.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга. Дистиллированные чекпоинты AnyFlow поддерживают сэмплирование с любым числом шагов, поэтому типичными значениями являются 1, 2, 4 или 8. Игнорируется, если переданы sigmas или timesteps.
  • sigmas (List[float], необязательный) — Пользовательское расписание сигм для сэмплирования с любым числом шагов, в диапазоне [0, 1] и упорядоченное от шумного к чистому. Длина определяет эффективное значение num_inference_steps; планировщик добавляет конечную сигму 0.
  • timesteps (List[float], необязательный) — Пользовательское расписание шагов для сэмплирования с любым числом шагов, в тех же единицах, что и self.scheduler.timesteps (т. е. масштабированное на num_train_timesteps). Взаимоисключается с sigmas.
  • guidance_scale (float, по умолчанию 1.0) — Масштаб классификаторно-свободного управления (classifier-free guidance). Опубликованные контрольные точки AnyFlow интегрируют CFG в веса во время обучения; оставляйте значение 1.0, если вы не уверены, что ваша контрольная точка ожидает иное.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • generator (torch.Generator or List[torch.Generator], optional) — A torch.Generator to make generation deterministic.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты для использования в качестве входных данных. Если не указаны, латенты выбираются из переданного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для корректировки текстовых входных данных (например, взвешивание промпта). Если не переданы, эмбеддинги генерируются из prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги.
  • output_type (str, необязательный, по умолчанию "np") — Формат вывода. Одно из значений: "pil", "np", "pt" или "latent".
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать AnyFlowPipelineOutput вместо обычного кортежа.
  • attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.
  • callback_on_step_end (Callable, необязательный) — функция или PipelineCallback, вызываемая в конце каждого шага инференса. Подробности см. в разделе callbacks.
  • callback_on_step_end_tensor_inputs (List[str], необязательный, по умолчанию ["latents"]) — Тензорные входные данные, передаваемые в callback. Должны быть подмножеством self._callback_tensor_inputs.
  • max_sequence_length (int, по умолчанию 512) — Максимальная длина последовательности текстового кодировщика. Более длинные промпты будут усечены.
  • use_mean_velocity (bool, по умолчанию True) — Если True, модель flow-map использует в качестве условий исходный шаг t и целевой шаг r для предсказания средней скорости, что соответствует поведению при обучении. Отключите, чтобы воспроизвести сырое интегрирование Эйлера (r = t).

Возвращает

~AnyFlowPipelineOutput или tuple

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

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

Примеры:

>>> import torch
>>> from diffusers import AnyFlowPipeline
>>> from diffusers.utils import export_to_video

>>> pipe = AnyFlowPipeline.from_pretrained(
...     "nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> prompt = "A red panda eating bamboo in a forest, cinematic lighting"
>>> video = pipe(prompt, num_inference_steps=4, num_frames=33).frames[0]
>>> export_to_video(video, "anyflow_t2v.mp4", fps=16)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • do_classifier_free_guidance (bool, необязательный, по умолчанию True) — Использовать ли classifier free guidance.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • device — (torch.device, необязательный): устройство torch
  • dtype — (torch.dtype, необязательный): torch dtype

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

encode_video

< >

( video: Tensorheight: intwidth: int )

Кодирует видео в пиксельном пространстве в латентное представление AnyFlow.

Отражает конвенцию с одним хелпером, используемую в других пайплайнах diffusers (см. WanImageToVideoPipeline.encode_image): объединяет предобработку, кодирование VAE и нормализацию латентов в один вызов. Формат вывода — (B, T_latent, C, H, W), что соответствует ожиданиям трансформера AnyFlow для кадров условий.

AnyFlowFARPipeline

класс diffusers.AnyFlowFARPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowFARTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )

Параметры

  • tokenizer ([AutoTokenizer]) — токенизатор из google/umt5-xxl.
  • text_encoder ([UMT5EncoderModel]) — текстовый энкодер google/umt5-xxl.
  • transformer ([AnyFlowFARTransformer3DModel]) — 3D-трансформер FAR с причинно-следственной flow-map.
  • vae ([AutoencoderKLWan]) — VAE, кодирующий/декодирующий видео в латентные представления и обратно.
  • scheduler ([FlowMapEulerDiscreteScheduler]) — сэмплер flow-map.

Пайплайн генерации видео из текста / видео из изображения / видео из видео на основе причинно-следственных связей (FAR) для чекпоинтов AnyFlow, представленный в AnyFlow.

Пайплайн управляет поштучным авто регрессионным циклом сэмплирования: каждый чанк денуизируется с помощью шагов flow-map, при этом внимание обращается только к предыдущим чанкам через блочно-разреженное каузальное внимание, а промежуточный KV-кэш переиспользуется между чанками.

Режим задачи (T2V / I2V / V2V) определяется тем, какой аргумент условного контекста передается в __call__:

  • и video=None, и video_latents=None — чистый текст-в-видео.
  • video=<tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1> — кадры для условного кодирования до VAE; пайплайн кодирует их с помощью VAE. Передайте видео с одним кадром для I2V или клип с несколькими кадрами для V2V.
  • video_latents=<latent tensor of shape (B, T_latent, C, H_latent, W_latent)> — уже закодированные латенты в раскладке FAR (пропускает этап кодирования VAE).

Базовая архитектура FAR представляет собой каузальный вариант Wan2.1, представленный в FAR. Вывод выполняется с помощью простого метода Эйлера в форме средней скорости для каждого чанка без повторного добавления шума. Совместная поддержка T2V / I2V / V2V обеспечивается одной дистиллированной моделью.

Эта модель наследуется от [DiffusionPipeline]. См. документацию суперкласса для общих методов, реализованных для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.).

__call__

< >

( prompt: typing.Union[str, typing.List[str]] = Nonevideo: typing.Optional[torch.Tensor] = Nonevideo_latents: typing.Optional[torch.Tensor] = Nonenegative_prompt: typing.Union[str, typing.List[str]] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50sigmas: typing.Optional[typing.List[float]] = Nonetimesteps: typing.Optional[typing.List[float]] = Noneguidance_scale: float = 1.0num_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'np'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512use_mean_velocity: bool = Trueuse_kv_cache: bool = Truechunk_partition: typing.Optional[typing.List[int]] = None ) → ~AnyFlowPipelineOutput or tuple

Параметры

  • prompt (str или List[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, передайте вместо него prompt_embeds.
  • video (torch.Tensor, необязательный) — условные кадры до VAE формы (B, T, C, H, W) в диапазоне [0, 1] (T = 4n + 1). Если переданы, пайплайн кодирует их с помощью VAE и фиксирует соответствующий латентный префикс во время сэмплирования. Взаимоисключается с video_latents.
  • video_latents (torch.Tensor, необязательный) — Предварительно закодированные VAE-латенты в формате FAR (B, T_latent, C, H_latent, W_latent). Позволяет пропустить кодирование VAE на стороне пайплайна. Взаимоисключается с video.
  • negative_prompt (str или List[str], необязательный) — Промпт или промпты, которые следует избегать при генерации видео. Игнорируется, если не используется guidance (guidance_scale < 1).
  • height (int, по умолчанию 480) — Высота генерируемого видео в пикселях.
  • width (int, по умолчанию 832) — Ширина генерируемого видео в пикселях.
  • num_frames (int, по умолчанию 81) — Количество кадров в сгенерированном видео. Должно удовлетворять условию (num_frames - 1) % vae_scale_factor_temporal == 0.
  • num_inference_steps (int, по умолчанию 50) — Количество шагов денойзинга на каждый чанк. Дистиллированные чекпоинты AnyFlow-FAR поддерживают сэмплирование с любым числом шагов (1, 2, 4, 8, …). Игнорируется, если заданы sigmas или timesteps.
  • sigmas (List[float], необязательный) — Пользовательское расписание сигм для сэмплирования с любым числом шагов, в диапазоне [0, 1] и упорядоченное от шумного к чистому. Длина определяет эффективное значение num_inference_steps; планировщик добавляет конечную сигму 0.
  • timesteps (List[float], необязательный) — Пользовательское расписание шагов для сэмплирования с любым числом шагов, в тех же единицах, что и self.scheduler.timesteps (т. е. масштабированное на num_train_timesteps). Взаимоисключается с sigmas.
  • guidance_scale (float, по умолчанию 1.0) — Масштаб классификаторно-свободного управления (classifier-free guidance). Опубликованные контрольные точки AnyFlow интегрируют CFG в веса во время обучения; сохраняйте значение 1.0, если контрольная точка не требует иного.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • generator (torch.Generator или List[torch.Generator], необязательный) — Генератор, используемый для задания начального значения при выборке.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты. Если не указаны, латенты выбираются из переданного generator.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Если не указаны, эмбеддинги генерируются из prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги.
  • output_type (str, необязательный, по умолчанию "np") — Формат вывода. Одно из значений "pil", "np", "pt" или "latent".
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать AnyFlowPipelineOutput вместо обычного кортежа.
  • attention_kwargs (dict, необязательный) — Словарь kwargs, который при указании передается в AttentionProcessor, определенный в self.processor в diffusers.models.attention_processor.
  • callback_on_step_end (Callable, необязательный) — Функция или PipelineCallback, вызываемая в конце каждого шага инференса.
  • callback_on_step_end_tensor_inputs (List[str], необязательный, по умолчанию ["latents"]) — Тензорные входные данные, передаваемые в callback. Должны быть подмножеством self._callback_tensor_inputs.
  • max_sequence_length (int, по умолчанию 512) — Максимальная длина последовательности текстового кодировщика.
  • use_mean_velocity (bool, по умолчанию True) — Если True, модель flow-map использует в качестве условий исходный шаг t и целевой шаг r для предсказания средней скорости. Отключите, чтобы воспроизвести чистое интегрирование методом Эйлера.
  • use_kv_cache (bool, по умолчанию True) — Повторно использовать кэш KV для внимания FAR между каузальными чанками. Отключайте только для отладки.
  • chunk_partition (List[int], необязательный) — Количество кадров в каждом чанке. По умолчанию используется self.transformer.config.chunk_partition (соответствует опубликованным чекпоинтам на 81 кадр). При изменении num_frames передайте chunk_partition, сумма элементов которого равна (num_frames - 1) // vae_scale_factor_temporal + 1.

Возвращает

~AnyFlowPipelineOutput или tuple

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

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

Примеры:

>>> import numpy as np
>>> import torch
>>> from diffusers import AnyFlowFARPipeline
>>> from diffusers.utils import export_to_video, load_image

>>> pipe = AnyFlowFARPipeline.from_pretrained(
...     "nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", torch_dtype=torch.bfloat16
... ).to("cuda")

>>> # Single-frame I2V: wrap the conditioning image as a (1, 1, 3, H, W) tensor in [0, 1].
>>> first_frame = load_image("path/to/first_frame.png").resize((832, 480))
>>> arr = np.asarray(first_frame).astype("float32") / 255.0
>>> context = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda")

>>> video = pipe(
...     prompt="a cat walks across a sunlit lawn",
...     video=context,
...     num_inference_steps=4,
...     num_frames=81,
... ).frames[0]
>>> export_to_video(video, "anyflow_far.mp4", fps=16)

encode_prompt

< >

( prompt: str | list[str]negative_prompt: str | list[str] | None = Nonedo_classifier_free_guidance: bool = Truenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 226device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None )

Параметры

  • prompt (str или list[str], необязательный) — промпт для кодирования
  • negative_prompt (str or list[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • do_classifier_free_guidance (bool, необязательный, по умолчанию True) — Использовать ли classifier free guidance.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, которое должно быть сгенерировано для каждого промпта. Устройство torch, на котором должны размещаться результирующие эмбеддинги
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например, для взвешивания промпта. Если не передано, текстовые эмбеддинги будут сгенерированы из входного аргумента prompt.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • device — (torch.device, необязательный): устройство torch
  • dtype — (torch.dtype, необязательный): torch dtype

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

encode_video

< >

( video: Tensorheight: intwidth: int )

Кодирует видео в пиксельном пространстве в латентное представление AnyFlow.

Отражает конвенцию с одним хелпером, используемую в других пайплайнах diffusers (см. WanImageToVideoPipeline.encode_image): объединяет предобработку, кодирование VAE и нормализацию латентов в один вызов. Формат вывода — (B, T_latent, C, H, W), что соответствует ожиданиям трансформера AnyFlow для кадров условий.

AnyFlowPipelineOutput

класс diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput

< >

( frames: Tensor )

Параметры

  • frames (torch.Tensor, np.ndarray или list[list[PIL.Image.Image]]) — список видеовыходов. Может быть вложенным списком длины batch_size, где каждый под-список содержит последовательности денойзированных изображений PIL длины num_frames. Также может быть массивом NumPy или тензором Torch с формой (batch_size, num_frames, channels, height, width).

Класс вывода для конвейеров AnyFlow.

Update on GitHub