Diffusers documentation

Wan

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

and get access to the augmented documentation experience

to get started

LoRA

Wan

Wan-2.1 del equipo Wan.

Este informe presenta Wan, una suite integral y abierta de modelos de base para video diseñada para ampliar los límites de la generación de video. Basada en el paradigma principal de transformadores de difusión, Wan logra avances significativos en las capacidades generativas mediante una serie de innovaciones, que incluyen nuestro nuevo VAE, estrategias de preentrenamiento escalables, curación de datos a gran escala y métricas de evaluación automatizadas. Estas contribuciones mejoran colectivamente el rendimiento y la versatilidad del modelo. Específicamente, Wan se caracteriza por cuatro funciones clave: Rendimiento líder: El modelo de 14B de Wan, entrenado en un vasto conjunto de datos que comprende miles de millones de imágenes y videos, demuestra las leyes de escalado de la generación de video con respecto tanto al tamaño de los datos como al del modelo. Supera consistentemente a los modelos de código abierto existentes y a las soluciones comerciales de última generación en múltiples benchmarks internos y externos, demostrando una superioridad de rendimiento clara y significativa. Integralidad: Wan ofrece dos modelos capaces, es decir, de 1.3B y 14B parámetros, para la eficiencia y la efectividad, respectivamente. También cubre múltiples aplicaciones de nivel inferior, incluyendo la generación de video a partir de imágenes, la edición de video guiada por instrucciones y la generación de video personal, abarcando hasta ocho tareas. Eficiencia de grado de consumo: El modelo de 1.3B demuestra una eficiencia de recursos excepcional, requiriendo solo 8.19 GB de VRAM, lo que lo hace compatible con una amplia gama de GPUs de grado de consumo. Apertura: Ponemos en código abierto toda la serie de Wan, incluido el código fuente y todos los modelos, con el objetivo de fomentar el crecimiento de la comunidad de generación de video. Esta apertura busca ampliar significativamente las posibilidades creativas de la producción de video en la industria y proporcionar a la academia modelos de base de video de alta calidad. Todo el código y los modelos están disponibles en esta URL https.

Puedes encontrar todos los puntos de control originales de Wan2.1 bajo la organización Wan-AI.

Los siguientes modelos de Wan son compatibles con Diffusers:

Haz clic en los modelos Wan en la barra lateral derecha para ver más ejemplos de generación de video.

Generación de texto a video

El siguiente ejemplo demuestra cómo generar un video a partir de texto optimizado para la memoria o la velocidad de inferencia.

Memoria de T2V
Velocidad de inferencia de T2V

Consulte la guía Reduce memory usage para obtener más detalles sobre las diversas técnicas de ahorro de memoria.

El modelo de texto a video Wan2.1 a continuación requiere ~13GB 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)

Generación de video a partir de los primeros y últimos fotogramas

El siguiente ejemplo demuestra cómo usar el pipeline de imagen a video para generar un video utilizando una descripción de texto, un fotograma inicial y un fotograma final.

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

Generación controlable de cualquier cosa a video

Wan VACE admite diversas técnicas de generación que logran una generación de video controlable. Algunas de las capacidades incluyen:

  • Control a Video (Profundidad, Pose, Boceto, Flujo, Escala de grises, Garabato, Diseño, Caja delimitadora, etc.). Biblioteca recomendada para preprocesar videos y obtener videos de control: huggingface/controlnet_aux
  • Imagen/Video a Video (primer fotograma, último fotograma, clip inicial, clip final, clips aleatorios)
  • Inpainting y Outpainting
  • Sujeto al video (caras, objetos, personajes, etc.)
  • Composición a video (referencia cualquier cosa, anima cualquier cosa, intercambia cualquier cosa, expande cualquier cosa, mueve cualquier cosa, etc.)

Los fragmentos de código disponibles en esta solicitud de extracción (pull request) demuestran algunos ejemplos de cómo se pueden generar videos con señales de controlabilidad.

La regla general a tener en cuenta al preparar las entradas para el pipeline de VACE es que las imágenes de entrada, o los fotogramas de un video que se desee utilizar para el condicionamiento, deben tener una máscara correspondiente de color negro. La máscara negra indica que el modelo no generará nuevo contenido para esa área, y solo utilizará esas partes para condicionar el proceso de generación. Para las partes o fotogramas que el modelo debe generar, la máscara debe ser de color blanco.

