Skip to content

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:

  1. 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
  2. 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:

GET /api/admin/loras/compatible/wan-i2v-14b

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:

  1. The frontend reads the base_model from the lora_picker input definition
  2. Calls GET /api/admin/loras/compatible/{base_model}
  3. Renders each pair as a selectable option (checkbox with the pair name)
  4. 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 high and low filenames: 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 both filename: 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:

  1. Add both LoRA entries to the loras category in models.json (or loras.json for style LoRAs)

  2. Set base_model to the correct value (e.g., "wan-i2v-14b" for WAN I2V LoRAs)

  3. Set pair_id to a unique identifier for the pair (e.g., "my-lora-v1")

  4. Set pair_role on each entry:

    • For a high + low pair: one entry with "high", one with "low"
    • For a unified LoRA: single entry with "both"
  5. 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"
}