Diffusers documentation

Pika H3 Flex

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pika H3 Flex

LoRA

Pika H3 Flex — это пост-обучение MiniMax-H3 в генератор видео и аудио за шесть шагов. Он сохраняет упакованную последовательность MiniMax-H3, его conditioner Qwen3-VL и два VAE, но меняет две вещи: сэмплер — фиксированный шестиступенчатый график, который на каждом шаге заново добавляет шум к чистому предсказанию вместо обновления по Эйлеру, и веса — пара LoRA-адаптеров ранга 128 для двух трансформерных разделов MiniMax-H3. Видео и его синхронизированный стереозвук получаются из одних и тех же шести прямых проходов.

Релиз представляет собой адаптеры: адаптер FL2VA (fl2va/adapter.safetensors) управляет разделом transformer/ для условий текста и конечных кадров, а адаптер Ref2VA (ref2va/adapter.safetensors) управляет transformer_ref/ для мультимодальных ссылок. Базовые компоненты принадлежат MiniMaxAI/MiniMax-H3 и не были изменены; в репозитории хранится их копия, чтобы он мог загружаться самостоятельно.

Pika H3 Flex интегрируется исключительно в виде блоков Modular Diffusers, как и MiniMax-H3: сами блоки и их PikaH3FlexModularPipeline составляют всю интеграцию, а половины DiffusionPipeline не существует.

Загрузка

Пайплайн собирается в два шага: компоненты загружаются через modular_model_index.json, который указывает базовые компоненты MiniMax-H3 и два конфигурации планировщика, после чего адаптер выбранного рабочего процесса загружается поверх с помощью load_lora_weights(). Адаптеры представляют собой обычные дампы PEFT с именами модулей diffusers и загружаются в том масштабе, в котором были обучены (alpha == rank, 1.0).

Рабочий процессВходыРазбиение TransformerАдаптер
t2vaprompttransformer/fl2va/adapter.safetensors
fl2vaprompt и image и/или last_imagetransformer/fl2va/adapter.safetensors
ref2vaprompt и referencestransformer_ref/ref2va/adapter.safetensors
import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("Pika-Labs/Pika-H3-Flex", workflow="fl2va")
pipe.load_components(dtype={"vae": torch.float32, "audio_vae": torch.float32, "default": torch.bfloat16})
pipe.load_lora_weights("Pika-Labs/Pika-H3-Flex", weight_name="fl2va/adapter.safetensors")

Передача workflow обрезает блоки до нужной задачи, поэтому загружается только соответствующая ей часть трансформера, адаптер направляет запросы в единственную присутствующую часть, а конвейер принимает только запросы этой задачи — конвейер fl2va требует ключевой кадр, а t2va — нет. Конвейер, содержащий обе части (загруженный без workflow=), требует указания, куда разместить адаптер Ref2VA: pipe.load_lora_weights(..., weight_name="ref2va/adapter.safetensors", load_into_transformer_ref=True). Оба VAE выпускаются в float32 и декодируют в float32, как и в опубликованном пакете; всё остальное выполняется в bfloat16.

pipe.doc выводит, что принимает и возвращает текущий конвейер: каждый вход с его значением по умолчанию, ожидаемые компоненты и создаваемые выходные данные.

Повторное использование загруженной MiniMax-H3

Базовые компоненты принадлежат MiniMax-H3, поэтому уже загруженный конвейер MiniMax-H3 содержит всё, кроме двух планировщиков и адаптеров. В этом разделе из загруженных компонентов собирается конвейер Pika H3 Flex, при этом оба конвейера остаются готовыми к работе параллельно: один ComponentsManager хранит каждый компонент один раз и выгружает его для обоих, конвейер Pika H3 Flex добавляет только свои два планировщика, а адаптеры определяют, какую из двух моделей выполняют общие трансформеры.

import torch
from diffusers import ComponentsManager, ModularPipeline

dtype = {"vae": torch.float32, "audio_vae": torch.float32, "default": torch.bfloat16}
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")