Wan-Animate: Animación y reemplazo de personajes unificados con replicación integral

Wan-Animate del equipo Wan.

Presentamos Wan-Animate, un marco unificado para la animación y el reemplazo de personajes. Dada una imagen de un personaje y un video de referencia, Wan-Animate puede animar al personaje replicando con precisión las expresiones y los movimientos del personaje en el video para generar videos de personajes de alta fidelidad. Alternativamente, puede integrar el personaje animado en el video de referencia para reemplazar al personaje original, replicando la iluminación y el tono de color de la escena para lograr una integración ambiental sin costuras. Wan-Animate se basa en el modelo Wan. Para adaptarlo a tareas de animación de personajes, empleamos un paradigma de entrada modificado para diferenciar entre las condiciones de referencia y las regiones para la generación. Este diseño unifica múltiples tareas en una representación simbólica común. Utilizamos señales de esqueleto alineadas espacialmente para replicar el movimiento corporal y características faciales implícitas extraídas de las imágenes de origen para reencarnar las expresiones, lo que permite la generación de videos de personajes con alta controlabilidad y expresividad. Además, para mejorar la integración ambiental durante el reemplazo de personajes, desarrollamos un Relighting LoRA auxiliar. Este módulo preserva la consistencia de la apariencia del personaje mientras aplica la iluminación y el tono de color ambientales apropiados. Los resultados experimentales demuestran que Wan-Animate alcanza un rendimiento líder en su categoría. Nos comprometemos a publicar en código abierto los pesos del modelo y su código fuente.

La página del proyecto: https://humanaigc.github.io/wan-animate

Este modelo fue aportado principalmente por M. Tolga Cangöz.

Uso

El pipeline Wan-Animate admite dos modos de operación:

  1. Modo de animación (predeterminado): Anima una imagen de un personaje basándose en el movimiento y la expresión de los videos de referencia
  2. Modo de reemplazo: Reemplaza un personaje en un video de fondo con un nuevo personaje, preservando la escena
Prerrequisitos

Antes de usar el pipeline, debe preprocesar su video de referencia para extraer:

  • Video de pose: Contiene puntos clave esqueléticos que representan el movimiento corporal
  • Video facial: Contiene representaciones de rasgos faciales para el control de la expresión

Para el modo de reemplazo, también necesitas:

  • Video de fondo: El video original que contiene la escena
  • Máscara de video: una máscara que indica dónde generar contenido (blanco) frente a dónde conservar el original (negro)

No se deben usar videos sin procesar para entradas como pose_video, ya que el pipeline espera que estén preprocesados para extraer la información adecuada. Los scripts de preprocesamiento para preparar estas entradas están disponibles en el repositorio original de Wan-Animate. La integración de estos pasos de preprocesamiento en Diffusers está prevista para una versión futura.

El siguiente ejemplo demuestra cómo usar el pipeline Wan-Animate:

Modo de animación
Modo de reemplazo
Opciones avanzadas
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)

Parámetros clave

  • mode: Elija entre "animate" (predeterminado) o "replace"
  • prev_segment_conditioning_frames: Número de fotogramas para la guía temporal (se recomienda 1 o 5). Usar 5 proporciona una mejor consistencia temporal, pero requiere más memoria
  • guidance_scale: Controla qué tan de cerca sigue la salida el prompt de texto. Valores más altos (5-7) producen resultados más alineados con el prompt. Para Wan-Animate, CFG está deshabilitado por defecto (guidance_scale=1.0), pero se puede habilitar para soportar prompts negativos y un control más fino sobre las expresiones faciales. (Tenga en cuenta que CFG solo apuntará al prompt de texto y al condicionamiento facial.)

Notas

  • Wan2.1 admite LoRAs con load_lora_weights().

    Mostrar código de ejemplo
    # 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 y AutoencoderKLWan admiten la carga desde archivos individuales con from_single_file().

    Mostrar código de ejemplo
    # 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
    )
  • Establezca el dtype de AutoencoderKLWan en torch.float32 para obtener una mejor calidad de decodificación.

  • El número de fotogramas por segundo (fps) o k debe calcularse mediante 4 * k + 1.

  • Pruebe valores de shift más bajos (2.0 a 5.0) para videos de menor resolución y valores de shift más altos (7.0 a 12.0) para imágenes de mayor resolución.

  • Wan 2.1 y 2.2 admiten el uso de LightX2V LoRAs para acelerar la inferencia. Su uso en Wan 2.2 es ligeramente más complejo. Consulta este fragmento de código para obtener más información.

  • Wan 2.2 tiene dos denoisers. Por defecto, los LoRAs solo se cargan en el primer denoiser. Se puede establecer load_into_transformer_2=True para cargar los LoRAs en el segundo denoiser. Consulte los ejemplos este y este para obtener más información.

