Diffusers documentation

Wan

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

LoRA

Wan

Wan-2.1 par l'équipe Wan.

Ce rapport présente Wan, une suite complète et ouverte de modèles de fondation pour la vidéo, conçue pour repousser les limites de la génération vidéo. Construite sur le paradigme principal du diffusion transformer, Wan obtient des avancées significatives en capacités génératives grâce à une série d'innovations, notamment notre VAE novateur, des stratégies de pré-entraînement évolutives, une curation de données à grande échelle et des métriques d'évaluation automatisées. Ces contributions améliorent collectivement les performances et la polyvalence du modèle. Plus précisément, Wan se caractérise par quatre fonctionnalités clés : Performance de pointe : Le modèle 14B de Wan, entraîné sur un vaste jeu de données comprenant des milliards d'images et de vidéos, démontre les lois d'échelle de la génération vidéo en fonction à la fois de la taille des données et du modèle. Il surpasse systématiquement les modèles open source existants ainsi que les solutions commerciales de pointe sur de multiples benchmarks internes et externes, démontrant une supériorité de performance claire et significative. Exhaustivité : Wan propose deux modèles performants, à savoir 1,3B et 14B paramètres, pour l'efficacité et l'effectivité respectivement. Il couvre également plusieurs applications en aval, y compris l'image-à-vidéo, l'édition vidéo guidée par des instructions et la génération vidéo personnelle, englobant jusqu'à huit tâches. Efficacité de niveau grand public : Le modèle 1,3B démontre une efficacité des ressources exceptionnelle, nécessitant seulement 8,19 Go de VRAM, ce qui le rend compatible avec une large gamme de GPU de niveau grand public. Ouverture : Nous mettons en open source l'ensemble de la série Wan, y compris le code source et tous les modèles, dans le but de favoriser la croissance de la communauté de la génération vidéo. Cette ouverture vise à élargir considérablement les possibilités créatives de la production vidéo dans l'industrie et à fournir à l'académie des modèles de fondation vidéo de haute qualité. Tout le code et les modèles sont disponibles à cette URL https.

Vous pouvez trouver tous les points de contrôle originaux de Wan2.1 sous l'organisation Wan-AI.

Les modèles Wan suivants sont pris en charge dans Diffusers :

Cliquez sur les modèles Wan dans la barre latérale droite pour plus d’exemples de génération de vidéos.

Génération de texte en vidéo

L'exemple ci-dessous montre comment générer une vidéo à partir de texte, optimisée pour la mémoire ou la vitesse d'inférence.

Mémoire T2V
Vitesse d'inférence T2V

Reportez-vous au guide Réduire l'utilisation de la mémoire pour plus de détails sur les différentes techniques d'économie de mémoire.

Le modèle de génération de vidéo à partir de texte Wan2.1 ci-dessous nécessite environ 13 Go de VRAM.

# pip install ftfy
import torch
import numpy as np
from diffusers import AutoModel, WanPipeline
from diffusers.quantizers import PipelineQuantizationConfig
from diffusers.hooks.group_offloading import apply_group_offloading
from diffusers.utils import export_to_video, load_image
from transformers import UMT5EncoderModel

text_encoder = UMT5EncoderModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="text_encoder", dtype=torch.bfloat16)
vae = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="vae", dtype=torch.float32)
transformer = AutoModel.from_pretrained("Wan-AI/Wan2.1-T2V-14B-Diffusers", subfolder="transformer", dtype=torch.bfloat16)

# group-offloading
onload_device = torch.device("cuda")
offload_device = torch.device("cpu")
apply_group_offloading(text_encoder,
    onload_device=onload_device,
    offload_device=offload_device,
    offload_type="block_level",
    num_blocks_per_group=4
)
transformer.enable_group_offload(
    onload_device=onload_device,
    offload_device=offload_device,
    offload_type="leaf_level",
    use_stream=True
)

pipeline = WanPipeline.from_pretrained(
    "Wan-AI/Wan2.1-T2V-14B-Diffusers",
    vae=vae,
    transformer=transformer,
    text_encoder=text_encoder,
    dtype=torch.bfloat16
)
pipeline.to("cuda")  # or "mps", "xpu", "cpu"

prompt = """
The camera rushes from far to near in a low-angle shot,
revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
"""
negative_prompt = """
Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality,
low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured,
misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards
"""

output = pipeline(
    prompt=prompt,
    negative_prompt=negative_prompt,
    num_frames=81,
    guidance_scale=5.0,
).frames[0]
export_to_video(output, "output.mp4", fps=16)

Génération de vidéo à partir de la première et de la dernière image

L'exemple ci-dessous montre comment utiliser le pipeline image-verso-vidéo pour générer une vidéo à partir d'une description textuelle, d'une image de départ et d'une image de fin.

utilisation
import numpy as np
import torch
import torchvision.transforms.functional as TF
from diffusers import AutoencoderKLWan, WanImageToVideoPipeline
from diffusers.utils import export_to_video, load_image
from transformers import CLIPVisionModel


model_id = "Wan-AI/Wan2.1-FLF2V-14B-720P-diffusers"
image_encoder = CLIPVisionModel.from_pretrained(model_id, subfolder="image_encoder", dtype=torch.float32)
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanImageToVideoPipeline.from_pretrained(
    model_id, vae=vae, image_encoder=image_encoder, dtype=torch.bfloat16
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

first_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_first_frame.png")
last_frame = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_last_frame.png")

def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1]
    height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value
    width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value
    image = image.resize((width, height))
    return image, height, width

def center_crop_resize(image, height, width):
    # Calculate resize ratio to match first frame dimensions
    resize_ratio = max(width / image.width, height / image.height)

    # Resize the image
    width = round(image.width * resize_ratio)
    height = round(image.height * resize_ratio)
    size = [width, height]
    image = TF.center_crop(image, size)

    return image, height, width

first_frame, height, width = aspect_ratio_resize(first_frame, pipe)
if last_frame.size != first_frame.size:
    last_frame, _, _ = center_crop_resize(last_frame, height, width)

prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."

output = pipe(
    image=first_frame, last_image=last_frame, prompt=prompt, height=height, width=width, guidance_scale=5.5
).frames[0]
export_to_video(output, "output.mp4", fps=16)

Génération contrôlable de n'importe quel type vers vidéo

