Diffusers documentation

AnyFlow

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

and get access to the augmented documentation experience

to get started

LoRA

AnyFlow

AnyFlow: Any-Step Video Diffusion Model with On-Policy Flow Map Distillation de NVIDIA, National University of Singapore et Massachusetts Institute of Technology, par Yuchao Gu, Guian Fang, Yuxin Jiang, Weijia Mao, Song Han, Han Cai, Mike Zheng Shou.

En bref : AnyFlow est le premier framework de diffusion vidéo à pas arbitraires basé sur des cartes de flux, permettant à un modèle unique (bidirectionnel ou causal) de s’adapter à des budgets d’inférence arbitraires.

La génération de vidéos en peu d’étapes a été considérablement avancée par les modèles de cohérence. Toutefois, leurs performances se dégradent souvent dans les modèles de diffusion vidéo à nombre d’étapes arbitraire en raison de la formulation par point fixe. Pour remédier à cette limitation, nous présentons AnyFlow, le premier cadre de distillation de diffusion vidéo à nombre d’étapes arbitraire construit sur des cartes de flux. Plutôt que d’apprendre uniquement la correspondance z_t → z_0, AnyFlow apprend les transitions z_t → z_r sur des intervalles de temps arbitraires, permettant à un modèle unique de s’adapter à différents budgets d’inférence. Nous concevons une recette d’entraînement améliorée pour les cartes de flux avant qui affine les modèles de diffusion vidéo préentraînés en modèles de cartes de flux, et nous introduisons la simulation arrière de carte de flux (Flow Map Backward Simulation) pour permettre la distillation on-policy pour les modèles de cartes de flux. Des expériences exhaustives sur des architectures bidirectionnelles et causales, à des échelles allant de 1,3 Md à 14 Md de paramètres, sur des tâches de texte-vers-vidéo et d’image-vers-vidéo, démontrent qu’AnyFlow surpasse les lignes de base basées sur la cohérence tout en préservant une haute fidélité et un échantillonnage flexible sous des budgets d’étapes variables.

Les pipelines AnyFlow ont été contribué par l'équipe AnyFlow. Le code d'origine est disponible sur GitHub, la page du projet se trouve sur nvlabs.github.io/AnyFlow, et les modèles pré-entraînés peuvent être trouvés dans la collection nvidia/anyflow sur Hugging Face.

Modèles disponibles :

Point de contrôleBackboneDescription
nvidia/AnyFlow-Wan2.1-T2V-1.3B-DiffusersWan2.1 1.3BT2V bidirectionnel
nvidia/AnyFlow-Wan2.1-T2V-14B-DiffusersWan2.1 14BT2V bidirectionnel
nvidia/AnyFlow-FAR-Wan2.1-1.3B-DiffusersFAR + Wan2.1 1.3BT2V / I2V / V2V causal
nvidia/AnyFlow-FAR-Wan2.1-14B-DiffusersFAR + Wan2.1 14BT2V / I2V / V2V causal

AnyFlowPipeline est conçu pour les modèles de diffusion bidirectionnels dans la génération de texte vers vidéo (T2V). AnyFlowFARPipeline est un modèle de diffusion causal par blocs qui prend en charge la génération de texte vers vidéo (T2V), la génération d’image vers vidéo (I2V) et la continuation de vidéo (V2V).

Génération avec AnyFlow (T2V bidirectionnel)

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)

Génération avec AnyFlow (FAR Causal)

Le pipeline causal sélectionne entre T2V / I2V / V2V via l'argument video (ou video_latents) : omettez les deux pour un simple texte-vers-vidéo, ou passez video=<tensor> de forme (B, T, C, H, W) dans [0, 1] avec T = 4n + 1 pour conditionner sur des images existantes. Utilisez une seule image de conditionnement pour I2V et un clip plus long pour la continuation V2V. Si vous disposez déjà de latents pré-encodés dans la disposition du modèle, passez-les via video_latents=<tensor> pour ignorer l'encodage VAE. video et video_latents sont mutuellement exclusifs.

Les points de contrôle publiés intègrent chunk_partition=[1, 3, 3, 3, 3, 3, 3, 2] (somme 21) dans la configuration du transformer, correspondant aux 81 images brutes canoniques (21 images latentes pour un pas temporel VAE de 4). Lorsque vous modifiez num_frames, transmettez un chunk_partition correspondant dont la somme est (num_frames - 1) // 4 + 1, sinon le pipeline lève une ValueError.

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

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

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

