> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnichar.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Train a MiniMax H3 LoRA on stills or clips

> Train a MiniMax H3 video LoRA locally, on still images for look or short clips for motion. Peaks at 20.6GB on a 24GB card, or 12.7GB on a 16GB card, slowly.

MiniMax H3 is a video model that trains on still images or short clips. Stills teach appearance: look, style, character and lighting. Clips teach motion too. Both produce the same adapter file, and it works on all four H3 nodes, Reference to Video included. Sound is never learned.

![A MiniMax H3 clip LoRA training on 173 captioned pixel art clips, with per-step loss and peak VRAM in the log, a live loss graph and the clip length setting in the panel](https://mintcdn.com/omnichar/UNxBLJgGOIK5Z8FS/images/lora/minimax-h3-trainer.webp?fit=max\&auto=format\&n=UNxBLJgGOIK5Z8FS\&q=85\&s=67e4dbd5d32bf7796d9cd079b084d484)

## What you need

* **The bf16 checkpoint:** `minimax_h3_fl2va_bf16.safetensors` in `models/diffusion_models/`. FL2VA is the only base, and it's undistilled, so there's no adapter. The smaller `pruned`, `fp8_scaled` and `int8_convrot` builds generate but can't train, and they wouldn't save VRAM anyway: the base trains at 4-bit whichever file it starts from. Use a persistent volume, not an instance's scratch disk. The download is well over 100GB.
* **A 24GB card for comfort,** or 16GB if you can wait. See VRAM below.
* **64GB of system RAM** on a 16GB card, where the text encoder runs on the CPU. A 16GB card with only 16GB of RAM is refused before anything loads.

H3 always trains at 4-bit. It's 40GB after factorisation and 11.7GB once quantized, so there's no base precision control.

## Train it

**1. Build a dataset**

Add a **Load Dataset** node and drop images or clips onto it, or use **Load from path** to point at a folder. A folder import picks up `NNNN.txt` caption files next to each item. Stills and clips can share one dataset.

**2. Caption everything**

Write captions or run **Auto-caption**, which captions a clip from its middle frame. An uncaptioned item trains against an empty prompt and weakens the run.

**3. Set the run up**

Wire Load Dataset into Train LoRA and open **Adjust**. Start with rank 16, alpha 16, learning rate 1e-4, batch size 1 and 500 to 1500 steps, at 512px. 768px costs the same VRAM, so there's no reason to go higher for a first run.

**4. Choose stills or clips**

Leave **Clip length** empty to train on stills. Set it to train on motion: 1 second is the practical floor, and 1 to 5 seconds all work. Longer clips cost time, not VRAM.

**5. Run it**

Press **Start Training**. The run caches latents and captions first, reporting progress item by item, then streams in the checkpoint, and only then do steps begin. Checkpoints save every 250 steps by default.

**6. Test the adapter**

Wire the LoRA into the `lora` port on any H3 node. Render the same seed with and without it. A LoRA that changes nothing never attached; one that produces noise means something upstream is wrong.

## Clip length

H3's video VAE encodes `17n + 5` frames at 24fps, so a clip length rounds down to the nearest grid point. The floor is 22 frames, 0.92 seconds. Shorter clips are skipped and named in the log instead of failing the run. Each clip is trimmed from its start, once.

## VRAM

The run has three phases that never overlap. On a card that can hold the 32B text encoder, the caption pass sets the peak:

| Phase | Peak on an L40S | What's resident |
| - | - | - |
| Latent caching (video VAE) | 10.8GB | The fp32 video VAE, then dropped |
| Caption caching (Qwen3-VL) | 20.5GB | The 32B text encoder at 4-bit, then dropped |
| Training | 11.7GB | The 4-bit base plus activations |

So 512px, 768px, 1024px and clips all peak around 20.6GB. A 4.5-second clip packs 8,232 rows against a still's 293 and still peaks at 20.4GB.

On a 16GB card the text encoder runs on the CPU instead, so the peak drops to 12.7GB (measured on a T4) and the cost moves to time:

| | L40S (48GB) | L4 (24GB) | T4 (16GB, 64GB RAM) |
| - | - | - | - |
| Peak VRAM, 512px | 20.6GB | 20.55GB | 12.7GB |
| Seconds per step, 512px | 0.63 | 1.81 | 16.2 |
| Caption pass, 26 images | 1 min | 1 min | 19 min |

## Speed

* A 1500-step run on stills is about 16 minutes on an L40S, 45 on an L4, and close to seven hours on a T4.
* Clips cost about four and a half times as much per step: a 1-second clip at 512px measured 3.26s a step on an RTX PRO 4500 Blackwell, against 0.72s for stills on the same card.
* Startup takes about 7 minutes per run, however many steps follow, while the checkpoint streams in block by block. It hurts a short run far more than a long one.
* Caching scales with the dataset: about a minute for 26 images, closer to 20 for 173 clips.

## Try a public dataset

[`trojblue/test-HunyuanVideo-pixelart-videos`](https://huggingface.co/datasets/trojblue/test-HunyuanVideo-pixelart-videos) has 173 short captioned pixel art clips, and the style is strong enough that you can see at once whether the adapter took. Paste the repo id into the **Hugging Face** tab. Its captions ship in `metadata.jsonl`, which the Trainer reads directly. Six clips are shorter than H3's 22-frame floor and get skipped.

## Using the LoRA elsewhere

H3 stores attention as one fused tensor but runs it as three. Omnichar saves the adapter in the checkpoint's own key names and converts it back on load, so the file works in other tools and an H3 LoRA trained elsewhere loads in Omnichar. The conversion is exact; the file is about 40 percent larger.

## Licence

MiniMax H3 is under the [MiniMax H3 Community License](https://huggingface.co/MiniMaxAI/MiniMax-H3).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.