Wan VACE prend en charge diverses techniques de génération permettant une génération de vidéos contrôlable. Parmi les fonctionnalités incluses :

  • Contrôle vidéo à vidéo (profondeur, pose, esquisse, flux, niveaux de gris, gribouillis, mise en page, boîte de contour, etc.). Bibliothèque recommandée pour prétraiter les vidéos afin d’obtenir des vidéos de contrôle : huggingface/controlnet_aux
  • Image/vidéo vers vidéo (première image, dernière image, clip de départ, clip de fin, clips aléatoires)
  • Inpainting et Outpainting
  • Sujet de la vidéo (visages, objets, personnages, etc.)
  • Composition vers vidéo (référencer n'importe quoi, animer n'importe quoi, échanger n'importe quoi, étendre n'importe quoi, déplacer n'importe quoi, etc.)

Les extraits de code disponibles dans cette pull request illustrent quelques exemples de la manière dont des vidéos peuvent être générées à l'aide de signaux de contrôlabilité.

La règle générale à garder en tête lors de la préparation des entrées pour le pipeline VACE est que les images d’entrée, ou les frames d’une vidéo que vous souhaitez utiliser pour le conditionnement, doivent être accompagnées d’un masque correspondant, de couleur noire. Le masque noir indique que le modèle ne générera pas de nouveau contenu pour cette zone, et n’utilisera ces parties que pour conditionner le processus de génération. Pour les parties/frames qui doivent être générées par le modèle, le masque doit être de couleur blanche.

Wan-Animate : Animation et remplacement unifiés de personnages avec réplique holistique

Wan-Animate par l'équipe Wan.

Nous présentons Wan-Animate, un cadre unifié pour l’animation et le remplacement de personnages. À partir d’une image de personnage et d’une vidéo de référence, Wan-Animate peut animer le personnage en reproduisant avec précision les expressions et les mouvements du personnage dans la vidéo, afin de générer des vidéos de personnage haute fidélité. Alternativement, il peut intégrer le personnage animé dans la vidéo de référence pour remplacer le personnage d’origine, en reproduisant l’éclairage et la tonalité de couleur de la scène afin d’obtenir une intégration environnementale sans couture. Wan-Animate est construit sur le modèle Wan. Pour l’adapter aux tâches d’animation de personnage, nous utilisons un paradigme d’entrée modifié pour distinguer les conditions de référence des régions de génération. Cette conception unifie plusieurs tâches dans une représentation symbolique commune. Nous utilisons des signaux de squelette alignés spatialement pour reproduire le mouvement du corps et des caractéristiques faciales implicites extraites des images sources pour rejouer les expressions, permettant la génération de vidéos de personnage avec une grande contrôlabilité et expressivité. De plus, pour améliorer l’intégration environnementale lors du remplacement de personnage, nous développons un Relighting LoRA auxiliaire. Ce module préserve la cohérence de l’apparence du personnage tout en appliquant l’éclairage et la tonalité de couleur environnementaux appropriés. Les résultats expérimentaux démontrent que Wan-Animate atteint des performances de pointe. Nous nous engageons à open-sourcer les poids du modèle et son code source.

La page du projet : https://humanaigc.github.io/wan-animate

Ce modèle a été principalement contribué par M. Tolga Cangöz.

Utilisation

Le pipeline Wan-Animate prend en charge deux modes de fonctionnement :

  1. Mode Animation (par défaut) : Anime une image de personnage en se basant sur le mouvement et l'expression issus de vidéos de référence
  2. Mode de remplacement : Remplace un personnage dans une vidéo d'arrière-plan par un nouveau personnage tout en préservant la scène
Prérequis

Avant d'utiliser le pipeline, vous devez prétraiter votre vidéo de référence pour extraire :

  • Vidéo de pose : Contient des points clés squelettiques représentant le mouvement du corps
  • Vidéo du visage : Contient des représentations des traits du visage pour le contrôle des expressions

Pour le mode de remplacement, vous avez également besoin de :

  • Vidéo d'arrière-plan : La vidéo d'origine contenant la scène
  • Vidéo de masque : un masque indiquant où générer du contenu (blanc) par rapport à conserver l’original (noir)

Les vidéos brutes ne doivent pas être utilisées pour des entrées telles que pose_video, pour lesquelles le pipeline s’attend à ce qu’elles soient prétraitées afin d’extraire les informations appropriées. Des scripts de prétraitement pour préparer ces entrées sont disponibles dans le dépôt original Wan-Animate. L’intégration de ces étapes de prétraitement dans Diffusers est prévue pour une future version.

L'exemple ci-dessous montre comment utiliser le pipeline Wan-Animate :

Mode animation
Mode de remplacement
Options avancées
import numpy as np
import torch
from diffusers import AutoencoderKLWan, WanAnimatePipeline
from diffusers.utils import export_to_video, load_image, load_video

model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", dtype=torch.float32)
pipe = WanAnimatePipeline.from_pretrained(model_id, vae=vae, dtype=torch.bfloat16)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

# Load character image and preprocessed videos
image = load_image("path/to/character.jpg")
pose_video = load_video("path/to/pose_video.mp4")  # Preprocessed skeletal keypoints
face_video = load_video("path/to/face_video.mp4")  # Preprocessed facial features

# Resize image to match VAE constraints
def aspect_ratio_resize(image, pipe, max_area=720 * 1280):
    aspect_ratio = image.height / image.width
    mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1]
    height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value
    width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value
    image = image.resize((width, height))
    return image, height, width

image, height, width = aspect_ratio_resize(image, pipe)

prompt = "A person dancing energetically in a studio with dynamic lighting and professional camera work"
negative_prompt = "blurry, low quality, distorted, deformed, static, poorly drawn"

# Generate animated video
output = pipe(
    image=image,
    pose_video=pose_video,
    face_video=face_video,
    prompt=prompt,
    negative_prompt=negative_prompt,
    height=height,
    width=width,
    segment_frame_length=77,
    guidance_scale=1.0,
    mode="animate",  # Animation mode (default)
).frames[0]
export_to_video(output, "animated_character.mp4", fps=30)

Paramètres clés

  • mode : Choisissez entre "animate" (par défaut) ou "replace"
  • prev_segment_conditioning_frames : Nombre de frames pour le guidage temporel (1 ou 5 recommandé). L'utilisation de 5 offre une meilleure cohérence temporelle mais nécessite plus de mémoire
  • guidance_scale : Contrôle dans quelle mesure la sortie suit le prompt texte. Des valeurs plus élevées (5-7) produisent des résultats plus alignés avec le prompt. Pour Wan-Animate, le CFG est désactivé par défaut (guidance_scale=1.0) mais peut être activé pour prendre en charge les prompts négatifs et un contrôle plus fin des expressions faciales. (Notez que le CFG ne ciblera que le prompt texte et le conditionnement du visage.)