Notes

  • Le classifier-free guidance est fusionné dans les points de contrôle publiés, de sorte que l'inférence n'exécute pas un second passage avant guidé. Conservez la valeur par défaut guidance_scale=1.0 sauf si votre propre point de contrôle exige le contraire.
  • FlowMapEulerDiscreteScheduler est polyvalent. Vous pouvez l’associer à tout point de contrôle distillé par flow-map via from_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).
  • AnyFlowPipeline utilise AnyFlowTransformer3DModel (bidirectionnel). AnyFlowFARPipeline utilise AnyFlowFARTransformer3DModel, qui ajoute un patch embedding de trame compressée et le masque de bloc causal FAR.
  • Le chargement de LoRA est pris en charge via WanLoraLoaderMixin, le même mixin utilisé par les pipelines Wan en amont.
  • Pour les recettes d’entraînement (entraînement de la carte de flux avant et distillation sur politique), reportez-vous au cadre d’entraînement AnyFlow original sur NVlabs/AnyFlow ; l’entraînement est hors du périmètre de diffusers.

AnyFlowPipeline

classe diffusers.AnyFlowPipeline

< >

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

Paramètres

  • tokenizer ([AutoTokenizer]) — Tokenizer de google/umt5-xxl.
  • text_encoder ([UMT5EncoderModel]) — encodeur de texte google/umt5-xxl.
  • transformer ([AnyFlowTransformer3DModel]) — Transformeur 3D de flux bidirectionnel.
  • vae ([AutoencoderKLWan]) — VAE qui encode/décode des vidéos vers et depuis des représentations latentes.
  • scheduler ([FlowMapEulerDiscreteScheduler]) — Échantillonneur de carte de flux. Le pipeline pilote scheduler.step(..., timestep, sample, r_timestep) à chaque étape d'inférence.

Pipeline de génération texte-vers-vidéo bidirectionnel pour les points de contrôle distillés par carte de flux AnyFlow, introduits dans AnyFlow.

AnyFlow apprend des transitions sur des intervalles arbitraires zt→zrz_t \to z_r plutôt que le zt→z0z_t \to z_0 mappage fixe des modèles de cohérence, de sorte qu'un seul point de contrôle distillé peut être évalué avec 1, 2, 4, 8, 16… NFE sans réentraînement. Ce pipeline opère sur le tenseur vidéo complet en un seul passage bidirectionnel ; pour une génération auto-régressive (causale) par morceaux, utilisez AnyFlowFARPipeline.

L'échantillonnage est un Euler simple sous forme de vitesse moyenne (z_r = z_t - (t - r) * u) sans re-bruitage. Les points de contrôle NVIDIA publiés intègrent le guidage sans classifieur dans les poids du modèle, de sorte que la valeur par défaut guidance_scale=1.0 est le paramétrage recommandé.

Ce modèle hérite de [DiffusionPipeline]. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, etc.).

__call__

< >

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

