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.43.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Motif-Video

Rapport technique

Motif-Video est un diffusion transformer de 2 Md de paramètres conçu pour la génération de vidéos à partir de texte et d’images. Il présente une architecture en trois étapes composée de 12 couches dual-stream + 16 couches single-stream + 8 couches de décodeur DDT, de Shared Cross-Attention pour un alignement texte-vidéo stable sous des séquences vidéo longues, d’un encodeur de texte T5Gemma2 et de rectified flow matching pour la prédiction de la vitesse.

Motif-Video architecture

Génération de texte en vidéo

Utilisez MotifVideoPipeline pour la génération de vidéos à partir de texte :

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)

Génération d'images en vidéo

Utilisez MotifVideoImage2VideoPipeline pour la génération de vidéos à partir d’images :

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)

Inférence économe en mémoire

Pour les GPU disposant de moins de 30 Go de VRAM (par exemple, RTX 4090), utilisez le déchargement du modèle sur le 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

classe diffusers.MotifVideoPipeline

< >

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

Paramètres

  • transformer (MotifVideoTransformer3DModel) — Architecture Transformer conditionnelle pour le débruitage des latents vidéo encodés.
  • scheduler (SchedulerMixin) — Un scheduler à utiliser en combinaison avec transformer pour débruyer les latents vidéo encodés. Doit être une instance d’une classe héritant de SchedulerMixin, telle que DPMSolverMultistepScheduler. S’il n’est pas fourni, le scheduler associé au modèle pré-entraîné est utilisé.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
  • text_encoder (T5Gemma2Encoder) — Encodeur de texte principal pour encoder les invites de texte en embeddings.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer correspondant à l'encodeur de texte principal.
  • guider (BaseGuidance) — La méthode de guidage à utiliser. Doit être une instance d'une classe héritant de BaseGuidance, telle que ClassifierFreeGuidance, AdaptiveProjectedGuidance ou SkipLayerGuidance. Si non fourni, la valeur par défaut est ClassifierFreeGuidance.

Pipeline pour la génération de vidéos à partir de texte utilisant Motif-Video.

Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, etc.).

__call__

< >

