Diffusers documentation

Motif-Video

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

and get access to the augmented documentation experience

to get started

Motif-Video

Informe técnico

Motif-Video es un difusor transformer de 2B parámetros diseñado para la generación de texto a video e imagen a video. Cuenta con una arquitectura de tres etapas con 12 capas de decodificador de doble flujo + 16 de flujo único + 8 capas de decodificador DDT, Shared Cross-Attention para una alineación estable de texto y video en secuencias de video largas, un codificador de texto T5Gemma2 y rectified flow matching para la predicción de velocidad.

Motif-Video architecture

Generación de texto a video

Use MotifVideoPipeline para la generación de video a partir de texto:

import torch
from diffusers import MotifVideoPipeline
from diffusers.utils import export_to_video


pipe = MotifVideoPipeline.from_pretrained(
    "Motif-Technologies/Motif-Video-2B",
    dtype=torch.bfloat16,
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

prompt = "A woman with long brown hair and light skin smiles at another woman with long blonde hair."
negative_prompt = "worst quality, inconsistent motion, blurry, jittery, distorted"

video = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    width=1280,
    height=736,
    num_frames=121,
    num_inference_steps=50,
).frames[0]
export_to_video(video, "output.mp4", fps=24)

Generación de video a partir de imagen

Use MotifVideoImage2VideoPipeline para la generación de video a partir de una imagen:

import torch
from diffusers import MotifVideoImage2VideoPipeline
from diffusers.utils import export_to_video, load_image


pipe = MotifVideoImage2VideoPipeline.from_pretrained(
    "Motif-Technologies/Motif-Video-2B",
    dtype=torch.bfloat16,
)
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = load_image("input_image.png")
prompt = "A cinematic scene with vivid colors."
negative_prompt = "worst quality, blurry, jittery, distorted"

video = pipe(
    image=image,
    prompt=prompt,
    negative_prompt=negative_prompt,
    width=1280,
    height=736,
    num_frames=121,
    num_inference_steps=50,
).frames[0]
export_to_video(video, "i2v_output.mp4", fps=24)

Inferencia eficiente en memoria

Para GPUs con menos de 30 GB de VRAM (p. ej., RTX 4090), usa el descargado de modelo a CPU:

export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
import torch
from diffusers import MotifVideoPipeline
from diffusers.utils import export_to_video


pipe = MotifVideoPipeline.from_pretrained(
    "Motif-Technologies/Motif-Video-2B",
    dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()

prompt = "A woman with long brown hair and light skin smiles at another woman with long blonde hair."
negative_prompt = "worst quality, inconsistent motion, blurry, jittery, distorted"

video = pipe(
    prompt=prompt,
    negative_prompt=negative_prompt,
    width=1280,
    height=736,
    num_frames=121,
    num_inference_steps=50,
).frames[0]
export_to_video(video, "output.mp4", fps=24)

MotifVideoPipeline

clase diffusers.MotifVideoPipeline

< >

( scheduler: SchedulerMixinvae: AutoencoderKLWantext_encoder: T5Gemma2Encodertokenizer: PreTrainedTokenizerBasetransformer: MotifVideoTransformer3DModelguider: BaseGuidancefeature_extractor: typing.Optional[transformers.models.siglip.image_processing_pil_siglip.SiglipImageProcessorPil] = None )

Parámetros

  • transformer (MotifVideoTransformer3DModel) — Arquitectura de Transformer condicional para desruidar los latentes de video codificados.
  • scheduler (SchedulerMixin) — Un scheduler para usar en combinación con transformer para desruidar los latentes de video codificados. Debe ser una instancia de una clase que herede de SchedulerMixin, como DPMSolverMultistepScheduler. Si no se proporciona, se utiliza el scheduler adjunto al modelo preentrenado.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
  • text_encoder (T5Gemma2Encoder) — Codificador de texto principal para codificar los prompts de texto en embeddings.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer correspondiente al codificador de texto principal.
  • guider (BaseGuidance) — El método de guía a utilizar. Debe ser una instancia de una clase que herede de BaseGuidance, como ClassifierFreeGuidance, AdaptiveProjectedGuidance o SkipLayerGuidance. Si no se proporciona, el valor predeterminado es ClassifierFreeGuidance.

Pipeline para la generación de texto a video usando Motif-Video.

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: typing.Union[str, typing.List[str], NoneType] = Nonenegative_prompt: typing.Union[str, typing.List[str], NoneType] = Noneheight: int = 736width: int = 1280num_frames: int = 121num_inference_steps: int = 50timesteps: typing.Optional[typing.List[int]] = Nonenum_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'pil'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512vae_batch_size: int | None = None ) → ~MotifVideoPipelineOutput or tuple

