Diffusers documentation
MiniMax-H3
MiniMax-H3
MiniMax-H3 tạo ra video và âm thanh của nó cùng lúc. Một transformer duy nhất khử nhiễu một chuỗi được đóng gói chứa điều kiện văn bản, phương tiện điều kiện, và các latent video và âm thanh đích. Không có vocoder riêng biệt và không có bước xử lý âm thanh sau: video và âm thanh được tạo ra từ cùng một vòng lặp khử nhiễu.
Bạn có thể tìm thấy các checkpoint MiniMax-H3 gốc dưới tổ chức MiniMaxAI.
MiniMax-H3 được tích hợp dưới dạng các khối Modular Diffusers duy nhất, giống như cách Anima được tích hợp: các khối và MiniMaxH3ModularPipeline của chúng là toàn bộ phần tích hợp, và không có nửa DiffusionPipeline.
Bố cục checkpoint
MiniMax-H3 được phát hành dưới dạng hai phân vùng checkpoint chia sẻ mọi thành phần ngoại trừ transformer, do đó quá trình chuyển đổi diffusers đặt cả hai vào một kho lưu trữ:
| Thư mục con | Quy trình làm việc |
|---|---|
transformer/ | t2va (chỉ văn bản), fl2va (khung hình chính đầu tiên và/hoặc cuối cùng) |
transformer_ref/ | ref2va (một hỗn hợp có thứ tự của các tham chiếu hình ảnh, video và âm thanh) |
Mọi thứ ngoại trừ transformer, tức là video VAE, audio VAE, bộ điều kiện Qwen3-VL, tokenizer và processor của nó, cùng hai scheduler, đều được chia sẻ và chỉ lưu trữ một lần.
Bộ điều kiện là Qwen3VLForConditionalGeneration, và MiniMax-H3 đọc trạng thái ẩn chưa chuẩn hóa sau lớp decoder thứ 50 thay vì lớp cuối cùng, do đó toàn bộ checkpoint được phát hành được sử dụng với đầu mô hình ngôn ngữ không được dùng đến.
Cả ba tác vụ đều là các luồng công việc của MiniMaxH3Blocks, và kho lưu trữ chứa một modular_model_index.json đặt tên cho mọi thành phần cùng với thông số tải riêng của chúng. Để triển khai một tác vụ duy nhất, hãy truyền luồng công việc đó vào from_pretrained: nó chỉ giữ lại các khối của luồng công việc đó, nên chữ ký của pipeline (pipe.doc) mô tả chính xác các đầu vào của tác vụ đó, chỉ các thành phần của tác vụ đó được khai báo, và load_components chỉ lấy đúng các thư mục con của chúng — một pipeline t2va / fl2va sẽ không bao giờ chạm đến transformer_ref/, còn một pipeline ref2va sẽ không bao giờ chạm đến transformer/.
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", workflow="ref2va")
pipe.load_components(dtype=torch.bfloat16)
pipe.docin ra những gì pipeline trước mặt bạn nhận vào và trả về — mọi đầu vào cùng giá trị mặc định, các thành phần mà nó kỳ vọng và các đầu ra mà nó tạo ra. Được rút gọn xuống một quy trình duy nhất, nó mô tả chính xác nhiệm vụ đó, đây là cách nhanh nhất để xem một yêu cầu cần gì trước khi thực hiện.
Để giữ mọi workflow khả dụng trên một pipeline duy nhất, hãy bỏ qua đối số workflow: khi đó pipeline sẽ tự chọn workflow cho từng lần gọi dựa trên các đầu vào được truyền vào.
pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3")Việc tải vẫn có thể được thực hiện theo từng quy trình một. Một lệnh gọi duy nhất này sẽ lấy transformer/ và tất cả các thành phần dùng chung, phục vụ cho cả t2va và fl2va:
pipe.load_components(workflow="t2va", dtype=torch.bfloat16)Một lệnh load_components() đơn thuần không có workflow= sẽ tải cả hai phân vùng transformer 61.7GB, điều này cho phép một pipeline phục vụ cả ba workflow mà không cần thêm lệnh tải nào khác. Kết hợp nó với ComponentsManager và auto offloading: trọng số nằm trong RAM của host và trình quản lý chỉ chuyển lên bộ tăng tốc những gì mỗi bước cần, nên khi bộ khử nhiễu ref2va yêu cầu thiết bị, chiến lược sẽ offload bất kỳ thứ gì để giải phóng đủ dung lượng. Xem Memory để biết các công thức.
Hai trình lập lịch
Latents video và audio đi theo hai lịch trình khác nhau trong một lần gọi transformer duy nhất cho mỗi bước, đó là lý do các khối mong đợi hai instance MiniMaxH3Scheduler: scheduler cho latents video (shift=12.0 trong các checkpoint đã phát hành) và audio_scheduler cho latents audio (shift=3.0).
Cả hai phân vùng transformer đều được chưng cất theo hướng dẫn, vì điều này đúng với mọi quy trình làm việc: hướng dẫn được tích hợp vào trọng số, không có bộ hướng dẫn, không có negative_prompt và không có guidance_scale, và mỗi bước chỉ chạy đúng một lần truyền thẳng.
Ràng buộc sinh
- 24 fps, 5 đến 15 giây.
num_framesđược làm tròn lên đến giá trị17 * n + 5gần nhất mà video VAE có thể giải mã, và thời lượng kết quả phải nằm trong khoảng đó. - Cạnh ngắn 768 pixel.
heightvàwidthmặc định là canvas riêng của MiniMax-H3 cho tỷ lệ khung hình của keyframe đầu tiên (hoặc 16:9 nếu không có) và phải là bội số của 32. - Một generator, ba lần rút. Một yêu cầu sẽ rút nhiễu điều kiện keyframe hoặc tham chiếu trước tiên, sau đó là nhiễu video, rồi đến nhiễu âm thanh, tất cả đều từ
generatorđược truyền vào, do đó hai lần chạy từ cùng một trạng thái generator sẽ trả về cùng một video và bản nhạc nền. Việc truyềnlatentshoặcaudio_latentssẽ thay thế lần rút tương ứng. num_inference_stepsđếm các điểm lưới sigma, bao gồm0cuối cùng, do đó nó dẫn đến ít một lần đánh giá mô hình hơn.
Bộ nhớ
Mô hình transformer đơn thuần chiếm 61,7 GB ở bfloat16 và bộ điều kiện Qwen3-VL chiếm thêm 62,1 GB, nên quy trình nạp phụ thuộc vào phần cứng. Kích thước khung hình nhỏ hơn là đòn bẩy tốc độ lớn nhất trên mọi cấu hình: height và width chỉ cần là bội số của 32, và 960x544 chạy nhanh hơn khoảng 2,3 lần mỗi bước so với 1344x768 được huấn luyện.
Trên một card 80 GB, đăng ký các thành phần trong ComponentsManager và để nó di chuyển chúng lên và xuống bộ tăng tốc:
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 HubTrên card tiêu dùng (24 đến 32 GB), hãy lượng tử hóa hai thành phần lớn xuống int8 khi chúng được nạp và stream các khối của transformer từ RAM CPU. Tất cả các nội dung bên dưới chỉ sử dụng các trình nạp được hỗ trợ, không cần vá, và hoạt động trực tiếp từ checkpoint 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")Trên 12 đến 16 GB, cùng một công thức vẫn hoạt động khi nhóm video VAE cũng được offload (offload_type="leaf_level", không có stream) và một canvas nhỏ như 960x544. Hãy kỳ vọng các trọng số sẽ nằm trong RAM của host: khoảng 75 GB ở int8.
Với hai thẻ, không cần phải offload: chia pipeline thành hai phần và đặt mỗi phần trên một thiết bị riêng.
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"],
)Hai thẻ 80 GB chạy đầy đủ bfloat16 theo cách này: mỗi nửa nằm gọn trên một thẻ riêng, nên không có gì bị đẩy ngược về bộ nhớ host một khi đã được nạp. Hai thẻ 48 GB làm tương tự với việc nạp int8 ở trên cho cả hai thành phần.
Văn bản và các khung hình chính
MiniMaxH3Blocks hỗ trợ tạo video và âm thanh từ văn bản cũng như điều kiện theo khung hình chính. Khung hình chính có thể là khung hình mà video bắt đầu (image), khung hình mà video kết thúc (last_image), hoặc cả hai.
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"],
)Video và audio được tạo đồng thời và được trả về từ cuộc gọi dưới dạng các đầu ra riêng biệt, videos và audio, bên cạnh sampling_rate mà bản nhạc nền mang theo; việc ghép chúng vào một tệp duy nhất được để lại cho người gọi, ví dụ bằng encode_video().
Tham chiếu toàn diện
Workflow ref2va điều kiện dựa trên một danh sách các tham chiếu có thứ tự: tối đa 9 hình ảnh, 3 video và 3 đoạn âm thanh, tổng cộng 12 mục. Thứ tự mang tính ngữ nghĩa. Nó gắn nhãn cho các tham chiếu trong cách trình bày prompt ("<Picture 1>", "<Audio 1>", "<Video 1>") và nó làm tiến bộ đồng hồ rotary âm thanh/video dùng chung, do đó việc sắp xếp lại cùng các tham chiếu đó sẽ tạo thành một yêu cầu khác.
Khác với các keyframe ở trên, các tham chiếu không ràng buộc hình học được tạo ra: chúng được mã hóa ở độ phân giải riêng của chúng và khung canvas đích mặc định là 16:9 của MiniMax-H3.
Có một lớp tham chiếu cho mỗi phương thức, mỗi lớp lưu trữ phương tiện trong bộ nhớ và tốc độ mà phương tiện mang theo:
| tham khảo | media | tốc độ mà nó khai báo |
|---|---|---|
| MiniMaxH3ImageReference | image | — |
| MiniMaxH3VideoReference | frames, và audio cho bản nhạc nền của nó | fps, mặc định là 24.0 của MiniMax-H3, và sample_rate |
| MiniMaxH3AudioReference | audio | sample_rate, mặc định là của VAE âm thanh |
Các tần số là nơi mọi thứ được lấy mẫu lại: các khung hình được chuyển sang 24 fps của chính MiniMax-H3 bằng cách loại bỏ và nhân bản toàn bộ các khung hình, còn dạng sóng được chuyển sang tần số lấy mẫu của VAE âm thanh. Phương tiện có tần số trùng với tần số của MiniMax-H3 sẽ đi qua mà không bị thay đổi, do đó chỉ dữ liệu được tạo ở tần số khác mới cần khai báo điều này.
Một tham chiếu được xây dựng theo một trong hai cách: giải mã từ tệp phương tiện bằng phương thức lớp from_file của lớp, hoặc được xây dựng trực tiếp từ phương tiện mà yêu cầu đã giữ trong bộ nhớ — đây là cách một thế hệ trước đó được phản hồi lại (xem Một thế hệ như một tham chiếu).
Các khối không bao giờ mở tệp media — việc giải mã đường dẫn là trách nhiệm của người gọi, giống như ở mọi nơi khác trong thư viện. Mỗi lớp tham chiếu thực hiện điều này thông qua classmethod from_file, nhận một đường dẫn hoặc URL (video và audio thông qua PyAV) và trả về một tham chiếu mang các tỷ lệ mà container báo cáo — một video sẽ kèm theo tỷ lệ khung hình và bản nhạc nền của nó. Nên dùng from_file thay vì load_video(), vì hàm này làm mất tỷ lệ khung hình: một tham chiếu được xây dựng từ các khung hình mà tỷ lệ thực của chúng đã bị mất sẽ được điều kiện hóa ở tốc độ sai, và không có gì báo lỗi.
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 là bắt buộc đối với ref2va. Để tạo video có độ dài chính xác bằng bản nhạc nền tham chiếu, hãy tính từ clip — round(samples / sample_rate * 24) — và giá trị này sẽ được làm tròn lên bội số tiếp theo của 17 * n + 5 mà VAE video có thể giải mã; độ dài kết quả phải nằm trong khoảng từ 5 đến 15 giây mà MiniMax-H3 tạo ra.
Một thế hệ như một tham chiếu
Vì các workflow chia sẻ một pipeline, một bản tạo t2va có thể được đưa trực tiếp trở lại làm tham chiếu ref2va — và bộ khởi tạo trong bộ nhớ được xây dựng chính xác cho việc chuyển giao này. Phương tiện được tạo ra đã ở đúng tốc độ của chính MiniMax-H3 (khung hình ở 24 fps, bản nhạc nền ở tốc độ lấy mẫu của VAE âm thanh), do đó tham chiếu không cần các đối số tốc độ và không có gì bị mã hóa lại qua một container mất mát trên đường đi:
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
lớp diffusers.MiniMaxH3ModularPipeline
< source >( 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 )
Một ModularPipeline để tạo video + âm thanh đồng thời với MiniMax-H3: các luồng công việc t2va (chỉ văn bản) và fl2va (khung hình chính đầu và/hoặc cuối) đối với phân vùng checkpoint transformer/, và luồng công việc ref2va (tham chiếu toàn diện) đối với transformer_ref/. Một kho chứa cả hai phân vùng, và việc chọn một luồng công việc chỉ tải
MiniMax-H3 khử nhiễu một chuỗi được đóng gói chứa đồng thời điều kiện văn bản, các latent điều kiện keyframe, các latent âm thanh và các latent video, đó là lý do tại sao các khối truyền một bố cục hàng thay vì các tensor theo từng phương thức, và lý do tại sao pipeline mang theo hai scheduler (shift = 12.0 cho video, shift = 3.0 cho âm thanh) được thực hiện trong một lần gọi transformer duy nhất.
Checkpoint được chưng cất từ guidance: guidance đã được tích hợp vào trọng số, do đó không có guider, không có negative_prompt và không có guidance_scale, và mỗi bước chỉ chạy đúng một lần forward pass.
MiniMax-H3 chỉ mang tính mô-đun: pipeline này cùng các khối của nó là toàn bộ tích hợp, không có nửa DiffusionPipeline. Module này mang các thông tin mô hình mà mọi khối đều dựa vào — hình học suy ra từ config dưới dạng các thuộc tính, và các phép tính về canvas cùng số khung dưới dạng các hàm — trong khi các hợp đồng về điều kiện, mã hóa và nhiễu nằm ngay trên chính các khối.
MiniMaxH3Blocks
Các khối pipeline Auto Modular cho việc tạo video + âm thanh đồng thời với MiniMax-H3: các luồng công việc t2va (chỉ văn bản), fl2va (khung hình chính đầu và/hoặc cuối) và ref2va (tham chiếu toàn diện), được chọn dựa trên các đầu vào references và khung hình chính. Nếu không có workflow=, việc nạp các thành phần sẽ kéo cả hai phân vùng transformer 61.7GB — hãy truyền một trong số chúng để chỉ nạp những gì nhiệm vụ cần.
Các quy trình làm việc được hỗ trợ:
t2va: yêu cầupromptfl2va: yêu cầuprompt,imagehoặcprompt,last_imageref2va: yêu cầuprompt,references
Các thành phần:
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 (mặc định: 768) canvas_max_pixels (mặc định: 1032192) reference_image_short_edge (mặc định: 2048)
Đầu vào:
references (list, tùy chọn):
Các tham chiếu để điều kiện hóa, theo thứ tự mà mô hình nên đọc chúng: thứ tự này gắn nhãn cho chúng trong cách trình bày prompt và bố trí chúng trên đồng hồ rotary chung, do đó một thứ tự khác sẽ là một yêu cầu khác. Mỗi dataclass cho một chế độ (modality), tất cả đều giữ phương tiện trong bộ nhớ — một MiniMaxH3ImageReference (tối đa 9), một MiniMaxH3VideoReference với fps riêng của nó (tối đa 3, trong đó bản nhạc nền audio cũng được điều kiện hóa), hoặc một MiniMaxH3AudioReference với sample_rate riêng của nó (tối đa 3) — tổng cộng tối đa 12 tham chiếu, và các tham chiếu audio không thể là duy nhất. Các khối này không bao giờ mở tệp phương tiện: hãy giải mã bằng classmethod from_file của từng lớp, điều này sẽ mang theo các tần số.
height (int, tùy chọn):
Chiều cao của video được tạo ra tính bằng pixel, phải là bội số của 32.
width (int, tùy chọn):
Chiều rộng của video được tạo ra tính bằng pixel, phải là bội số của 32.
num_frames (int, tùy chọn):
Số khung hình cần tạo ra, ở tốc độ 24 fps cố định. Được làm tròn lên đến 17 * n + 5 kế tiếp mà VAE video có thể giải mã; thời lượng kết quả phải nằm trong khoảng từ 5 đến 15 giây. Để tạo một video dài bằng bản nhạc nền tham chiếu, hãy truyền round(samples / sample_rate * 24).
image (Image, tùy chọn):
Khung hình chính (keyframe) mà video bắt đầu từ đó. Nó được kéo giãn lên canvas đích, mặc định được suy ra từ tỷ lệ khung hình của chính nó.
last_image (Image, tùy chọn):
Khung hình chính mà video kết thúc ở đó. Có thể truyền riêng lẻ để tạo đến một khung hình. Khi kết hợp với image, nó là phần theo sau của hai khung hình và được cắt theo kiểu cover lên canvas.
prompt (str):
Prompt để hướng dẫn quá trình tạo ra, là một chuỗi duy nhất.
normalized_references (list, tùy chọn):
Các tham chiếu đã được chuẩn hóa bởi bước thiết lập, theo thứ tự đóng gói.
keyframes (list, tùy chọn):
Các khung hình chính được đặt lên canvas đích, theo thứ tự đóng gói.
condition_latents (list, tùy chọn):
Các latents điều kiện video đã được mã hóa, một cho mỗi tham chiếu hình ảnh và video theo thứ tự đóng gói. Hình dạng của chúng là nơi mà hình học của mỗi khối tham chiếu bắt nguồn.
audio_condition_latents (list, tùy chọn):
Các hàng điều kiện audio đã được mã hóa, một cho mỗi tham chiếu chứa audio theo thứ tự đóng gói.
generator (Generator, tùy chọn):
Trình tạo của yêu cầu. Nhiễu điều kiện được lấy từ nó trước tiên, một lần lấy cho mỗi điều kiện, trước khi lấy nhiễu của các hàng được tạo ra.
latents (Tensor):
Nhiễu video được tạo trước có hình dạng (1, 24, num_latent_frames, latent_height, latent_width), được sử dụng thay cho việc lấy ngẫu nhiên.
audio_latents (Tensor):
Nhiễu audio được tạo trước có hình dạng (2, 32, num_audio_latents).
num_inference_steps (int, tùy chọn, mặc định là 50):
Số bước khử nhiễu.
*denoiser_input_fields (None,tùy chọn):
Mô tả cấu trúc của chuỗi đóng gói mà transformer đọc theo tên: token_tags, position_ids và ba tensor chỉ số hàng.
attention_kwargs (dict,tùy chọn):
Các kwargs bổ sung cho các bộ xử lý attention.
keyframe_anchors (tuple,tùy chọn, mặc định là ()):
Đầu nào của video mà mỗi khung hình chính được neo vào, theo thứ tự đóng gói.
output_type (str,tùy chọn*, mặc định là pil):
Định dạng đầu ra: ‘pil’, ‘np’ hoặc ‘pt’.
Outputs:
videos (list):
Video được tạo ra.
audio (Tensor):
Âm thanh được tạo ra, có hình dạng (1, 2, num_samples).
sampling_rate (int):
Tần số lấy mẫu của âm thanh được tạo ra, tính bằng Hz.
MiniMaxH3ImageReference
class diffusers.modular_pipelines.minimax_h3.MiniMaxH3ImageReference
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor] )
Tham số
- image (
PIL.Image.Image,np.ndarrayhoặctorch.Tensor) — Hình ảnh tham chiếu: một hình ảnh, một mảng(height, width, 3)hoặc một tensor(3, height, width),uint8hoặc số dấu phẩy động trong khoảng[0, 1]. Nó không bao giờ ràng buộc hình học được tạo ra — nó được mã hóa ở cạnh ngắn của chính nó, 2048 đối với checkpoint đã phát hành, bất kể canvas mà yêu cầu tạo ra là gì.
Tham chiếu chủ thể, phong cách hoặc cảnh: tối đa 9 tham chiếu mỗi yêu cầu.
from_file
< source >( media )
Tải tệp ảnh vào MiniMaxH3ImageReference, thông qua load_image().
MiniMaxH3VideoReference
class diffusers.modular_pipelines.minimax_h3.MiniMaxH3VideoReference
< source >( frames: typing.Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor]fps: float | None = Noneaudio: typing.Optional[torch.Tensor] = Nonesample_rate: int | None = None )
Tham số
- frames (
list[PIL.Image.Image],np.ndarrayhoặctorch.Tensor) — Các khung tham chiếu: một danh sách các hình ảnh, một mảng(num_frames, height, width, 3)hoặc một tensor(num_frames, 3, height, width),uint8hoặc số dấu phẩy động trong khoảng[0, 1]. - fps (
float, tùy chọn, mặc định là 24.0) — Tốc độ khung hình màframesmang theo, đây là yếu tố quyết định việc đặt các khối thị giác của tham chiếu lên lưới 2 fps của bộ điều kiện. Đồng hồ riêng của MiniMax-H3 là 24 fps, do đó bất kỳ tốc độ nào khác đều được lấy mẫu lại lên 24 fps bằng cách loại bỏ và nhân bản toàn bộ các khung hình — điều này khiến trường này trở thành nơi cần thiết lập chính xác khi các khung hình được lấy từ một tệp. - audio (
torch.Tensorcó hình dạng(channels, num_samples), tùy chọn) — Bản nhạc nền của video này, đơn âm hoặc stereo, được điều kiện như bản thân của tham chiếu chứ không phải như một tham chiếu riêng. Nếu bỏ qua, tham chiếu sẽ chỉ điều kiện dựa trên chuyển động. - sample_rate (
int, tùy chọn) — Tốc độ màaudiomang các mẫu của nó. Nếu bỏ trống, giá trị này sẽ là tốc độ riêng của VAE audio, khiến các mẫu không bị thay đổi; bất kỳ tốc độ nào khác sẽ được lấy mẫu lại lên tốc độ đó.
Tham chiếu chuyển động và máy quay: tối đa 3 mỗi yêu cầu, được điều kiện cùng với bản nhạc nền riêng của nó.
from_file
< source >( media ) → MiniMaxH3VideoReference
Giải mã tệp video thành MiniMaxH3VideoReference, với độ phân giải, tốc độ khung hình và âm thanh đi kèm.
Các tỷ lệ được đặt lên reference, đây chính là mục đích của việc giải mã theo cách này thay vì dùng load_video(): MiniMax-H3 sẽ lấy lại mẫu reference lên 24 fps của chính nó, do đó tỷ lệ khung hình bị mất trong quá trình đưa vào sẽ là một yêu cầu được điều kiện ở tốc độ sai, và không có gì để cảnh báo về điều đó. Một container có metadata sai sẽ được sửa bằng cách ghi đè fps hoặc sample_rate trên reference được trả về.
Cần PyAV.
MiniMaxH3AudioReference
class diffusers.modular_pipelines.minimax_h3.MiniMaxH3AudioReference
< source >( audio: Tensorsample_rate: int | None = None )
Tham số
- audio (
torch.Tensorcó hình dạng(channels, num_samples)) — Đường sóng tham chiếu, đơn âm hoặc stereo. - sample_rate (
int, tùy chọn) — Tốc độ màaudiomang các mẫu của nó. Nếu bỏ trống, giá trị này sẽ là tốc độ riêng của VAE audio, khiến các mẫu không bị thay đổi; bất kỳ tốc độ nào khác sẽ được lấy mẫu lại lên tốc độ đó.
Tham chiếu giọng nói hoặc nhạc: tối đa 3 tham chiếu mỗi yêu cầu, và không bao giờ đứng một mình — một tham chiếu âm thanh phải được ghép với ít nhất một tham chiếu hình ảnh hoặc video. Tham chiếu này không bao giờ đến bộ điều kiện (conditioner) và chỉ được mã hóa bởi VAE âm thanh.
from_file
< source >( media ) → MiniMaxH3AudioReference
Giải mã tệp âm thanh thành MiniMaxH3AudioReference, ở tần số lấy mẫu mà tệp mang theo.
Cần PyAV.