LoRA Pairing¶
LoRA pairing is a system for grouping LoRA adapters into high/low noise pairs, designed for WAN 2.2 SVI Pro dual-pass video generation. Each pair consists of a LoRA for the high-noise sampling pass and a LoRA for the low-noise refinement pass, or a single LoRA that handles both.
Background: Dual-Pass Sampling¶
WAN 2.2 SVI Pro workflows use two separate sampling passes to generate video:
- High noise removal pass -- the first sampler starts from pure noise (or high noise when doing image-to-video) and removes the bulk of the noise to establish the overall structure
- Low noise refinement pass -- the second sampler takes the partially denoised result and refines details at lower noise levels
Each pass can use a different diffusion model (the WAN 2.2 I2V High Noise and WAN 2.2 I2V Low Noise variants) and, correspondingly, a different LoRA. The acceleration LoRAs (LightX2V, Seko, SVI Pro) are trained specifically for one pass or both, so they must be routed to the correct sampler.
Catalog Fields¶
Two fields on a model entry control pairing:
| Field | Type | Description |
|---|---|---|
pair_id |
string | Groups high + low LoRAs together. All entries with the same pair_id form one selectable pair |
pair_role |
string | Which pass this LoRA applies to: "high", "low", or "both" |
A LoRA with pair_role: "both" means a single file that works for both the high-noise and low-noise passes. The workflow loads it into both samplers.
Current Pairs¶
These are the LoRA pairs currently in the catalog (all with base_model: "wan-i2v-14b"):
LightX2V 4-step (high + low)¶
4-step acceleration LoRAs from the official LightX2V release. Reduces sampling from the default ~30 steps to 4 steps.
| Role | File | Size |
|---|---|---|
| High | wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors |
1.1 GB |
| Low | wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors |
1.1 GB |
LightX2V CFG+Step Distill (both)¶
Kijai's repackaged CFG and step distillation LoRA. A single file that handles both passes, combining CFG distillation (removes the need for classifier-free guidance, halving compute) with step distillation.
| Role | File | Size |
|---|---|---|
| Both | lightx2v_I2V_14B_480p_cfg_step_distill_rank64_bf16.safetensors |
0.7 GB |
Seko-V1 (high + low)¶
Community-trained 4-step acceleration LoRAs from Seko-V1. An alternative to the official LightX2V LoRAs with different motion characteristics.
| Role | File | Size |
|---|---|---|
| High | seko_v1_i2v_high_noise_model.safetensors |
1.2 GB |
| Low | seko_v1_i2v_low_noise_model.safetensors |
1.2 GB |
LightX2V Unified (both)¶
A unified LoRA for WAN 2.1 I2V that handles both passes with a single file. Uses rank 64 for a smaller file size.
| Role | File | Size |
|---|---|---|
| Both | Wan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors |
0.7 GB |
SVI v2 PRO (high + low)¶
High-quality acceleration LoRAs from SVI v2 PRO. Uses rank 128 for higher fidelity, resulting in larger files.
| Role | File | Size |
|---|---|---|
| High | SVI_v2_PRO_Wan2.2-I2V-A14B_HIGH_lora_rank_128_fp16.safetensors |
2.3 GB |
| Low | SVI_v2_PRO_Wan2.2-I2V-A14B_LOW_lora_rank_128_fp16.safetensors |
2.3 GB |
API¶
GET /api/admin/loras/compatible/{base_model}¶
Returns LoRA pairs compatible with a given base model. The backend searches both models.json and loras.json (merged via _all_categories()) for entries where base_model matches and pair_id is set.
Request:
Response:
[
{
"pair_id": "lightx2v-4step",
"name": "LightX2V 4-step",
"high": "wan2.2_i2v_lightx2v_4steps_lora_v1_high_noise.safetensors",
"low": "wan2.2_i2v_lightx2v_4steps_lora_v1_low_noise.safetensors",
"both": null
},
{
"pair_id": "lightx2v-unified",
"name": "LightX2V Unified",
"high": null,
"low": null,
"both": "Wan21_I2V_14B_lightx2v_cfg_step_distill_lora_rank64.safetensors"
},
{
"pair_id": "svi-v2-pro",
"name": "SVI v2 PRO",
"high": "SVI_v2_PRO_Wan2.2-I2V-A14B_HIGH_lora_rank_128_fp16.safetensors",
"low": "SVI_v2_PRO_Wan2.2-I2V-A14B_LOW_lora_rank_128_fp16.safetensors",
"both": null
}
]
Each object in the response has:
| Field | Type | Description |
|---|---|---|
pair_id |
string | The grouping identifier |
name |
string | Display name (auto-generated by stripping suffixes like "High Noise", "Low Noise", "LoRA") |
high |
string or null | Filename of the high-noise LoRA, or null if not present |
low |
string or null | Filename of the low-noise LoRA, or null if not present |
both |
string or null | Filename of the unified LoRA, or null if not present |
Name Generation¶
The display name for each pair is derived from the name field of the first matching LoRA entry, with these suffixes stripped:
" High Noise"" Low Noise"" LoRA"" (Kijai)"" (WAN 2.1 I2V 14B)"
Frontend Integration¶
LoRA Picker Widget¶
The lora_picker input type in workflow manifests renders a list of pairs as checkboxes. When a workflow runner page loads:
- The frontend reads the
base_modelfrom the lora_picker input definition - Calls
GET /api/admin/loras/compatible/{base_model} - Renders each pair as a selectable option (checkbox with the pair name)
- When checked, the selected pair's filenames are included in the form submission
Routing to Samplers¶
When the backend builds the workflow for execution:
- If the pair has
highandlowfilenames: the high LoRA is loaded into the high-noise sampler node, and the low LoRA into the low-noise sampler node - If the pair has a
bothfilename: the same LoRA file is loaded into both sampler nodes - If no pair is selected: the workflow runs without acceleration LoRAs (full step count)
Adding a New Pair¶
To add a new LoRA pair to the catalog:
-
Add both LoRA entries to the
lorascategory inmodels.json(orloras.jsonfor style LoRAs) -
Set
base_modelto the correct value (e.g.,"wan-i2v-14b"for WAN I2V LoRAs) -
Set
pair_idto a unique identifier for the pair (e.g.,"my-lora-v1") -
Set
pair_roleon each entry:- For a high + low pair: one entry with
"high", one with"low" - For a unified LoRA: single entry with
"both"
- For a high + low pair: one entry with
-
Bump the catalog version and date
Example entries for a new high + low pair:
{
"name": "My LoRA High [WAN I2V]",
"file": "my_lora_high.safetensors",
"dest": "loras",
"source": "huggingface",
"size_gb": 1.0,
"base_model": "wan-i2v-14b",
"tags": ["wan", "video"],
"pair_id": "my-lora-v1",
"pair_role": "high",
"hf_repo": "author/my-lora",
"hf_file": "my_lora_high.safetensors"
},
{
"name": "My LoRA Low [WAN I2V]",
"file": "my_lora_low.safetensors",
"dest": "loras",
"source": "huggingface",
"size_gb": 1.0,
"base_model": "wan-i2v-14b",
"tags": ["wan", "video"],
"pair_id": "my-lora-v1",
"pair_role": "low",
"hf_repo": "author/my-lora",
"hf_file": "my_lora_low.safetensors"
}