Notes

  • Wan2.1 prend en charge les LoRA avec load_lora_weights().

    Afficher le code d'exemple
    # pip install ftfy
    import torch
    from diffusers import AutoModel, WanPipeline
    from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
    from diffusers.utils import export_to_video
    
    vae = AutoModel.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", subfolder="vae", dtype=torch.float32
    )
    pipeline = WanPipeline.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers", vae=vae, dtype=torch.bfloat16
    )
    pipeline.scheduler = UniPCMultistepScheduler.from_config(
        pipeline.scheduler.config, flow_shift=5.0
    )
    pipeline.to("cuda")  # or "mps", "xpu", "cpu"
    
    pipeline.load_lora_weights("benjamin-paine/steamboat-willie-1.3b", adapter_name="steamboat-willie")
    pipeline.set_adapters("steamboat-willie")
    
    pipeline.enable_model_cpu_offload()
    
    # use "steamboat willie style" to trigger the LoRA
    prompt = """
    steamboat willie style, golden era animation, The camera rushes from far to near in a low-angle shot,
    revealing a white ferret on a log. It plays, leaps into the water, and emerges, as the camera zooms in
    for a close-up. Water splashes berry bushes nearby, while moss, snow, and leaves blanket the ground.
    Birch trees and a light blue sky frame the scene, with ferns in the foreground. Side lighting casts dynamic
    shadows and warm highlights. Medium composition, front view, low angle, with depth of field.
    """
    
    output = pipeline(
        prompt=prompt,
        num_frames=81,
        guidance_scale=5.0,
    ).frames[0]
    export_to_video(output, "output.mp4", fps=16)
  • WanTransformer3DModel et AutoencoderKLWan prennent en charge le chargement à partir de fichiers uniques via from_single_file().

    Afficher le code d'exemple
    # pip install ftfy
    import torch
    from diffusers import WanPipeline, WanTransformer3DModel, AutoencoderKLWan
    
    vae = AutoencoderKLWan.from_single_file(
        "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/vae/wan_2.1_vae.safetensors"
    )
    transformer = WanTransformer3DModel.from_single_file(
        "https://huggingface.co/Comfy-Org/Wan_2.1_ComfyUI_repackaged/blob/main/split_files/diffusion_models/wan2.1_t2v_1.3B_bf16.safetensors",
        dtype=torch.bfloat16
    )
    pipeline = WanPipeline.from_pretrained(
        "Wan-AI/Wan2.1-T2V-1.3B-Diffusers",
        vae=vae,
        transformer=transformer,
        dtype=torch.bfloat16
    )
  • Définissez le dtype de AutoencoderKLWan sur torch.float32 pour une meilleure qualité de décodage.

  • Le nombre d'images par seconde (fps) ou k doit être calculé par 4 * k + 1.

  • Essayez des valeurs de shift plus basses (2.0 à 5.0) pour les vidéos de faible résolution et des valeurs de shift plus élevées (7.0 à 12.0) pour les images de haute résolution.

  • Wan 2.1 et 2.2 prennent en charge l'utilisation de LightX2V LoRAs pour accélérer l'inférence. Leur utilisation sur Wan 2.2 est légèrement plus complexe. Consultez ce fragment de code pour en savoir plus.

  • Wan 2.2 dispose de deux débruiteurs. Par défaut, les LoRA ne sont chargés que dans le premier débruiteur. Il est possible de définir load_into_transformer_2=True pour charger les LoRA dans le second débruiteur. Consultez les exemples celui-ci et celui-là pour en savoir plus.

WanPipeline

classe diffusers.WanPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteSchedulertransformer: diffusers.models.transformers.transformer_wan.WanTransformer3DModel | None = Nonetransformer_2: diffusers.models.transformers.transformer_wan.WanTransformer3DModel | None = Noneboundary_ratio: float | None = Noneexpand_timesteps: bool = False )

Paramètres

  • tokenizer (T5Tokenizer) — Tokenizer issu de T5, plus précisément la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, plus précisément la variante google/umt5-xxl.
  • transformer (WanTransformer3DModel) — Transformer conditionnel pour débruyer les latents d’entrée.
  • scheduler (UniPCMultistepScheduler) — Un planificateur à utiliser en combinaison avec transformer pour débruyer les latents d'image encodés.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
  • transformer_2 (WanTransformer3DModel, facultatif) — Transformer conditionnel utilisé pour débruyer les latents d’entrée pendant l’étape à faible bruit. S’il est fourni, il active un débruyage en deux étapes où transformer gère les étapes à fort bruit et transformer_2 gère les étapes à faible bruit. S’il n’est pas fourni, seul transformer est utilisé.
  • boundary_ratio (float, facultatif, par défaut None) — Ratio des timesteps totaux à utiliser comme limite pour le passage entre les transformers dans le débruitage en deux étapes. Le timestep de limite effectif est calculé comme boundary_ratio * num_train_timesteps. S'il est fourni, transformer gère les timesteps >= boundary_timestep et transformer_2 gère les timesteps < boundary_timestep. Si None, seul transformer est utilisé pour l'ensemble du processus de débruitage.

Pipeline pour la génération de vidéos à partir de texte utilisant Wan.

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: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50guidance_scale: float = 5.0guidance_scale_2: float | None = Nonenum_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~WanPipelineOutput or tuple