Parámetros

  • prompt (str o List[str], opcional) — El prompt o prompts para guiar la generación del video. Si no se define, es necesario pasar prompt_embeds.
  • negative_prompt (str o List[str], opcional) — El prompt o prompts que no deben guiar la generación del video. Si no se define, se debe pasar negative_prompt_embeds en su lugar. Se ignora cuando no se usa guía.
  • height (int, por defecto 736) — La altura en píxeles del video generado.
  • width (int, por defecto 1280) — El ancho en píxeles del video generado.
  • num_frames (int, por defecto 121) — El número de fotogramas de vídeo a generar.
  • num_inference_steps (int, opcional, valor predeterminado 50) — El número de pasos de desruido. Más pasos de desruido suelen dar lugar a un video 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.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de vídeos que se generarán por prompt.
  • generator (torch.Generator o List[torch.Generator], opcional) — Objeto(s) de Generator de PyTorch para la generación determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas.
  • prompt_attention_mask (torch.Tensor, opcional) — Máscara de atención pregenerada para las incrustaciones de texto.
  • negative_prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto negativo pregeneradas.
  • negative_prompt_attention_mask (torch.FloatTensor, opcional) — Máscara de atención pregenerada para los embeddings de texto negativos.
  • output_type (str, opcional, valor predeterminado "pil") — El formato de salida del video generado. Elija entre "pil", "np" o "latent".
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un ~MotifVideoPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Argumentos que se pasan al procesador de atención.
  • callback_on_step_end (Callable, opcional) — Una función o subclase de PipelineCallback o MultiPipelineCallbacks que se llama al final de cada paso de desruido.
  • callback_on_step_end_tensor_inputs (List, opcional) — La lista de entradas de tensor para la función callback_on_step_end.
  • max_sequence_length (int, por defecto 512) — Longitud máxima de la secuencia para el tokenizador.
  • vae_batch_size (int, opcional) — Tamaño de lote para la decodificación de VAE. Si se proporciona y el tamaño de lote de los latentes es mayor, la decodificación de VAE se realizará en fragmentos.

Devuelve

~MotifVideoPipelineOutput o tuple

Si return_dict es True, se devuelve ~MotifVideoPipelineOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es una lista de fotogramas de video generados.

La función de llamada para la pipeline de generación de texto a video.

Ejemplos:

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

>>> # Load the Motif-Video pipeline
>>> motif_video_model_id = "Motif-Technologies/Motif-Video-2B"
>>> pipe = MotifVideoPipeline.from_pretrained(motif_video_model_id, torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> prompt = "A woman with long brown hair and light skin smiles at another woman with long blonde hair. The woman with brown hair wears a black jacket and has a small, barely noticeable mole on her right cheek. The camera angle is a close-up, focused on the woman with brown hair's face. The lighting is warm and natural, likely from the setting sun, casting a soft glow on the scene. The scene appears to be real-life footage"
>>> negative_prompt = "worst quality, inconsistent motion, blurry, jittery, distorted"

>>> video = pipe(
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     width=1280,
...     height=736,
...     num_frames=121,
...     num_inference_steps=50,
... ).frames[0]
>>> export_to_video(video, "output.mp4", fps=24)

encode_prompt

< >

( prompt: typing.Union[str, typing.List[str]]negative_prompt: typing.Union[str, typing.List[str], NoneType] = Nonenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 512device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None ) → tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]

Parámetros

  • prompt (str o List[str], opcional) — El prompt o los prompts que se van 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).
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de vídeos que se generan por indicación.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas.
  • 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.
  • prompt_attention_mask (torch.Tensor, opcional) — Máscara de atención pregenerada para las incrustaciones de texto.
  • negative_prompt_attention_mask (torch.Tensor, opcional) — Máscara de atención pregenerada para los embeddings de texto negativos.
  • max_sequence_length (int, por defecto 512) — Longitud máxima de secuencia para el tokenizador.
  • device (torch.device, opcional) — Dispositivo en el que colocar los tensores.
  • dtype (torch.dtype, opcional) — Tipo de datos para los tensores.

Devuelve

tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]

Una tupla que contiene:

  • prompt_embeds: Los embeddings de texto para el prompt positivo
  • negative_prompt_embeds: Los embeddings de texto para el prompt negativo (None si no se usa guía)
  • prompt_attention_mask: La máscara de atención para el prompt positivo
  • negative_prompt_attention_mask: La máscara de atención para el prompt negativo (None si no se usa guía)

Codifica el prompt en estados ocultos del codificador de texto.

MotifVideoImage2VideoPipeline

clase diffusers.MotifVideoImage2VideoPipeline

< >

( scheduler: SchedulerMixinvae: AutoencoderKLWantext_encoder: T5Gemma2Encodertokenizer: PreTrainedTokenizerBasetransformer: MotifVideoTransformer3DModelguider: BaseGuidancefeature_extractor: SiglipImageProcessorPil )

Parámetros

  • transformer (MotifVideoTransformer3DModel) — Arquitectura de Transformer condicional para desruidar los latentes de video codificados.
  • scheduler (SchedulerMixin) — Un scheduler para usar en combinación con transformer para desruidar los latentes de video codificados. Debe ser una instancia de una clase que herede de SchedulerMixin, como DPMSolverMultistepScheduler. Si no se proporciona, se utiliza el scheduler adjunto al modelo preentrenado.
  • vae (AutoencoderKLWan) — Modelo de Autoencoder Variacional (VAE) para codificar y decodificar videos hacia y desde representaciones latentes.
  • text_encoder (T5Gemma2Encoder) — Codificador de texto principal para codificar los prompts de texto en embeddings.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer correspondiente al codificador de texto principal.
  • feature_extractor (SiglipImageProcessor) — Procesador de imágenes para el codificador de visión de SigLIP.
  • guider (BaseGuidance) — El método de guía a utilizar. Debe ser una instancia de una clase que herede de BaseGuidance, como ClassifierFreeGuidance, AdaptiveProjectedGuidance o SkipLayerGuidance. Si no se proporciona, el valor predeterminado es ClassifierFreeGuidance.

Pipeline para la generación de video a partir de imágenes usando Motif-Video con condicionamiento del primer fotograma.

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: typing.Union[str, typing.List[str]]negative_prompt: typing.Union[str, typing.List[str], NoneType] = Noneheight: int = 736width: int = 1280num_frames: int = 121num_inference_steps: int = 50timesteps: typing.Optional[typing.List[int]] = Nonenum_videos_per_prompt: typing.Optional[int] = 1generator: typing.Union[torch.Generator, typing.List[torch.Generator], NoneType] = Nonelatents: typing.Optional[torch.Tensor] = Noneprompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Noneoutput_type: typing.Optional[str] = 'pil'return_dict: bool = Trueattention_kwargs: typing.Optional[typing.Dict[str, typing.Any]] = Nonecallback_on_step_end: typing.Union[typing.Callable[[int, int, typing.Dict], NoneType], diffusers.callbacks.PipelineCallback, diffusers.callbacks.MultiPipelineCallbacks, NoneType] = Nonecallback_on_step_end_tensor_inputs: typing.List[str] = ['latents']max_sequence_length: int = 512 ) → ~MotifVideoPipelineOutput or tuple

Parámetros

  • image (PipelineImageInput) — La imagen de entrada que se usará como primer fotograma para la generación de video.
  • prompt (str o List[str]) — El prompt o prompts para guiar la generación del video.
  • negative_prompt (str o List[str], opcional) — El prompt o prompts que no deben guiar la generación del video.
  • height (int, por defecto 736) — La altura en píxeles del video generado.
  • width (int, por defecto 1280) — El ancho en píxeles del video generado.
  • num_frames (int, por defecto 121) — El número de fotogramas de vídeo a generar.
  • num_inference_steps (int, opcional, valor predeterminado 50) — El número de pasos de desruido.
  • timesteps (List[int], opcional) — Pasos de tiempo personalizados para usar en el proceso de desruido.
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — El número de vídeos que se generarán por prompt.
  • generator (torch.Generator o List[torch.Generator], opcional) — Objeto(s) de Generator de PyTorch para la generación determinista.
  • latents (torch.Tensor, opcional) — Latentes ruidosos pregenerados.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas.
  • prompt_attention_mask (torch.Tensor, opcional) — Máscara de atención pregenerada para las incrustaciones de texto.
  • negative_prompt_embeds (torch.FloatTensor, opcional) — Incrustaciones de texto negativo pregeneradas.
  • negative_prompt_attention_mask (torch.FloatTensor, opcional) — Máscara de atención pregenerada para los embeddings de texto negativos.
  • output_type (str, opcional, valor predeterminado "pil") — El formato de salida del video generado.
  • return_dict (bool, opcional, valor predeterminado True) — Indica si se debe devolver un ~MotifVideoPipelineOutput en lugar de una tupla simple.
  • attention_kwargs (dict, opcional) — Argumentos que se pasan al procesador de atención.
  • callback_on_step_end (Callable, opcional) — Una función o subclase de PipelineCallback que se llama al final de cada paso de desruido.
  • callback_on_step_end_tensor_inputs (List, opcional) — La lista de entradas de tensor para la función callback_on_step_end.
  • max_sequence_length (int, por defecto 512) — Longitud máxima de la secuencia para el tokenizador.

