Diffusers documentation

MiniMax-H3

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

MiniMax-H3

LoRA

MiniMax-H3는 비디오와 그 사운드를 함께 생성합니다. 단일 transformer가 텍스트 조건부, 조건부 미디어, 그리고 대상 비디오 및 오디오 latents를 포함하는 하나의 packed sequence를 denoise합니다. 별도의 vocoder나 사후 오디오 처리 단계가 없습니다. 비디오와 오디오는 동일한 denoising loop에서 출력됩니다.

원본 MiniMax-H3 체크포인트는 MiniMaxAI 조직에서 찾을 수 있습니다.

MiniMax-H3는 Anima와 동일한 방식으로 Modular Diffusers 블록으로만 통합됩니다. 즉, 블록과 해당 MiniMaxH3ModularPipeline이 통합의 전부이며, DiffusionPipeline 부분은 존재하지 않습니다.

Checkpoint 레이아웃

MiniMax-H3는 transformer를 제외한 모든 구성 요소를 공유하는 두 개의 체크포인트 파티션으로 출시되었으므로, diffusers 변환은 이 둘을 모두 하나의 저장소에 배치합니다:

서브폴더워크플로
transformer/t2va (텍스트만), fl2va (첫 번째 및/또는 마지막 keyframe)
transformer_ref/ref2va (이미지, 비디오 및 오디오 참조의 순서화된 혼합)

Transformer를 제외한 모든 구성 요소, 즉 비디오 VAE, 오디오 VAE, Qwen3-VL conditioner, 해당 tokenizer와 processor, 그리고 두 개의 scheduler는 공유되며 한 번만 저장됩니다.

conditioner는 Qwen3VLForConditionalGeneration이며, MiniMax-H3는 마지막 레이어가 아닌 50번째 decoder 레이어 이후의 unnormalized hidden state를 읽습니다. 따라서 전체 공개 checkpoint가 사용되지만, 그 language-model head는 사용되지 않습니다.

세 가지 작업 모두 MiniMaxH3Blocks의 워크플로우이며, 저장소에는 각 구성 요소를 자체 로딩 사양과 함께 명시하는 modular_model_index.json 하나를 포함합니다. 단일 작업을 서빙하려면 해당 워크플로우를 from_pretrained에 전달하세요. 그러면 해당 워크플로우의 블록만 유지되므로, 파이프라인의 시그니처(pipe.doc)는 정확히 해당 작업의 입력을 문서화하고, 해당 작업의 구성 요소만 선언되며, load_components는 정확히 해당 하위 폴더만 가져옵니다. t2va / fl2va 파이프라인은 transformer_ref/에 절대 접근하지 않으며, ref2va 파이프라인은 transformer/에 절대 접근하지 않습니다.

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", workflow="ref2va")
pipe.load_components(dtype=torch.bfloat16)

pipe.doc은 현재 파이프라인이 어떤 입력을 받아 어떤 출력을 반환하는지, 즉 기본값이 포함된 모든 입력, 기대하는 구성 요소, 그리고 생성하는 출력을 보여줍니다. 하나의 워크플로로 축소되어 해당 작업을 정확히 설명하므로, 요청을 보내기 전에 필요한 사항을 파악하는 가장 빠른 방법입니다.

대신 모든 워크플로를 하나의 파이프라인에서 사용하려면 workflow 인수를 생략하세요. 그러면 파이프라인은 호출 시 전달된 입력에 따라 워크플로를 선택합니다.

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3")

로딩은 여전히 워크플로우 하나씩 진행될 수 있습니다. 이 호출은 transformer/와 모든 공유 컴포넌트를 가져오며, 이는 t2va와 fl2va 모두에 사용됩니다:

pipe.load_components(workflow="t2va", dtype=torch.bfloat16)