Paramètres

  • prompt (str ou List[str], facultatif) — Le prompt ou les prompts pour guider la génération de la vidéo. S'il n'est pas défini, passez plutôt prompt_embeds.
  • video (torch.Tensor, facultatif) — Images de conditionnement pré-VAE de forme (B, T, C, H, W) dans [0, 1]. Si fournies, le pipeline les encode via le VAE et maintient le préfixe latent correspondant fixe pendant l'échantillonnage. Mutuellement exclusif avec video_latents.
  • video_latents (torch.Tensor, facultatif) — Latents VAE pré-encodés dans la disposition AnyFlow (B, T_latent, C, H_latent, W_latent). Permet de passer l’encodage VAE côté pipeline. Mutuellement exclusif avec video.
  • negative_prompt (str ou List[str], facultatif) — Le prompt ou les prompts à éviter lors de la génération de la vidéo. Ignoré lorsque le guidage n’est pas utilisé (guidance_scale < 1).
  • height (int, par défaut 480) — La hauteur en pixels de la vidéo générée.
  • width (int, par défaut 832) — La largeur en pixels de la vidéo générée.
  • num_frames (int, par défaut 81) — Le nombre de frames dans la vidéo générée. Doit satisfaire (num_frames - 1) % vae_scale_factor_temporal == 0.
  • num_inference_steps (int, par défaut 50) — Le nombre d'étapes de débruitage. Les points de contrôle AnyFlow distillés prennent en charge l'échantillonnage à nombre d'étapes arbitraire, des valeurs aussi basses que 1, 2, 4 ou 8 sont donc courantes. Ignoré si sigmas ou timesteps est fourni.
  • sigmas (List[float], optional) — Custom sigma schedule for any-step sampling, in [0, 1] and ordered from noisy to clean. Length determines the effective num_inference_steps; the scheduler appends the terminal 0 sigma.
  • timesteps (List[float], facultatif) — Plan personnalisé pour l'échantillonnage à pas arbitraire, dans les mêmes unités que self.scheduler.timesteps (c'est-à-dire mis à l'échelle par num_train_timesteps). Mutuellement exclusif avec sigmas.
  • guidance_scale (float, par défaut 1.0) — Échelle de guidage sans classifieur (classifier-free guidance). Les points de contrôle AnyFlow publiés intègrent le CFG dans les poids pendant l’entraînement ; maintenez la valeur à 1.0 sauf si vous savez que votre point de contrôle s’attend à autre chose.
  • num_videos_per_prompt (int, facultatif, par défaut 1) — Le nombre de vidéos à générer par invite.
  • generator (torch.Generator ou List[torch.Generator], facultatif) — Un torch.Generator pour rendre la génération déterministe.
  • latents (torch.Tensor, facultatif) — Latents bruités pré-générés à utiliser comme entrées. S'ils ne sont pas fournis, les latents sont échantillonnés à partir du generator fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster les entrées de texte (par exemple, pondération du prompt). S'ils ne sont pas fournis, les embeddings sont générés à partir de prompt.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés.
  • output_type (str, facultatif, par défaut "np") — Le format de sortie. L’un des "pil", "np", "pt" ou "latent".
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un AnyFlowPipelineOutput plutôt qu'un simple tuple.
  • attention_kwargs (dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessor défini sous self.processor dans diffusers.models.attention_processor.
  • callback_on_step_end (Callable, facultatif) — Une fonction ou un PipelineCallback appelé à la fin de chaque étape d’inférence. Voir callbacks pour plus de détails.
  • callback_on_step_end_tensor_inputs (List[str], facultatif, par défaut ["latents"]) — Les entrées tensorielles transmises au callback. Doit être un sous-ensemble de self._callback_tensor_inputs.
  • max_sequence_length (int, par défaut 512) — La longueur maximale de séquence pour l'encodeur de texte. Les prompts plus longs sont tronqués.
  • use_mean_velocity (bool, par défaut True) — Lorsque True, le modèle flow-map est conditionné à la fois sur le pas de temps source t et le pas de temps cible r pour prédire une vitesse moyenne, conformément au comportement lors de l’entraînement. À désactiver pour reproduire un pas d’Euler brut (r = t).

Retourne

~AnyFlowPipelineOutput ou tuple

Si return_dict est True, AnyFlowPipelineOutput est retourné, sinon un tuple dont le premier élément est la vidéo générée.

La fonction d'appel du pipeline pour la génération.

Exemples :

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

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

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

encode_prompt

< >

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

Paramètres

  • prompt (str ou list[str], facultatif) — prompt à encoder
  • negative_prompt (str ou list[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passer negative_prompt_embeds à la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré si guidance_scale est inférieur à 1).
  • do_classifier_free_guidance (bool, facultatif, valeur par défaut True) — Indique s'il faut utiliser le classifier free guidance ou non.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Nombre de vidéos à générer par invite. Appareil torch sur lequel placer les embeddings résultants
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entrée prompt.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entrée negative_prompt.
  • device — (torch.device, facultatif) : torch device
  • dtype — (torch.dtype, facultatif) : dtype torch

Encode le prompt dans les états cachés de l'encodeur de texte.

encode_video

< >

( video: Tensorheight: intwidth: int )

Encoder une vidéo en espace pixel dans la structure latente d'AnyFlow.

Reprend la convention d’un seul helper des autres pipelines diffusers (cf. WanImageToVideoPipeline.encode_image) : regroupe la prétraitement, l’encodage VAE et la normalisation des latents en un seul appel. La disposition de la sortie est (B, T_latent, C, H, W), ce que le transformer AnyFlow attend pour les images de conditionnement.

AnyFlowFARPipeline

classe diffusers.AnyFlowFARPipeline

< >

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

Paramètres

  • tokenizer ([AutoTokenizer]) — Tokenizer de google/umt5-xxl.
  • text_encoder ([UMT5EncoderModel]) — encodeur de texte google/umt5-xxl.
  • transformer ([AnyFlowFARTransformer3DModel]) — Transformer 3D de flux causal FAR.
  • vae ([AutoencoderKLWan]) — VAE qui encode/décode des vidéos vers et depuis des représentations latentes.
  • scheduler ([FlowMapEulerDiscreteScheduler]) — Échantillonneur de carte de flux.

Pipeline de texte vers vidéo / image vers vidéo / vidéo vers vidéo causal (basé sur FAR) pour les points de contrôle AnyFlow, introduit dans AnyFlow.

Le pipeline pilote une boucle d'échantillonnage autorégressif par blocs : chaque bloc est débruité à l'aide d'étapes de flow-map en ne portant attention qu'aux blocs précédents via une attention causale bloc-sparse, et le cache KV intermédiaire est réutilisé entre les blocs.

Le mode de tâche (T2V / I2V / V2V) est sélectionné en fonction de l'argument de conditionnement transmis à __call__ :

  • à la fois video=None et video_latents=None — texte-vers-vidéo pur.
  • video=<tensor of shape (B, T, C, H, W) in [0, 1] with T = 4n + 1> — images de conditionnement pré-VAE ; le pipeline les encode via le VAE. Passez une vidéo à image unique pour I2V ou un clip multi-images pour V2V.
  • video_latents=<latent tensor of shape (B, T_latent, C, H_latent, W_latent)> — latents déjà encodés dans la disposition FAR (ignore l’étape d’encodage VAE).

Le backbone FAR est la variante causale Wan2.1 introduite par FAR. L'inférence est un Euler simple sous forme de vitesse moyenne par chunk, sans re-bruitage. Le T2V / I2V / V2V conjoint est pris en charge par un unique modèle distillé.

Ce modèle hérite de [DiffusionPipeline]. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, etc.).

__call__

< >

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

Paramètres

  • prompt (str ou List[str], facultatif) — Le prompt ou les prompts pour guider la génération de la vidéo. S'il n'est pas défini, passez plutôt prompt_embeds.
  • video (torch.Tensor, facultatif) — Images de conditionnement pré-VAE de forme (B, T, C, H, W) dans [0, 1] (T = 4n + 1). Si fournies, le pipeline les encode via le VAE et maintient le préfixe latent correspondant fixe pendant l'échantillonnage. Mutuellement exclusif avec video_latents.
  • video_latents (torch.Tensor, facultatif) — Latents VAE pré-encodés dans la disposition FAR (B, T_latent, C, H_latent, W_latent). Permet de passer l’encodage VAE côté pipeline. Mutuellement exclusif avec video.
  • negative_prompt (str ou List[str], facultatif) — Le prompt ou les prompts à éviter lors de la génération de la vidéo. Ignoré lorsque le guidage n’est pas utilisé (guidance_scale < 1).
  • height (int, par défaut 480) — La hauteur en pixels de la vidéo générée.
  • width (int, par défaut 832) — La largeur en pixels de la vidéo générée.
  • num_frames (int, par défaut 81) — Le nombre de frames dans la vidéo générée. Doit satisfaire (num_frames - 1) % vae_scale_factor_temporal == 0.
  • num_inference_steps (int, par défaut 50) — Le nombre d’étapes de débruitage par bloc. Les points de contrôle AnyFlow-FAR distillés prennent en charge l’échantillonnage à nombre d’étapes arbitraire (1, 2, 4, 8, …). Ignoré si sigmas ou timesteps est fourni.
  • sigmas (List[float], optional) — Custom sigma schedule for any-step sampling, in [0, 1] and ordered from noisy to clean. Length determines the effective num_inference_steps; the scheduler appends the terminal 0 sigma.
  • timesteps (List[float], facultatif) — Plan personnalisé pour l'échantillonnage à pas arbitraire, dans les mêmes unités que self.scheduler.timesteps (c'est-à-dire mis à l'échelle par num_train_timesteps). Mutuellement exclusif avec sigmas.
  • guidance_scale (float, par défaut 1.0) — Échelle de guidage sans classifieur (classifier-free guidance). Les points de contrôle AnyFlow publiés fusionnent le CFG dans les poids pendant l’entraînement ; maintenez la valeur à 1.0 sauf si le point de contrôle exige le contraire.
  • num_videos_per_prompt (int, facultatif, par défaut 1) — Le nombre de vidéos à générer par invite.
  • generator (torch.Generator ou List[torch.Generator], facultatif) — Générateur utilisé pour initialiser l'échantillonnage.
  • latents (torch.Tensor, facultatif) — Latents bruités pré-générés. S'ils ne sont pas fournis, les latents sont échantillonnés à partir du generator fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. S'ils ne sont pas fournis, les embeddings sont générés à partir de prompt.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés.
  • output_type (str, facultatif, par défaut "np") — Format de sortie. L’un des "pil", "np", "pt" ou "latent".
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un AnyFlowPipelineOutput plutôt qu'un simple tuple.
  • attention_kwargs (dict, facultatif) — Un dictionnaire de kwargs qui, s'il est spécifié, est transmis à l'AttentionProcessor défini sous self.processor dans diffusers.models.attention_processor.
  • callback_on_step_end (Callable, facultatif) — Une fonction ou un PipelineCallback appelé à la fin de chaque étape d’inférence.
  • callback_on_step_end_tensor_inputs (List[str], facultatif, par défaut ["latents"]) — Entrées de tenseurs transmises au rappel. Doit être un sous-ensemble de self._callback_tensor_inputs.
  • max_sequence_length (int, par défaut 512) — La longueur de séquence maximale du codeur de texte.
  • use_mean_velocity (bool, par défaut True) — Lorsque True, le modèle flow-map est conditionné à la fois sur l'instant source t et l'instant cible r pour prédire une vitesse moyenne. Désactivez cette option pour reproduire un pas d'Euler brut.
  • use_kv_cache (bool, par défaut True) — Réutilise le cache KV de l'attention FAR entre les blocs causaux. À désactiver uniquement pour le débogage.
  • chunk_partition (List[int], facultatif) — Nombre de frames par chunk. La valeur par défaut est self.transformer.config.chunk_partition (correspondant aux checkpoints publiés de 81 frames). Lorsque vous modifiez num_frames, fournissez un chunk_partition dont la somme est égale à (num_frames - 1) // vae_scale_factor_temporal + 1.

Retourne

~AnyFlowPipelineOutput ou tuple

Si return_dict est True, un AnyFlowPipelineOutput est renvoyé, sinon un tuple dont le premier élément est la vidéo générée.

La fonction d'appel du pipeline pour la génération.

Exemples :

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

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

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

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

encode_prompt

< >

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

Paramètres

  • prompt (str ou list[str], facultatif) — prompt à encoder
  • negative_prompt (str ou list[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passer negative_prompt_embeds à la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré si guidance_scale est inférieur à 1).
  • do_classifier_free_guidance (bool, facultatif, valeur par défaut True) — Indique s'il faut utiliser le classifier free guidance ou non.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Nombre de vidéos à générer par invite. Appareil torch sur lequel placer les embeddings résultants
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, les embeddings de texte seront générés à partir de l'argument d'entrée prompt.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entrée negative_prompt.
  • device — (torch.device, facultatif) : torch device
  • dtype — (torch.dtype, facultatif) : dtype torch

Encode le prompt dans les états cachés de l'encodeur de texte.

encode_video

< >

( video: Tensorheight: intwidth: int )

Encoder une vidéo en espace pixel dans la structure latente d'AnyFlow.

Reprend la convention d’un seul helper des autres pipelines diffusers (cf. WanImageToVideoPipeline.encode_image) : regroupe la prétraitement, l’encodage VAE et la normalisation des latents en un seul appel. La disposition de la sortie est (B, T_latent, C, H, W), ce que le transformer AnyFlow attend pour les images de conditionnement.

AnyFlowPipelineOutput

classe diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput

< >

( frames: Tensor )

Paramètres

  • frames (torch.Tensor, np.ndarray ou list[list[PIL.Image.Image]]) — liste des sorties vidéo - Il peut s'agir d'une liste imbriquée de longueur batch_size, où chaque sous-liste contient des séquences d'images PIL débruitées de longueur num_frames. Il peut également s'agir d'un tableau NumPy ou d'un tenseur Torch de forme (batch_size, num_frames, channels, height, width).

Classe de sortie pour les pipelines AnyFlow.

Update on GitHub