Buckets:
| # AnyFlow | |
| [AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation](https://huggingface.co/papers/2605.13724) 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](https://github.com/NVlabs/AnyFlow), a página do projeto está em [nvlabs.github.io/AnyFlow](https://nvlabs.github.io/AnyFlow) e os modelos pré-treinados podem ser encontrados na coleção [nvidia/anyflow](https://huggingface.co/collections/nvidia/anyflow) no Hugging Face. | |
| Modelos disponíveis: | |
| | Checkpoint | Backbone | Descrição | | |
| |---|---|---| | |
| | [`nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers) | Wan2.1 1.3B | T2V Bidirecional | | |
| | [`nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers) | Wan2.1 14B | T2V Bidirecional | | |
| | [`nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers) | FAR + Wan2.1 1.3B | T2V / I2V / V2V causal | | |
| | [`nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers`](https://huggingface.co/nvidia/AnyFlow-FAR-Wan2.1-14B-Diffusers) | FAR + Wan2.1 14B | T2V / I2V / V2V causal | | |
| > [!TIP] | |
| > `AnyFlowPipeline` foi 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) | |
| ```py | |
| 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``): omita ambos para text-to-video puro, ou passe ``video=<tensor>`` com forma ``(B, T, C, H, W)`` em ``[0, 1]`` e ``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á possui 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. | |
| > [!IMPORTANT] | |
| > 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 alterar `num_frames`, passe um `chunk_partition` correspondente cuja soma seja `(num_frames - 1) // 4 + 1`; caso contrário, o pipeline lança um `ValueError`. | |
| ```py | |
| 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) | |
| ``` | |
| ```py | |
| 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) | |
| ``` | |
| ```py | |
| 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 de `from_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...))`. | |
| - `AnyFlowPipeline` usa [`AnyFlowTransformer3DModel`](../models/anyflow_transformer3d) (bidirecional). `AnyFlowFARPipeline` usa [`AnyFlowFARTransformer3DModel`](../models/anyflow_far_transformer3d), 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`](https://github.com/NVlabs/AnyFlow); o treinamento está fora do escopo do diffusers. | |
| ## AnyFlowPipeline[[diffusers.AnyFlowPipeline]] | |
| #### diffusers.AnyFlowPipeline[[diffusers.AnyFlowPipeline]] | |
| ```python | |
| diffusers.AnyFlowPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L80) | |
| **Parâmetros:** | |
| tokenizer ([*AutoTokenizer*]) : Tokenizer de [google/umt5-xxl](https://huggingface.co/google/umt5-xxl). | |
| text_encoder ([*UMT5EncoderModel*]) : codificador de texto [google/umt5-xxl](https://huggingface.co/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](https://huggingface.co/papers/2605.13724). | |
| AnyFlow aprende transições de intervalo arbitrário \\(z_t \to z_r\\) em vez do mapeamento fixo \\(z_t \to z_0\\) dos modelos de consistência, de modo que um único checkpoint destilado pode ser avaliado em 1, 2, 4, 8, 16... NFE sem re-treinamento. 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__[[diffusers.AnyFlowPipeline.__call__]] | |
| ```python | |
| __call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L380) | |
| **Parâmetros:** | |
| prompt (`str` ou `List[str]`, *opcional*) : O prompt ou os prompts para orientar a geração do vídeo. Se não definido, passe `prompt_embeds` em 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 com `video_latents`. | |
| video_latents (`torch.Tensor`, *opcional*) : Latentes VAE pré-codificados no layout AnyFlow `(B, T_latent, C, H_latent, W_latent)`. Pula a codificação VAE no lado do pipeline. Mutuamente exclusivo com `video`. | |
| negative_prompt (`str` ou `List[str]`, *opcional*) : O prompt ou os prompts a evitar durante a geração de vídeo. Ignorado quando não está usando orientação (`guidance_scale < 1`). | |
| height (`int`, padrão `480`) : A altura em pixels do vídeo gerado. | |
| width (`int`, padrão `832`) : A largura em pixels do vídeo gerado. | |
| num_frames (`int`, padrão `81`) : O número de quadros no vídeo gerado. Deve satisfazer `(num_frames - 1) % vae_scale_factor_temporal == 0`. | |
| num_inference_steps (`int`, padrão `50`) : 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 quanto `1`, `2`, `4` ou `8` são típicos. Ignorado quando `sigmas` ou `timesteps` é fornecido. | |
| sigmas (`List[float]`, *opcional*) : Agenda de sigmas personalizada para amostragem em qualquer número de etapas, em `[0, 1]` e ordenada de ruidosa para limpa. O comprimento determina o `num_inference_steps` efetivo; o agendador adiciona o sigma terminal `0`. | |
| timesteps (`List[float]`, *opcional*) : Agenda de passos de tempo personalizada para amostragem em qualquer número de passos, nas mesmas unidades de `self.scheduler.timesteps` (ou seja, escalada por `num_train_timesteps`). Mutuamente exclusiva com `sigmas`. | |
| guidance_scale (`float`, padrão `1.0`) : Escala de orientação sem classificador (classifier-free guidance). Os checkpoints AnyFlow liberados fundem a CFG nos pesos durante o treinamento; mantenha em `1.0` a menos que você saiba que seu checkpoint espera o contrário. | |
| num_videos_per_prompt (`int`, *opcional*, padrão `1`) : O número de vídeos a serem gerados por prompt. | |
| generator (`torch.Generator` ou `List[torch.Generator]`, *opcional*) : Um [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) para 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 do `generator` fornecido. | |
| prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto pré-gerados. Pode ser usado para ajustar as entradas de texto (por exemplo, ponderação de prompts). Se não for fornecido, os embeddings são gerados a partir de `prompt`. | |
| negative_prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto negativo pré-gerados. | |
| output_type (`str`, *opcional*, padrão `"np"`) : O formato de saída. Um dos `"pil"`, `"np"`, `"pt"` ou `"latent"`. | |
| return_dict (`bool`, *opcional*, padrão `True`) : Se deve retornar um `AnyFlowPipelineOutput` em vez de uma tupla simples. | |
| attention_kwargs (`dict`, *opcional*) : Um dicionário de kwargs que, se especificado, é passado para o `AttentionProcessor` conforme definido em `self.processor` em [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). | |
| callback_on_step_end (`Callable`, *opcional*) : Uma função ou `PipelineCallback` chamada no final de cada etapa de inferência. Consulte [`callbacks`](../callbacks) para mais detalhes. | |
| callback_on_step_end_tensor_inputs (`List[str]`, *opcional*, padrão `["latents"]`) : Os tensores de entrada encaminhados para o callback. Deve ser um subconjunto de `self._callback_tensor_inputs`. | |
| max_sequence_length (`int`, padrão `512`) : O comprimento máximo da sequência do codificador de texto. Prompts mais longos são truncados. | |
| use_mean_velocity (`bool`, padrão `True`) : Quando `True`, o modelo flow-map é condicionado tanto no timestep de origem `t` quanto no timestep de destino `r` para 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: | |
| ```python | |
| >>> 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[[diffusers.AnyFlowPipeline.encode_prompt]] | |
| ```python | |
| encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L180) | |
| **Parâmetros:** | |
| prompt (`str` ou `list[str]`, *opcional*) : prompt a ser codificado | |
| negative_prompt (`str` ou `list[str]`, *opcional*) : O prompt ou os prompts que não devem orientar a geração da imagem. Se não definido, é necessário passar `negative_prompt_embeds` em vez disso. Ignorado quando não se usa orientação (ou seja, ignorado se `guidance_scale` for menor que `1`). | |
| do_classifier_free_guidance (`bool`, *opcional*, padrão `True`) : 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*) : Embeddings de texto pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, *por exemplo*, ponderação de prompts. Se não forem fornecidos, os embeddings de texto serão gerados a partir do argumento de entrada `prompt`. | |
| negative_prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto negativos pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, *por exemplo*, ponderação de prompts. Se não forem fornecidos, negative_prompt_embeds será gerado a partir do argumento de entrada `negative_prompt`. | |
| device : (`torch.device`, *opcional*): dispositivo torch | |
| dtype : (`torch.dtype`, *opcional*): dtype do torch | |
| Codifica o prompt em estados ocultos do codificador de texto. | |
| #### encode_video[[diffusers.AnyFlowPipeline.encode_video]] | |
| ```python | |
| encode_video(video: Tensor, height: int, width: int) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow.py#L360) | |
| 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[[diffusers.AnyFlowFARPipeline]] | |
| #### diffusers.AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]] | |
| ```python | |
| diffusers.AnyFlowFARPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowFARTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L92) | |
| **Parâmetros:** | |
| tokenizer ([*AutoTokenizer*]) : Tokenizer de [google/umt5-xxl](https://huggingface.co/google/umt5-xxl). | |
| text_encoder ([*UMT5EncoderModel*]) : codificador de texto [google/umt5-xxl](https://huggingface.co/google/umt5-xxl). | |
| transformer ([*AnyFlowFARTransformer3DModel*]) : Transformer 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. | |
| Causal Pipeline (baseado em FAR) de texto-para-vídeo / imagem-para-vídeo / vídeo-para-vídeo para checkpoints do AnyFlow, introduzido em [AnyFlow](https://huggingface.co/papers/2605.13724). | |
| 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=None` quanto `video_latents=None` — texto-para-vídeo puro. | |
| - `video=&lt;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=&lt;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](https://huggingface.co/papers/2503.19325). A inferência é Euler simples na forma de velocidade média por chunk, sem re-noising. O suporte conjunto para T2V / I2V / V2V é feito 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__[[diffusers.AnyFlowFARPipeline.__call__]] | |
| ```python | |
| __call__(prompt: typing.Union[str, typing.List[str]] = None, video: typing.Optional[torch.Tensor] = None, video_latents: typing.Optional[torch.Tensor] = None, negative_prompt: typing.Union[str, typing.List[str]] = None, height: int = 480, width: int = 832, num_frames: int = 81, num_inference_steps: int = 50, sigmas: typing.Optional[typing.List[float]] = None, timesteps: typing.Optional[typing.List[float]] = None, guidance_scale: float = 1.0, num_videos_per_prompt: typing.Optional[int] = 1, generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = None, latents: typing.Optional[torch.Tensor] = None, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, output_type: typing.Optional[str] = 'np', return_dict: bool = True, attention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = None, callback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = None, callback_on_step_end_tensor_inputs: typing.List[str] = ['latents'], max_sequence_length: int = 512, use_mean_velocity: bool = True, use_kv_cache: bool = True, chunk_partition: typing.Optional[typing.List[int]] = None) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L448) | |
| **Parâmetros:** | |
| prompt (`str` ou `List[str]`, *opcional*) : O prompt ou os prompts para orientar a geração do vídeo. Se não definido, passe `prompt_embeds` em 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. Mutuamente exclusivo com `video_latents`. | |
| video_latents (`torch.Tensor`, *opcional*) : Latentes VAE pré-codificados no layout FAR `(B, T_latent, C, H_latent, W_latent)`. Pula a codificação VAE no lado do pipeline. Mutuamente exclusivo com `video`. | |
| negative_prompt (`str` ou `List[str]`, *opcional*) : O prompt ou os prompts a evitar durante a geração de vídeo. Ignorado quando não está usando orientação (`guidance_scale < 1`). | |
| height (`int`, padrão `480`) : A altura em pixels do vídeo gerado. | |
| width (`int`, padrão `832`) : A largura em pixels do vídeo gerado. | |
| num_frames (`int`, padrão `81`) : O número de quadros no vídeo gerado. Deve satisfazer `(num_frames - 1) % vae_scale_factor_temporal == 0`. | |
| num_inference_steps (`int`, padrão `50`) : O número de etapas de remoção de ruído por bloco. Os checkpoints distilados do AnyFlow-FAR suportam amostragem em qualquer etapa (1, 2, 4, 8, ...). Ignorado quando `sigmas` ou `timesteps` é fornecido. | |
| sigmas (`List[float]`, *opcional*) : Agenda de sigmas personalizada para amostragem em qualquer número de etapas, em `[0, 1]` e ordenada de ruidosa para limpa. O comprimento determina o `num_inference_steps` efetivo; o agendador adiciona o sigma terminal `0`. | |
| timesteps (`List[float]`, *opcional*) : Agenda de passos de tempo personalizada para amostragem em qualquer número de passos, nas mesmas unidades de `self.scheduler.timesteps` (ou seja, escalada por `num_train_timesteps`). Mutuamente exclusiva com `sigmas`. | |
| guidance_scale (`float`, padrão `1.0`) : Escala de orientação sem classificador (classifier-free guidance). Os checkpoints AnyFlow liberados fundem a CFG nos pesos durante o treinamento; mantenha em `1.0` a menos que o checkpoint exija o contrário. | |
| num_videos_per_prompt (`int`, *opcional*, padrão `1`) : O número de vídeos a serem gerados por prompt. | |
| generator (`torch.Generator` ou `List[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 do `generator` fornecido. | |
| prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto pré-gerados. Se não fornecidos, os embeddings são gerados a partir de `prompt`. | |
| negative_prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto negativo pré-gerados. | |
| output_type (`str`, *opcional*, padrão `"np"`) : Formato de saída. Um de `"pil"`, `"np"`, `"pt"` ou `"latent"`. | |
| return_dict (`bool`, *opcional*, padrão `True`) : Se deve retornar um `AnyFlowPipelineOutput` em vez de uma tupla simples. | |
| attention_kwargs (`dict`, *opcional*) : Um dicionário de kwargs que, se especificado, é passado para o `AttentionProcessor` conforme definido em `self.processor` em [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). | |
| callback_on_step_end (`Callable`, *opcional*) : Uma função ou `PipelineCallback` chamada 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 de `self._callback_tensor_inputs`. | |
| max_sequence_length (`int`, padrão `512`) : O comprimento máximo da sequência do codificador de texto. | |
| use_mean_velocity (`bool`, padrão `True`) : Quando `True`, condiciona o modelo flow-map tanto no timestep de origem `t` quanto no timestep de destino `r` para prever uma velocidade média. Desative para espelhar o passo bruto de Euler. | |
| use_kv_cache (`bool`, padrão `True`) : Reutiliza o cache KV da atenção FAR entre blocos causais. Desative apenas para depuração. | |
| chunk_partition (`List[int]`, *opcional*) : Contagem de quadros por bloco. O padrão é `self.transformer.config.chunk_partition` (correspondente aos checkpoints de 81 quadros liberados). Ao alterar `num_frames`, forneça um `chunk_partition` cuja 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: | |
| ```python | |
| >>> 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[[diffusers.AnyFlowFARPipeline.encode_prompt]] | |
| ```python | |
| encode_prompt(prompt: str | list[str], negative_prompt: str | list[str] | None = None, do_classifier_free_guidance: bool = True, num_videos_per_prompt: int = 1, prompt_embeds: typing.Optional[torch.Tensor] = None, negative_prompt_embeds: typing.Optional[torch.Tensor] = None, max_sequence_length: int = 226, device: typing.Optional[torch.device] = None, dtype: typing.Optional[torch.dtype] = None) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L197) | |
| **Parâmetros:** | |
| prompt (`str` ou `list[str]`, *opcional*) : prompt a ser codificado | |
| negative_prompt (`str` ou `list[str]`, *opcional*) : O prompt ou os prompts que não devem orientar a geração da imagem. Se não definido, é necessário passar `negative_prompt_embeds` em vez disso. Ignorado quando não se usa orientação (ou seja, ignorado se `guidance_scale` for menor que `1`). | |
| do_classifier_free_guidance (`bool`, *opcional*, padrão `True`) : 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*) : Embeddings de texto pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, *por exemplo*, ponderação de prompts. Se não forem fornecidos, os embeddings de texto serão gerados a partir do argumento de entrada `prompt`. | |
| negative_prompt_embeds (`torch.Tensor`, *opcional*) : Embeddings de texto negativos pré-gerados. Podem ser usados para ajustar facilmente as entradas de texto, *por exemplo*, ponderação de prompts. Se não forem fornecidos, negative_prompt_embeds será gerado a partir do argumento de entrada `negative_prompt`. | |
| device : (`torch.device`, *opcional*): dispositivo torch | |
| dtype : (`torch.dtype`, *opcional*): dtype do torch | |
| Codifica o prompt em estados ocultos do codificador de texto. | |
| #### encode_video[[diffusers.AnyFlowFARPipeline.encode_video]] | |
| ```python | |
| encode_video(video: Tensor, height: int, width: int) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_anyflow_far.py#L380) | |
| 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[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]] | |
| #### diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]] | |
| ```python | |
| diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput(frames: Tensor) | |
| ``` | |
| [Fonte](https://github.com/huggingface/diffusers/blob/main/src/diffusers/pipelines/anyflow/pipeline_output.py#L23) | |
| **Parâmetros:** | |
| frames (`torch.Tensor`, `np.ndarray` ou list[list[PIL.Image.Image]]) : lista de saídas de vídeo - Pode ser uma lista aninhada de comprimento `batch_size,` em que cada sublista contém sequências de imagens PIL desruidas de comprimento `num_frames.` Também pode ser um array NumPy ou um tensor Torch de forma `(batch_size, num_frames, channels, height, width)`. | |
| Classe de saída para pipelines do AnyFlow. | |
Xet Storage Details
- Size:
- 33.8 kB
- Xet hash:
- d85854ea54d266ab3eec0f1f2b211c579bbdc1b0d05372e7659039ff5af78cf9
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.