Paramètres

  • prompt (str ou list[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, passez plutôt prompt_embeds.
  • negative_prompt (str ou list[str], facultatif) — Le prompt ou les prompts à éviter lors de la génération d’image. S’il n’est pas défini, passez plutôt negative_prompt_embeds. Ignoré lorsque le guidage n’est pas utilisé (guidance_scale < 1).
  • height (int, par défaut 480) — La hauteur en pixels de l'image générée.
  • width (int, par défaut 832) — La largeur en pixels de l'image générée.
  • num_frames (int, par défaut 81) — Le nombre de frames dans la vidéo générée.
  • num_inference_steps (int, par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.
  • guidance_scale (float, par défaut 5.0) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance. guidance_scale est défini comme w de l’équation 2 de Imagen Paper. L’échelle de guidage est activée en définissant guidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées au prompt texte, généralement au détriment de la qualité de l’image.
  • guidance_scale_2 (float, facultatif, par défaut None) — Échelle de guidage pour le transformer de la phase à faible bruit (transformer_2). Si None et que le boundary_ratio du pipeline n’est pas None, utilise la même valeur que guidance_scale. Utilisé uniquement lorsque transformer_2 et le boundary_ratio du pipeline ne sont pas None.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre d'images à 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, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut servir à ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide du generator aléatoire fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont 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 (pondération des prompts). S'ils ne sont pas fournis, les negative_prompt_embeds sont générés à partir de l'argument d'entrée negative_prompt.
  • output_type (str, facultatif, par défaut "np") — Le format de sortie de l'image générée. Choisissez entre PIL.Image ou np.array.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un WanPipelineOutput 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, PipelineCallback, MultiPipelineCallbacks, facultatif) — Une fonction ou une sous-classe de PipelineCallback ou MultiPipelineCallbacks qui est appelée à la fin de chaque étape de débruitage pendant l’inférence, avec les arguments suivants : callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs contiendra une liste de tous les tenseurs spécifiés par callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argument callback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut ._callback_tensor_inputs de votre classe de pipeline.
  • max_sequence_length (int, par défaut 512) — La longueur de séquence maximale de l’encodeur de texte. Si le prompt est plus long que cela, il sera tronqué. S’il est plus court, il sera complété jusqu’à cette longueur.

Retourne

~WanPipelineOutput ou tuple

Si return_dict est True, WanPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste des images générées et le deuxième élément est une liste de bool indiquant si l’image générée correspondante contient du contenu « not-safe-for-work » (nsfw).

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

Exemples :

>>> import torch
>>> from diffusers.utils import export_to_video
>>> from diffusers import AutoencoderKLWan, WanPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler

>>> # Available models: Wan-AI/Wan2.1-T2V-14B-Diffusers, Wan-AI/Wan2.1-T2V-1.3B-Diffusers
>>> model_id = "Wan-AI/Wan2.1-T2V-14B-Diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 5.0  # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")

>>> prompt = "A cat and a dog baking a cake together in a kitchen. The cat is carefully measuring flour, while the dog is stirring the batter with a wooden spoon. The kitchen is cozy, with sunlight streaming through the window."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"

>>> output = pipe(
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=720,
...     width=1280,
...     num_frames=81,
...     guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.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.

WanImageToVideoPipeline

classe diffusers.WanImageToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteSchedulerimage_processor: CLIPImageProcessorPil = Noneimage_encoder: CLIPVisionModel = Nonetransformer: WanTransformer3DModel = Nonetransformer_2: WanTransformer3DModel = Noneboundary_ratio: float | None = Noneexpand_timesteps: bool = False )

Paramètres

  • tokenizer (T5Tokenizer) — Tokenizer issu de T5, plus précisément la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, plus précisément la variante google/umt5-xxl.
  • image_encoder (CLIPVisionModel) — CLIP, plus précisément la variante clip-vit-huge-patch14.
  • transformer (WanTransformer3DModel) — Transformer conditionnel pour débruyer les latents d’entrée.
  • scheduler (UniPCMultistepScheduler) — Un planificateur à utiliser en combinaison avec transformer pour débruyer les latents d'image encodés.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
  • transformer_2 (WanTransformer3DModel, facultatif) — Transformer conditionnel utilisé pour débruyer les latents d’entrée pendant l’étape à faible bruit. Dans le débruyage en deux étapes, transformer gère les étapes à fort bruit et transformer_2 gère les étapes à faible bruit. S’il n’est pas fourni, seul transformer est utilisé.
  • boundary_ratio (float, facultatif, par défaut None) — Ratio des timesteps totaux à utiliser comme limite pour le passage entre les transformers dans le débruitage en deux étapes. Le timestep de limite effectif est calculé comme boundary_ratio * num_train_timesteps. S'il est fourni, transformer gère les timesteps >= boundary_timestep et transformer_2 gère les timesteps < boundary_timestep. Si None, seul transformer est utilisé pour l'ensemble du processus de débruitage.

Pipeline pour la génération de vidéos à partir d’images utilisant Wan.

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__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]prompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50guidance_scale: float = 5.0guidance_scale_2: float | None = Nonenum_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Nonelast_image: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~WanPipelineOutput or tuple

Paramètres

  • image (PipelineImageInput) — L'image d'entrée sur laquelle conditionner la génération. Doit être une image, une liste d'images ou un torch.Tensor.
  • last_image (torch.Tensor, optional) — Optional last frame to condition the generated video on. When provided, the model interpolates between image (first frame) and last_image (last frame).
  • prompt (str ou list[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passer prompt_embeds à la place.
  • 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).
  • height (int, par défaut 480) — La hauteur de la vidéo générée.
  • width (int, par défaut 832) — La largeur 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.
  • num_inference_steps (int, par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.
  • guidance_scale (float, par défaut 5.0) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance. guidance_scale est défini comme w de l’équation 2 de Imagen Paper. L’échelle de guidage est activée en définissant guidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées au prompt texte, généralement au détriment de la qualité de l’image.
  • guidance_scale_2 (float, facultatif, par défaut None) — Échelle de guidage pour le transformer de la phase à faible bruit (transformer_2). Si None et que le boundary_ratio du pipeline n’est pas None, utilise la même valeur que guidance_scale. Utilisé uniquement lorsque transformer_2 et le boundary_ratio du pipeline ne sont pas None.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre d'images à 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, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut servir à ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide du generator aléatoire fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont générés à partir de l'argument d'entrée prompt.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont générés à partir de l'argument d'entrée negative_prompt.
  • image_embeds (torch.Tensor, facultatif) — Embeddings d’image pré-générés. Peut être utilisé pour ajuster facilement les entrées d’image (pondération). S’ils ne sont pas fournis, les embeddings d’image sont générés à partir de l’argument d’entrée image.
  • output_type (str, facultatif, par défaut "np") — Le format de sortie de l'image générée. Choisissez entre PIL.Image ou np.array.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un WanPipelineOutput 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, PipelineCallback, MultiPipelineCallbacks, facultatif) — Une fonction ou une sous-classe de PipelineCallback ou MultiPipelineCallbacks qui est appelée à la fin de chaque étape de débruitage pendant l’inférence, avec les arguments suivants : callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs contiendra une liste de tous les tenseurs spécifiés par callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argument callback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut ._callback_tensor_inputs de votre classe de pipeline.
  • max_sequence_length (int, par défaut 512) — La longueur de séquence maximale de l’encodeur de texte. Si le prompt est plus long que cela, il sera tronqué. S’il est plus court, il sera complété jusqu’à cette longueur.

Retourne

~WanPipelineOutput ou tuple

Si return_dict est True, WanPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste des images générées et le deuxième élément est une liste de bool indiquant si l’image générée correspondante contient du contenu « not-safe-for-work » (nsfw).

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

Exemples :

>>> import torch
>>> import numpy as np
>>> from diffusers import AutoencoderKLWan, WanImageToVideoPipeline
>>> from diffusers.utils import export_to_video, load_image
>>> from transformers import CLIPVisionModel

>>> # Available models: Wan-AI/Wan2.1-I2V-14B-480P-Diffusers, Wan-AI/Wan2.1-I2V-14B-720P-Diffusers
>>> model_id = "Wan-AI/Wan2.1-I2V-14B-480P-Diffusers"
>>> image_encoder = CLIPVisionModel.from_pretrained(
...     model_id, subfolder="image_encoder", torch_dtype=torch.float32
... )
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanImageToVideoPipeline.from_pretrained(
...     model_id, vae=vae, image_encoder=image_encoder, torch_dtype=torch.bfloat16
... )
>>> pipe.to("cuda")

>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )
>>> max_area = 480 * 832
>>> aspect_ratio = image.height / image.width
>>> mod_value = pipe.vae_scale_factor_spatial * pipe.transformer.config.patch_size[1]
>>> height = round(np.sqrt(max_area * aspect_ratio)) // mod_value * mod_value
>>> width = round(np.sqrt(max_area / aspect_ratio)) // mod_value * mod_value
>>> image = image.resize((width, height))
>>> prompt = (
...     "An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space realised in "
...     "the background. High quality, ultrarealistic detail and breath-taking movie-like camera shot."
... )
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"

>>> output = pipe(
...     image=image,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=height,
...     width=width,
...     num_frames=81,
...     guidance_scale=5.0,
... ).frames[0]
>>> export_to_video(output, "output.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.

WanVACEPipeline

classe diffusers.WanVACEPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteSchedulertransformer: WanVACETransformer3DModel = Nonetransformer_2: WanVACETransformer3DModel = Noneboundary_ratio: float | None = None )

Paramètres

  • tokenizer (T5Tokenizer) — Tokenizer issu de T5, plus précisément la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, plus précisément la variante google/umt5-xxl.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
  • scheduler (UniPCMultistepScheduler) — Un planificateur à utiliser en combinaison avec transformer pour débruyer les latents d'image encodés.
  • transformer (WanVACETransformer3DModel, facultatif) — Transformer conditionnel pour débruyer les latents d’entrée pendant l’étape à bruit élevé. Dans le débruyage en deux étapes, transformer gère les étapes à bruit élevé et transformer_2 gère les étapes à bruit faible. Au moins l’un des transformer ou transformer_2 doit être fourni.
  • transformer_2 (WanVACETransformer3DModel, facultatif) — Transformer conditionnel pour débruyer les latents d’entrée pendant l’étape à faible bruit. Dans le débruyage en deux étapes, transformer gère les étapes à fort bruit et transformer_2 gère les étapes à faible bruit. Au moins l’un des transformer ou transformer_2 doit être fourni.
  • boundary_ratio (float, facultatif, par défaut None) — Ratio des timesteps totaux à utiliser comme limite pour le passage entre les transformers dans le débruitage en deux étapes. Le timestep de limite effectif est calculé comme boundary_ratio * num_train_timesteps. S'il est fourni, transformer gère les timesteps >= boundary_timestep et transformer_2 gère les timesteps < boundary_timestep. Si None, seul le transformer disponible est utilisé pour l'ensemble du processus de débruitage.

Pipeline pour la génération contrôlable à l'aide de Wan.

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: str | list[str] = Nonenegative_prompt: str | list[str] = Nonevideo: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Nonemask: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Nonereference_images: list[typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]] | None = Noneconditioning_scale: typing.Union[float, list[float], torch.Tensor] = 1.0height: int = 480width: int = 832num_frames: int = 81num_inference_steps: int = 50guidance_scale: float = 5.0guidance_scale_2: float | None = Nonenum_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~WanPipelineOutput or tuple

Paramètres

  • prompt (str ou list[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passer prompt_embeds à la place.
  • 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).
  • video (list[PIL.Image.Image], facultatif) — La vidéo ou les vidéos d'entrée à utiliser comme point de départ pour la génération. La vidéo doit être une liste d'images PIL, un tableau numpy ou un tenseur torch. Actuellement, le pipeline ne prend en charge la génération que d'une seule vidéo à la fois.
  • mask (list[PIL.Image.Image], facultatif) — Le masque d’entrée définit les régions de la vidéo sur lesquelles conditionner et celles à générer. Les zones noires du masque indiquent les régions de conditionnement, tandis que les zones blanches indiquent les régions de génération. Le masque doit être une liste d’images PIL, un tableau numpy ou un tenseur torch. Prend actuellement en charge la génération d’une seule vidéo à la fois.
  • reference_images (list[PIL.Image.Image], facultatif) — Une liste d’une ou plusieurs images de référence servant de conditionnement supplémentaire pour la génération. Par exemple, si vous souhaitez réparer une vidéo pour changer de personnage, vous pouvez transmettre ici des images de référence du nouveau personnage. Consultez les exemples de Diffusers et le guide utilisateur original pour la liste complète des tâches et cas d’usage pris en charge.
  • conditioning_scale (float, list[float], torch.Tensor, par défaut 1.0) — L'échelle de conditionnement à appliquer lors de l'ajout du flux latent de conditionnement de contrôle au flux latent de débruitage dans chaque couche de contrôle du modèle. Si une valeur flottante est fournie, elle sera appliquée uniformément à toutes les couches. Si une liste ou un tenseur est fourni, il doit avoir la même longueur que le nombre de couches de contrôle du modèle (len(transformer.config.vace_layers)).
  • height (int, par défaut 480) — La hauteur en pixels de l'image générée.
  • width (int, par défaut 832) — La largeur en pixels de l'image générée.
  • num_frames (int, par défaut 81) — Le nombre de frames dans la vidéo générée.
  • num_inference_steps (int, par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.
  • guidance_scale (float, par défaut 5.0) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance. guidance_scale est défini comme w de l’équation 2 de Imagen Paper. L’échelle de guidage est activée en définissant guidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées au prompt texte, généralement au détriment de la qualité de l’image.
  • guidance_scale_2 (float, facultatif, par défaut None) — Échelle de guidage pour le transformer de la phase à faible bruit (transformer_2). Si None et que le boundary_ratio du pipeline n’est pas None, utilise la même valeur que guidance_scale. Utilisé uniquement lorsque transformer_2 et le boundary_ratio du pipeline ne sont pas None.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre d'images à 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, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut servir à ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide du generator aléatoire fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont 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 (pondération des prompts). S'ils ne sont pas fournis, les negative_prompt_embeds sont générés à partir de l'argument d'entrée negative_prompt.
  • output_type (str, facultatif, par défaut "np") — Le format de sortie de l'image générée. Choisissez entre PIL.Image ou np.array.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un WanPipelineOutput 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, PipelineCallback, MultiPipelineCallbacks, facultatif) — Une fonction ou une sous-classe de PipelineCallback ou MultiPipelineCallbacks qui est appelée à la fin de chaque étape de débruitage pendant l’inférence, avec les arguments suivants : callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs contiendra une liste de tous les tenseurs spécifiés par callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argument callback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut ._callback_tensor_inputs de votre classe de pipeline.
  • max_sequence_length (int, par défaut 512) — La longueur de séquence maximale de l’encodeur de texte. Si le prompt est plus long que cela, il sera tronqué. S’il est plus court, il sera complété jusqu’à cette longueur.

Retourne

~WanPipelineOutput ou tuple

Si return_dict est True, WanPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste des images générées et le deuxième élément est une liste de bool indiquant si l’image générée correspondante contient du contenu « not-safe-for-work » (nsfw).

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

Exemples :

>>> import torch
>>> import PIL.Image
>>> from diffusers import AutoencoderKLWan, WanVACEPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler
>>> from diffusers.utils import export_to_video, load_image
def prepare_video_and_mask(first_img: PIL.Image.Image, last_img: PIL.Image.Image, height: int, width: int, num_frames: int):
    first_img = first_img.resize((width, height))
    last_img = last_img.resize((width, height))
    frames = []
    frames.append(first_img)
    # Ideally, this should be 127.5 to match original code, but they perform computation on numpy arrays
    # whereas we are passing PIL images. If you choose to pass numpy arrays, you can set it to 127.5 to
    # match the original code.
    frames.extend([PIL.Image.new("RGB", (width, height), (128, 128, 128))] * (num_frames - 2))
    frames.append(last_img)
    mask_black = PIL.Image.new("L", (width, height), 0)
    mask_white = PIL.Image.new("L", (width, height), 255)
    mask = [mask_black, *[mask_white] * (num_frames - 2), mask_black]
    return frames, mask

>>> # Available checkpoints: Wan-AI/Wan2.1-VACE-1.3B-diffusers, Wan-AI/Wan2.1-VACE-14B-diffusers
>>> model_id = "Wan-AI/Wan2.1-VACE-1.3B-diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanVACEPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 3.0  # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")

>>> prompt = "CG animation style, a small blue bird takes off from the ground, flapping its wings. The bird's feathers are delicate, with a unique pattern on its chest. The background shows a blue sky with white clouds under bright sunshine. The camera follows the bird upward, capturing its flight and the vastness of the sky from a close-up, low-angle perspective."
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> first_frame = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_first_frame.png"
... )
>>> last_frame = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/flf2v_input_last_frame.png>>> "
... )

