Diffusers documentation
Motif-Video
Motif-Video
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.

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:Trueimport 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
< source >( 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
transformerpara desruidar los latentes de video codificados. Debe ser una instancia de una clase que herede deSchedulerMixin, 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 esClassifierFreeGuidance.
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__
< source >( 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 (
stroList[str], opcional) — El prompt o prompts para guiar la generación del video. Si no se define, es necesario pasarprompt_embeds. - negative_prompt (
stroList[str], opcional) — El prompt o prompts que no deben guiar la generación del video. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía. - height (
int, por defecto736) — La altura en píxeles del video generado. - width (
int, por defecto1280) — El ancho en píxeles del video generado. - num_frames (
int, por defecto121) — 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.GeneratoroList[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 predeterminadoTrue) — 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 dePipelineCallbackoMultiPipelineCallbacksque 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óncallback_on_step_end. - max_sequence_length (
int, por defecto512) — 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
< source >( 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 (
stroList[str], opcional) — El prompt o los prompts que se van a codificar. - negative_prompt (
stroList[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - 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 entradanegative_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 positivonegative_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 positivonegative_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
< source >( 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
transformerpara desruidar los latentes de video codificados. Debe ser una instancia de una clase que herede deSchedulerMixin, 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 esClassifierFreeGuidance.
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__
< source >( 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 (
stroList[str]) — El prompt o prompts para guiar la generación del video. - negative_prompt (
stroList[str], opcional) — El prompt o prompts que no deben guiar la generación del video. - height (
int, por defecto736) — La altura en píxeles del video generado. - width (
int, por defecto1280) — El ancho en píxeles del video generado. - num_frames (
int, por defecto121) — 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.GeneratoroList[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 predeterminadoTrue) — 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 dePipelineCallbackque 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óncallback_on_step_end. - max_sequence_length (
int, por defecto512) — 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
< source >( 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 (
stroList[str], opcional) — El prompt o los prompts que se van a codificar. - negative_prompt (
stroList[str], opcional) — El prompt o prompts que no deben guiar la generación de la imagen. Si no se define, se debe pasarnegative_prompt_embedsen su lugar. Se ignora cuando no se usa guía (es decir, se ignora siguidance_scalees menor que1). - 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 entradanegative_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 positivonegative_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 positivonegative_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
< source >( frames: Tensor )
Parámetros
- frames (
torch.Tensor,np.ndarrayo List[List[PIL.Image.Image]]) — Lista de salidas de video. Puede ser una lista anidada de longitudbatch_size,donde cada sublista contiene secuencias de imágenes PIL desruidas de longitudnum_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.