WanPipeline

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

Parámetros

  • tokenizer (T5Tokenizer) — Tokenizer de T5, específicamente la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, concretamente la variante google/umt5-xxl.
  • transformer (WanTransformer3DModel) — Transformer condicional para desruidar los latentes de entrada.
  • scheduler (UniPCMultistepScheduler) — Un scheduler para usar en combinación con transformer para desruidar los latentes de imagen codificados.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
  • transformer_2 (WanTransformer3DModel, opcional) — Transformer condicional para desruidar los latentes de entrada durante la etapa de bajo ruido. Si se proporciona, habilita la desruidación en dos etapas, donde transformer gestiona las etapas de alto ruido y transformer_2 gestiona las etapas de bajo ruido. Si no se proporciona, solo se utiliza transformer.
  • boundary_ratio (float, opcional, valor predeterminado None) — Proporción de los pasos de tiempo totales que se utilizará como límite para cambiar entre los transformers en el desruido de dos etapas. El paso de tiempo de límite real se calcula como boundary_ratio * num_train_timesteps. Cuando se proporciona, transformer maneja los pasos de tiempo >= boundary_timestep y transformer_2 maneja los pasos de tiempo < boundary_timestep. Si es None, solo se utiliza transformer para todo el proceso de desruido.

Pipeline para la generación de texto a video usando Wan.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, 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

Parámetros

  • prompt (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, pase prompt_embeds en su lugar.
  • negative_prompt (str o list[str], opcional) — El prompt o los prompts a evitar durante la generación de imágenes. Si no se define, pase negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (guidance_scale < 1).
  • height (int, por defecto 480) — La altura en píxeles de la imagen generada.
  • width (int, por defecto 832) — El ancho en píxeles de la imagen generada.
  • num_frames (int, por defecto 81) — El número de fotogramas en el video generado.
  • num_inference_steps (int, por defecto 50) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
  • guidance_scale (float, por defecto 5.0) — Escala de guía definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2 de Imagen Paper. La escala de guía se activa al establecer guidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas al texto de prompt, generalmente a costa de una menor calidad de imagen.
  • guidance_scale_2 (float, opcional, valor predeterminado None) — Escala de guía para el transformer de la etapa de bajo ruido (transformer_2). Si None y el boundary_ratio de la pipeline no es None, utiliza el mismo valor que guidance_scale. Solo se usa cuando transformer_2 y el boundary_ratio de la pipeline no son None.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generan por indicación.
  • generator (torch.Generator o list[torch.Generator], opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, negative_prompt_embeds se generan a partir del argumento de entrada negative_prompt.
  • output_type (str, opcional, por defecto "np") — El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un WanPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor definido en self.processor dentro de diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) — Una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de desruido durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opcional) — La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrás incluir variables listadas en el atributo ._callback_tensor_inputs de tu clase de pipeline.
  • max_sequence_length (int, por defecto 512) — La longitud máxima de secuencia del codificador de texto. Si el prompt es más largo que esto, se truncará. Si el prompt es más corto, se rellenará hasta esta longitud.

Devuelve

~WanPipelineOutput o tuple

Si return_dict es True, se devuelve WanPipelineOutput; en caso contrario, se devuelve una tuple donde el primer elemento es una lista con las imágenes generadas y el segundo elemento es una lista de bool que indica si la imagen generada correspondiente contiene contenido “not-safe-for-work” (nsfw).

La función de llamada para el pipeline de generación.

Ejemplos:

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

Parámetros

  • prompt (str o list[str], opcional) — prompt a codificar
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • do_classifier_free_guidance (bool, opcional, valor predeterminado True) — Si se debe usar classifier free guidance o no.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • device — (torch.device, opcional): dispositivo de torch
  • dtype — (torch.dtype, opcional): dtype de torch

Codifica el prompt en estados ocultos del codificador de texto.