>>> height = 512
>>> width = 512
>>> num_frames = 81
>>> video, mask = prepare_video_and_mask(first_frame, last_frame, height, width, num_frames)

>>> output = pipe(
...     video=video,
...     mask=mask,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=height,
...     width=width,
...     num_frames=num_frames,
...     num_inference_steps=30,
...     guidance_scale=5.0,
...     generator=torch.Generator().manual_seed(42),
... ).frames[0]
>>> export_to_video(output, "output.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.

WanVideoToVideoPipeline

classe diffusers.WanVideoToVideoPipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModeltransformer: WanTransformer3DModelvae: AutoencoderKLWanscheduler: FlowMatchEulerDiscreteScheduler )

Paramètres

  • tokenizer (T5Tokenizer) — Tokenizer issu de T5, plus précisément la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, plus précisément la variante google/umt5-xxl.
  • transformer (WanTransformer3DModel) — Transformer conditionnel pour débruyer les latents d’entrée.
  • scheduler (UniPCMultistepScheduler) — Un planificateur à utiliser en combinaison avec transformer pour débruyer les latents d'image encodés.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.

Pipeline pour la génération vidéo-à-vidéo utilisant Wan.

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__

< >

( video: list[PIL.Image.Image] = Noneprompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 480width: int = 832num_inference_steps: int = 50timesteps: list[int] | None = Noneguidance_scale: float = 5.0strength: float = 0.8num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~WanPipelineOutput or tuple

Paramètres

  • video (list[PIL.Image.Image]) — La vidéo d’entrée utilisée comme point de départ pour la génération vidéo-à-vidéo. La vidéo doit être fournie sous forme de liste d’images PIL, de tableau numpy ou de tenseur torch.
  • prompt (str ou list[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passer prompt_embeds à la place.
  • 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).
  • height (int, par défaut 480) — La hauteur en pixels de l'image générée.
  • width (int, par défaut 832) — La largeur en pixels de l'image générée.
  • num_inference_steps (int, par défaut 50) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.
  • timesteps (list[int], facultatif) — Timesteps personnalisés à utiliser pour le processus de débruitage avec les planificateurs qui prennent en charge un argument timesteps dans leur méthode set_timesteps. S'il n'est pas défini, le comportement par défaut lorsque num_inference_steps est passé sera utilisé. Doit être dans l'ordre décroissant.
  • guidance_scale (float, par défaut 5.0) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance. guidance_scale est défini comme w de l’équation 2 de Imagen Paper. L’échelle de guidage est activée en définissant guidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées au prompt texte, généralement au détriment de la qualité de l’image.
  • strength (float, par défaut 0.8) — Une valeur de strength plus élevée entraîne de plus grandes différences entre l'image d'origine et la vidéo générée.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre d'images à 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, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut servir à ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide du generator aléatoire fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont 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 (pondération des prompts). S'ils ne sont pas fournis, les negative_prompt_embeds sont générés à partir de l'argument d'entrée negative_prompt.
  • output_type (str, facultatif, par défaut "np") — Le format de sortie de l'image générée. Choisissez entre PIL.Image ou np.array.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un WanPipelineOutput 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, PipelineCallback, MultiPipelineCallbacks, facultatif) — Une fonction ou une sous-classe de PipelineCallback ou MultiPipelineCallbacks qui est appelée à la fin de chaque étape de débruitage pendant l’inférence, avec les arguments suivants : callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs contiendra une liste de tous les tenseurs spécifiés par callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argument callback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut ._callback_tensor_inputs de votre classe de pipeline.
  • max_sequence_length (int, par défaut 512) — La longueur de séquence maximale de l’encodeur de texte. Si le prompt est plus long que cela, il sera tronqué. S’il est plus court, il sera complété jusqu’à cette longueur.

Retourne

~WanPipelineOutput ou tuple

Si return_dict est True, WanPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste des images générées et le deuxième élément est une liste de bool indiquant si l’image générée correspondante contient du contenu « not-safe-for-work » (nsfw).

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

Exemples :

>>> import torch
>>> from diffusers.utils import export_to_video, load_video
>>> from diffusers import AutoencoderKLWan, WanVideoToVideoPipeline
>>> from diffusers.schedulers.scheduling_unipc_multistep import UniPCMultistepScheduler

>>> # Available models: Wan-AI/Wan2.1-T2V-14B-Diffusers, Wan-AI/Wan2.1-T2V-1.3B-Diffusers
>>> model_id = "Wan-AI/Wan2.1-T2V-1.3B-Diffusers"
>>> vae = AutoencoderKLWan.from_pretrained(model_id, subfolder="vae", torch_dtype=torch.float32)
>>> pipe = WanVideoToVideoPipeline.from_pretrained(model_id, vae=vae, torch_dtype=torch.bfloat16)
>>> flow_shift = 3.0  # 5.0 for 720P, 3.0 for 480P
>>> pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config, flow_shift=flow_shift)
>>> pipe.to("cuda")

>>> prompt = "A robot standing on a mountain top. The sun is setting in the background"
>>> negative_prompt = "Bright tones, overexposed, static, blurred details, subtitles, style, works, paintings, images, static, overall gray, worst quality, low quality, JPEG compression residue, ugly, incomplete, extra fingers, poorly drawn hands, poorly drawn faces, deformed, disfigured, misshapen limbs, fused fingers, still picture, messy background, three legs, many people in the background, walking backwards"
>>> video = load_video(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/hiker.mp4"
... )
>>> output = pipe(
...     video=video,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     height=480,
...     width=720,
...     guidance_scale=5.0,
...     strength=0.7,
... ).frames[0]
>>> export_to_video(output, "output.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.

WanAnimatePipeline

classe diffusers.WanAnimatePipeline

< >

( tokenizer: AutoTokenizertext_encoder: UMT5EncoderModelvae: AutoencoderKLWanscheduler: UniPCMultistepSchedulerimage_processor: CLIPImageProcessorPilimage_encoder: CLIPVisionModeltransformer: WanAnimateTransformer3DModel )

Paramètres

  • tokenizer (T5Tokenizer) — Tokenizer issu de T5, plus précisément la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, plus précisément la variante google/umt5-xxl.
  • image_encoder (CLIPVisionModel) — CLIP, plus précisément la variante clip-vit-huge-patch14.
  • transformer (WanAnimateTransformer3DModel) — Transformer conditionnel pour débruyer les latents d'entrée.
  • scheduler (UniPCMultistepScheduler) — Un planificateur à utiliser en combinaison avec transformer pour débruyer les latents d'image encodés.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
  • image_processor (CLIPImageProcessor) — Processeur d'images pour la prétraitement des images avant encodage.

Pipeline pour l'animation et le remplacement unifiés de personnages à l'aide de Wan-Animate.

WanAnimatePipeline prend en entrée une image de personnage, une vidéo de pose et une vidéo de visage, et génère une vidéo dans deux

  1. Mode animation : le modèle génère une vidéo de l'image du personnage qui imite le mouvement humain des vidéos d'entrée de pose et de visage. Le personnage est animé en fonction des contrôles de mouvement fournis, créant ainsi une nouvelle vidéo animée du personnage.

  2. Mode de remplacement : le modèle remplace un personnage dans une vidéo d'arrière-plan par l'image de personnage fournie, en utilisant les vidéos de pose et de visage pour le contrôle du mouvement. Ce mode nécessite des entrées supplémentaires background_video et mask_video. La vidéo de masque doit contenir des zones noires là où le contenu d'origine doit être conservé et des zones blanches là où le nouveau personnage doit être généré.

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.).

Le pipeline hérite également des méthodes de chargement suivantes :

__call__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]pose_video: list[PIL.Image.Image]face_video: list[PIL.Image.Image]background_video: list[PIL.Image.Image] | None = Nonemask_video: list[PIL.Image.Image] | None = Noneprompt: str | list[str] = Nonenegative_prompt: str | list[str] = Noneheight: int = 720width: int = 1280segment_frame_length: int = 77num_inference_steps: int = 20mode: str = 'animate'prev_segment_conditioning_frames: int = 1motion_encode_batch_size: int | None = Noneguidance_scale: float = 1.0num_videos_per_prompt: int | None = 1generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneimage_embeds: typing.Optional[torch.Tensor] = Noneoutput_type: str | None = 'np'return_dict: bool = Trueattention_kwargs: dict[str, typing.Any] | None = Nonecallback_on_step_end: typing.Optional[typing.Callable[[int, int, NoneType], diffusers.callbacks.PipelineCallback | diffusers.callbacks.MultiPipelineCallbacks]] = Nonecallback_on_step_end_tensor_inputs: list[str] = ['latents']max_sequence_length: int = 512 ) → ~WanPipelineOutput or tuple

