how do we mix in a trained likeness lora
Hi
Please review this video https://youtu.be/lVqSgsPpF0c?t=798
I put it at the timestamp where they show how their trained mini max lora is added to the turbo model in comfy ui
how do we do the equivalent? Assuming i follow the steps he took and make a lora, how do i pipe that into the model. Or perhaps burn a new fused one?
Two ways, and the first one shipped today in 0.5.92.
1. At runtime, no repack. cortiq animate now takes --lora, the way ltx-video already did:
cortiq animate mmh3-turbo-clipproj4b-fl2va-v2-q4tp.cmf \
--prompt "<your trigger word> a woman in a red raincoat, close-up" \
--lora your-likeness.safetensors --lora-strength 0.8 \
--first-frame face.ppm --out take.avi
It reads the file as it ships β diffusion_model.β¦ (ComfyUI single-file), base_model.model.dit.β¦ (PEFT) or the bare module path; F32/F16/BF16; lora_A/lora_B or lora_down/lora_up. It binds attn.qkv_proj, attn.out_proj, mlp.fc1 and mlp.fc2 on all fifty blocks and both token-refiner blocks, and prints what it bound. On fal's Realism adapter:
lora: rank 32, 104/104 branches bound
Anything it cannot bind it names rather than dropping in silence. There is one real gap, worth knowing before you train: adaln_proj.linear. This container stores the modulation as a rank-24 curve over the timestep β that weight is [96768, 2688] per block in the release, 40% of the model, and collapsing it is most of why the file is 14 GB instead of 60. Folding an adaLN update into the curve is exact arithmetic, but it needs the time embedding, which only the packer has. So a LoRA that trains attention and MLP (the usual likeness recipe, and what the fal adapter does) applies fully at runtime; one that also trains adaLN applies partially and says so.
2. Baked in, for a permanent file β this is how the Turbo LoRA itself got into these containers:
cortiq animate-pack --dit minimax_h3_fl2va_pruned_bf16.safetensors \
--lora your-likeness.safetensors --lora-scale 1.0 \
--time-embedder h3_silu_temb_grid.safetensors \
--te β¦ --video-vae β¦ --audio-vae β¦ --tokenizer β¦ --out mine.cmf
The merge happens while the source is still bf16, which is why baking needs the original checkpoint: the packed weights are q4tp, and a rank-32 update cannot be folded into a four-bit ladder without dequantizing the whole DiT.
What it costs, measured on an M4 (24 GB), 512Γ288, 22 frames: 33.7 s a step with the adapter against 29.8 without β and the branch's own arithmetic is half a per cent of the projection. The cost is the attention fusion standing down, because the fused kernel keeps exactly the panels a branch has to read. --lora-strength 0 reproduces the base render byte for byte, which is the gate on that path.
Samples from the run are in the repo β without and with fal's Realism adapter, same seed, same prompt.
For training the adapter itself, follow the ComfyUI recipe from that video β the output is a plain .safetensors and both paths above read it as it is.
Follow-up with a cleaner measurement, because the first one was taken on a machine that was swapping.
With memory freed and the two runs back to back β 512Γ288, 22 frames, four steps, M4 24 GB:
| denoise | video VAE (no adapter anywhere near it) | |
|---|---|---|
| base | 126.1 s | 53.4 s |
| + fal Realism adapter | 133.6 s | 56.9 s |
1.06Γ on the denoise, and the VAE moved 6.5% between the same two runs β so on this machine an adapter costs at or below the run-to-run noise. My earlier 1.13Γ and 1.37Γ came from the base render itself drifting from 22.2 to 32.5 s a step under 6 GB of swap.
Where weights stream off disk, the adapter's extra work hides inside the streaming. Where the DiT is fully resident, the attention fusion it stands down should show up β that number is still owed, and I will post it when a card with headroom runs it.
The latent upscaler is ported β 0.5.93, and it runs rather than being described:
cortiq animate model.cmf --prompt "β¦" --width 512 --height 288 \
--upscale minimax_h3_latent_upscaler_3d_fp16.safetensors --upscale-by 2.0
Render small, the net resizes the latent, the VAE decodes once at the larger size β no decode β resize β encode round trip through the 5 B VAE. Parity against the node's own torch module on the same weights: worst 6.7e-6, relative rms 3.9e-7.
--lora from 0.5.92 is unchanged and still the way to attach a likeness adapter.