# The MiniMax-H3 pipeline already in use, with every workflow loaded. `collection` registers its components in the
# manager under that name, so they can be fetched by it later.
minimax = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", components_manager=manager, collection="minimax-h3")
minimax.load_components(dtype=dtype)

# The Pika H3 Flex pipeline, in its own collection. Only its own components are loaded: the two schedulers.
pika = ModularPipeline.from_pretrained("Pika-Labs/Pika-H3-Flex", components_manager=manager, collection="pika-h3-flex")
pika.load_components(names=["scheduler", "audio_scheduler"])

# The rest comes from the MiniMax-H3 collection, and `update_components` puts it in the Pika H3 Flex pipeline.
shared = ["text_encoder", "tokenizer", "processor", "vae", "audio_vae", "transformer", "transformer_ref"]
pika.update_components(**{name: manager.get_one(name=name, collection="minimax-h3") for name in shared})

# The adapters go into the shared transformers.
pika.load_lora_weights("Pika-Labs/Pika-H3-Flex", weight_name="fl2va/adapter.safetensors")
pika.load_lora_weights(
    "Pika-Labs/Pika-H3-Flex", weight_name="ref2va/adapter.safetensors", load_into_transformer_ref=True
)

print(manager) показывает результат: каждый общий компонент перечисляется один раз и принадлежит обеим коллекциям, коллекция Pika H3 Flex добавляет свои два планировщика, а два трансформера содержат адаптер.

Models:
Name_ID               | Class                           | Size (GB) | Collection
transformer_1397...   | MiniMaxH3Transformer3DModel     | 63.02     | minimax-h3
                      |                                 |           | pika-h3-flex
transformer_ref_13... | MiniMaxH3Transformer3DModel     | 63.02     | minimax-h3
                      |                                 |           | pika-h3-flex
text_encoder_1397...  | Qwen3VLForConditionalGeneration | 62.13     | minimax-h3
                      |                                 |           | pika-h3-flex
vae_1397...           | AutoencoderKLMiniMaxH3          | 9.70      | minimax-h3
                      |                                 |           | pika-h3-flex
audio_vae_1397...     | AutoencoderKLMiniMaxH3Audio     | 0.56      | minimax-h3
                      |                                 |           | pika-h3-flex

Other Components:
ID                        | Class              | Collection
scheduler_1397...         | MiniMaxH3Scheduler | minimax-h3
audio_scheduler_1397...   | MiniMaxH3Scheduler | minimax-h3
scheduler_1397...         | MiniMaxH3Scheduler | pika-h3-flex
audio_scheduler_1397...   | MiniMaxH3Scheduler | pika-h3-flex
tokenizer_1397...         | Qwen2Tokenizer     | minimax-h3
                          |                    | pika-h3-flex
processor_1397...         | Qwen3VLProcessor   | minimax-h3
                          |                    | pika-h3-flex

Additional Component Info:
transformer_1397...:
  Adapters: ['default_0']
transformer_ref_13...:
  Adapters: ['default_0']

Адаптеры определяют, какая модель используется общими компонентами transformers. Чтобы вернуться к MiniMax-H3, вызовите pika.disable_lora(), и это всё: следующий запрос minimax(...) будет выполняться базовой моделью. pika.enable_lora() снова включает Pika H3 Flex. Между этими действиями ничего не перезагружается; менеджер перемещает каждый компонент на ускоритель и с него по мере того, как каждая из конвейеров доходит до него.

