Diffusers documentation

Motif-Video

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