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

Технический отчёт

Motif-Video — это диффузионный трансформер с 2 млрд параметров, предназначенный для генерации видео по тексту и по изображению. Он использует трёхэтапную архитектуру, включающую 12 слоёв dual-stream + 16 слоёв single-stream + 8 слоёв декодера DDT, механизм Shared Cross-Attention для стабильного выравнивания текста и видео в длинных последовательностях, текстовый энкодер T5Gemma2 и rectified flow matching для предсказания скорости.

Motif-Video architecture

Генерация видео по тексту

Используйте MotifVideoPipeline для генерации видео по тексту:

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)

Генерация видео по изображению

Используйте MotifVideoImage2VideoPipeline для генерации видео по изображению:

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)

Эффективный по памяти вывод

Для GPU с менее чем 30 ГБ видеопамяти (например, RTX 4090) используйте выгрузку модели на 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

класс diffusers.MotifVideoPipeline

< >

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

Параметры

  • transformer (MotifVideoTransformer3DModel) — Условная архитектура Transformer для удаления шума из закодированных латентов видео.
  • scheduler (SchedulerMixin) — планировщик, используемый в сочетании с transformer для удаления шума из закодированных латентных представлений видео. Должен быть экземпляром класса, наследующего от SchedulerMixin, например DPMSolverMultistepScheduler. Если не указан, используется планировщик, привязанный к предобученной модели.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
  • text_encoder (T5Gemma2Encoder) — Основной текстовый энкодер для кодирования текстовых промптов в эмбеддинги.
  • tokenizer (PreTrainedTokenizerBase) — Токенизатор, соответствующий основному текстовому энкодеру.
  • guider (BaseGuidance) — Метод наведения, который следует использовать. Должно быть экземпляром класса, наследующегося от BaseGuidance, например ClassifierFreeGuidance, AdaptiveProjectedGuidance или SkipLayerGuidance. Если не указано, по умолчанию используется ClassifierFreeGuidance.

Пайплайн для генерации видео из текста с использованием Motif-Video.

Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.

__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