Чем отличается от MiniMax-H3

  • Шесть шагов, без num_inference_steps. Оба экземпляра MiniMaxH3Scheduler (shift=12.0 для видео, shift=3.0 для аудио) работают с stochastic_sampling по конфигурации denoising_step_list пайплайна, опубликованному расписанию [1000, 750, 500, 250, 100, 40, 0]: на каждом шаге предсказывается чистый образец, а все, кроме последнего, заново шумятся свежим шумом до следующего сигмы. Количество шагов является контрактом адаптера и не является входным параметром.
  • Свежий шум на каждом шаге. Запрос извлекает значения из своего generator в фиксированном порядке: одно извлечение для каждого ключевого кадра или визуального эталона для шума условий, затем шум видео, шум аудио, а затем извлечения для повторного добавления шума в видео и аудио на каждом из первых пяти шагов. Передача latents или audio_latents заменяет два начальных извлечения, оставляя остальные без изменений.
  • Ключевые кадры обрезаются, а не растягиваются. Ключевой кадр fl2va центрированно обрезается до соотношения сторон холста в собственном разрешении, а затем масштабируется под холст.
  • Ссылки следуют уровню разрешения холста. Pika H3 Flex генерирует по таблице бакетов — уровню 480p и уровню 768p, по одиннадцать соотношений сторон для каждого — и запрос ref2va задаёт условия в соответствии с уровнем его холста: изображение-ссылка кодируется с короткой стороной 1024 пикселя ниже уровня 768 и 2048 пикселя на нём и выше, а видео-ссылка подчиняется собственному правилу холста для данного уровня. Каждое видео или отдельное аудио-ссылка длится от 2 до 15 секунд, при этом суммарная длительность всех видео и суммарная длительность всех отдельных аудио не превышают 15 секунд каждая.

Генерация

Опубликованные значения — это размеры, на которых была проверена Pika H3 Flex. Передайте одно из них в качестве height и width:

21:916:93:24:35:41:14:53:42:39:169:21
480p960x416832x480704x480640x480608x480480x480480x608480x640480x704480x832416x960
768p1536x6721344x7681152x7681024x768960x768768x768768x960768x1024768x1152768x1344672x1536
import torch
from diffusers import ComponentsManager, ModularPipeline
from diffusers.utils import load_image
from diffusers.utils.export_utils import encode_video

# 61.7GB of transformer and 62.1GB of conditioner do not sit on one accelerator, so the components are
# registered in a manager that moves each one on and off as the blocks reach it.
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")  # or "mps", "xpu", "cpu"

# Create one pipeline for all supported workflows, then load the `fl2va` workflow's components, which is
# enough to run both the fl2va and t2va requests below.
pipe = ModularPipeline.from_pretrained("Pika-Labs/Pika-H3-Flex", components_manager=manager)
pipe.load_components(
    workflow="fl2va", dtype={"vae": torch.float32, "audio_vae": torch.float32, "default": torch.bfloat16}
)
pipe.load_lora_weights("Pika-Labs/Pika-H3-Flex", weight_name="fl2va/adapter.safetensors")

prompt = (
    "integrated_multimodal_description: A cinematic close shot of a red ceramic cup on a wooden table beside an "
    "open window. A soft breeze moves a linen curtain. The camera slowly pushes toward the cup as warm morning "
    "light crosses the table.\n"
    "overall_soundscape: Gentle wind through the window and faint birdsong outside. No speech.\n"
    "non_diegetic_music: None.\n"
)
outputs = ["videos", "audio", "sampling_rate"]

# Text to video + audio on the 480p 16:9 bucket, 5 seconds.
results = pipe(
    prompt=prompt, 
    height=480, 
    width=832, 
    num_frames=124, 
    generator=torch.Generator("cuda").manual_seed(42), 
    output=outputs
)

# First frame (and optionally `last_image`) to video + audio. The keyframe is center-cropped onto the canvas and
# held as the first frame, so the prompt describes the keyframe and what happens from it.
image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
)
i2va_prompt = (
    "For the target video, at 0.00 seconds into the target video, <Picture 1> (from [Shot 1]) is fully referenced.\n\n"
    "integrated_multimodal_description: [Shot 1] Begin with the supplied image of a small toy astronaut figurine "
    "standing on a grey rocky moon surface, holding a white egg-shaped object. Preserve the figurine, its orange "
    "visor and the rocks. The astronaut slowly turns its helmet toward the camera and lifts the egg a little; fine "
    "dust drifts up around its boots. The camera slowly pushes in in one continuous shot. By the end the astronaut "
    "stands still, egg held up.\n\n"
    "overall_soundscape: Soft low wind and faint crunch of dust under the boots. No speech.\n\n"
    "non_diegetic_music: N/A\n"
)
results = pipe(
    prompt=i2va_prompt, 
    image=image, 
    height=480, 
    width=832, 
    num_frames=124,
    generator=torch.Generator("cuda").manual_seed(42), 
    output=outputs,
)