WanImageToVideoPipeline

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

Parámetros

  • tokenizer (T5Tokenizer) — Tokenizer de T5, específicamente la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, concretamente la variante google/umt5-xxl.
  • image_encoder (CLIPVisionModel) — CLIP, concretamente la variante clip-vit-huge-patch14.
  • transformer (WanTransformer3DModel) — Transformer condicional para desruidar los latentes de entrada.
  • scheduler (UniPCMultistepScheduler) — Un scheduler para usar en combinación con transformer para desruidar los latentes de imagen codificados.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
  • transformer_2 (WanTransformer3DModel, opcional) — Transformer condicional para desruidar los latentes de entrada durante la etapa de bajo ruido. En la desruidado de dos etapas, transformer gestiona las etapas de alto ruido y transformer_2 gestiona las etapas de bajo ruido. Si no se proporciona, solo se utiliza transformer.
  • boundary_ratio (float, opcional, valor predeterminado None) — Proporción de los pasos de tiempo totales que se utilizará como límite para cambiar entre los transformers en el desruido de dos etapas. El paso de tiempo de límite real se calcula como boundary_ratio * num_train_timesteps. Cuando se proporciona, transformer maneja los pasos de tiempo >= boundary_timestep y transformer_2 maneja los pasos de tiempo < boundary_timestep. Si es None, solo se utiliza transformer para todo el proceso de desruido.

Pipeline para la generación de video a partir de imágenes usando Wan.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, 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

Parámetros

  • image (PipelineImageInput) — La imagen de entrada para condicionar la generación. Debe ser una imagen, una lista de imágenes o un torch.Tensor.
  • last_image (torch.Tensor, opcional) — Fotograma final opcional para condicionar el video generado. Cuando se proporciona, el modelo interpola entre image (primer fotograma) y last_image (último fotograma).
  • prompt (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasar prompt_embeds en su lugar.
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • height (int, por defecto 480) — La altura del video generado.
  • width (int, por defecto 832) — El ancho del video generado.
  • num_frames (int, por defecto 81) — El número de fotogramas en el video generado.
  • num_inference_steps (int, por defecto 50) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
  • guidance_scale (float, por defecto 5.0) — Escala de guía definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2 de Imagen Paper. La escala de guía se activa al establecer guidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas al texto de prompt, generalmente a costa de una menor calidad de imagen.
  • guidance_scale_2 (float, opcional, valor predeterminado None) — Escala de guía para el transformer de la etapa de bajo ruido (transformer_2). Si None y el boundary_ratio de la pipeline no es None, utiliza el mismo valor que guidance_scale. Solo se usa cuando transformer_2 y el boundary_ratio de la pipeline no son None.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generan por indicación.
  • generator (torch.Generator o list[torch.Generator], opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada negative_prompt.
  • image_embeds (torch.Tensor, opcional) — Incrustaciones de imagen pregeneradas. Se pueden utilizar para ajustar fácilmente las entradas de imagen (ponderación). Si no se proporcionan, las incrustaciones de imagen se generan a partir del argumento de entrada image.
  • output_type (str, opcional, por defecto "np") — El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un WanPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor definido en self.processor dentro de diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) — Una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de desruido durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opcional) — La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrás incluir variables listadas en el atributo ._callback_tensor_inputs de tu clase de pipeline.
  • max_sequence_length (int, por defecto 512) — La longitud máxima de secuencia del codificador de texto. Si el prompt es más largo que esto, se truncará. Si el prompt es más corto, se rellenará hasta esta longitud.

Devuelve

~WanPipelineOutput o tuple

Si return_dict es True, se devuelve WanPipelineOutput; en caso contrario, se devuelve una tuple donde el primer elemento es una lista con las imágenes generadas y el segundo elemento es una lista de bool que indica si la imagen generada correspondiente contiene contenido “not-safe-for-work” (nsfw).

La función de llamada para el pipeline de generación.

Ejemplos:

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

Parámetros

  • prompt (str o list[str], opcional) — prompt a codificar
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • do_classifier_free_guidance (bool, opcional, valor predeterminado True) — Si se debe usar classifier free guidance o no.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • device — (torch.device, opcional): dispositivo de torch
  • dtype — (torch.dtype, opcional): dtype de torch

Codifica el prompt en estados ocultos del codificador de texto.

WanVACEPipeline

clase diffusers.WanVACEPipeline

