Diffusers documentation
AnyFlow
AnyFlow
AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation da NVIDIA, National University of Singapore e Massachusetts Institute of Technology, por Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou.
Resumo: AnyFlow é o primeiro framework de difusão de vídeo com qualquer número de etapas construído sobre mapas de fluxo, o que permite que um único modelo (bidirecional ou causal) se adapte a orçamentos de inferência arbitrários.
A geração de vídeo em poucas etapas foi significativamente avançada pelos modelos de consistência. No entanto, seu desempenho frequentemente se degrada em modelos de difusão de vídeo em qualquer etapa devido à formulação de ponto fixo. Para abordar essa limitação, apresentamos o AnyFlow, o primeiro framework de destilação de difusão de vídeo em qualquer etapa construído sobre mapas de fluxo. Em vez de aprender apenas o mapeamento z_t → z_0, o AnyFlow aprende transições z_t → z_r em intervalos de tempo arbitrários, permitindo que um único modelo se adapte a diferentes orçamentos de inferência. Projetamos uma receita aprimorada de treinamento de mapa de fluxo para frente que ajusta finamente modelos de difusão de vídeo pré-treinados em modelos de mapa de fluxo, e introduzimos a Simulação para Trás de Mapa de Fluxo para permitir a destilação on-policy para modelos de mapa de fluxo. Experimentos extensivos em arquiteturas bidirecionais e causais, em escalas variando de 1,3B a 14B, em tarefas de texto-para-vídeo e imagem-para-vídeo, demonstram que o AnyFlow supera as linhas de base baseadas em consistência, preservando alta fidelidade e amostragem flexível sob orçamentos de etapas variáveis.
Os pipelines AnyFlow foram contribuídos pela equipe AnyFlow. O código original está disponível no GitHub, a página do projeto está em nvlabs.github.io/AnyFlow e os modelos pré-treinados podem ser encontrados na coleção nvidia/anyflow no Hugging Face.
Modelos disponíveis:
| Checkpoint | Backbone | Descrição |
|---|---|---|
nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers | Wan2.1 1.3B | T2V Bidirecional |
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers | Wan2.1 14B | T2V Bidirecional |
nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers | FAR + Wan2.1 1.3B | T2V / I2V / V2V causal |
nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers | FAR + Wan2.1 14B | T2V / I2V / V2V causal |
AnyFlowPipelinefoi projetado para modelos de difusão bidirecionais em geração de texto para vídeo (T2V).AnyFlowFARPipelineé um modelo de difusão causal por blocos que suporta geração de texto para vídeo (T2V), geração de imagem para vídeo (I2V) e continuação de vídeo (V2V).
Geração com AnyFlow (T2V Bidirecional)
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)Geração com AnyFlow (FAR Causal)
O pipeline causal seleciona entre T2V / I2V / V2V por meio do argumento video (ou video_latents):
omitir ambos para text-to-video puro, ou passar video=<tensor> de forma (B, T, C, H, W) em [0, 1] com T = 4n + 1 para condicionar em quadros existentes. Use um único quadro de condicionamento para I2V e um clipe mais longo para continuação V2V. Se você já tiver latentes pré-codificados no layout do modelo, passe-os via video_latents=<tensor> para pular a codificação VAE. video e video_latents são mutuamente exclusivos.
Os checkpoints liberados incorporam
chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2](soma 21) na configuração do transformer, correspondendo às 81 frames brutas canônicas (21 frames latentes no passo temporal do VAE de 4). Ao alterarnum_frames, passe umchunk_partitioncorrespondente cuja soma seja(num_frames - 1) // 4 + 1; caso contrário, o pipeline lança umValueError.
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)Observações
- A classifier-free guidance é incorporada nos checkpoints liberados, portanto a inferência não executa uma segunda passagem de encaminhamento guiada. Mantenha o valor padrão
guidance_scale=1.0, a menos que seu próprio checkpoint exija o contrário. FlowMapEulerDiscreteScheduleré de uso geral. Você pode conectá-lo a qualquer checkpoint destilado de flow-map por meio defrom_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).AnyFlowPipelineusaAnyFlowTransformer3DModel(bidirecional).AnyFlowFARPipelineusaAnyFlowFARTransformer3DModel, que adiciona um patch embedding de quadro comprimido e a máscara de bloco causal FAR.- O carregamento de LoRA é suportado por meio de
WanLoraLoaderMixin, o mesmo mixin utilizado pelos pipelines Wan upstream. - Para as receitas de treinamento (treinamento de fluxo de mapa para frente e destilação on-policy), consulte o framework de treinamento original AnyFlow em
NVlabs/AnyFlow; o treinamento está fora do escopo do diffusers.
AnyFlowPipeline
classe diffusers.AnyFlowPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )
Parâmetros
- tokenizer ([AutoTokenizer]) — Tokenizer de google/umt5-xxl.
- text_encoder ([UMT5EncoderModel]) — codificador de texto google/umt5-xxl.
- transformer ([AnyFlowTransformer3DModel]) — Transformer 3D de fluxo-mapa bidirecional.
- vae ([AutoencoderKLWan]) — VAE que codifica/decodifica vídeos para e a partir de representações latentes.
- scheduler ([FlowMapEulerDiscreteScheduler]) —
Amostrador de mapa de fluxo. O pipeline aciona
scheduler.step(..., timestep, sample, r_timestep)a cada etapa de inferência.
Pipeline de geração de texto para vídeo bidirecional para checkpoints destilados por mapa de fluxo do AnyFlow, introduzido em AnyFlow.
O AnyFlow aprende transições de intervalos arbitrários em vez do mapeamento fixo dos modelos de consistência, de modo que um único checkpoint destilado pode ser avaliado com 1, 2, 4, 8, 16… NFE sem re-treino. Este pipeline opera sobre o tensor completo do vídeo em uma única passagem bidirecional; para geração autoregressiva (causal) por blocos, use AnyFlowFARPipeline.
A amostragem é Euler simples na forma de velocidade média (z_r = z_t - (t - r) * u) sem re-ruído. Os checkpoints da NVIDIA liberados incorporam o classifier-free guidance nos pesos do modelo, portanto o valor padrão guidance_scale=1.0 é a configuração recomendada.
Este modelo herda de [DiffusionPipeline]. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
__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
Parâmetros
- prompt (
strouList[str], opcional) — O prompt ou os prompts para orientar a geração do vídeo. Se não definido, passeprompt_embedsem vez disso. - video (
torch.Tensor, opcional) — Quadros de condicionamento pré-VAE com forma(B, T, C, H, W)em[0, 1]. Quando fornecidos, o pipeline os codifica com o VAE e mantém o prefixo latente correspondente fixo durante a amostragem. Mutuamente exclusivo comvideo_latents. - video_latents (
torch.Tensor, opcional) — Latentes pré-codificados pelo VAE no layout AnyFlow(B, T_latent, C, H_latent, W_latent). Pula a codificação do VAE no lado do pipeline. Mutuamente exclusivo comvideo. - negative_prompt (
strouList[str], opcional) — O prompt ou os prompts a serem evitados durante a geração de vídeo. Ignorado quando não está usando orientação (guidance_scale < 1). - height (
int, padrão480) — A altura em pixels do vídeo gerado. - width (
int, padrão832) — A largura em pixels do vídeo gerado. - num_frames (
int, padrão81) — O número de quadros no vídeo gerado. Deve satisfazer(num_frames - 1) % vae_scale_factor_temporal == 0. - num_inference_steps (
int, padrão50) — O número de etapas de remoção de ruído. Os checkpoints distilados do AnyFlow suportam amostragem em qualquer etapa, portanto, valores tão baixos quanto1,2,4ou8são típicos. Ignorado quandosigmasoutimestepsé fornecido. - sigmas (
List[float], optional) — Custom sigma schedule for any-step sampling, in[0, 1]and ordered from noisy to clean. Length determines the effectivenum_inference_steps; the scheduler appends the terminal0sigma. - timesteps (
List[float], opcional) — Agenda personalizada para amostragem em qualquer passo, nas mesmas unidades deself.scheduler.timesteps(ou seja, escalonada pornum_train_timesteps). Mutuamente exclusiva comsigmas. - guidance_scale (
float, padrão1.0) — Escala de orientação sem classificador (classifier-free guidance). Os checkpoints AnyFlow liberados fundem o CFG nos pesos durante o treinamento; mantenha em1.0a menos que você saiba que seu checkpoint espera o contrário. - num_videos_per_prompt (
int, opcional, padrão1) — O número de vídeos a serem gerados por prompt. - generator (
torch.GeneratorouList[torch.Generator], opcional) — Umtorch.Generatorpara tornar a geração determinística. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados para usar como entradas. Se não fornecidos, os latentes são amostrados a partir dogeneratorfornecido. - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Pode ser usado para ajustar as entradas de texto (por exemplo, ponderação de prompt). Se não for fornecido, as incorporações são geradas a partir deprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas. - output_type (
str, opcional, padrão"np") — O formato de saída. Um de"pil","np","pt"ou"latent". - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar umAnyFlowPipelineOutputem vez de uma tupla simples. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor. - callback_on_step_end (
Callable, opcional) — Uma função ouPipelineCallbackchamada no final de cada etapa de inferência. Consultecallbackspara mais detalhes. - callback_on_step_end_tensor_inputs (
List[str], opcional, padrão["latents"]) — As entradas de tensor encaminhadas para o callback. Deve ser um subconjunto deself._callback_tensor_inputs. - max_sequence_length (
int, padrão512) — O comprimento máximo da sequência do codificador de texto. Prompts mais longos são truncados. - use_mean_velocity (
bool, padrãoTrue) — QuandoTrue, o modelo flow-map é condicionado tanto no timestep de origemtquanto no timestep de destinorpara prever uma velocidade média, correspondendo ao comportamento no momento do treinamento. Desative para espelhar o passo bruto de Euler (r = t).
Retorna
~AnyFlowPipelineOutput ou tuple
Se return_dict for True, AnyFlowPipelineOutput é retornado; caso contrário, uma tuple cujo primeiro elemento é o vídeo gerado.
A função de chamada do pipeline para geração.
Exemplos:
>>> 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 )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - do_classifier_free_guidance (
bool, opcional, padrãoTrue) — Se deve ou não usar classifier free guidance. - num_videos_per_prompt (
int, opcional, padrão 1) — Número de vídeos que devem ser gerados por prompt. Dispositivo torch para colocar os embeddings resultantes - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - device — (
torch.device, opcional): dispositivo torch - dtype — (
torch.dtype, opcional): dtype do torch
Codifica o prompt em estados ocultos do codificador de texto.
Codifique um vídeo em espaço de pixels para o layout latente do AnyFlow.
Espelha a convenção de um único helper de outros pipelines do diffusers (cf. WanImageToVideoPipeline.encode_image): encapsula o pré-processamento, a codificação VAE e a normalização de latentes em uma única chamada. O layout de saída é (B, T_latent, C, H, W), que é o que o transformer AnyFlow espera para os frames de condicionamento.
AnyFlowFARPipeline
classe diffusers.AnyFlowFARPipeline
< source >( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: AnyFlowFARTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMapEulerDiscreteScheduler )
Parâmetros
- tokenizer ([AutoTokenizer]) — Tokenizer de google/umt5-xxl.
- text_encoder ([UMT5EncoderModel]) — codificador de texto google/umt5-xxl.
- transformer ([AnyFlowFARTransformer3DModel]) — Transformador 3D de fluxo causal FAR.
- vae ([AutoencoderKLWan]) — VAE que codifica/decodifica vídeos para e a partir de representações latentes.
- scheduler ([FlowMapEulerDiscreteScheduler]) — Amostrador de mapa de fluxo.
Pipeline causal (baseado em FAR) de texto para vídeo / imagem para vídeo / vídeo para vídeo para checkpoints do AnyFlow, introduzido em AnyFlow.
O pipeline dirige um loop de amostragem autoregressiva por blocos: cada bloco é desruído com passos de flow-map, prestando atenção apenas aos blocos anteriores por meio de atenção causal esparsa por blocos, e o cache KV intermediário é reutilizado entre os blocos.
O modo de tarefa (T2V / I2V / V2V) é selecionado pelo argumento de condicionamento passado para __call__:
- tanto
video=Nonequantovideo_latents=None— texto-para-vídeo puro. video=<tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1>— quadros de condicionamento pré-VAE; o pipeline os codifica com o VAE. Passe um vídeo de um único quadro para I2V ou um clipe de múltiplos quadros para V2V.video_latents=<latent tensor of shape (B, T_latent, C, H_latent, W_latent)>— latentes já codificados no layout FAR (pula a etapa de codificação do VAE).
O backbone FAR é a variante causal Wan2.1 introduzida por FAR. A inferência é Euler simples na forma de velocidade média por chunk, sem re-noising. O T2V / I2V / V2V conjunto é suportado por um único modelo destilado.
Este modelo herda de [DiffusionPipeline]. Consulte a documentação da superclasse para os métodos genéricos implementados para todos os pipelines (download, salvamento, execução em um dispositivo específico, etc.).
__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
Parâmetros
- prompt (
strouList[str], opcional) — O prompt ou os prompts para orientar a geração do vídeo. Se não definido, passeprompt_embedsem vez disso. - video (
torch.Tensor, opcional) — Quadros de condicionamento pré-VAE com forma(B, T, C, H, W)em[0, 1](T = 4n + 1). Quando fornecidos, o pipeline os codifica com o VAE e mantém o prefixo latente correspondente fixo durante a amostragem. Mutualmente exclusivo comvideo_latents. - video_latents (
torch.Tensor, opcional) — Latentes pré-codificados pelo VAE no layout FAR(B, T_latent, C, H_latent, W_latent). Pula a codificação do VAE no lado do pipeline. Mutuamente exclusivo comvideo. - negative_prompt (
strouList[str], opcional) — O prompt ou os prompts a serem evitados durante a geração de vídeo. Ignorado quando não está usando orientação (guidance_scale < 1). - height (
int, padrão480) — A altura em pixels do vídeo gerado. - width (
int, padrão832) — A largura em pixels do vídeo gerado. - num_frames (
int, padrão81) — O número de quadros no vídeo gerado. Deve satisfazer(num_frames - 1) % vae_scale_factor_temporal == 0. - num_inference_steps (
int, padrão50) — O número de etapas de remoção de ruído por bloco. Os checkpoints distilados do AnyFlow-FAR suportam amostragem em qualquer número de etapas (1, 2, 4, 8, …). Ignorado quandosigmasoutimestepsé fornecido. - sigmas (
List[float], optional) — Custom sigma schedule for any-step sampling, in[0, 1]and ordered from noisy to clean. Length determines the effectivenum_inference_steps; the scheduler appends the terminal0sigma. - timesteps (
List[float], opcional) — Agenda personalizada para amostragem em qualquer passo, nas mesmas unidades deself.scheduler.timesteps(ou seja, escalonada pornum_train_timesteps). Mutuamente exclusiva comsigmas. - guidance_scale (
float, padrão1.0) — Escala de orientação sem classificador (classifier-free guidance). Os checkpoints AnyFlow liberados fundem o CFG nos pesos durante o treinamento; mantenha em1.0a menos que o checkpoint exija o contrário. - num_videos_per_prompt (
int, opcional, padrão1) — O número de vídeos a serem gerados por prompt. - generator (
torch.GeneratorouList[torch.Generator], opcional) — Gerador usado para definir a semente da amostragem. - latents (
torch.Tensor, opcional) — Latentes ruidosos pré-gerados. Se não fornecidos, os latentes são amostrados a partir dogeneratorfornecido. - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Se não fornecidas, as incorporações são geradas a partir deprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativo pré-geradas. - output_type (
str, opcional, padrão"np") — Formato de saída. Um de"pil","np","pt"ou"latent". - return_dict (
bool, opcional, padrãoTrue) — Se deve retornar umAnyFlowPipelineOutputem vez de uma tupla simples. - attention_kwargs (
dict, opcional) — Um dicionário de kwargs que, se especificado, é passado aoAttentionProcessorconforme definido emself.processorem diffusers.models.attention_processor. - callback_on_step_end (
Callable, opcional) — Uma função ouPipelineCallbackchamada no final de cada etapa de inferência. - callback_on_step_end_tensor_inputs (
List[str], opcional, padrão["latents"]) — Entradas de tensor encaminhadas para o callback. Deve ser um subconjunto deself._callback_tensor_inputs. - max_sequence_length (
int, padrão512) — O comprimento máximo da sequência do codificador de texto. - use_mean_velocity (
bool, padrãoTrue) — QuandoTrue, condiciona o modelo flow-map tanto no timestep de origemtquanto no timestep de destinorpara prever uma velocidade média. Desative para espelhar o passo bruto de Euler. - use_kv_cache (
bool, padrãoTrue) — Reutiliza o cache KV de atenção FAR entre blocos causais. Desative apenas para depuração. - chunk_partition (
List[int], opcional) — Contagem de quadros por chunk. O padrão éself.transformer.config.chunk_partition(correspondente aos checkpoints de 81 quadros liberados). Ao alterarnum_frames, forneça umchunk_partitioncuja soma seja(num_frames - 1) // vae_scale_factor_temporal + 1.
Retorna
~AnyFlowPipelineOutput ou tuple
Se return_dict for True, um AnyFlowPipelineOutput é retornado; caso contrário, uma tuple cujo primeiro elemento é o vídeo gerado.
A função de chamada do pipeline para geração.
Exemplos:
>>> 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 )
Parâmetros
- prompt (
stroulist[str], opcional) — prompt a ser codificado - negative_prompt (
stroulist[str], opcional) — O prompt ou os prompts que não devem orientar a geração da imagem. Se não for definido, é necessário passarnegative_prompt_embedsem vez disso. Ignorado quando não se usa orientação (ou seja, ignorado seguidance_scalefor menor que1). - do_classifier_free_guidance (
bool, opcional, padrãoTrue) — Se deve ou não usar classifier free guidance. - num_videos_per_prompt (
int, opcional, padrão 1) — Número de vídeos que devem ser gerados por prompt. Dispositivo torch para colocar os embeddings resultantes - prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto pré-geradas. Podem ser usadas para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não forem fornecidas, as incorporações de texto serão geradas a partir do argumento de entradaprompt. - negative_prompt_embeds (
torch.Tensor, opcional) — Incorporações de texto negativas pré-geradas. Pode ser usado para ajustar facilmente as entradas de texto, por exemplo, ponderação de prompts. Se não for fornecido, negative_prompt_embeds será gerado a partir do argumento de entradanegative_prompt. - device — (
torch.device, opcional): dispositivo torch - dtype — (
torch.dtype, opcional): dtype do torch
Codifica o prompt em estados ocultos do codificador de texto.
Codifique um vídeo em espaço de pixels para o layout latente do AnyFlow.
Espelha a convenção de um único helper de outros pipelines do diffusers (cf. WanImageToVideoPipeline.encode_image): encapsula o pré-processamento, a codificação VAE e a normalização de latentes em uma única chamada. O layout de saída é (B, T_latent, C, H, W), que é o que o transformer AnyFlow espera para os frames de condicionamento.
AnyFlowPipelineOutput
classe diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput
< source >( frames: Tensor )
Parâmetros
- frames (
torch.Tensor,np.ndarrayou list[list[PIL.Image.Image]]) — lista de saídas de vídeo - Pode ser uma lista aninhada de comprimentobatch_size,com cada sublista contendo sequências de imagens PIL desruidas de comprimentonum_frames.Também pode ser um array NumPy ou tensor Torch de forma(batch_size, num_frames, channels, height, width).
Classe de saída para pipelines do AnyFlow.