Paramètres

  • image (PipelineImageInput) — L'image de caractères d'entrée sur laquelle conditionner la génération. Doit être une image, une liste d'images ou un torch.Tensor.
  • pose_video (list[PIL.Image.Image]) — La vidéo de pose d'entrée pour conditionner la génération. Doit être une liste d'images PIL.
  • face_video (list[PIL.Image.Image]) — La vidéo faciale d'entrée sur laquelle conditionner la génération. Doit être une liste d'images PIL.
  • background_video (list[PIL.Image.Image], facultatif) — Lorsque le mode est "replace", la vidéo d'arrière-plan d'entrée sur laquelle conditionner la génération. Doit être une liste d'images PIL.
  • mask_video (list[PIL.Image.Image], facultatif) — Lorsque le mode est "replace", la vidéo de masque d'entrée pour conditionner la génération. Doit être une liste d'images PIL.
  • prompt (str ou list[str], facultatif) — Le prompt ou les prompts pour guider la génération d’image. S’il n’est pas défini, il faut passer prompt_embeds à la place.
  • 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).
  • mode (str, par défaut "animation") — Le mode de génération. Choisissez entre "animate" et "replace".
  • prev_segment_conditioning_frames (int, par défaut 1) — Le nombre de frames du segment vidéo précédent à utiliser pour le guidage temporel. Il est recommandé de le définir à 1 ou 5. En général, il doit être de la forme 4N + 1, où N est un entier non négatif.
  • motion_encode_batch_size (int, facultatif) — La taille de lot pour l'encodage par lots de la vidéo du visage via l'encodeur de mouvement. Cela permet de compenser la vitesse d'inférence par une réduction de l'utilisation de la mémoire en définissant une taille de lot plus petite. Par défaut, la valeur est self.transformer.config.motion_encoder_batch_size si elle n'est pas définie.
  • height (int, par défaut 720) — La hauteur de la vidéo générée.
  • width (int, par défaut 1280) — La largeur de la vidéo générée.
  • segment_frame_length (int, par défaut 77) — Le nombre de frames dans chaque segment de vidéo généré. Le nombre total de frames de la vidéo générée sera égal au nombre de frames de pose_video ; la vidéo sera générée par segments jusqu’à atteindre cette longueur. En général, cette valeur doit être de la forme 4N + 1, où N est un entier non négatif.
  • num_inference_steps (int, par défaut 20) — Le nombre d'étapes de débruitage. Un plus grand nombre d'étapes de débruitage conduit généralement à une image de meilleure qualité, au prix d'une inférence plus lente.
  • guidance_scale (float, par défaut 1.0) — Échelle de guidage telle que définie dans Classifier-Free Diffusion Guidance. guidance_scale est défini comme w de l’équation 2 de Imagen Paper. L’échelle de guidage est activée en définissant guidance_scale > 1. Une échelle de guidage plus élevée encourage la génération d’images étroitement liées au texte prompt, généralement au détriment de la qualité de l’image. Par défaut, CFG n’est pas utilisé lors de l’inférence de Wan Animate.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre d'images à 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, échantillonnés à partir d’une distribution gaussienne, à utiliser comme entrées pour la génération d’images. Peut servir à ajuster la même génération avec des prompts différents. S’il n’est pas fourni, un tenseur de latents est généré par échantillonnage à l’aide du generator aléatoire fourni.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont générés à partir de l'argument d'entrée prompt.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte (pondération des prompts). S'il n'est pas fourni, les embeddings de texte sont générés à partir de l'argument d'entrée negative_prompt.
  • image_embeds (torch.Tensor, facultatif) — Embeddings d’image pré-générés. Peut être utilisé pour ajuster facilement les entrées d’image (pondération). S’ils ne sont pas fournis, les embeddings d’image sont générés à partir de l’argument d’entrée image.
  • output_type (str, facultatif, par défaut "np") — Le format de sortie de l'image générée. Choisissez entre PIL.Image ou np.array.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un WanPipelineOutput 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, PipelineCallback, MultiPipelineCallbacks, facultatif) — Une fonction ou une sous-classe de PipelineCallback ou MultiPipelineCallbacks qui est appelée à la fin de chaque étape de débruitage pendant l’inférence, avec les arguments suivants : callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs contiendra une liste de tous les tenseurs spécifiés par callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (List, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end. Les tenseurs spécifiés dans la liste seront passés en tant qu'argument callback_kwargs. Vous ne pourrez inclure que les variables listées dans l'attribut ._callback_tensor_inputs de votre classe de pipeline.
  • max_sequence_length (int, par défaut 512) — La longueur de séquence maximale de l’encodeur de texte. Si le prompt est plus long que cela, il sera tronqué. S’il est plus court, il sera complété jusqu’à cette longueur.