< >

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

Parámetros

  • tokenizer (T5Tokenizer) — Tokenizer de T5, específicamente la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, concretamente la variante google/umt5-xxl.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
  • scheduler (UniPCMultistepScheduler) — Un scheduler para usar en combinación con transformer para desruidar los latentes de imagen codificados.
  • transformer (WanVACETransformer3DModel, opcional) — Transformer condicional para desruidar los latentes de entrada durante la etapa de ruido alto. En el desruido de dos etapas, transformer gestiona las etapas de ruido alto y transformer_2 gestiona las etapas de ruido bajo. Debe proporcionarse al menos uno de transformer o transformer_2.
  • transformer_2 (WanVACETransformer3DModel, opcional) — Transformer condicional para desruidar los latentes de entrada durante la etapa de bajo ruido. En el desruido de dos etapas, transformer gestiona las etapas de alto ruido y transformer_2 gestiona las etapas de bajo ruido. Debe proporcionarse al menos uno de transformer o transformer_2.
  • boundary_ratio (float, opcional, valor predeterminado None) — Proporción de los pasos de tiempo totales que se utilizará como límite para cambiar entre los transformers en el desruido de dos etapas. El paso de tiempo de límite real se calcula como boundary_ratio * num_train_timesteps. Cuando se proporciona, transformer gestiona los pasos de tiempo >= boundary_timestep y transformer_2 gestiona los pasos de tiempo < boundary_timestep. Si es None, solo se utiliza el transformer disponible para todo el proceso de desruido.

Pipeline para generación controlable usando Wan.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, 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

Parámetros

  • prompt (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasar prompt_embeds en su lugar.
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • video (list[PIL.Image.Image], opcional) — El video o videos de entrada que se usarán como punto de partida para la generación. El video debe ser una lista de imágenes PIL, un array de numpy o un tensor de torch. Actualmente, el pipeline solo admite generar un video a la vez.
  • mask (list[PIL.Image.Image], opcional) — La máscara de entrada define qué regiones del video se usan como condición y cuáles se generan. Las áreas negras de la máscara indican regiones de condicionamiento, mientras que las áreas blancas indican regiones para la generación. La máscara debe ser una lista de imágenes PIL, un array de numpy o un tensor de torch. Actualmente admite la generación de un solo video a la vez.
  • reference_images (list[PIL.Image.Image], opcional) — Una lista de una o más imágenes de referencia como condicionamiento adicional para la generación. Por ejemplo, si intentas hacer inpainting de un video para cambiar el personaje, puedes pasar aquí imágenes de referencia del nuevo personaje. Consulta los ejemplos de Diffusers y la guía de usuario original para obtener la lista completa de tareas y casos de uso admitidos.
  • conditioning_scale (float, list[float], torch.Tensor, por defecto 1.0) — La escala de condicionamiento que se aplicará al añadir el flujo latente de condicionamiento de control al flujo latente de desruido en cada capa de control del modelo. Si se proporciona un float, se aplicará de forma uniforme a todas las capas. Si se proporciona una lista o un tensor, debe tener la misma longitud que el número de capas de control del modelo (len(transformer.config.vace_layers)).
  • height (int, por defecto 480) — La altura en píxeles de la imagen generada.
  • width (int, por defecto 832) — El ancho en píxeles de la imagen generada.
  • num_frames (int, por defecto 81) — El número de fotogramas en el video generado.
  • num_inference_steps (int, por defecto 50) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
  • guidance_scale (float, por defecto 5.0) — Escala de guía definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2 de Imagen Paper. La escala de guía se activa al establecer guidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas al texto de prompt, generalmente a costa de una menor calidad de imagen.
  • guidance_scale_2 (float, opcional, valor predeterminado None) — Escala de guía para el transformer de la etapa de bajo ruido (transformer_2). Si None y el boundary_ratio de la pipeline no es None, utiliza el mismo valor que guidance_scale. Solo se usa cuando transformer_2 y el boundary_ratio de la pipeline no son None.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generan por indicación.
  • generator (torch.Generator o list[torch.Generator], opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, negative_prompt_embeds se generan a partir del argumento de entrada negative_prompt.
  • output_type (str, opcional, por defecto "np") — El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un WanPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor definido en self.processor dentro de diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) — Una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de desruido durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opcional) — La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrás incluir variables listadas en el atributo ._callback_tensor_inputs de tu clase de pipeline.
  • max_sequence_length (int, por defecto 512) — La longitud máxima de secuencia del codificador de texto. Si el prompt es más largo que esto, se truncará. Si el prompt es más corto, se rellenará hasta esta longitud.