( prompt: 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

Paramètres

  • prompt (str ou List[str], facultatif) — Le prompt ou les prompts pour guider la génération de la vidéo. S'il n'est pas défini, il faut passer prompt_embeds.
  • negative_prompt (str ou List[str], facultatif) — Le prompt ou les prompts à ne pas utiliser pour guider la génération de la vidéo. S'il n'est pas défini, il faut passer negative_prompt_embeds à la place. Ignoré lorsque le guidage n'est pas utilisé.
  • height (int, par défaut 736) — La hauteur en pixels de la vidéo générée.
  • width (int, par défaut 1280) — La largeur en pixels de la vidéo générée.
  • num_frames (int, par défaut 121) — Le nombre de frames de vidéo à générer.
  • num_inference_steps (int, facultatif, valeur par défaut 50) — Le nombre d’étapes de débruitage. Un plus grand nombre d’étapes de débruitage conduit généralement à une vidéo de meilleure qualité, au prix d’une inférence plus lente.
  • timesteps (List[int], facultatif) — Timesteps personnalisés à utiliser pour le processus de débruitage.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre de vidéos à générer par invite.
  • generator (torch.Generator ou List[torch.Generator], facultatif) — Objet(s) PyTorch Generator pour une génération déterministe.
  • latents (torch.Tensor, facultatif) — Latents bruités pré-générés.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés.
  • prompt_attention_mask (torch.Tensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte.
  • negative_prompt_embeds (torch.FloatTensor, facultatif) — Embeddings de texte négatifs pré-générés.
  • negative_prompt_attention_mask (torch.FloatTensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte négatifs.
  • output_type (str, facultatif, par défaut "pil") — Le format de sortie de la vidéo générée. Choisissez entre "pil", "np" ou "latent".
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un ~MotifVideoPipelineOutput plutôt qu'un simple tuple.
  • attention_kwargs (dict, facultatif) — Arguments transmis au processeur d'attention.
  • callback_on_step_end (Callable, facultatif) — Une fonction ou une sous-classe de PipelineCallback ou MultiPipelineCallbacks appelée à la fin de chaque étape de débruitage.
  • callback_on_step_end_tensor_inputs (List, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end.
  • max_sequence_length (int, par défaut 512) — Longueur maximale de séquence pour le tokenizer.
  • vae_batch_size (int, facultatif) — Taille de lot pour le décodage VAE. Si cette valeur est fournie et que la taille du lot des latents est supérieure, le décodage VAE sera effectué par lots.

Retourne

~MotifVideoPipelineOutput ou tuple

Si return_dict est True, ~MotifVideoPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste de frames de vidéo générées.

La fonction d'appel du pipeline pour la génération de texte vers vidéo.

Exemples :

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

Paramètres

  • prompt (str ou List[str], facultatif) — Le prompt ou les prompts à encoder.
  • negative_prompt (str ou List[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passer negative_prompt_embeds à la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré si guidance_scale est inférieur à 1).
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Nombre de vidéos à générer par invite.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entrée negative_prompt.
  • prompt_attention_mask (torch.Tensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte.
  • negative_prompt_attention_mask (torch.Tensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte négatifs.
  • max_sequence_length (int, par défaut 512) — Longueur maximale de séquence pour le tokenizer.
  • device (torch.device, facultatif) — Appareil sur lequel placer les tenseurs.
  • dtype (torch.dtype, facultatif) — Type de données pour les tenseurs.

Retourne

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

Un tuple contenant :

  • prompt_embeds : les embeddings de texte pour le prompt positif
  • negative_prompt_embeds : Les embeddings de texte pour le prompt négatif (None si la guidance n'est pas utilisée)
  • prompt_attention_mask : le masque d'attention pour le prompt positif
  • negative_prompt_attention_mask : le masque d'attention pour le prompt négatif (None si la guidance n'est pas utilisée)

Encode le prompt dans les états cachés de l'encodeur de texte.

MotifVideoImage2VideoPipeline

classe diffusers.MotifVideoImage2VideoPipeline

< >

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

Paramètres

  • transformer (MotifVideoTransformer3DModel) — Architecture Transformer conditionnelle pour le débruitage des latents vidéo encodés.
  • scheduler (SchedulerMixin) — Un scheduler à utiliser en combinaison avec transformer pour débruyer les latents vidéo encodés. Doit être une instance d’une classe héritant de SchedulerMixin, telle que DPMSolverMultistepScheduler. S’il n’est pas fourni, le scheduler associé au modèle pré-entraîné est utilisé.
  • vae (AutoencoderKLWan) — Modèle de Variational Auto-Encoder (VAE) pour encoder et décoder des vidéos vers et depuis des représentations latentes.
  • text_encoder (T5Gemma2Encoder) — Encodeur de texte principal pour encoder les invites de texte en embeddings.
  • tokenizer (PreTrainedTokenizerBase) — Tokenizer correspondant à l'encodeur de texte principal.
  • feature_extractor (SiglipImageProcessor) — Processeur d’images pour l’encodeur visuel SigLIP.
  • guider (BaseGuidance) — La méthode de guidage à utiliser. Doit être une instance d'une classe héritant de BaseGuidance, telle que ClassifierFreeGuidance, AdaptiveProjectedGuidance ou SkipLayerGuidance. Si non fourni, la valeur par défaut est ClassifierFreeGuidance.

Pipeline pour la génération d'images en vidéo utilisant Motif-Video avec conditionnement sur le premier plan.

Ce modèle hérite de DiffusionPipeline. Consultez la documentation de la classe parente pour les méthodes génériques implémentées pour tous les pipelines (téléchargement, sauvegarde, exécution sur un appareil particulier, etc.).

__call__

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]prompt: 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

Paramètres

  • image (PipelineImageInput) — The input image to use as the first frame for video generation.
  • prompt (str ou List[str]) — Le prompt ou les prompts pour guider la génération de la vidéo.
  • negative_prompt (str ou List[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération de la vidéo.
  • height (int, par défaut 736) — La hauteur en pixels de la vidéo générée.
  • width (int, par défaut 1280) — La largeur en pixels de la vidéo générée.
  • num_frames (int, par défaut 121) — Le nombre de frames de vidéo à générer.
  • num_inference_steps (int, facultatif, par défaut 50) — Le nombre d'étapes de débruitage.
  • timesteps (List[int], facultatif) — Timesteps personnalisés à utiliser pour le processus de débruitage.
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Le nombre de vidéos à générer par invite.
  • generator (torch.Generator ou List[torch.Generator], facultatif) — Objet(s) PyTorch Generator pour une génération déterministe.
  • latents (torch.Tensor, facultatif) — Latents bruités pré-générés.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés.
  • prompt_attention_mask (torch.Tensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte.
  • negative_prompt_embeds (torch.FloatTensor, facultatif) — Embeddings de texte négatifs pré-générés.
  • negative_prompt_attention_mask (torch.FloatTensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte négatifs.
  • output_type (str, facultatif, par défaut "pil") — Le format de sortie de la vidéo générée.
  • return_dict (bool, facultatif, par défaut True) — Indique s'il faut retourner un ~MotifVideoPipelineOutput plutôt qu'un simple tuple.
  • attention_kwargs (dict, facultatif) — Arguments transmis au processeur d'attention.
  • callback_on_step_end (Callable, facultatif) — Une fonction ou une sous-classe de PipelineCallback appelée à la fin de chaque étape de débruitage.
  • callback_on_step_end_tensor_inputs (List, facultatif) — La liste des entrées tensorielles pour la fonction callback_on_step_end.
  • max_sequence_length (int, par défaut 512) — Longueur maximale de séquence pour le tokenizer.

Retourne

~MotifVideoPipelineOutput ou tuple

Si return_dict est True, ~MotifVideoPipelineOutput est retourné, sinon un tuple est retourné dont le premier élément est une liste de frames de vidéo générées.

La fonction d'appel du pipeline pour la génération d'images en vidéo.

Exemples :

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

Paramètres

  • prompt (str ou List[str], facultatif) — Le prompt ou les prompts à encoder.
  • negative_prompt (str ou List[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération d’image. S’il n’est pas défini, il faut passer negative_prompt_embeds à la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré si guidance_scale est inférieur à 1).
  • num_videos_per_prompt (int, facultatif, valeur par défaut 1) — Nombre de vidéos à générer par invite.
  • prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte pré-générés.
  • negative_prompt_embeds (torch.Tensor, facultatif) — Embeddings de texte négatifs pré-générés. Peut être utilisé pour ajuster facilement les entrées de texte, par ex. le pondération des prompts. S'il n'est pas fourni, negative_prompt_embeds sera généré à partir de l'argument d'entrée negative_prompt.
  • prompt_attention_mask (torch.Tensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte.
  • negative_prompt_attention_mask (torch.Tensor, facultatif) — Masque d'attention pré-généré pour les embeddings de texte négatifs.
  • max_sequence_length (int, par défaut 512) — Longueur maximale de séquence pour le tokenizer.
  • device (torch.device, facultatif) — Appareil sur lequel placer les tenseurs.
  • dtype (torch.dtype, facultatif) — Type de données pour les tenseurs.

Retourne

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

Un tuple contenant :

  • prompt_embeds : les embeddings de texte pour le prompt positif
  • negative_prompt_embeds : Les embeddings de texte pour le prompt négatif (None si la guidance n'est pas utilisée)
  • prompt_attention_mask : le masque d'attention pour le prompt positif
  • negative_prompt_attention_mask : le masque d'attention pour le prompt négatif (None si la guidance n'est pas utilisée)

Encode le prompt dans les états cachés de l'encodeur de texte.

MotifVideoPipelineOutput

classe diffusers.MotifVideoPipelineOutput

< >

( frames: Tensor )

Paramètres

  • frames (torch.Tensor, np.ndarray ou List[List[PIL.Image.Image]]) — Liste des sorties vidéo - Il peut s'agir d'une liste imbriquée de longueur batch_size, où chaque sous-liste contient des séquences d'images PIL débruitées de longueur num_frames. Il peut également s'agir d'un tableau NumPy ou d'un tenseur Torch de forme (batch_size, num_frames, channels, height, width).

Classe de sortie pour les pipelines Motif-Video.

Update on GitHub