workflow= 없이 load_components()를 호출하면 두 개의 61.7GB transformer 파티션을 모두 가져오며, 이를 통해 추가 로딩 호출 없이 하나의 파이프라인이 세 가지 워크플로를 모두 처리할 수 있습니다. ComponentsManager와 자동 오프로딩을 함께 사용하면, 가중치는 호스트 RAM에 머물러 있고 매니저가 각 단계에 필요한 것만 가속기로 이동시킵니다. 따라서 ref2va 디노이저가 디바이스를 필요로 할 때 전략은 충분한 공간을 확보하기 위해 필요한 만큼 오프로딩합니다. 레시피는 Memory를 참고하세요.

두 개의 스케줄러

Video와 audio latents는 각 스텝마다 하나의 transformer 호출 내에서 서로 다른 두 개의 스케줄을 따라 진행됩니다. 이 때문에 블록은 두 개의 MiniMaxH3Scheduler 인스턴스를 기대합니다: video latents용 scheduler(발행된 체크포인트에서 shift=12.0)과 audio latents용 audio_scheduler(shift=3.0).

두 transformer 파티션 모두 guidance-distilled이므로 모든 워크플로에 해당합니다. guidance가 가중치에 내장되어 있어 guider, negative_prompt, guidance_scale이 없으며, 모든 단계에서 정확히 한 번의 forward pass만 실행됩니다.

생성 제약

  • 24 fps, 5~15초. num_frames은 비디오 VAE가 디코딩할 수 있는 다음 17 * n + 5 값으로 반올림되며, 생성된 길이는 해당 범위 내에 있어야 합니다.
  • 768픽셀의 짧은 변. height와 width의 기본값은 첫 번째 키프레임의 종횡비(없을 경우 16:9)에 해당하는 MiniMax-H3 자체 캔버스이며, 32의 배수여야 합니다.
  • 하나의 생성기, 세 번의 추출. 요청은 먼저 키프레임 또는 참조 조건 노이즈를 추출한 다음, 비디오 노이즈, 그리고 오디오 노이즈를 순서대로 전달받은 generator에서 추출합니다. 따라서 동일한 생성기 상태에서 두 번 실행하면 동일한 비디오와 사운드가 반환됩니다. latents 또는 audio_latents를 전달하면 해당 추출을 대체합니다.
  • num_inference_steps counts sigma grid points, the terminal 0 included, so it drives one model evaluation less.

메모리

Transformer만 bfloat16에서 61.7 GB이고 Qwen3-VL conditioner가 62.1 GB이므로, 로딩 방식은 하드웨어에 따라 달라집니다. 모든 설정에서 가장 큰 속도 레버는 더 작은 캔버스입니다: height와 width는 32의 배수만 충족하면 되며, 학습된 1344x768보다 960x544가 스텝당 약 2.3배 빠릅니다.

80 GB 카드 하나에서 ComponentsManager에 구성 요소를 등록하고, 가속기 위/아래로 이동하도록 설정합니다:

import torch
from diffusers import ComponentsManager, ModularPipeline

manager = ComponentsManager()
pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", components_manager=manager)
pipe.load_components(workflow="t2va", dtype=torch.bfloat16)
manager.enable_auto_cpu_offload(device="cuda", memory_reserve_margin="12GB")  # or "mps", "xpu", "cpu"
pipe.transformer.set_attention_backend("_flash_3_hub")  # Hopper, roughly 3x faster; kernels fetched from the Hub

소비자용 카드(24~32 GB)에서는 두 개의 대형 구성 요소를 로드할 때 int8로 양자화하고, transformer의 블록을 CPU RAM에서 스트리밍합니다. 아래 모든 내용은 지원되는 로더만 사용하고 패치는 필요 없으며, bfloat16 체크포인트에서 바로 작동합니다:

import torch
from diffusers import MiniMaxH3Transformer3DModel, ModularPipeline, TorchAoConfig
from diffusers.hooks import apply_group_offloading
from transformers import Qwen3VLForConditionalGeneration
from transformers import TorchAoConfig as TransformersTorchAoConfig
from torchao.quantization import Int8WeightOnlyConfig

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3")
pipe.update_components(
    transformer=MiniMaxH3Transformer3DModel.from_pretrained(
        "MiniMaxAI/MiniMax-H3", subfolder="transformer", dtype=torch.bfloat16,
        quantization_config=TorchAoConfig(
            Int8WeightOnlyConfig(version=2),
            modules_to_not_convert=[
                "proj_in", "audio_proj_in", "context_embedder", "time_embedder", "time_proj",
                "token_refiner", "norm_out", "proj_out", "audio_proj_out",
            ],
        ),
        low_cpu_mem_usage=False,
    ),
    text_encoder=Qwen3VLForConditionalGeneration.from_pretrained(
        "MiniMaxAI/MiniMax-H3", subfolder="text_encoder", dtype=torch.bfloat16,
        quantization_config=TransformersTorchAoConfig(
            Int8WeightOnlyConfig(version=2),
            modules_to_not_convert=["model.visual", "model.language_model.embed_tokens", "model.language_model.norm", "lm_head"],
        ),
    ),
)
pipe.load_components(workflow="t2va", dtype=torch.bfloat16)

# version=2 int8 tensors are pinnable, which streamed offload needs, and freezing removes the one autograd
# path the quantized tensors cannot serve.
pipe.transformer.requires_grad_(False)
pipe.text_encoder.requires_grad_(False)

offload = dict(onload_device=torch.device("cuda"), offload_device=torch.device("cpu"), use_stream=True)
pipe.transformer.enable_group_offload(offload_type="block_level", num_blocks_per_group=1, **offload)
apply_group_offloading(pipe.text_encoder.model, offload_type="leaf_level", **offload)
pipe.vae.to("cuda")  # or "mps", "xpu", "cpu"
pipe.audio_vae.to("cuda")

12~16 GB 환경에서는 비디오 VAE 그룹도 오프로드(offload_type="leaf_level", 스트림 없음)하고 960x544와 같은 작은 캔버스를 사용하면 동일한 레시피가 작동합니다. 가중치가 호스트 RAM에 상주하는 것을 예상하세요. int8 기준 약 75 GB의 RAM이 필요합니다.

카드가 두 장이면 오프로딩할 필요가 없습니다. 파이프라인을 둘로 나누고 각 절반을 각각 다른 디바이스에 배치하세요.

import torch
from diffusers import ComponentsManager, ModularPipeline

workflow = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3").blocks.get_workflow("t2va")

text_manager = ComponentsManager()
text_manager.enable_auto_cpu_offload(device="cuda:1")
conditioner = workflow.sub_blocks.pop("text_encoder").init_pipeline(
    "MiniMaxAI/MiniMax-H3", components_manager=text_manager
)
conditioner.load_components(dtype=torch.bfloat16)

manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda:0")
rest = workflow.init_pipeline("MiniMaxAI/MiniMax-H3", components_manager=manager)
rest.load_components(dtype=torch.bfloat16)

prompt = "A red fox trotting through a snowy pine forest, snow crunching underfoot"
state = conditioner(prompt=prompt)
results = rest(
    state=state,
    num_frames=124,
    generator=torch.Generator().manual_seed(42),
    output=["videos", "audio", "sampling_rate"],
)

80 GB 카드 2장으로 이 방식으로 완전한 bfloat16를 실행할 수 있습니다. 각 절반이 자체 카드에 적합하므로, 한 번 레지던트가 되면 호스트 메모리로 다시 에비트되지 않습니다. 48 GB 카드 2장도 위와 동일한 방식으로 두 구성 요소 모두에 int8 로딩을 적용하여 동일한 결과를 얻을 수 있습니다.

텍스트와 키프레임