Devuelve

~WanPipelineOutput o tuple

Si return_dict es True, se devuelve WanPipelineOutput; en caso contrario, se devuelve una tuple donde el primer elemento es una lista con las imágenes generadas y el segundo elemento es una lista de bool que indica si la imagen generada correspondiente contiene contenido “not-safe-for-work” (nsfw).

La función de llamada para el pipeline de generación.

Ejemplos:

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

Parámetros

  • prompt (str o list[str], opcional) — prompt a codificar
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • do_classifier_free_guidance (bool, opcional, valor predeterminado True) — Si se debe usar classifier free guidance o no.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • device — (torch.device, opcional): dispositivo de torch
  • dtype — (torch.dtype, opcional): dtype de torch

Codifica el prompt en estados ocultos del codificador de texto.

WanVideoToVideoPipeline

clase diffusers.WanVideoToVideoPipeline

< >

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

Parámetros

  • tokenizer (T5Tokenizer) — Tokenizer de T5, específicamente la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, concretamente la variante google/umt5-xxl.
  • transformer (WanTransformer3DModel) — Transformer condicional para desruidar los latentes de entrada.
  • scheduler (UniPCMultistepScheduler) — Un scheduler para usar en combinación con transformer para desruidar los latentes de imagen codificados.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.

Pipeline para la generación de video a video usando Wan.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, 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