encode_video(
    results["videos"][0],
    fps=24,
    output_path="pika_h3_flex_fl2va.mp4",
    audio=results["audio"][0],
    audio_sample_rate=results["sampling_rate"],
)

Воркфлоу ref2va принимает упорядоченный список референсов — до 9 изображений, 3 видео и 3 аудиоклипов, 12 всего — по тому же принципу, что и MiniMax-H3, с одним классом референсов на каждый модальность. Это также запрос, требующий наибольшего объёма памяти: референсы добавляют собственные строки в последовательность, и при разрешении 768p один только трансформер занимает 80 ГБ видеопамяти. Поэтому в примере ниже блоки трансформера загружаются из оперативной памяти по одному, в то время как менеджер перемещает остальные компоненты на устройство и с него, как и прежде. Пример выполняет запрос с референсами в разрешении 768p на одной карте с 80 ГБ памяти; без стриминга ограничьтесь разрешением 480p.

import torch
from diffusers import ComponentsManager, ModularPipeline
from diffusers.modular_pipelines.pika_h3_flex import (
    PikaH3FlexAudioReference,
    PikaH3FlexImageReference,
    PikaH3FlexVideoReference,
)

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")  # or "mps", "xpu", "cpu"

pipe = ModularPipeline.from_pretrained(
    "Pika-Labs/Pika-H3-Flex", workflow="ref2va", components_manager=manager
)
pipe.load_components(dtype={"vae": torch.float32, "audio_vae": torch.float32, "default": torch.bfloat16})
pipe.load_lora_weights("Pika-Labs/Pika-H3-Flex", weight_name="ref2va/adapter.safetensors")

# Keep the transformer in CPU memory and bring in one block at a time while it runs.
pipe.transformer_ref.enable_group_offload(
    onload_device=torch.device("cuda"),
    offload_device=torch.device("cpu"),
    offload_type="block_level",
    num_blocks_per_group=1,
    use_stream=True,
)

results = pipe(
    prompt="subject_definitions: <Subject 1> is the woman in <Picture 1>. summary: [reference generation] <Subject 1> waves at the camera.",
    references=[
        PikaH3FlexImageReference.from_file("subject.png"),
        PikaH3FlexVideoReference.from_file("motion_ref.mp4"),  # frames, their `fps` and the soundtrack
        PikaH3FlexAudioReference.from_file("voice.wav"),  # waveform and its `sample_rate`
    ],
    height=768,
    width=1344,
    num_frames=124,
    generator=torch.Generator("cuda").manual_seed(42),
    output=["videos", "audio", "sampling_rate"],
)

PikaH3FlexModularPipeline

класс diffusers.PikaH3FlexModularPipeline

< >

( blocks: diffusers.modular_pipelines.modular_pipeline.ModularPipelineBlocks | None = Nonepretrained_model_name_or_path: str | os.PathLike | None = Nonecomponents_manager: diffusers.modular_pipelines.components_manager.ComponentsManager | None = Nonecollection: str | None = Noneworkflow: str | None = Nonemodular_config_dict: dict[str, typing.Any] | None = Noneconfig_dict: dict[str, typing.Any] | None = None**kwargs )

Модульный t2va для совместной генерации видео и аудио с Pika H3 Flex, постобученной шестиступенчатой MiniMax-H3: рабочие процессы fl2va (только текст) и transformer/ (первый и/или последний ключевой кадр) для чекпоинта раздела fl2va с адаптером, а также рабочий процесс ref2va (omni-reference) для transformer_ref/ с адаптером ref2va.