Retourne

~WanPipelineOutput ou tuple

Si return_dict est True, WanPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste des images générées et le deuxième élément est une liste de bool indiquant si l’image générée correspondante contient du contenu « not-safe-for-work » (nsfw).

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

Exemples :

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

>>> model_id = "Wan-AI/Wan2.2-Animate-14B-Diffusers"
>>> pipe = WanAnimatePipeline.from_pretrained(model_id, torch_dtype=torch.bfloat16)
>>> # Optionally upcast the Wan VAE to FP32
>>> pipe.vae.to(torch.float32)
>>> pipe.to("cuda")

>>> # Load the reference character image
>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
... )

>>> # Load pose and face videos (preprocessed from reference video)
>>> # Note: Videos should be preprocessed to extract pose keypoints and face features
>>> # Refer to the Wan-Animate preprocessing documentation for details
>>> pose_video = load_video("path/to/pose_video.mp4")
>>> face_video = load_video("path/to/face_video.mp4")

>>> # CFG is generally not used for Wan Animate
>>> prompt = (
...     "An astronaut hatching from an egg, on the surface of the moon, the darkness and depth of space realised in "
...     "the background. High quality, ultrarealistic detail and breath-taking movie-like camera shot."
... )

>>> # Animation mode: Animate the character with the motion from pose/face videos
>>> output = pipe(
...     image=image,
...     pose_video=pose_video,
...     face_video=face_video,
...     prompt=prompt,
...     height=height,
...     width=width,
...     segment_frame_length=77,  # Frame length of each inference segment
...     guidance_scale=1.0,
...     num_inference_steps=20,
...     mode="animate",
... ).frames[0]
>>> export_to_video(output, "output_animation.mp4", fps=30)

