Diffusers documentation
AnyFlow
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-Diffusers | Wan2.1 1.3B | Двунаправленный T2V |
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers | Wan2.1 14B | Двунаправленный T2V |
nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers | FAR + Wan2.1 1.3B | Causal T2V / I2V / V2V |
nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers | FAR + Wan2.1 14B | Causal 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.
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)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", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
# Example conditioning image from the AnyFlow repo.
first_frame = load_image(
"https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/images/1.jpg"
).resize((832, 480))
arr = np.asarray(first_frame).astype("float32") / 255.0 # (480, 832, 3)
context_tensor = torch.from_numpy(arr).permute(2, 0, 1).unsqueeze(0).unsqueeze(1).to("cuda") # (1, 1, 3, 480, 832)
prompt = (
"A towering, battle-scarred humanoid robot, reminiscent of a Transformer with powerful, segmented armor "
"and glowing red optics, walking through the skeletal remains of a city ruin. Twisted metal and shattered "
"concrete crunch under its heavy steps, as the robot scans the desolate, dust-choked skyline under an dark sky."
)
video = pipe(
prompt=prompt,
video=context_tensor,
num_inference_steps=4,
num_frames=81,
).frames[0]
export_to_video(video, "anyflow_far_i2v.mp4", fps=16)import numpy as np
import torch
from diffusers import AnyFlowFARPipeline
from diffusers.utils import export_to_video, load_video
pipe = AnyFlowFARPipeline.from_pretrained(
"nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers", dtype=torch.bfloat16
).to("cuda") # or "mps", "xpu", "cpu"
# Example conditioning clip from the AnyFlow repo — take the first 9 frames (3 latent frames at VAE temporal stride 4).
context_frames = load_video(
"https://raw.githubusercontent.com/NVlabs/AnyFlow/main/assets/evaluation/example/videos/2.mp4"
)[:9]
arr = np.stack([np.asarray(f.resize((832, 480))) for f in context_frames]).astype("float32") / 255.0
context_tensor = torch.from_numpy(arr).permute(0, 3, 1, 2).unsqueeze(0).to("cuda") # (1, 9, 3, 480, 832)
prompt = (
"A focused trail runner's powerful strides through a dense, sun-dappled forest. "
"The camera tracks alongside, highlighting muscular exertion, sweat, and determined facial expression."
)
video = pipe(
prompt=prompt,
video=context_tensor,
num_inference_steps=4,
num_frames=81,
# Override chunk_partition so the first chunk covers exactly the 3 latent context frames.
chunk_partition=[3, 3, 3, 3, 3, 3, 3],
).frames[0]
export_to_video(video, "anyflow_far_v2v.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
< source >( 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 обучается переходам на произвольных интервалах вместо фиксированного соответствия, как в моделях согласованности, поэтому одну дистиллированную контрольную точку можно оценивать при 1, 2, 4, 8, 16… NFE без повторного обучения. Этот конвейер работает с полным тензором видео за один двунаправленный проход; для пофрагментного авто регрессионного (каузального) генерирования используйте AnyFlowFARPipeline.
Сэмплирование выполняется простым методом Эйлера в форме средней скорости (z_r = z_t - (t - r) * u) без повторного добавления шума. Опубликованные чекпоинты NVIDIA включают классификаторно-свободное наведение (classifier-free guidance) в весах модели, поэтому рекомендуемое значение по умолчанию — guidance_scale=1.0.
Эта модель наследуется от [DiffusionPipeline]. См. документацию суперкласса для общих методов, реализованных для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.).
__call__
< source >( 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.GeneratororList[torch.Generator], optional) — Atorch.Generatorto 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
< source >( 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 (
strorlist[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
Кодирует промпт в скрытые состояния текстового энкодера.
Кодирует видео в пиксельном пространстве в латентное представление AnyFlow.
Отражает конвенцию с одним хелпером, используемую в других пайплайнах diffusers (см. WanImageToVideoPipeline.encode_image): объединяет предобработку, кодирование VAE и нормализацию латентов в один вызов. Формат вывода — (B, T_latent, C, H, W), что соответствует ожиданиям трансформера AnyFlow для кадров условий.
AnyFlowFARPipeline
класс diffusers.AnyFlowFARPipeline
< source >( 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__
< source >( 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
< source >( 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 (
strorlist[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
Кодирует промпт в скрытые состояния текстового энкодера.
Кодирует видео в пиксельном пространстве в латентное представление AnyFlow.
Отражает конвенцию с одним хелпером, используемую в других пайплайнах diffusers (см. WanImageToVideoPipeline.encode_image): объединяет предобработку, кодирование VAE и нормализацию латентов в один вызов. Формат вывода — (B, T_latent, C, H, W), что соответствует ожиданиям трансформера AnyFlow для кадров условий.
AnyFlowPipelineOutput
класс diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput
< source >( 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.