Базовые компоненты — это компоненты MiniMax-H3, а релиз Pika H3 Flex представляет собой пару LoRA-адаптеров ранга 128, наложенных на два раздела трансформера, поэтому конвейер собирается в два шага: компоненты загружаются через modular_model_index.json, в котором указаны базовые компоненты и два планировщика, а адаптер выбранного рабочего процесса загружается с помощью load_lora_weights().

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("Pika-Labs/Pika-H3-Flex", workflow="fl2va")
pipe.load_components(dtype={"vae": torch.float32, "audio_vae": torch.float32, "default": torch.bfloat16})
pipe.load_lora_weights("Pika-Labs/Pika-H3-Flex", weight_name="fl2va/adapter.safetensors")

Как и MiniMax-H3, Pika H3 Flex выполняет денойзинг одной упакованной последовательности, которая одновременно содержит текстовые условия, латенты условий по ключевому кадру или референсу, аудио-латенты и видео-латенты. Именно поэтому блоки передают между собой строковое расположение данных, а не тензоры по отдельным модальностям, и почему пайплайн использует два планировщика (shift = 12.0 для видео и shift = 3.0 для аудио), которые выполняются в рамках одного вызова трансформера. В отличие от MiniMax-H3, оба планировщика являются экземплярами MiniMaxH3Scheduler с stochastic_sampling по фиксированному списку из шести шагов denoising_step_list: параметра num_inference_steps нет, и на каждом шаге из генератора запроса извлекается новый шум.

Адаптеры дистиллированы по руководству, как и их базовые модели: здесь нет guider, нет negative_prompt и нет guidance_scale, а на каждом шаге выполняется ровно один прямой проход.

Этот модуль содержит сведения о модели, на которые опираются все блоки: геометрию, выводимую из конфигурации, в виде свойств, а также арифметику холста, уровня и количества кадров в виде функций. Контракты для условного формирования, кодирования и шума реализованы непосредственно в самих блоках.

PikaH3FlexBlocks

класс diffusers.PikaH3FlexBlocks

< >

( )

Блоки модульного конвейера Auto для совместной генерации видео и аудио с Pika H3 Flex: рабочие процессы t2va (только текст), fl2va (первый и/или последний ключевой кадр) и ref2va (omni-reference), выбор которых осуществляется на основе входных данных references и ключевых кадров. Рабочие процессы t2va и fl2va используют раздел transformer с адаптером fl2va, а ref2va — раздел transformer_ref с адаптером ref2va, поэтому загружайте адаптер того рабочего процесса, который соответствует запросу. Без указания workflow= при загрузке компонентов будут загружены оба раздела трансформера размером 61,7 ГБ — передайте один из них, чтобы загрузить только то, что требуется для задачи.

Поддерживаемые рабочие процессы:

  • t2va: требуется prompt
  • fl2va: требуется prompt, image или prompt, last_image
  • ref2va: требуется prompt, references

Компоненты: image_processor (VaeImageProcessor) text_encoder (Qwen3VLForConditionalGeneration) tokenizer (Qwen2Tokenizer) processor (Qwen3VLProcessor) vae (AutoencoderKLMiniMaxH3) audio_vae (AutoencoderKLMiniMaxH3Audio) scheduler (MiniMaxH3Scheduler) audio_scheduler (MiniMaxH3Scheduler) transformer_ref (MiniMaxH3Transformer3DModel) transformer (MiniMaxH3Transformer3DModel) video_processor (VideoProcessor)

Конфигурации: canvas_short_edge (по умолчанию: 768) canvas_max_pixels (по умолчанию: 1032192) denoising_step_list (по умолчанию: [1000, 750, 500, 250, 100, 40, 0])