MiniMaxH3Blocks는 텍스트에서 비디오 및 오디오 생성과 키프레임 조건화를 지원합니다. 키프레임은 비디오가 시작하는 프레임(image), 끝나는 프레임(last_image), 또는 둘 다를 지정할 수 있습니다.

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. See [Memory](#memory).
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")  # or "mps", "xpu", "cpu"

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", components_manager=manager)
pipe.load_components(workflow="fl2va", dtype=torch.bfloat16)

prompt = "A red fox trotting through a snowy pine forest, snow crunching underfoot"
# `output=` returns exactly the named outputs instead of the whole pipeline state.
outputs = ["videos", "audio", "sampling_rate"]

# Text to video + audio.
results = pipe(prompt=prompt, num_frames=124, generator=torch.Generator().manual_seed(42), output=outputs)

# First frame (and optionally last frame) to video + audio. The canvas follows the first keyframe.
image = load_image(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
)
results = pipe(prompt=prompt, image=image, num_frames=124, generator=torch.Generator().manual_seed(42), output=outputs)

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

비디오와 오디오는 함께 생성되며, sampling_rate를 가진 사운드트랙과 함께 videos 및 audio라는 별개의 출력으로 호출에서 반환됩니다. 이를 하나의 파일로 muxing하는 작업은 호출자에게 맡겨지며, 예를 들어 encode_video()를 사용할 수 있습니다.

Omni-references

ref2va 워크플로우는 정렬된 참조 목록을 조건으로 사용합니다. 최대 9개의 이미지, 3개의 비디오, 3개의 오디오 클립, 총 12개까지 가능합니다. 순서는 의미론적입니다. 프롬프트 제시에서 참조를 라벨링("<Picture 1>", "<Audio 1>", "<Video 1>")하고 공유 오디오/비디오 로터리 시계를 진행시키므로, 동일한 참조를 다른 순서로 재배치하면 다른 요청이 됩니다.

keyframes와 달리, 참조는 생성된 기하학을 고정하지 않습니다. 참조는 자체 해상도로 인코딩되며, 대상 캔버스는 기본적으로 MiniMax-H3의 16:9 비율을 사용합니다.

모달리티마다 참조 클래스가 하나씩 있으며, 각 클래스는 메모리에 있는 미디어와 해당 미디어가 가지는 비율을 보유합니다:

참고mediarate가 선언하는
MiniMaxH3ImageReferenceimage—
MiniMaxH3VideoReferenceframes, 그리고 자체 사운드트랙을 위한 audiofps는 기본값이 MiniMax-H3의 24.0이며, sample_rate
MiniMaxH3AudioReferenceaudiosample_rate, 기본값은 오디오 VAE 자체의

rates는 모든 것이 리샘플링되는 기준입니다. 프레임은 MiniMax-H3 자체의 24 fps로, 웨이브폼은 오디오 VAE의 샘플 레이트로 리샘플링되며, 이 과정에서 프레임 전체를 삭제하거나 복제하는 방식이 사용됩니다. MiniMax-H3 자체의 레이트로 생성된 미디어는 그대로 통과하므로, 다른 레이트로 생성된 데이터만 이를 명시해야 합니다.

Reference는 두 가지 방식 중 하나로 생성됩니다. 클래스의 from_file classmethod를 사용하여 미디어 파일에서 디코딩하거나, 요청이 이미 메모리에 보유하고 있는 미디어에서 직접 구성하는 것입니다. 이전 세대가 피드백으로 입력되는 방식이 바로 이 두 번째 방식입니다(자세한 내용은 세대를 reference로 참조).

블록은 미디어 파일을 절대 열지 않습니다. 경로 디코딩은 라이브러리 전체와 마찬가지로 호출자의 책임입니다. 각 참조 클래스는 from_file 클래스 메서드를 통해 이를 수행하며, 이 메서드는 경로 또는 URL(비디오와 오디오는 PyAV를 통해)을 받아 컨테이너가 보고하는 비율을 가진 참조를 반환합니다. 비디오는 프레임 레이트와 사운드를 함께 가져옵니다. 프레임 레이트를 제거하는 load_video()보다 from_file를 사용하는 것이 좋습니다. 실제 레이트가 손실된 프레임으로 구성된 참조는 잘못된 속도로 조건화되며, 어떤 예외도 발생하지 않습니다.

import torch
from diffusers import ComponentsManager, ModularPipeline
from diffusers.modular_pipelines.minimax_h3 import (
    MiniMaxH3AudioReference,
    MiniMaxH3ImageReference,
    MiniMaxH3VideoReference,
)
from diffusers.utils import load_video
from diffusers.utils.export_utils import encode_video

# `ref2va` is a workflow of the one MiniMax-H3 pipeline; selecting it loads only the `transformer_ref/`
# checkpoint partition, and the manager moves each component on and off the accelerator in turn.
manager = ComponentsManager()
manager.enable_auto_cpu_offload(device="cuda")  # or "mps", "xpu", "cpu"

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", workflow="ref2va", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)

subject = MiniMaxH3ImageReference.from_file(
    "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/astronaut.jpg"
)

# Decoding a file brings its rates along: the video its own frame rate and its soundtrack, the clip its sample rate.
results = pipe(
    prompt="The character speaks in time with the reference recording, natural lip movement",
    references=[
        subject,
        MiniMaxH3VideoReference.from_file(
            "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/hiker.mp4"
        ),
        MiniMaxH3AudioReference.from_file("voice.wav"),
    ],
    num_frames=124,
    output=["videos", "audio", "sampling_rate"],
)

# Frames a request already holds declare the rate they carry — `load_video` does not preserve it.
motion = load_video("motion_ref.mp4")
results = pipe(
    prompt="The subject walks toward camera, matching the reference video's shot rhythm",
    references=[subject, MiniMaxH3VideoReference(frames=motion, fps=30.0)],
    num_frames=124,
    output=["videos", "audio", "sampling_rate"],
)

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

num_frames은 ref2va에 필수적입니다. 참조 사운드트랙과 정확히 동일한 길이의 영상을 생성하려면 클립에서 계산해야 합니다 — round(samples / sample_rate * 24) — 그리고 이 값은 영상 VAE가 디코딩할 수 있는 다음 17 * n + 5로 반올림됩니다. 최종 생성되는 길이는 MiniMax-H3가 생성하는 5초에서 15초 사이여야 합니다.

참고용 생성

워크플로가 하나의 파이프라인을 공유하므로, t2va 생성 결과는 ref2va 참조로 바로 다시 사용할 수 있으며, 인메모리 생성자는 정확히 이러한 전달을 위해 설계되었습니다. 생성된 미디어는 이미 MiniMax-H3 자체의 비율(프레임은 24 fps, 사운드트랙은 오디오 VAE의 샘플 레이트)에 맞춰져 있어 참조에 레이트 인자가 필요하지 않으며, 손실 압축 컨테이너를 통해 재인코딩되는 과정도 없습니다:

import torch
from diffusers import ComponentsManager, ModularPipeline
from diffusers.modular_pipelines.minimax_h3 import MiniMaxH3VideoReference

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

# The full pipeline holds every workflow and picks one per call from the inputs. Loading without a
# `workflow=` brings both transformer partitions in one call, so the `ref2va` request that follows the
# `t2va` generation needs no further loading.
pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", components_manager=manager)
pipe.load_components(dtype=torch.bfloat16)

results = pipe(
    prompt="An astronaut hiking through the mountains, humming a tune",
    num_frames=124,
    output=["videos", "audio", "sampling_rate"],
)

reference = MiniMaxH3VideoReference(
    frames=results["videos"][0],
    audio=results["audio"][0],
    sample_rate=results["sampling_rate"],
)
results = pipe(
    prompt="The same astronaut now walks along a beach at sunset, humming the same tune",
    references=[reference],
    num_frames=124,
    output=["videos", "audio", "sampling_rate"],
)

MiniMaxH3ModularPipeline

class diffusers.MiniMaxH3ModularPipeline

< >

( 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 )

MiniMax-H3를 활용한 비디오 + 오디오 결합 생성을 위한 ModularPipeline: transformer/ 체크포인트 파티션에 대한 t2va(텍스트 전용) 및 fl2va(첫 번째 및/또는 마지막 키프레임) 워크플로, 그리고 transformer_ref/에 대한 ref2va(오미-리퍼런스) 워크플로입니다. 하나의 저장소에 두 파티션이 모두 포함되어 있으며, 워크플로를 선택하면 해당

own:

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", workflow="ref2va")

MiniMax-H3은 텍스트 조건부, 키프레임 조건부 잠재 변수, 오디오 잠재 변수, 비디오 잠재 변수를 모두 포함하는 하나의 패킹된 시퀀스를 디노이즈합니다. 이 때문에 블록들은 모달리티별 텐서 대신 행 레이아웃을 전달하며, 파이프라인은 단일 트랜스포머 호출 내에서 단계가 진행되는 두 개의 스케줄러(shift = 12.0는 비디오용, shift = 3.0는 오디오용)를 포함합니다.

체크포인트는 guidance-distilled입니다. guidance가 가중치에 이미 반영되어 있으므로 guider, negative_prompt, guidance_scale이 없으며, 모든 단계에서 정확히 한 번의 forward pass만 실행됩니다.

MiniMax-H3는 모듈식만 지원합니다. 이 파이프라인과 그 블록들이 통합의 전부이며, DiffusionPipeline의 일부는 존재하지 않습니다. 이 모듈은 모든 블록이 참조하는 모델 정보를 담고 있습니다. config에서 파생된 기하학적 구조는 프로퍼티로, 캔버스와 프레임 수 계산은 함수로 제공되며, 조건부 설정, 인코딩 및 노이즈 계약은 블록 자체에 정의되어 있습니다.

import torch
from diffusers import ModularPipeline

pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3")
pipe.load_components(dtype=torch.bfloat16)

MiniMaxH3Blocks

클래스 diffusers.MiniMaxH3Blocks

< >

( )

MiniMax-H3를 활용한 영상 + 오디오 결합 생성을 위한 Auto Modular 파이프라인 블록: references 및 keyframe 입력에 따라 선택되는 t2va (텍스트 전용), fl2va (첫 번째 및/또는 마지막 keyframe), ref2va (omni-reference) 워크플로우입니다. workflow=가 없으면 구성 요소를 로드할 때 두 개의 61.7GB transformer 파티션이 모두 로드되므로, 작업에 필요한 것만 로드하려면 하나를 전달하세요.

지원되는 워크플로:

  • 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)