Devuelve

~MotifVideoPipelineOutput o tuple

Si return_dict es True, se devuelve ~MotifVideoPipelineOutput; en caso contrario, se devuelve una tuple cuyo primer elemento es una lista de fotogramas de video generados.

La función de llamada al pipeline para la generación de imagen a video.

Ejemplos:

>>> import torch
>>> from PIL import Image
>>> from diffusers import MotifVideoImage2VideoPipeline
>>> from diffusers.utils import export_to_video, load_image

>>> # Load the Motif-Video image-to-video pipeline
>>> motif_video_model_id = "Motif-Technologies/Motif-Video-2B"
>>> pipe = MotifVideoImage2VideoPipeline.from_pretrained(motif_video_model_id, torch_dtype=torch.bfloat16)
>>> pipe.to("cuda")

>>> # Load an image
>>> image = load_image(
...     "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.png"
... )

>>> prompt = "An astronaut is walking on the moon surface, kicking up dust with each step"
>>> negative_prompt = "worst quality, inconsistent motion, blurry, jittery, distorted"

>>> video = pipe(
...     image=image,
...     prompt=prompt,
...     negative_prompt=negative_prompt,
...     width=1280,
...     height=736,
...     num_frames=121,
...     num_inference_steps=50,
... ).frames[0]
>>> export_to_video(video, "output.mp4", fps=24)

encode_prompt

< >

( prompt: typing.Union[str, typing.List[str]]negative_prompt: typing.Union[str, typing.List[str], NoneType] = Nonenum_videos_per_prompt: int = 1prompt_embeds: typing.Optional[torch.Tensor] = Nonenegative_prompt_embeds: typing.Optional[torch.Tensor] = Noneprompt_attention_mask: typing.Optional[torch.Tensor] = Nonenegative_prompt_attention_mask: typing.Optional[torch.Tensor] = Nonemax_sequence_length: int = 512device: typing.Optional[torch.device] = Nonedtype: typing.Optional[torch.dtype] = None ) → tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]

Parámetros

  • prompt (str o List[str], opcional) — El prompt o los prompts que se van 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).
  • num_videos_per_prompt (int, opcional, valor predeterminado 1) — Número de vídeos que se generan por indicación.
  • prompt_embeds (torch.Tensor, opcional) — Incrustaciones de texto pregeneradas.
  • 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.
  • prompt_attention_mask (torch.Tensor, opcional) — Máscara de atención pregenerada para las incrustaciones de texto.
  • negative_prompt_attention_mask (torch.Tensor, opcional) — Máscara de atención pregenerada para los embeddings de texto negativos.
  • max_sequence_length (int, por defecto 512) — Longitud máxima de secuencia para el tokenizador.
  • device (torch.device, opcional) — Dispositivo en el que colocar los tensores.
  • dtype (torch.dtype, opcional) — Tipo de datos para los tensores.

Devuelve

tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor]

Una tupla que contiene:

  • prompt_embeds: Los embeddings de texto para el prompt positivo
  • negative_prompt_embeds: Los embeddings de texto para el prompt negativo (None si no se usa guía)
  • prompt_attention_mask: La máscara de atención para el prompt positivo
  • negative_prompt_attention_mask: La máscara de atención para el prompt negativo (None si no se usa guía)

Codifica el prompt en estados ocultos del codificador de texto.

MotifVideoPipelineOutput

clase diffusers.MotifVideoPipelineOutput

< >

( 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 Motif-Video.

Update on GitHub