Входные данные: references (list, необязательный): Ссылки, на которые опирается генерация, в том порядке, в котором модель должна их читать: порядок определяет их метки в представлении промпта и расположение на общей вращательной шкале, поэтому другой порядок — это другой запрос. По одному dataclass на модальность, все содержат медиа в памяти: PikaH3FlexImageReference (не более 9), PikaH3FlexVideoReference со своей fps (не более 3, звуковой дорожкой audio также управляется) или PikaH3FlexAudioReference со своей sample_rate (не более 3) — всего не более 12 ссылок, при этом ссылки на аудио не могут быть единственными. Каждая ссылка на видео или отдельное аудио длится от 2 до 15 секунд, а суммарная длительность видео и отдельного аудио не превышает 15 секунд каждая. Эти блоки никогда не открывают медиафайл: декодируйте с помощью classmethod from_file каждого класса, который передает частоты. height (int, необязательный): Высота генерируемого видео в пикселях, кратная 32. width (int, необязательный): Ширина генерируемого видео в пикселях, кратная 32. num_frames (int, необязательный): Количество кадров для генерации при фиксированных 24 fps: от 120 до 360, то есть от 5 до 15 секунд, округленное вверх до ближайшего 17 * n + 5, которое может декодировать видео VAE. Чтобы сгенерировать видео такой же длины, как референсная звуковая дорожка, передайте round(samples / sample_rate * 24). image (Image, необязательный): Ключевой кадр, с которого начинается видео. Он обрезается по центру до соотношения сторон холста и масштабируется на него; холст по умолчанию выводится из его собственного соотношения сторон. last_image (Image, необязательный): Ключевой кадр, на котором заканчивается видео. Можно передать отдельно, чтобы сгенерировать до кадра. Он обрезается по центру до соотношения сторон холста и масштабируется на него, как image. prompt (str): Промпт для управления генерацией, одна строка. normalized_references (list, необязательный): Ссылки, нормализованные на этапе настройки, в упакованном порядке. keyframes (list, необязательный): Ключевые кадры, размещенные на целевом холсте, в упакованном порядке. condition_latents (list, необязательный): Закодированные латенты для условного видео, по одному на каждую ссылку на изображение и видео в упакованном порядке. Их форма определяет геометрию каждого блока ссылок. audio_condition_latents (list, необязательный): Закодированные строки для условного аудио, по одной на каждую ссылку с аудио в упакованном порядке. generator (Generator, необязательный): Генератор запроса. Шум для условий извлекается из него первым, по одному извлечению на условие, до шума для генерируемых строк. latents (Tensor): Предварительно сгенерированный шум видео формы (1, 24, num_latent_frames, latent_height, latent_width), используется вместо извлечения. audio_latents (Tensor): Предварительно сгенерированный шум аудио формы (2, 32, num_audio_latents). *denoiser_input_fields (None,необязательный): Структурное описание упакованной последовательности, которую трансформер читает по имени: token_tags, position_ids и три тензора индексов строк. attention_kwargs (dict,необязательный): Дополнительные kwargs для процессоров внимания. keyframe_anchors (tuple,необязательный, по умолчанию ()): К какому концу видео привязан каждый ключевой кадр, в упакованном порядке. output_type (str,необязательный*, по умолчанию pil): Формат вывода: ‘pil’, ‘np’ или ‘pt’.

Вывод: videos (list): Сгенерированное видео. audio (Tensor): Сгенерированный звуковой дорожкой, с формой (1, 2, num_samples). sampling_rate (int): Частота дискретизации сгенерированной звуковой дорожки в Гц.

PikaH3FlexImageReference

класс diffusers.modular_pipelines.pika_h3_flex.PikaH3FlexImageReference

< >

( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor] )

Параметры

  • image (PIL.Image.Image, np.ndarray or torch.Tensor) — Справочное изображение: изображение, массив (height, width, 3) или тензор (3, height, width), uint8 или вещественные значения в диапазоне [0, 1]. Оно никогда не определяет генерируемую геометрию — оно кодируется на своей собственной короткой стороне, 2048 для выпущенной контрольной точки, независимо от того, какой холст генерирует запрос.

Ссылка на объект, стиль или сцену: не более 9 на запрос.

from_file

< >

( media )