Parámetros

  • video (list[PIL.Image.Image]) — El video de entrada utilizado como punto de partida para la generación de video a video. El video debe proporcionarse como una lista de imágenes PIL, un array de numpy o un tensor de torch.
  • prompt (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasar prompt_embeds en su lugar.
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • height (int, por defecto 480) — La altura en píxeles de la imagen generada.
  • width (int, por defecto 832) — El ancho en píxeles de la imagen generada.
  • num_inference_steps (int, por defecto 50) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
  • timesteps (list[int], opcional) — Pasos de tiempo personalizados para usar en el proceso de desruido con programadores que admiten un argumento timesteps en su método set_timesteps. Si no se define, se usará el comportamiento predeterminado cuando se pase num_inference_steps. Debe estar en orden descendente.
  • guidance_scale (float, por defecto 5.0) — Escala de guía definida en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2 de Imagen Paper. La escala de guía se activa al establecer guidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas al texto de prompt, generalmente a costa de una menor calidad de imagen.
  • strength (float, por defecto 0.8) — Un valor de strength más alto produce más diferencias entre la imagen original y el video generado.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generan por indicación.
  • generator (torch.Generator o list[torch.Generator], opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, negative_prompt_embeds se generan a partir del argumento de entrada negative_prompt.
  • output_type (str, opcional, por defecto "np") — El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un WanPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor definido en self.processor dentro de diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) — Una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de desruido durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (list, opcional) — La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrás incluir variables listadas en el atributo ._callback_tensor_inputs de tu clase de pipeline.
  • max_sequence_length (int, por defecto 512) — La longitud máxima de secuencia del codificador de texto. Si el prompt es más largo que esto, se truncará. Si el prompt es más corto, se rellenará hasta esta longitud.

Devuelve

~WanPipelineOutput o tuple

Si return_dict es True, se devuelve WanPipelineOutput; en caso contrario, se devuelve una tuple donde el primer elemento es una lista con las imágenes generadas y el segundo elemento es una lista de bool que indica si la imagen generada correspondiente contiene contenido “not-safe-for-work” (nsfw).

La función de llamada para el pipeline de generación.

Ejemplos:

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

Parámetros

  • prompt (str o list[str], opcional) — prompt a codificar
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • do_classifier_free_guidance (bool, opcional, valor predeterminado True) — Si se debe usar classifier free guidance o no.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • device — (torch.device, opcional): dispositivo de torch
  • dtype — (torch.dtype, opcional): dtype de torch

Codifica el prompt en estados ocultos del codificador de texto.

WanAnimatePipeline

clase diffusers.WanAnimatePipeline

< >

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

Parámetros

  • tokenizer (T5Tokenizer) — Tokenizer de T5, específicamente la variante google/umt5-xxl.
  • text_encoder (T5EncoderModel) — T5, concretamente la variante google/umt5-xxl.
  • image_encoder (CLIPVisionModel) — CLIP, concretamente la variante clip-vit-huge-patch14.
  • transformer (WanAnimateTransformer3DModel) — Transformer condicional para desruidar los latentes de entrada.
  • scheduler (UniPCMultistepScheduler) — Un scheduler para usar en combinación con transformer para desruidar los latentes de imagen codificados.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
  • image_processor (CLIPImageProcessor) — Procesador de imágenes para preprocesar las imágenes antes de codificarlas.

Pipeline para la animación y el reemplazo unificados de personajes usando Wan-Animate.

WanAnimatePipeline toma como entrada una imagen de un personaje, un video de poses y un video de rostro, y genera un video en dos

  1. Modo de animación: El modelo genera un video de la imagen del personaje que imita el movimiento humano de los videos de entrada de pose y rostro. El personaje se anima en función de los controles de movimiento proporcionados, creando un nuevo video animado del personaje.

  2. Modo de reemplazo: el modelo reemplaza un personaje en un video de fondo con la imagen de personaje proporcionada, utilizando los videos de pose y rostro para el control del movimiento. Este modo requiere las entradas adicionales background_video y mask_video. El video de máscara debe tener regiones negras donde se debe preservar el contenido original y regiones blancas donde se debe generar el nuevo personaje.

Este modelo hereda de DiffusionPipeline. Consulta la documentación de la clase superior para los métodos genéricos implementados en todas las tuberías (descarga, guardado, ejecución en un dispositivo específico, etc.).

El pipeline también hereda los siguientes métodos de carga:

__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

Parámetros

  • image (PipelineImageInput) — La imagen de entrada del personaje sobre la que condicionar la generación. Debe ser una imagen, una lista de imágenes o un torch.Tensor.
  • pose_video (list[PIL.Image.Image]) — El video de poses de entrada para condicionar la generación. Debe ser una lista de imágenes PIL.
  • face_video (list[PIL.Image.Image]) — El video de rostro de entrada para condicionar la generación. Debe ser una lista de imágenes PIL.
  • background_video (list[PIL.Image.Image], opcional) — Cuando el modo es "replace", el video de fondo de entrada sobre el que condicionar la generación. Debe ser una lista de imágenes PIL.
  • mask_video (list[PIL.Image.Image], opcional) — Cuando el modo es "replace", el video de máscara de entrada para condicionar la generación. Debe ser una lista de imágenes PIL.
  • prompt (str o list[str], opcional) — El prompt o los prompts para guiar la generación de la imagen. Si no se define, hay que pasar prompt_embeds en su lugar.
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • mode (str, por defecto "animation") — El modo de la generación. Elige entre "animate" y "replace".
  • prev_segment_conditioning_frames (int, por defecto 1) — El número de fotogramas del segmento de video anterior que se utilizarán para la guía temporal. Se recomienda que sea 1 o 5. En general, debe ser 4N + 1, donde N es un entero no negativo.
  • motion_encode_batch_size (int, opcional) — El tamaño de lote para la codificación por lotes del video facial mediante el codificador de movimiento. Esto permite compensar la velocidad de inferencia con un menor uso de memoria configurando un tamaño de lote más pequeño. Si no se establece, el valor predeterminado será self.transformer.config.motion_encoder_batch_size.
  • height (int, por defecto 720) — La altura del video generado.
  • width (int, por defecto 1280) — El ancho del video generado.
  • segment_frame_length (int, por defecto 77) — El número de fotogramas en cada segmento de video generado. El total de fotogramas del video generado será igual al número de fotogramas de pose_video; generaremos el video en segmentos hasta alcanzar esta longitud. En general, debe ser 4N + 1, donde N es un entero no negativo.
  • num_inference_steps (int, por defecto 20) — El número de pasos de desruido. Más pasos de desruido suelen conducir a una imagen de mayor calidad a costa de una inferencia más lenta.
  • guidance_scale (float, por defecto 1.0) — Escala de guía tal como se define en Classifier-Free Diffusion Guidance. guidance_scale se define como w de la ecuación 2 del Imagen Paper. La escala de guía se activa al establecer guidance_scale > 1. Una escala de guía más alta fomenta la generación de imágenes estrechamente vinculadas al texto prompt, generalmente a costa de una menor calidad de imagen. Por defecto, no se utiliza CFG en la inferencia de Wan Animate.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de imágenes que se generan por indicación.
  • generator (torch.Generator o list[torch.Generator], opcional) — Un torch.Generator para hacer que la generación sea determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados muestreados de una distribución gaussiana, que se utilizarán como entradas para la generación de imágenes. Se pueden usar para ajustar la misma generación con diferentes prompts. Si no se proporciona, se genera un tensor de latentes mediante muestreo usando el generator aleatorio suministrado.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto (ponderación del prompt). Si no se proporcionan, las incrustaciones de texto se generan a partir del argumento de entrada negative_prompt.
  • image_embeds (torch.Tensor, opcional) — Incrustaciones de imagen pregeneradas. Se pueden utilizar para ajustar fácilmente las entradas de imagen (ponderación). Si no se proporcionan, las incrustaciones de imagen se generan a partir del argumento de entrada image.
  • output_type (str, opcional, por defecto "np") — El formato de salida de la imagen generada. Elija entre PIL.Image o np.array.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un WanPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Un diccionario de kwargs que, si se especifica, se pasa al AttentionProcessor definido en self.processor dentro de diffusers.models.attention_processor.
  • callback_on_step_end (Callable, PipelineCallback, MultiPipelineCallbacks, opcional) — Una función o una subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de desruido durante la inferencia, con los siguientes argumentos: callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int, callback_kwargs: Dict). callback_kwargs incluirá una lista de todos los tensores especificados por callback_on_step_end_tensor_inputs.
  • callback_on_step_end_tensor_inputs (List, opcional) — La lista de entradas de tensor para la función callback_on_step_end. Los tensores especificados en la lista se pasarán como argumento callback_kwargs. Solo podrá incluir variables listadas en el atributo ._callback_tensor_inputs de su clase de pipeline.
  • max_sequence_length (int, por defecto 512) — La longitud máxima de secuencia del codificador de texto. Si el prompt es más largo que esto, se truncará. Si el prompt es más corto, se rellenará hasta esta longitud.