Configs: canvas_short_edge (기본값: 768) canvas_max_pixels (기본값: 1032192) reference_image_short_edge (기본값: 2048)

Inputs: references (list, 선택 사항): 조건으로 사용할 참조 자료입니다. 모델이 읽어야 할 순서대로 제공해야 합니다. 순서는 프롬프트 제시 시 라벨을 지정하고 공유 회전 시계(rotary clock)에 배치하는 방식이므로, 순서가 다르면 다른 요청이 됩니다. 각 모달리티마다 하나의 dataclass를 사용하며, 모두 메모리 내 미디어를 포함합니다. MiniMaxH3ImageReference(최대 9개), 자체 fps를 가진 MiniMaxH3VideoReference(최대 3개, audio 사운드트랙도 조건으로 사용됨), 또는 자체 sample_rate를 가진 MiniMaxH3AudioReference(최대 3개) — 총 12개까지의 참조 자료를 사용할 수 있으며, 오디오 참조 자료만 단독으로 사용할 수는 없습니다. 이러한 블록은 미디어 파일을 열지 않습니다: 각 클래스의 from_file 클래스 메서드를 사용하여 디코딩하면 레이트가 함께 가져와집니다. height (int, 선택 사항): 생성된 비디오의 픽셀 단위 높이로, 32의 배수여야 합니다. width (int, 선택 사항): 생성된 비디오의 픽셀 단위 너비로, 32의 배수여야 합니다. num_frames (int, 선택 사항): 고정된 24 fps에서 생성할 프레임 수입니다. 비디오 VAE가 디코딩할 수 있는 다음 17 * n + 5 값으로 올림됩니다. 결과 지속 시간은 5초에서 15초 사이여야 합니다. 참조 사운드트랙과 동일한 길이의 비디오를 생성하려면 round(samples / sample_rate * 24)를 전달하세요. image (Image, 선택 사항): 비디오가 시작하는 키프레임입니다. 신장되어 대상 캔버스에 배치되며, 기본적으로 자체 종횡비에서 파생된 캔버스가 사용됩니다. last_image (Image, 선택 사항): 비디오가 끝나는 키프레임입니다. 단독으로 전달하여 특정 프레임까지 생성할 수 있습니다. image와 함께 전달되면 두 개 중 후속 요소가 되어 캔버스에 커버 크롭됩니다. prompt (str): 생성을 안내하는 프롬프트로, 단일 문자열입니다. normalized_references (list, 선택 사항): 설정 단계에서 정규화된 참조 자료로, 패킹 순서대로 나열됩니다. keyframes (list, 선택 사항): 대상 캔버스에 배치된 키프레임으로, 패킹 순서대로 나열됩니다. condition_latents (list, 선택 사항): 인코딩된 비디오 조건 latents로, 패킹 순서대로 이미지 및 비디오 참조 자료마다 하나씩 있습니다. 그 형상은 모든 참조 블록의 기하학적 구조가 유래하는 곳입니다. audio_condition_latents (list, 선택 사항): 인코딩된 오디오 조건 행(row)으로, 패킹 순서대로 오디오를 포함하는 참조 자료마다 하나씩 있습니다. generator (Generator, 선택 사항): 요청의 생성기입니다. 조건 노이즈가 먼저 추출되며, 조건마다 한 번씩 추출된 후 생성된 행의 노이즈가 추출됩니다. latents (Tensor): (1, 24, num_latent_frames, latent_height, latent_width) 형상의 사전 생성된 비디오 노이즈로, 추출 대신 사용됩니다. audio_latents (Tensor): (2, 32, num_audio_latents) 형상의 사전 생성된 오디오 노이즈입니다. num_inference_steps (int, 선택 사항, 기본값 50): 디노이징 단계 수입니다. *denoiser_input_fields (None,선택 사항): 트랜스포머가 이름으로 읽는 패킹된 시퀀스의 구조적 설명입니다: token_tags, position_ids 및 세 개의 행 인덱스 텐서. attention_kwargs (dict,선택 사항): 어텐션 프로세서용 추가 kwargs입니다. keyframe_anchors (tuple,선택 사항, 기본값 ()): 패킹 순서대로 각 키프레임이 비디오의 어느 끝에 앵커링되는지 지정합니다. output_type (str,선택 사항*, 기본값 pil): 출력 형식: ‘pil’, ‘np’ 또는 ‘pt’.

