Diffusers documentation

AnyFlow

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