Параметры

  • prompt (str или List[str], необязательный) — Промпт или промпты для управления генерацией видео. Если не задан, необходимо передать prompt_embeds.
  • negative_prompt (str или List[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию видео. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется guidance.
  • height (int, по умолчанию 736) — Высота генерируемого видео в пикселях.
  • width (int, по умолчанию 1280) — Ширина генерируемого видео в пикселях.
  • num_frames (int, по умолчанию 121) — Количество кадров видео для генерации.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов денойзинга. Как правило, большее число шагов денойзинга приводит к более высокому качеству видео, но замедляет инференс.
  • timesteps (List[int], необязательный) — Пользовательские шаги для процесса удаления шума.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • generator (torch.Generator или List[torch.Generator], необязательный) — Объект(ы) PyTorch Generator для детерминированной генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги.
  • prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
  • negative_prompt_embeds (torch.FloatTensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги.
  • negative_prompt_attention_mask (torch.FloatTensor, необязательный) — Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного видео. Выберите один из вариантов: "pil", "np" или "latent".
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать ~MotifVideoPipelineOutput вместо обычного кортежа.
  • attention_kwargs (dict, необязательный) — Аргументы, передаваемые в процессор внимания.
  • callback_on_step_end (Callable, необязательный) — функция или подкласс PipelineCallback или MultiPipelineCallbacks, вызываемая в конце каждого шага денойзинга.
  • callback_on_step_end_tensor_inputs (List, необязательный) — Список тензорных входных данных для функции callback_on_step_end.
  • max_sequence_length (int, по умолчанию 512) — Максимальная длина последовательности для токенизатора.
  • vae_batch_size (int, необязательный) — Размер батча для декодирования VAE. Если указано и размер батча латентов больше, декодирование VAE выполняется частями.

Возвращает

~MotifVideoPipelineOutput или tuple

Если return_dict равно True, возвращается ~MotifVideoPipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных кадров видео.

Функция вызова pipeline для генерации видео по тексту.

Примеры:

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

Параметры

  • prompt (str или List[str], необязательный) — Промпт или промпты, которые нужно закодировать.
  • negative_prompt (str or List[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
  • negative_prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
  • max_sequence_length (int, по умолчанию 512) — Максимальная длина последовательности для токенизатора.
  • device (torch.device, необязательный) — Устройство, на котором размещаются тензоры.
  • dtype (torch.dtype, необязательный) — Тип данных для тензоров.

Возвращает

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

Кортеж, содержащий:

  • prompt_embeds: Векторы текста для положительного промпта
  • negative_prompt_embeds: Текстовые эмбеддинги для негативного промпта (None, если не используется guidance)
  • prompt_attention_mask: маска внимания для положительного промпта
  • negative_prompt_attention_mask: маска внимания для негативного промпта (None, если не используется guidance)

Кодирует промпт в скрытые состояния текстового энкодера.

MotifVideoImage2VideoPipeline

класс diffusers.MotifVideoImage2VideoPipeline

< >

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

Параметры

  • transformer (MotifVideoTransformer3DModel) — Условная архитектура Transformer для удаления шума из закодированных латентов видео.
  • scheduler (SchedulerMixin) — планировщик, используемый в сочетании с transformer для удаления шума из закодированных латентных представлений видео. Должен быть экземпляром класса, наследующего от SchedulerMixin, например DPMSolverMultistepScheduler. Если не указан, используется планировщик, привязанный к предобученной модели.
  • vae (AutoencoderKLWan) — Модель вариационного автоэнкодера (VAE) для кодирования и декодирования видео в латентные представления и обратно.
  • text_encoder (T5Gemma2Encoder) — Основной текстовый энкодер для кодирования текстовых промптов в эмбеддинги.
  • tokenizer (PreTrainedTokenizerBase) — Токенизатор, соответствующий основному текстовому энкодеру.
  • feature_extractor (SiglipImageProcessor) — Обработчик изображений для визуального энкодера SigLIP.
  • guider (BaseGuidance) — Метод наведения, который следует использовать. Должно быть экземпляром класса, наследующегося от BaseGuidance, например ClassifierFreeGuidance, AdaptiveProjectedGuidance или SkipLayerGuidance. Если не указано, по умолчанию используется ClassifierFreeGuidance.

Пайплайн для генерации видео из изображения с использованием Motif-Video и условием на первый кадр.

Эта модель наследуется от DiffusionPipeline. Общую документацию по методам, реализованным для всех пайплайнов (загрузка, сохранение, запуск на конкретном устройстве и т. д.), см. в документации родительского класса.

__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

Параметры

  • image (PipelineImageInput) — Входное изображение, используемое в качестве первого кадра для генерации видео.
  • prompt (str или List[str]) — Промпт или промпты для управления генерацией видео.
  • negative_prompt (str или List[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию видео.
  • height (int, по умолчанию 736) — Высота генерируемого видео в пикселях.
  • width (int, по умолчанию 1280) — Ширина генерируемого видео в пикселях.
  • num_frames (int, по умолчанию 121) — Количество кадров видео для генерации.
  • num_inference_steps (int, необязательный, по умолчанию 50) — Количество шагов удаления шума.
  • timesteps (List[int], необязательный) — Пользовательские шаги для процесса удаления шума.
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • generator (torch.Generator или List[torch.Generator], необязательный) — Объект(ы) PyTorch Generator для детерминированной генерации.
  • latents (torch.Tensor, необязательный) — Предварительно сгенерированные зашумленные латенты.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги.
  • prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
  • negative_prompt_embeds (torch.FloatTensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги.
  • negative_prompt_attention_mask (torch.FloatTensor, необязательный) — Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
  • output_type (str, необязательный, по умолчанию "pil") — Формат вывода сгенерированного видео.
  • return_dict (bool, необязательный, по умолчанию True) — Определяет, следует ли возвращать ~MotifVideoPipelineOutput вместо обычного кортежа.
  • attention_kwargs (dict, необязательный) — Аргументы, передаваемые в процессор внимания.
  • callback_on_step_end (Callable, необязательный) — Функция или подкласс PipelineCallback, вызываемая в конце каждого шага денойзинга.
  • callback_on_step_end_tensor_inputs (List, необязательный) — Список тензорных входных данных для функции callback_on_step_end.
  • max_sequence_length (int, по умолчанию 512) — Максимальная длина последовательности для токенизатора.

Возвращает

~MotifVideoPipelineOutput или tuple

Если return_dict равно True, возвращается ~MotifVideoPipelineOutput, иначе возвращается tuple, где первый элемент — это список сгенерированных кадров видео.

Функция вызова pipeline для генерации видео по изображению.

Примеры:

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

Параметры

  • prompt (str или List[str], необязательный) — Промпт или промпты, которые нужно закодировать.
  • negative_prompt (str or List[str], необязательный) — Промпт или промпты, которые не должны направлять генерацию изображения. Если не задан, необходимо передать negative_prompt_embeds. Игнорируется, если не используется направляющее поле (то есть игнорируется, если guidance_scale меньше 1).
  • num_videos_per_prompt (int, необязательный, по умолчанию 1) — Количество видео, генерируемых для каждого промпта.
  • prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные текстовые эмбеддинги.
  • negative_prompt_embeds (torch.Tensor, необязательный) — Предварительно сгенерированные отрицательные текстовые эмбеддинги. Можно использовать для простой настройки текстовых входных данных, например для взвешивания промпта. Если не передано, negative_prompt_embeds будет сгенерировано из входного аргумента negative_prompt.
  • prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для текстовых эмбеддингов.
  • negative_prompt_attention_mask (torch.Tensor, необязательный) — Предварительно сгенерированная маска внимания для отрицательных текстовых эмбеддингов.
  • max_sequence_length (int, по умолчанию 512) — Максимальная длина последовательности для токенизатора.
  • device (torch.device, необязательный) — Устройство, на котором размещаются тензоры.
  • dtype (torch.dtype, необязательный) — Тип данных для тензоров.

Возвращает

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

Кортеж, содержащий:

  • prompt_embeds: Векторы текста для положительного промпта
  • negative_prompt_embeds: Текстовые эмбеддинги для негативного промпта (None, если не используется guidance)
  • prompt_attention_mask: маска внимания для положительного промпта
  • negative_prompt_attention_mask: маска внимания для негативного промпта (None, если не используется guidance)

Кодирует промпт в скрытые состояния текстового энкодера.

MotifVideoPipelineOutput

класс diffusers.MotifVideoPipelineOutput

< >

( frames: Tensor )

Параметры

  • frames (torch.Tensor, np.ndarray или List[List[PIL.Image.Image]]) — Список видеовыходов. Может представлять собой вложенный список длины batch_size, где каждый подсписок содержит последовательности денойзированных изображений PIL длины num_frames. Также может быть массивом NumPy или тензором Torch с формой (batch_size, num_frames, channels, height, width).

Класс вывода для конвейеров Motif-Video.

Update on GitHub