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

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: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
classe diffusers.MotifVideoPipeline
< source >( 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
transformerpour débruyer les latents vidéo encodés. Doit être une instance d’une classe héritant deSchedulerMixin, 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 estClassifierFreeGuidance.
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__
< 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
Paramètres
- prompt (
strouList[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 passerprompt_embeds. - negative_prompt (
strouList[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 passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n'est pas utilisé. - height (
int, par défaut736) — La hauteur en pixels de la vidéo générée. - width (
int, par défaut1280) — La largeur en pixels de la vidéo générée. - num_frames (
int, par défaut121) — 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.GeneratorouList[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éfautTrue) — 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 dePipelineCallbackouMultiPipelineCallbacksappelé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 fonctioncallback_on_step_end. - max_sequence_length (
int, par défaut512) — 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
< 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]
Paramètres
- prompt (
strouList[str], facultatif) — Le prompt ou les prompts à encoder. - negative_prompt (
strouList[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 passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest 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éenegative_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 positifnegative_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 positifnegative_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
< source >( 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
transformerpour débruyer les latents vidéo encodés. Doit être une instance d’une classe héritant deSchedulerMixin, 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 estClassifierFreeGuidance.
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__
< 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
Paramètres
- image (
PipelineImageInput) — The input image to use as the first frame for video generation. - prompt (
strouList[str]) — Le prompt ou les prompts pour guider la génération de la vidéo. - negative_prompt (
strouList[str], facultatif) — Le ou les prompts à ne pas utiliser pour guider la génération de la vidéo. - height (
int, par défaut736) — La hauteur en pixels de la vidéo générée. - width (
int, par défaut1280) — La largeur en pixels de la vidéo générée. - num_frames (
int, par défaut121) — 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.GeneratorouList[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éfautTrue) — 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 dePipelineCallbackappelé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 fonctioncallback_on_step_end. - max_sequence_length (
int, par défaut512) — 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
< 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]
Paramètres
- prompt (
strouList[str], facultatif) — Le prompt ou les prompts à encoder. - negative_prompt (
strouList[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 passernegative_prompt_embedsà la place. Ignoré lorsque le guidage n’est pas utilisé (c’est-à-dire ignoré siguidance_scaleest 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éenegative_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 positifnegative_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 positifnegative_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
< source >( frames: Tensor )
Paramètres
- frames (
torch.Tensor,np.ndarrayou List[List[PIL.Image.Image]]) — Liste des sorties vidéo - Il peut s'agir d'une liste imbriquée de longueurbatch_size,où chaque sous-liste contient des séquences d'images PIL débruitées de longueurnum_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.