--- license: other license_name: minimax-h3-community-license-agreement license_link: LICENSE pipeline_tag: text-to-video library_name: radiance tags: - radiance - rocm - amd - rdna4 - int8 - w8a8 - iq8r - hadamard - text-to-video - text-to-audio-video - minimax-h3 - latent-upscaler base_model: - MiniMaxAI/MiniMax-H3 - LBH-123-AI/Minimax_h3_latent_Upscaler base_model_relation: quantized --- # MiniMax-H3, int8 — radiance container [MiniMaxAI/MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) — video with a synchronized stereo soundtrack from text — as a single `.rad` container for the [radiance](https://codeberg.org/StillDeadcode/radiance) inference engine (AMD RDNA4, ROCm). It replaces [StillDeadcode/minimax-h3-fp8](https://huggingface.co/StillDeadcode/minimax-h3-fp8), with the same eight bits a weight and no E4M3 weight left. The MiniMax H3 Community License does not cover the European Union, the United Kingdom, the Republic of Korea or the United States of America; see [License](#license). | | | |---|---| | File | `minimax-h3-i8.rad` — 62.79 GiB | | Weights | int8 throughout: the text encoder's linears (the 50 layers of Qwen3-VL-32B the model reads) and the token refiner's IQ8R (codes −127..127, each 128 of K rotated by the unnormalised Hadamard, a u8 scale per row and 256 of K under a bf16 scale a row); the modulation projections the same rotation with a bf16 scale per row and 128; the DiT's 50 blocks' linears unrotated int8 with a bf16 scale per row and 128; the video decoder bf16; the audio decoder f32 | | Activations | int8 (W8A8), rotated where the weight is | | Latent upscaler | [LBH-123-AI/Minimax_h3_latent_Upscaler](https://huggingface.co/LBH-123-AI/Minimax_h3_latent_Upscaler) v1 (3D conv, 345M parameters, bf16; Apache-2.0) | | Output | MP4: H.264 at 24 fps, up to 1344x768, 5.17 to 14.4 s; AAC at 32 kHz stereo | | Needs | radiance built from main after 1.17.0 (the text encoder's, the refiner's and the modulation projections' int8 forms are not in 1.17.0 and come with the next release); two 32 GB cards and about 39 GiB of pinned host memory | ## Serve ```sh radiance --model minimax-h3-i8.rad --tp 2 --vision-tower-placement ram --host 0.0.0.0 --port 8000 curl -s http://localhost:8000/v1/videos -H 'Content-Type: application/json' -d '{ "prompt": "A red fox trotting through a snowy pine forest, snow crunching underfoot", "seconds": "5", "size": "1344x768", "seed": 7}' # -> {"id": "video_...", "status": "queued", ...} curl -s http://localhost:8000/v1/videos/video_... # poll until "status": "completed" curl -s http://localhost:8000/v1/videos/video_.../content -o fox.mp4 ``` The server speaks OpenAI's video jobs API (`POST /v1/videos`, `GET /v1/videos/{id}`, `GET /v1/videos/{id}/content`, list and delete), and SGLang's `target` field: - `prompt` is read as written, up to 2048 tokens; the model follows long structured descriptions (the shot, its soundscape, its music) best. - `seconds` is rounded up to the model's length steps (17 frames): 5.17 to 14.4 s. `size` is `WIDTHxHEIGHT`, multiples of 32, at most 1344x768 pixels of area. - `seed` makes a video repeatable on the same deployment; `num_inference_steps` counts sigma grid points as diffusers does (50 by default, at most 65). The model is guidance-distilled: no guidance scale, no negative prompt. - Text to video and audio only; the image- and reference-conditioned forms are not in this file. On two Radeon AI PRO R9700s (gfx1201) the FP8 container's 5.17 s clip at 1344x768 takes about 8.8 minutes at the default 50 steps; a step of this container takes about 7% longer (measured below, at 768x448). The text encoder and the modulation projections are read from pinned host memory, which `--vision-tower-placement ram` selects. For the eight-step distillation, see [StillDeadcode/fasth3-8-step-v2-i8](https://huggingface.co/StillDeadcode/fasth3-8-step-v2-i8). Against the FP8 container on the same two cards, same prompt and seed, a 5.17 s clip at 768x448: 40 s against 38 s at 12 steps and 116 s against 108 s at 36, so a step of the int8 DiT takes about 7% longer; two runs of this container give the same video byte for byte, and its frames show the FP8 container's shot (PSNR 22.7 dB between the two at 12 steps). Not measured against diffusers' bf16 pipeline. ## Latent upscaling The container carries LBH-123-AI's latent upscaler. A request with `"latent_upscale": 2` runs its first steps at half the size (672x384 for 1344x768), the upscaler enlarges the clean latent, and the last `upscale_refine_steps` (12 by default) run at the full size from a re-noised copy of it: ```sh curl -s http://localhost:8000/v1/videos -H 'Content-Type: application/json' -d '{ "prompt": "...", "seconds": "5", "size": "1344x768", "seed": 7, "latent_upscale": 2}' ``` | 5.17 s at 1344x768, 50 steps, 2x R9700, the FP8 container | time | |---|---| | native | 8.8 min | | `latent_upscale` 2, 12 refine steps (the default) | 3.4 min | | `latent_upscale` 2, 20 refine steps | 4.5 min | The factor goes up to 4, but at 1344x768 a factor of 4 starts from 352x192, which is too small for the model to lay out a clean scene: expect soft, ghosted frames. The video object of an upscaled video reports `latent_upscale`, `upscale_refine_steps` and `upscale_from` (the small size). ## How this file was made ```sh rad-convert MiniMaxAI/MiniMax-H3 --recipe minimax-h3-i8.recipe -o minimax-h3-i8.rad ``` `MiniMaxAI/MiniMax-H3` is the downloaded pipeline directory; only its text-to-video-and-audio components are read (`text_encoder/`, `transformer/`, `vae/`, `audio_vae/`, the processor, the tokenizer and both schedulers), and the upscaler as a companion folder `latent_upscaler/` (its `minimax_h3_latent_upscaler_3d_conv_v1/config.json` and bf16 weights, renamed `diffusion_pytorch_model.safetensors`). It converts with the rest. The recipe (`minimax-h3-i8.recipe` in this repository) names what is quantised; everything it does not name is the checkpoint's own dtype: ``` te.blk.*.attn_qkv.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search te.blk.*.attn_output.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search te.blk.*.ffn_gate_up.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search te.blk.*.ffn_down.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search te.blk.*.attn_norm.weight cast dtype=f32 te.blk.*.ffn_norm.weight cast dtype=f32 ref.blk.*.attn_qkv.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search ref.blk.*.attn_output.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search ref.blk.*.ffn_gate_up.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search ref.blk.*.ffn_down.weight rtn codes=i8 group=256 scale=u8 scale2=bf16 block2=1x* transform=fwht128 clamp=sym rule=search dit.blk.*.attn_qkv.weight rtn codes=i8 group=128 scale=bf16 clamp=sym dit.blk.*.attn_output.weight rtn codes=i8 group=128 scale=bf16 clamp=sym dit.blk.*.ffn_gate_up.weight rtn codes=i8 group=128 scale=bf16 clamp=sym dit.blk.*.ffn_down.weight rtn codes=i8 group=128 scale=bf16 clamp=sym dit.blk.*.ada*.weight rtn codes=i8 group=128 scale=bf16 transform=fwht128 clamp=sym rule=search vae.blk.*.attn_qkv.weight cast dtype=bf16 vae.blk.*.attn_out.weight cast dtype=bf16 vae.blk.*.ffn_up.weight cast dtype=bf16 vae.blk.*.ffn_down.weight cast dtype=bf16 vae.proj_out.* cast dtype=bf16 aud.*.weight cast dtype=f32 aenc.d*.w cast dtype=bf16 aenc.d*.b cast dtype=bf16 aenc.pb.* cast dtype=bf16 aenc.b*.u*.c1.weight cast dtype=f32 aenc.b*.u*.c2.weight cast dtype=f32 aenc.cin.weight cast dtype=f32 aenc.fin.weight cast dtype=f32 venc.l*.b*.c1w cast dtype=bf16 venc.l*.b*.c2w cast dtype=bf16 venc.l*.dnw cast dtype=bf16 venc.cout.weight cast dtype=bf16 ups.embed.* cast dtype=f32 ups.*.emb_layers.* cast dtype=f32 ``` ## License MiniMax H3 is licensed under the MiniMax H3 Community License Agreement, Copyright © 2026 MiniMax (`LICENSE` in this repository; `NOTICE` carries its notice). The agreement grants its rights only within its Applicable Territory: worldwide except the European Union, the United Kingdom, the Republic of Korea and the United States of America, where it does not license using, reproducing or distributing the model or this file. Its use restrictions and Acceptable Use Policy (Exhibit A of `LICENSE`) apply to everyone who downloads or uses this file, and to anyone it is passed on to. This container is a modified copy of MiniMax H3: the linears named above are re-encoded as int8, the video decoder's linears cast from f32 to bf16, the audio decoder's weight norms folded, the text encoder's last 14 layers (which the model does not read) left out, and everything repacked into one `.rad` file. The text encoder is Qwen3-VL-32B, licensed under the Apache License 2.0 (`LICENSE-Qwen3-VL`). The latent upscaler is LBH-123-AI's Minimax_h3_latent_Upscaler v1, licensed under the Apache License 2.0 (`LICENSE-latent-upscaler`); its weights are included as published, its embedding MLP cast from bf16 to f32.