Outputs: videos (list): 생성된 비디오. audio (Tensor): 생성된 사운드트랙, 모양은 (1, 2, num_samples)입니다. sampling_rate (int): 생성된 사운드트랙의 Hz 단위 샘플링 레이트.

MiniMaxH3ImageReference

class diffusers.modular_pipelines.minimax_h3.MiniMaxH3ImageReference

< >

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

매개변수

  • image (PIL.Image.Image, np.ndarray 또는 torch.Tensor) — 참조 이미지: 이미지, (height, width, 3) 배열 또는 (3, height, width) 텐서이며, uint8 형식 또는 [0, 1] 범위의 부동소수점 값입니다. 생성된 기하 구조에 절대 구속되지 않으며, 요청이 생성하는 캔버스와 무관하게 자체의 짧은 변 기준으로 인코딩됩니다(발행된 체크포인트의 경우 2048).

주제, 스타일 또는 장면 참조: 요청당 최대 9개.

from_file

< >

( media )

매개변수

  • media (str 또는 os.PathLike) — 이미지의 경로 또는 URL.

MiniMaxH3ImageReference에 load_image()를 통해 이미지 파일을 로드합니다.

MiniMaxH3VideoReference

class diffusers.modular_pipelines.minimax_h3.MiniMaxH3VideoReference