Параметры

  • media (str или os.PathLike) — путь или URL изображения.

Загрузите файл изображения в PikaH3FlexImageReference с помощью load_image().

PikaH3FlexVideoReference

класс diffusers.modular_pipelines.pika_h3_flex.PikaH3FlexVideoReference

< >

( frames: typing.Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor]fps: float | None = Noneaudio: typing.Optional[torch.Tensor] = Nonesample_rate: int | None = None )

Параметры

  • frames (list[PIL.Image.Image], np.ndarray or torch.Tensor) — Справочные кадры: список изображений, массив (num_frames, height, width, 3) или тензор (num_frames, 3, height, width), uint8 или с плавающей точкой в диапазоне [0, 1].
  • fps (float, необязательный, по умолчанию 24.0) — Частота кадров, которую несут frames, и именно она определяет, как визуальные блоки эталонного видео размещаются на сетке 2 fps кондиционера. Собственная частота MiniMax-H3 составляет 24 fps, поэтому любая другая частота приводится к ней путём удаления и дублирования целых кадров — поэтому это поле важно указать правильно, если кадры получены из файла.
  • audio (torch.Tensor формы (channels, num_samples), необязательный) — Саундтрек этого видео, моно или стерео, используется как условие для самого референса, а не как референс для него. Если параметр не указан, референс обуславливается только движением.
  • sample_rate (int, необязательный) — Частота, с которой audio содержит свои сэмплы. Если параметр не указан, используется собственная частота аудио-VAE, и сэмплы остаются без изменений; при любом другом значении выполняется ресемплинг на указанную частоту.

Ссылка на движение и камеру: не более 3 на запрос, с условием, что они обрабатываются вместе со своим звуковым сопровождением.

from_file

< >

( media ) → PikaH3FlexVideoReference

Параметры

  • media (str или os.PathLike) — путь или URL видео.

Возвращает

PikaH3FlexVideoReference

кадры (num_frames, height, width, 3) типа uint8 с частотой кадров, указанной в контейнере, с его звуковым сопровождением и собственной частотой дискретизации этого сопровождения, если в контейнере есть аудиопоток.

Декодирование видеofайла в PikaH3FlexVideoReference с сохранением разрешения, частоты кадров и звукового сопровождения.

Частоты попадают в reference, что и является целью такого способа декодирования, а не load_video(): MiniMax-H3 пересэмплирует reference на собственные 24 fps, поэтому потерянная по пути частота кадров означает запрос, сформированный с неправильной скоростью, и система не выдаст об этом никакого предупреждения. Если метаданные контейнера неверны, это исправляется переопределением fps или sample_rate в возвращаемом reference.

Требуется PyAV.

PikaH3FlexAudioReference

класс diffusers.modular_pipelines.pika_h3_flex.PikaH3FlexAudioReference

< >

( audio: Tensorsample_rate: int | None = None )

Параметры

  • audio (torch.Tensor формы (channels, num_samples)) — Справочная звуковая волна, моно или стерео.
  • sample_rate (int, необязательный) — Частота, с которой audio содержит свои сэмплы. Если параметр не указан, используется собственная частота аудио-VAE, и сэмплы остаются без изменений; при любом другом значении выполняется ресемплинг на указанную частоту.

Ссылка на голос или музыку: не более 3 на запрос, и никогда не используется по отдельности — аудиоссылка должна сопровождаться как минимум одной ссылкой на изображение или видео. Она никогда не поступает в conditioner и кодируется исключительно аудио-VAE.

from_file

< >

( media ) → PikaH3FlexAudioReference

Параметры

  • media (str или os.PathLike) — путь или URL к аудиофайлу или к видео, из которого извлекается звуковая дорожка.

Возвращает

PikaH3FlexAudioReference

float32-волну (channels, num_samples) с частотой дискретизации, указанной в контейнере.

Декодирование аудиофайла в PikaH3FlexAudioReference с частотой дискретизации, указанной в файле.

Требуется PyAV.

Update on GitHub