>>> # Replacement mode: Replace a character in the background video
>>> # Requires additional background_video and mask_video inputs
>>> background_video = load_video("path/to/background_video.mp4")
>>> mask_video = load_video("path/to/mask_video.mp4")  # Black areas preserved, white areas generated
>>> output = pipe(
...     image=image,
...     pose_video=pose_video,
...     face_video=face_video,
...     background_video=background_video,
...     mask_video=mask_video,
...     prompt=prompt,
...     height=height,
...     width=width,
...     segment_frame_length=77,  # Frame length of each inference segment
...     guidance_scale=1.0,
...     num_inference_steps=20,
...     mode="replace",
... ).frames[0]
>>> export_to_video(output, "output_replacement.mp4", fps=30)

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.

pad_video_frames

< >

( frames: list[typing.Any]num_target_frames: int )

Remplit un tableau de type vidéo frames jusqu'à num_target_frames en utilisant une stratégie de type « reflect ». La dimension des images est supposée être la première dimension. Dans le cas 1D, nous pouvons visualiser cette stratégie comme suit :

pad_video_frames([1, 2, 3, 4, 5], 10) -> [1, 2, 3, 4, 5, 4, 3, 2, 1, 2]

WanPipelineOutput

classe diffusers.pipelines.wan.pipeline_output.WanPipelineOutput

< >

( 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 Wan.

Update on GitHub