Diffusers documentation
MiniMax-H3
MiniMax-H3
MiniMax-H3 gera o vídeo e sua trilha sonora juntos. Um único transformer remove o ruído de uma sequência empacotada que contém a condição de texto, a mídia de condicionamento e os latentes de vídeo e áudio de destino. Não há um vocoder separado nem uma etapa posterior de áudio: o vídeo e o áudio saem do mesmo loop de remoção de ruído.
Você pode encontrar os checkpoints originais do MiniMax-H3 na organização MiniMaxAI.
MiniMax-H3 é integrado apenas como blocos de Modular Diffusers, da mesma forma que o Anima: os blocos e seu MiniMaxH3ModularPipeline constituem toda a integração, e não há uma metade DiffusionPipeline.
Layout do checkpoint
O MiniMax-H3 foi lançado como duas partições de checkpoint que compartilham todos os componentes, exceto o transformer, portanto, a conversão do diffusers coloca ambos em um único repositório:
| Subpasta | Fluxos de trabalho |
|---|---|
transformer/ | t2va (apenas texto), fl2va (primeiro e/ou último quadro-chave) |
transformer_ref/ | ref2va (uma mistura ordenada de referências de imagem, vídeo e áudio) |
Tudo, exceto o transformer, ou seja, o VAE de vídeo, o VAE de áudio, o condicionador Qwen3-VL, seu tokenizer e processor, e os dois schedulers, é compartilhado e armazenado uma única vez.
O condicionador é um Qwen3VLForConditionalGeneration, e o MiniMax-H3 lê o estado oculto não normalizado após sua 50ª camada decodificadora, em vez da última, de modo que o checkpoint completo liberado é utilizado com sua cabeça de modelo de linguagem não utilizada.
As três tarefas são fluxos de trabalho do MiniMaxH3Blocks, e o repositório contém um modular_model_index.json que nomeia cada componente com sua própria especificação de carregamento. Para servir uma única tarefa, passe o fluxo de trabalho para from_pretrained: ele mantém apenas os blocos desse fluxo de trabalho, de modo que a assinatura do pipeline (pipe.doc) documenta exatamente as entradas dessa tarefa, apenas os componentes dessa tarefa são declarados e load_components busca exatamente seus subdiretórios — um pipeline t2va / fl2va nunca acessa transformer_ref/, e um pipeline ref2va nunca acessa transformer/.
import torch
from diffusers import ModularPipeline
pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3", workflow="ref2va")
pipe.load_components(dtype=torch.bfloat16)
pipe.docexibe o que o pipeline à sua frente recebe e retorna — cada entrada com seu valor padrão, os componentes que ele espera e as saídas que produz. Reduzido a um único fluxo de trabalho, ele descreve exatamente aquela tarefa, o que é a maneira mais rápida de ver o que uma solicitação precisa antes de fazê-la.
Para manter todos os fluxos de trabalho disponíveis em um único pipeline, deixe o argumento workflow de fora: o pipeline então seleciona o fluxo de trabalho a cada chamada com base nas entradas que recebe.
pipe = ModularPipeline.from_pretrained("MiniMaxAI/MiniMax-H3")O carregamento ainda pode ser feito um fluxo de trabalho por vez. Esta chamada única busca transformer/ e todos os componentes compartilhados, que atendem tanto ao t2va quanto ao fl2va:
pipe.load_components(workflow="t2va", dtype=torch.bfloat16)Um load_components() simples, sem workflow=, carrega ambas as partições de 61,7 GB do transformer, o que permite que um único pipeline atenda aos três fluxos de trabalho sem uma nova chamada de carregamento. Combine-o com um ComponentsManager e offloading automático: os pesos ficam na RAM do host e o gerente move para o acelerador apenas o que cada etapa precisa, de modo que, quando o denoiser ref2va precisa do dispositivo, a estratégia faz o offloading do que for necessário para liberar espaço suficiente. Veja Memória para as receitas.
Dois agendadores
Os latentes de vídeo e de áudio seguem dois agendamentos diferentes dentro de uma única chamada do transformer por passo, motivo pelo qual os blocos esperam duas instâncias de MiniMaxH3Scheduler: scheduler para os latentes de vídeo (shift=12.0 nos checkpoints liberados) e audio_scheduler para os latentes de áudio (shift=3.0).
Ambas as partições do transformer são destiladas por orientação, portanto isso vale para todos os fluxos de trabalho: a orientação está incorporada nos pesos, não há um guia, nem negative_prompt e nem guidance_scale, e cada etapa executa exatamente uma passagem de frente.
Restrições de geração
- 24 fps, de 5 a 15 segundos.
num_framesé arredondado para cima para o próximo17 * n + 5que o VAE de vídeo pode decodificar, e a duração resultante deve permanecer nessa janela. - Uma borda curta de 768 pixels.
heightewidthpadrão para o próprio canvas do MiniMax-H3 para a proporção de aspecto do primeiro keyframe (ou 16:9 sem um) e devem ser múltiplos de 32. - Um gerador, três extrações. Uma solicitação extrai primeiro o ruído de condicionamento do keyframe ou de referência, depois o ruído do vídeo e, por fim, o ruído do áudio, todos a partir do
generatorque é passado, de modo que duas execuções a partir do mesmo estado do gerador retornam o mesmo vídeo e trilha sonora. Passarlatentsouaudio_latentssubstitui a extração correspondente. num_inference_stepsconta os pontos da grade de sigma, incluindo o terminal0, portanto, ele resulta em uma avaliação a menos do modelo.
Memória
O transformer sozinho ocupa 61,7 GB em bfloat16 e o conditioner do Qwen3-VL ocupa mais 62,1 GB, portanto a receita de carregamento depende do hardware. Canvas menores são o principal fator de velocidade em qualquer configuração: height e width precisam apenas ser múltiplos de 32, e 960x544 executa cerca de 2,3x mais rápido por passo do que o 1344x768 treinado.
Em um cartão de 80 GB, registre os componentes em um ComponentsManager e deixe que ele os mova para dentro e para fora do acelerador:
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 HubEm um cartão de consumo (24 a 32 GB), quantize os dois componentes grandes para int8 conforme eles são carregados e transmita os blocos do transformer a partir da RAM da CPU. Tudo abaixo usa apenas carregadores suportados, sem patches, e funciona diretamente a partir do 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")Com 12 a 16 GB, a mesma receita funciona com o grupo do VAE de vídeo também descarregado (offload_type="leaf_level", sem stream) e um canvas pequeno, como 960x544. Espere que os pesos fiquem na RAM do host: cerca de 75 GB em int8.
Com duas placas, nada precisa ser descarregado: divida o pipeline em duas partes e coloque cada metade em seu próprio dispositivo.
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"],
)Duas placas de 80 GB executam o bfloat16 completo dessa forma: cada metade cabe em sua própria placa, portanto nada é removido para a memória do host uma vez que esteja residente. Duas placas de 48 GB fazem o mesmo com o carregamento int8 acima em ambos os componentes.
Texto e keyframes
MiniMaxH3Blocks cobre texto para vídeo e áudio e condicionamento por quadro-chave. Um quadro-chave pode ser o quadro a partir do qual o vídeo começa (image), o quadro em que termina (last_image) ou ambos.
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"],
)Vídeo e áudio são gerados conjuntamente e saem da chamada como saídas separadas, videos e audio, além da sampling_rate que a trilha sonora carrega; a multiplexação em um único arquivo fica a cargo do chamador, por exemplo, com encode_video().
Referências Omni
O workflow ref2va é condicionado por uma lista ordenada de referências: até 9 imagens, 3 vídeos e 3 clipes de áudio, totalizando 12. A ordem é semântica. Ela rotula as referências na apresentação do prompt ("<Picture 1>", "<Audio 1>", "<Video 1>") e avança o relógio rotativo compartilhado de áudio/vídeo, de modo que reordenar as mesmas referências constitui uma solicitação diferente.
Diferentemente dos keyframes acima, as referências não vinculam a geometria gerada: elas são codificadas em sua própria resolução e o canvas de destino padrão é o 16:9 do MiniMax-H3.
Existe uma classe de referência por modalidade, cada uma contendo a mídia em memória e a taxa que a mídia carrega:
| referência | média | taxa que ele declara |
|---|---|---|
| MiniMaxH3ImageReference | image | — |
| MiniMaxH3VideoReference | frames e audio para sua própria trilha sonora | fps, padrão de 24.0 do MiniMax-H3, e sample_rate |
| MiniMaxH3AudioReference | audio | sample_rate, padrão para a própria |
As taxas são a partir das quais tudo é reamostrado: os quadros para os 24 fps próprios do MiniMax-H3, descartando e duplicando quadros inteiros, e a forma de onda para a taxa de amostragem do VAE de áudio. Mídias nas taxas próprias do MiniMax-H3 passam sem alterações, de modo que apenas dados produzidos em outra taxa precisam indicar isso.
Uma referência é construída de uma das duas formas: decodificada de um arquivo de mídia com o classmethod from_file da classe, ou construída diretamente a partir da mídia que a solicitação já mantém em memória — é assim que uma geração anterior é reutilizada (veja Uma geração como referência).
Os blocos nunca abrem um arquivo de mídia — decodificar um caminho é responsabilidade do chamador, assim como em qualquer outra parte da biblioteca. Cada classe de referência faz isso por meio de seu classmethod from_file, que aceita um caminho ou uma URL (vídeo e áudio através do PyAV) e retorna uma referência carregando as taxas reportadas pelo contêiner — um vídeo traz sua taxa de quadros e sua trilha sonora junto. Prefira from_file a load_video(), que descarta a taxa de quadros: uma referência construída a partir de quadros cuja taxa real foi perdida é condicionada na velocidade errada, e nada é lançado.
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 é obrigatório para ref2va. Para gerar um vídeo exatamente com a duração de uma trilha sonora de referência, calcule-o a partir do clipe — round(samples / sample_rate * 24) — e ele será arredondado para cima até o próximo 17 * n + 5 que o VAE de vídeo pode decodificar; a duração resultante deve permanecer entre 5 e 15 segundos, que é o intervalo gerado pelo MiniMax-H3.
Uma geração como referência
Como os fluxos de trabalho compartilham um único pipeline, uma geração t2va pode ser usada diretamente como referência ref2va — e o construtor em memória foi projetado exatamente para essa transição. A mídia gerada já está nas taxas próprias do MiniMax-H3 (quadros a 24 fps, a trilha sonora na taxa de amostragem do VAE de áudio), portanto a referência não requer argumentos de taxa e nada é re-codificado por meio de um contêiner com perdas no caminho:
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
classe 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 )
Uma ModularPipeline para geração conjunta de vídeo + áudio com MiniMax-H3: os fluxos de trabalho t2va (apenas texto) e fl2va (primeiro e/ou último keyframe) contra a partição de checkpoint transformer/, e o fluxo de trabalho ref2va (omni-reference) contra transformer_ref/. Um repositório contém ambas as partições, e a seleção de um fluxo de trabalho carrega apenas o
MiniMax-H3 remove o ruído de uma sequência empacotada que contém, ao mesmo tempo, a condição de texto, os latentes de condição de quadro-chave, os latentes de áudio e os latentes de vídeo. É por isso que os blocos passam um layout de linha em vez de tensores por modalidade, e por isso o pipeline carrega dois agendadores (shift = 12.0 para vídeo, shift = 3.0 para áudio) que são executados dentro de uma única chamada do transformer.
O checkpoint é destilado por orientação: a orientação está incorporada nos pesos, portanto não há um guia, nem negative_prompt e nem guidance_scale, e cada etapa executa exatamente uma passagem para frente.
MiniMax-H3 é apenas modular: este pipeline e seus blocos constituem toda a integração, não existe uma metade DiffusionPipeline. Este módulo carrega os fatos do modelo em que cada bloco se baseia — a geometria derivada da configuração como propriedades, a aritmética de tela e contagem de quadros como funções — e os contratos de condicionamento, codificação e ruído estão nos próprios blocos.
MiniMaxH3Blocks
Blocos de pipeline Auto Modular para geração conjunta de vídeo + áudio com MiniMax-H3: os fluxos de trabalho t2va (apenas texto), fl2va (primeiro e/ou último keyframe) e ref2va (referência omni), selecionados pelas entradas de references e keyframe. Sem um workflow=, o carregamento dos componentes traz ambas as partições de 61,7 GB do transformer — passe um para carregar apenas o que a tarefa precisa.
Fluxos de trabalho suportados:
t2va: requerpromptfl2va: requerprompt,imageouprompt,last_imageref2va: requerprompt,references
Componentes:
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 (padrão: 768) canvas_max_pixels (padrão: 1032192) reference_image_short_edge (padrão: 2048)
Entradas:
references (list, opcional):
As referências para condicionar, na ordem em que o modelo deve lê-las: a ordem as rotula na
apresentação do prompt e as posiciona no relógio rotativo compartilhado, de modo que uma ordem diferente é uma
solicitação diferente. Uma dataclass por modalidade, todas contendo mídia em memória — um MiniMaxH3ImageReference (no máximo
9), um MiniMaxH3VideoReference em seu próprio fps (no máximo 3, cuja trilha sonora audio também é condicionada)
ou um MiniMaxH3AudioReference em sua própria sample_rate (no máximo 3) — para no máximo 12
referências no total, e referências de áudio não podem ser as únicas. Esses blocos nunca abrem um arquivo de mídia:
decodifique com o classmethod from_file de cada classe, que traz as taxas junto.
height (int, opcional):
Altura do vídeo gerado em pixels, um múltiplo de 32.
width (int, opcional):
Largura do vídeo gerado em pixels, um múltiplo de 32.
num_frames (int, opcional):
Número de quadros a gerar, na taxa fixa de 24 fps. Ajustado para cima para o próximo 17 * n + 5 que o VAE de vídeo pode
decodificar; a duração resultante deve permanecer entre 5 e 15 segundos. Para gerar um vídeo tão longo quanto uma
trilha sonora de referência, passe round(samples / sample_rate * 24).
image (Image, opcional):
Keyframe a partir do qual o vídeo começa. Ele é esticado para o canvas de destino, que por padrão é derivado
de sua própria proporção de aspecto.
last_image (Image, opcional):
Keyframe no qual o vídeo termina. Pode ser passado sozinho para gerar até um quadro. Combinado com image, é o seguidor dos dois e é recortado para cobrir o canvas.
prompt (str):
O prompt para guiar a geração, uma única string.
normalized_references (list, opcional):
As referências normalizadas pela etapa de configuração, em ordem empacotada.
keyframes (list, opcional):
Os keyframes colocados no canvas de destino, em ordem empacotada.
condition_latents (list, opcional):
Os latentes de condicionamento de vídeo codificados, um por referência de imagem e vídeo em ordem empacotada. Sua forma é
onde a geometria de cada bloco de referência vem.
audio_condition_latents (list, opcional):
As linhas de condicionamento de áudio codificadas, uma por referência com áudio em ordem empacotada.
generator (Generator, opcional):
O gerador da solicitação. O ruído de condicionamento é extraído dele primeiro, uma extração por condição,
antes do ruído das linhas geradas.
latents (Tensor):
Ruído de vídeo pré-gerado de forma (1, 24, num_latent_frames, latent_height, latent_width), usado
em vez da extração.
audio_latents (Tensor):
Ruído de áudio pré-gerado de forma (2, 32, num_audio_latents).
num_inference_steps (int, opcional, padrão 50):
O número de etapas de remoção de ruído.
*denoiser_input_fields (None,opcional):
A descrição estrutural da sequência empacotada que o transformer lê por nome: token_tags, position_ids e os três tensores de índice de linha.
attention_kwargs (dict,opcional):
Kwargs adicionais para processadores de atenção.
keyframe_anchors (tuple,opcional, padrão ()):
A qual extremidade do vídeo cada keyframe está ancorado, em ordem empacotada.
output_type (str,opcional*, padrão pil):
Formato de saída: ‘pil’, ‘np’ ou ‘pt’.
Saídas:
videos (list):
O vídeo gerado.
audio (Tensor):
A trilha sonora gerada, de forma (1, 2, num_samples).
sampling_rate (int):
Taxa de amostragem da trilha sonora gerada em Hz.
MiniMaxH3ImageReference
classe diffusers.modular_pipelines.minimax_h3.MiniMaxH3ImageReference
< source >( image: typing.Union[PIL.Image.Image, numpy.ndarray, torch.Tensor] )
Parâmetros
- image (
PIL.Image.Image,np.ndarrayoutorch.Tensor) — A imagem de referência: uma imagem, um array(height, width, 3)ou um tensor(3, height, width),uint8ou ponto flutuante em[0, 1]. Ela nunca vincula a geometria gerada — é codificada em uma borda curta própria, 2048 para o checkpoint liberado, independentemente do canvas que a solicitação gera.
Uma referência de sujeito, estilo ou cena: no máximo 9 por solicitação.
Carregue um arquivo de imagem em um MiniMaxH3ImageReference, por meio de load_image().
MiniMaxH3VideoReference
classe 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 )
Parâmetros
- frames (
list[PIL.Image.Image],np.ndarrayoutorch.Tensor) — Os frames de referência: uma lista de imagens, um array(num_frames, height, width, 3)ou um tensor(num_frames, 3, height, width),uint8ou ponto flutuante em[0, 1]. - fps (
float, opcional, padrão 24.0) — A taxa de quadros queframescarrega, que é o que posiciona os blocos de visão da referência na grade de 2 fps do conditioner. O próprio relógio do MiniMax-H3 é de 24 fps, portanto qualquer outra taxa é reamostrada para ele por meio de exclusão e duplicação de quadros inteiros — o que torna este o campo a ser definido corretamente quando os quadros vieram de um arquivo. - audio (
torch.Tensorde forma(channels, num_samples), opcional) — A trilha sonora deste vídeo, mono ou estéreo, condicionada como a própria do referencial, em vez de como um referencial próprio. Se omitida, o referencial é condicionado apenas pelo movimento. - sample_rate (
int, opcional) — A taxa na qual oaudiocarrega suas amostras. Se omitida, será a taxa própria do VAE de áudio, o que mantém as amostras inalteradas; qualquer outra taxa resultará em uma reamostragem para ela.
Uma referência de movimento e câmera: no máximo 3 por solicitação, condicionada em conjunto com sua própria trilha sonora.
from_file
< source >( media ) → MiniMaxH3VideoReference
Decodifique um arquivo de vídeo em um MiniMaxH3VideoReference, na resolução, na taxa de quadros e na trilha sonora que ele carrega.
As taxas são definidas na referência, que é o ponto de decodificar dessa forma em vez de usar load_video(): o MiniMax-H3 reamostra uma referência para seus próprios 24 fps, portanto, uma taxa de quadros perdida na entrada é uma solicitação condicionada na velocidade errada, sem nada para alertar sobre isso. Um contêiner cujos metadados estão incorretos é corrigido sobrescrevendo fps ou sample_rate na referência retornada.
Requer PyAV.
MiniMaxH3AudioReference
classe diffusers.modular_pipelines.minimax_h3.MiniMaxH3AudioReference
< source >( audio: Tensorsample_rate: int | None = None )
Parâmetros
- audio (
torch.Tensorde forma(channels, num_samples)) — A forma de onda de referência, mono ou estéreo. - sample_rate (
int, opcional) — A taxa na qual oaudiocarrega suas amostras. Se omitida, será a taxa própria do VAE de áudio, o que mantém as amostras inalteradas; qualquer outra taxa resultará em uma reamostragem para ela.
Uma referência de voz ou música: no máximo 3 por solicitação e nunca isolada — uma referência de áudio deve ser pareada com pelo menos uma referência de imagem ou vídeo. Ela nunca chega ao conditioner e é codificada apenas pelo VAE de áudio.
from_file
< source >( media ) → MiniMaxH3AudioReference
Decodifique um arquivo de áudio em um MiniMaxH3AudioReference, na taxa de amostragem que ele possui.
Requer PyAV.