< >

( 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 또는 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이므로, 다른 레이트의 프레임은 전체 프레임을 삭제하고 복제하여 24 fps로 리샘플링됩니다. 따라서 프레임이 파일에서 가져온 경우 이 필드를 올바르게 설정하는 것이 중요합니다.
  • audio (torch.Tensor, shape (channels, num_samples), 선택 사항) — 이 비디오의 사운드트랙으로, 모노 또는 스테레오입니다. 참조 대상 자체의 사운드트랙으로 조건화되며, 참조 대상이 아닌 다른 사운드트랙으로 조건화되지 않습니다. 이 인수를 생략하면 참조 대상은 움직임만으로 조건화됩니다.
  • sample_rate (int, 선택 사항) — audio가 샘플을 처리하는 비율입니다. 이 값을 지정하지 않으면 오디오 VAE 자체의 비율을 사용하며, 이 경우 샘플은 그대로 유지됩니다. 다른 비율을 지정하면 해당 비율로 리샘플링됩니다.

모션 및 카메라 참조: 요청당 최대 3개까지 가능하며, 각 참조는 자체 사운드트랙과 함께 조건부로 사용됩니다.

from_file

< >

( media ) → MiniMaxH3VideoReference

매개변수

  • media (str 또는 os.PathLike) — 비디오의 경로 또는 URL.

반환값

MiniMaxH3VideoReference

(num_frames, height, width, 3) uint8 프레임은 컨테이너가 보고하는 프레임 레이트를 가지며, 오디오 스트림이 있는 경우 해당 사운드트랙과 그 사운드트랙의 자체 샘플 레이트를 포함합니다.

MiniMaxH3VideoReference로 비디오 파일을 디코딩합니다. 이때 해당 비디오가 가진 해상도, 프레임 레이트, 사운드트랙을 그대로 유지합니다.

속도는 참조(reference)에 기록됩니다. 이는 load_video() 대신 이 방식으로 디코딩하는 이유입니다. MiniMax-H3는 참조를 자체 24 fps로 리샘플링하므로, 입력 과정에서 손실된 프레임 레이트는 잘못된 속도로 조건부 설정된 요청이 되며, 이를 알리는 어떠한 경고도 없습니다. 메타데이터가 잘못된 컨테이너는 반환된 참조에서 fps 또는 sample_rate를 오버라이드하여 수정할 수 있습니다.

PyAV가 필요합니다.

MiniMaxH3AudioReference

class diffusers.modular_pipelines.minimax_h3.MiniMaxH3AudioReference

< >

( audio: Tensorsample_rate: int | None = None )

매개변수

  • audio (torch.Tensor, shape (channels, num_samples)) — 모노 또는 스테레오 기준 웨이브폼입니다.
  • sample_rate (int, 선택 사항) — audio가 샘플을 처리하는 비율입니다. 이 값을 지정하지 않으면 오디오 VAE 자체의 비율을 사용하며, 이 경우 샘플은 그대로 유지됩니다. 다른 비율을 지정하면 해당 비율로 리샘플링됩니다.

음성 또는 음악 참조: 요청당 최대 3개이며 단독으로 사용할 수 없습니다. 오디오 참조는 반드시 이미지 또는 비디오 참조와 함께 사용해야 합니다. conditioner에는 전달되지 않으며 오디오 VAE에 의해만 인코딩됩니다.

from_file

< >

( media ) → MiniMaxH3AudioReference

매개변수

  • media (str 또는 os.PathLike) — 오디오의 경로 또는 URL, 또는 사운드트랙이 추출될 비디오의 경로 또는 URL.

반환값

MiniMaxH3AudioReference

컨테이너가 보고하는 샘플 레이트의 (channels, num_samples) float32 웨이브폼

MiniMaxH3AudioReference로 오디오 파일을 해당 파일이 포함하는 샘플 레이트로 디코딩합니다.

PyAV가 필요합니다.

Update on GitHub