Devuelve

~WanPipelineOutput o tuple

Si return_dict es True, se devuelve WanPipelineOutput; en caso contrario, se devuelve una tuple donde el primer elemento es una lista con las imágenes generadas y el segundo elemento es una lista de bool que indica si la imagen generada correspondiente contiene contenido “not-safe-for-work” (nsfw).

La función de llamada para el pipeline de generación.

Ejemplos:

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

Parámetros

  • prompt (str o list[str], opcional) — prompt a codificar
  • negative_prompt (str o list[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía (es decir, se ignora si guidance_scale es menor que 1).
  • do_classifier_free_guidance (bool, opcional, valor predeterminado True) — Si se debe usar classifier free guidance o no.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de videos que deben generarse por prompt. Dispositivo torch en el que colocar las incrustaciones resultantes
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. ponderación de prompts. Si no se proporcionan, las incrustaciones de texto se generarán a partir del argumento de entrada prompt.
  • negative_prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto negativo pregeneradas. Se pueden usar para ajustar fácilmente las entradas de texto, p. ej. el ponderado del prompt. Si no se proporciona, negative_prompt_embeds se generará a partir del argumento de entrada negative_prompt.
  • device — (torch.device, opcional): dispositivo de torch
  • dtype — (torch.dtype, opcional): dtype de torch

Codifica el prompt en estados ocultos del codificador de texto.

pad_video_frames

< >

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

Rellena un video con aspecto de matriz frames hasta num_target_frames usando una estrategia similar a “reflect”. Se asume que la dimensión de los fotogramas es la primera dimensión. En el caso 1D, podemos visualizar esta estrategia de la siguiente manera:

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

WanPipelineOutput

clase diffusers.pipelines.wan.pipeline_output.WanPipelineOutput

< >

( frames: Tensor )

Parámetros

  • frames (torch.Tensor, np.ndarray o list[list[PIL.Image.Image]]) — lista de salidas de video. Puede ser una lista anidada de longitud batch_size, donde cada sublista contiene secuencias de imágenes PIL desruidas de longitud num_frames. También puede ser un array de NumPy o un tensor de Torch de forma (batch_size, num_frames, channels, height, width).

Clase de salida para las tuberías de Wan.

Update on GitHub