Buckets:
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ôle | Backbone | Description |
|---|---|---|
nvidia/AnyFlow-Wan2.1-T2V-1.3B-Diffusers |
Wan2.1 1.3B | T2V bidirectionnel |
nvidia/AnyFlow-Wan2.1-T2V-14B-Diffusers |
Wan2.1 14B | T2V bidirectionnel |
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 |
AnyFlowPipelineest conçu pour les modèles de diffusion bidirectionnels dans la génération de texte vers vidéo (T2V).AnyFlowFARPipelineest 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 modifieznum_frames, transmettez unchunk_partitiondont la somme est égale à(num_frames - 1) // 4 + 1, sinon le pipeline lève uneValueError.
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)
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.0sauf si votre propre point de contrôle exige le contraire. FlowMapEulerDiscreteSchedulerest polyvalent. Vous pouvez l’associer à tout point de contrôle distillé par flow-map viafrom_pretrained(..., scheduler=FlowMapEulerDiscreteScheduler.from_config(...)).AnyFlowPipelineutiliseAnyFlowTransformer3DModel(bidirectionnel).AnyFlowFARPipelineutiliseAnyFlowFARTransformer3DModel, 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[[diffusers.AnyFlowPipeline]]
diffusers.AnyFlowPipeline[[diffusers.AnyFlowPipeline]]
diffusers.AnyFlowPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowTransformer3DModel, vae: AutoencoderKLWan, scheduler: FlowMapEulerDiscreteScheduler)
Paramètres :
tokenizer ([AutoTokenizer]) : Tokenizer de google/umt5-xxl.
text_encoder ([UMT5EncoderModel]) : encodeur de texte google/umt5-xxl.
transformer ([AnyFlowTransformer3DModel]) : Transformer 3D bidirectionnel de flux.
vae ([AutoencoderKLWan]) : VAE qui encode/décode des vidéos vers et depuis des représentations latentes.
scheduler ([FlowMapEulerDiscreteScheduler]) : échantillonneur de type flow-map. 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 plutôt que la correspondance fixe des modèles de cohérence, ce qui permet d'évaluer un seul point de contrôle distillé à 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.).
appel[[diffusers.AnyFlowPipeline.call]]
__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)
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 vidéo. Ignoré lorsque la guidance n'est pas utilisée (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], facultatif) : Plan de sigma personnalisé pour l'échantillonnage à nombre de pas arbitraire, dans [0, 1] et ordonné du bruité au propre. La longueur détermine le num_inference_steps effectif ; le planificateur ajoute le sigma terminal 0.
timesteps (List[float], facultatif) : Planification personnalisée des pas de temps pour l'échantillonnage à nombre de 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 du 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 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 en tant qu'entrées. S'ils ne sont pas fournis, les latents sont échantillonnés à partir du generator fourni.
prompt_embeds (torch.Tensor, facultatif) : Incrustations de texte pré-générées. Peut être utilisé pour ajuster les entrées de texte (par exemple, pondération des prompts). Si non fourni, les incrustations sont générées à partir de prompt.
negative_prompt_embeds (torch.Tensor, facultatif) : Incrustations de texte négatif pré-générées.
output_type (str, facultatif, par défaut "np") : Le format de sortie. L'un des "pil", "np", "pt" ou "latent".
return_dict (bool, facultatif, valeur 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 tel que 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 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 maximale de la séquence du codeur 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 l'instant source t et l'instant cible r pour prédire une vitesse moyenne, ce qui correspond 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[[diffusers.AnyFlowPipeline.encode_prompt]]
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)
Paramètres :
prompt (str ou list[str], facultatif) : invite à encoder
negative_prompt (str ou list[str], facultatif) : Le prompt 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, par défaut True) : Indique s'il faut utiliser le guidage sans classifieur 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) : Incrustations de texte pré-générées. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. pondération des prompts. Si non fourni, les incrustations de texte seront générées à partir de l'argument d'entrée prompt.
negative_prompt_embeds (torch.Tensor, facultatif) : Embeddings de texte négatif pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par exemple 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) : appareil torch
dtype : (torch.dtype, facultatif) : torch dtype
Encode le prompt dans les états cachés de l'encodeur de texte.
encode_video[[diffusers.AnyFlowPipeline.encode_video]]
encode_video(video: Tensor, height: int, width: 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[[diffusers.AnyFlowFARPipeline]]
diffusers.AnyFlowFARPipeline[[diffusers.AnyFlowFARPipeline]]
diffusers.AnyFlowFARPipeline(tokenizer: AutoTokenizer, text_encoder: UMT5EncoderModel, transformer: AnyFlowFARTransformer3DModel, vae: AutoencoderKLWan, scheduler: 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.
Causal Pipeline (basé sur FAR) de texte vers vidéo / image vers vidéo / vidéo vers vidéo 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=Noneetvideo_latents=None— texte-vers-vidéo pur. video=&lt;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=&lt;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.).
appel[[diffusers.AnyFlowFARPipeline.call]]
__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)
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 vidéo. Ignoré lorsque la guidance n'est pas utilisée (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], facultatif) : Plan de sigma personnalisé pour l'échantillonnage à nombre de pas arbitraire, dans [0, 1] et ordonné du bruité au propre. La longueur détermine le num_inference_steps effectif ; le planificateur ajoute le sigma terminal 0.
timesteps (List[float], facultatif) : Planification personnalisée des pas de temps pour l'échantillonnage à nombre de 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 du 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) : Incrustations de texte pré-générées. Si non fournies, les incrustations sont générées à partir de prompt.
negative_prompt_embeds (torch.Tensor, facultatif) : Incrustations de texte négatif pré-générées.
output_type (str, facultatif, par défaut "np") : Format de sortie. L'un des "pil", "np", "pt" ou "latent".
return_dict (bool, facultatif, valeur 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 tel que 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"]) : Tenseurs d'entrée transmis au rappel. 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.
use_mean_velocity (bool, par défaut True) : lorsque True, conditionne le modèle flow-map à la fois sur l'instant source t et l'instant cible r afin de prédire une vitesse moyenne. Désactivez pour reproduire un pas d'Euler brut.
use_kv_cache (bool, par défaut True) : Réutiliser 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[[diffusers.AnyFlowFARPipeline.encode_prompt]]
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)
Paramètres :
prompt (str ou list[str], facultatif) : invite à encoder
negative_prompt (str ou list[str], facultatif) : Le prompt 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, par défaut True) : Indique s'il faut utiliser le guidage sans classifieur 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) : Incrustations de texte pré-générées. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. pondération des prompts. Si non fourni, les incrustations de texte seront générées à partir de l'argument d'entrée prompt.
negative_prompt_embeds (torch.Tensor, facultatif) : Embeddings de texte négatif pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par exemple 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) : appareil torch
dtype : (torch.dtype, facultatif) : torch dtype
Encode le prompt dans les états cachés de l'encodeur de texte.
encode_video[[diffusers.AnyFlowFARPipeline.encode_video]]
encode_video(video: Tensor, height: int, width: 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[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]
diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput[[diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput]]
diffusers.pipelines.anyflow.pipeline_output.AnyFlowPipelineOutput(frames: Tensor)
Paramètres :
frames (torch.Tensor, np.ndarray ou list[list[PIL.Image.Image]]) : liste de 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.
Xet Storage Details
- Size:
- 35.2 kB
- Xet hash:
- c44cbeae5546f4425d6a65e0f583369968be38eaac46af5a719eb52a3ad16bd3
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.