---
name: Model Compatibility Matrix
slug: model-compatibility-matrix
category: Data
description: Model Compatibility Matrix maps loaders, resolutions, samplers, CFG, VAE, ControlNet, and LoRA support across SD 1.5, SDXL, Flux, SD3, and video models. Use it when choosing settings or checking whether assets work together.
github: "https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/model-compatibility"
language: TypeScript
stars: 659
forks: 103
install: "npx degit https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/model-compatibility ~/.claude/skills/model-compatibility"
installs_to: ~/.claude/skills/model-compatibility
source_path: plugin/skills/model-compatibility/SKILL.md
collection_size: 25
category_size: 668
collection_url: "https://dirskills.com/collections/artokun/comfyui-mcp"
added: 2026-08-24T05:17:34.873Z
last_synced: 2026-08-24T05:17:34.873Z
canonical_url: "https://dirskills.com/skills/model-compatibility-matrix"
---

# Model Compatibility Matrix

Model Compatibility Matrix maps loaders, resolutions, samplers, CFG, VAE, ControlNet, and LoRA support across SD 1.5, SDXL, Flux, SD3, and video models. Use it when choosing settings or checking whether assets work together.

**Install:**

```bash
npx degit https://github.com/artokun/comfyui-mcp/tree/main/plugin/skills/model-compatibility ~/.claude/skills/model-compatibility
```

## README

# ComfyUI Model Compatibility Matrix

## Stable Diffusion 1.5 (SD 1.5)

### Overview

The original widely-adopted Stable Diffusion model. Huge ecosystem of fine-tunes, LoRAs, ControlNets, and embeddings. Still the most compatible and lightweight model family.

### Configuration

| Parameter | Value |
|-----------|-------|
| **Loader** | `CheckpointLoaderSimple` |
| **Native Resolution** | 512x512 |
| **Supported Resolutions** | 512x512, 512x768, 768x512, 768x768 (some fine-tunes) |
| **VAE** | Built-in or external (`vae-ft-mse-840000-ema-pruned.safetensors`) |
| **CLIP** | Single CLIP-L (output index 1 from checkpoint) |
| **Text Encoder Node** | `CLIPTextEncode` |
| **CFG Range** | 7-12 (typical: 7.5) |
| **Negative Prompt** | Yes — very important for quality |
| **Steps** | 20-30 (standard samplers) |
| **Sampler** | All standard samplers: `euler`, `euler_ancestral`, `dpmpp_2m`, `dpmpp_sde`, `ddim` |
| **Scheduler** | `normal`, `karras` |
| **Denoise** | 1.0 (txt2img), 0.5-0.8 (img2img) |
| **VRAM (FP16)** | ~2-3GB |

### Workflow Pattern

```
CheckpointLoaderSimple → MODEL(0), CLIP(1), VAE(2)
  CLIP(1) → CLIPTextEncode (positive) → CONDITIONING
  CLIP(1) → CLIPTextEncode (negative) → CONDITIONING
EmptyLatentImage (width=512, height=512) → LATENT
KSampler (cfg=7.5, steps=20, sampler="euler", scheduler="normal") → LATENT
VAEDecode → IMAGE
SaveImage
```

### VAE Notes

- Most SD 1.5 checkpoints have a built-in VAE, but it's often mediocre
- **Recommended**: Use external `vae-ft-mse-840000-ema-pruned.safetensors` for better color accuracy
- Load via `VAELoader` node and connect to `VAEDecode`
- FP16 VAE can produce NaN on some images — FP32 VAE is more stable

### ControlNet Compatibility

SD 1.5 has the largest ControlNet ecosystem:

| ControlNet | Model File Pattern | Notes |
|------------|-------------------|-------|
| Canny | `control_v11p_sd15_canny` | Edge detection |
| Depth | `control_v11f1p_sd15_depth` | Depth map |
| OpenPose | `control_v11p_sd15_openpose` | Skeleton/pose |
| Scribble | `control_v11p_sd15_scribble` | Hand-drawn lines |
| Lineart | `control_v11p_sd15_lineart` | Clean lines |
| Softedge | `control_v11p_sd15_softedge` | Soft edges (HED) |
| Normal | `control_v11p_sd15_normalbae` | Normal maps |
| Seg | `control_v11p_sd15_seg` | Semantic segmentation |
| Tile | `control_v11f1e_sd15_tile` | Tile/upscale guidance |
| Inpaint | `control_v11p_sd15_inpaint` | Inpainting guidance |
| IP-Adapter | `ip-adapter_sd15` | Image prompt |

### LoRA Compatibility

- SD 1.5 LoRAs ONLY work with SD 1.5 base models
- Format: `.safetensors` in `models/loras/`
- Loader: `LoraLoader` node — connects between checkpoint and CLIPTextEncode
- Strength range: 0.5-1.0 (higher can cause artifacts)

---

## SDXL (Stable Diffusion XL)

### Overview

Major upgrade from SD 1.5 with dual CLIP encoders, higher native resolution, and better prompt understanding. Includes Turbo and Lightning variants for fast generation.

### Configuration — SDXL 1.0 (Base)

| Parameter | Value |
|-----------|-------|
| **Loader** | `CheckpointLoaderSimple` |
| **Native Resolution** | 1024x1024 |
| **Supported Resolutions** | 1024x1024, 832x1216, 1216x832, 896x1152, 1152x896, 768x1344, 1344x768 |
| **VAE** | Built-in (SDXL has good integrated VAE) |
| **CLIP** | Dual CLIP: CLIP-L + CLIP-G |
| **Text Encoder Node** | `CLIPTextEncode` (unified) or `CLIPTextEncodeSDXL` (separate G/L) |
| **CFG Range** | 5-10 (typical: 7.0) |
| **Negative Prompt** | Yes — moderately important |
| **Steps** | 20-40 |
| **Sampler** | `euler`, `euler_ancestral`, `dpmpp_2m`, `dpmpp_sde` |
| **Scheduler** | `normal`, `karras` |
| **Denoise** | 1.0 (txt2img), 0.5-0.8 (img2img) |
| **VRAM (FP16)** | ~6-7GB |

### Configuration — SDXL Turbo

| Parameter | Value |
|-----------|-------|
| **Loader** | `CheckpointLoaderSimple` |
| **Resolution** | 512x512 (optimized for lower res) |
| **CFG** | 1.0-2.0 |
| **Steps** | 1-4 |
| **Sampler** | `euler_ancestral` |
| **Scheduler** | `normal` |
| **Negative Prompt** | Minimal or empty |
| **Denoise** | 1.0 |

### Configuration — SDXL Lightning

| Parameter | Value |
|-----------|-------|
| **Loader** | `CheckpointLoaderSimple` + `LoraLoader` (Lightning LoRA) |
| **Resolution** | 1024x1024 |
| **CFG** | 1.0-2.0 |
| **Steps** | 4-8 (match the Lightning variant: 2-step, 4-step, 8-step) |
| **Sampler** | `euler` |
| **Scheduler** | `sgm_uniform` |
| **Negative Prompt** | Empty or minimal |
| **Special** | Requires matching Lightning LoRA for the step count |

### SDXL Refiner

The optional SDXL refiner model does a second pass to improve fine details:

```
CheckpointLoaderSimple (base) → KSampler (steps=25, start=0, end=20)
CheckpointLoaderSimple (refiner) → KSampler (steps=25, start=20, end=25)
```

- The refiner uses `KSamplerAdvanced` with `start_at_step` and `end_at_step`
- Typically run the base for 80% of steps, refiner for the last 20%
- Refiner checkpoint: `sd_xl_refiner_1.0.safetensors`

### Workflow Pattern

```
CheckpointLoaderSimple → MODEL(0), CLIP(1), VAE(2)
  CLIP(1) → CLIPTextEncode (positive) → CONDITIONING
  CLIP(1) → CLIPTextEncode (negative) → CONDITIONING
EmptyLatentImage (width=1024, height=1024) → LATENT
KSampler (cfg=7.0, steps=25, sampler="dpmpp_2m", scheduler="karras") → LATENT
VAEDecode → IMAGE
SaveImage
```

### ControlNet Compatibility

SDXL ControlNets are separate from SD 1.5 ControlNets:

| ControlNet | Model File Pattern | Notes |
|------------|-------------------|-------|
| Canny | `control-lora-canny-rank256` or `diffusers_xl_canny` | Often LoRA-based |
| Depth | `control-lora-depth-rank256` or `diffusers_xl_depth` | |
| T2I-Adapter | `t2i-adapter-*-sdxl` | Lighter alternative to ControlNet |
| IP-Adapter | `ip-adapter_sdxl` | Image prompt adapter |
| InstantID | `instantid-*` | Face-specific |

### LoRA Compatibility

- SDXL LoRAs ONLY work with SDXL base models — NOT with SD 1.5
- Same `LoraLoader` node as SD 1.5
- Lightning LoRAs are SDXL LoRAs that enable few-step generation

---

## Flux (Flux.1)

### Overview

Black Forest Labs' model with a T5-XXL text encoder. Produces high-quality images without negative prompts. Available in schnell (fast) and dev (quality) variants.

### Configuration — Flux Schnell

| Parameter | Value |
|-----------|-------|
| **Loader** | `CheckpointLoaderSimple` (single-file) or `DualCLIPLoader` + `UNETLoader` + `VAELoader` (split) |
| **Native Resolution** | 1024x1024 (flexible aspect ratios) |
| **Supported Resolutions** | Flexible: 512x512 to 2048x2048, any aspect ratio |
| **VAE** | Separate Flux VAE (`ae.safetensors`) — NOT shared with SD models |
| **CLIP** | T5-XXL + CLIP-L via `DualCLIPLoader` |
| **Text Encoder Node** | `CLIPTextEncode` (single combined) |
| **CFG** | **1.0** (MUST be 1.0 — higher values cause severe artifacts) |
| **Negative Prompt** | **NONE** — do not connect negative conditioning |
| **Steps** | 4 |
| **Sampler** | `euler` |
| **Scheduler** | `simple` or `sgm_uniform` |
| **Denoise** | 1.0 |
| **VRAM (FP16)** | ~24GB (FP8: ~12GB) |

### Configuration — Flux Dev

| Parameter | Value |
|-----------|-------|
| **Same as Schnell except:** | |
| **Steps** | 20-50 (typical: 30) |
| **Scheduler** | `sgm_uniform` |
| **VRAM (FP16)** | ~24GB (FP8: ~12GB) |

### Loading Methods

**Method 1: Single Checkpoint (simplest)**
```
CheckpointLoaderSimple (ckpt_name="flux1-schnell.safetensors")
  → MODEL(0), CLIP(1), VAE(2)
```

**Method 2: Split Components (recommended for FP8)**
```
UNETLoader (unet_name="flux1-schnell-fp8.safetensors") → MODEL
DualCLIPLoader (clip_name1="t5xxl_fp16.safetensors", clip_name2="clip_l.safetensors", type="flux") → CLIP
VAELoader (vae_name="ae.safetensors") → VAE
```

### CRITICAL Rules

- **CFG MUST be 1.0** — Flux uses guidance embedded in the model, not classifier-free guidance
- **No negative prompt** — Empty string or don't connect the negative input at all
- **Separate VAE required** — Flux uses its own VAE (`ae.safetensors`), not SD VAEs
- **FP8 strongly recommended** for 24GB cards — FP16 Flux barely fits in 24GB VRAM
- T5-XXL encoder can be loaded in FP8 to save additional VRAM
- **Kitchen quant column (this GPU):** `kitchen` action:"status" reports `gpu.fp8` (SM ≥ 8.9, Ada), `gpu.nvfp4` and `gpu.mxfp8` (SM ≥ 10.0, Blackwell). A UNETLoader on `weight_dtype: default` with an unquantized file and kitchen present is `panel_kitchen` action:"assess" rec `fp8_unet_fast` (set `fp8_e4m3fn_fast`). An NVFP4 sibling on disk is rec `nvfp4_swap`. MXFP8 is reported in status but not recommended until a loader path exposes it.

### Workflow Pattern

```
UNETLoader (flux fp8) → MODEL
DualCLIPLoader (t5xxl + clip_l, type="flux") → CLIP
VAELoader (ae.safetensors) → VAE

CLIPTextEncode (positive prompt) → CONDITIONING
  (no negative CLIPTextEncode needed)

EmptyLatentImage (width=1024, height=1024) → LATENT

KSampler (cfg=1.0, steps=4, sampler="euler", scheduler="simple") → LATENT
VAEDecode (vae from VAELoader) → IMAGE
SaveImage
```

### ControlNet Compatibility

Flux ControlNets are model-specific:

| ControlNet | Notes |
|------------|-------|
| Flux ControlNet (Canny) | Specific Flux-compatible ControlNet |
| Flux ControlNet (Depth) | Specific Flux-compatible ControlNet |
| InstantX ControlNets | Community Flux ControlNets |
| Flux IP-Adapter | Image prompt for Flux |

SD 1.5 and SDXL ControlNets do NOT work with Flux.

### LoRA Compatibility

- Flux LoRAs ONLY work with Flux models
- Typically loaded via `LoraLoader` same as SD models
- Flux LoRA ecosystem is smaller than SD 1.5/SDXL but growing
- Some Flux LoRAs require specific trigger words

---

## Stable Diffusion 3 / 3.5 (SD3)

### Overview

Stability AI's next-generation model with triple CLIP architecture. Better prompt adherence and longer prompt support via T5-XXL.

### Configuration

| Parameter | Value |
|-----------|-------|
| **Loader** | `CheckpointLoaderSimple` or triple-clip loader |
| **Native Resolution** | 1024x1024 |
| **VAE** | Built-in (integrated) |
| **CLIP** | Triple: CLIP-L + CLIP-G + T5-XXL |
| **Text Encoder Node** | `CLIPTextEncode` or `CLIPTextEncodeSD3` |
| **CFG Range** | 4-7 (typical: 5.0) |
| **Negative Prompt** | Minimal — SD3 needs very little negative guidance |
| **Steps** | 20-30 |
| **Sampler** | `euler`, `dpmpp_2m` |
| **Scheduler** | `sgm_uniform`, `normal` |
| **Denoise** | 1.0 (txt2img) |
| **Shift** | Some samplers support a shift parameter for SD3 |
| **VRAM (FP16)** | ~12GB (without T5-XXL: ~6GB) |

### Triple CLIP Loading

```
CheckpointLoaderSimple → MODEL(0), CLIP(1), VAE(2)
```

Or for separate CLIP control:
```
DualCLIPLoader (clip_l + clip_g) → CLIP
CLIPLoader (t5xxl) → CLIP
```

### Key Differences from SD 1.5/SDXL

- Much better text rendering capabilities
- Handles spatial relationships better ("cat on the left, dog on the right")
- T5-XXL enables very long, detailed prompts (no 77-token limit concern)
- Lower CFG values (4-7 vs 7-12)
- Minimal negative prompting needed
- `shift` parameter in sampling affects noise schedule

### ControlNet Compatibility

- SD3-specific ControlNets are limited
- Check for SD3-compatible community ControlNets
- SD 1.5 and SDXL ControlNets do NOT work with SD3

---

## LTXV (Video Models)

### Overview

Latent video diffusion models for text-to-video and image-to-video generation. Very VRAM-intensive.

### Configuration

| Parameter | Value |
|-----------|-------|
| **Loader** | Special video checkpoint loader (varies by node pack) |
| **Resolution** | 512x512 or 768x768 per frame (depends on model) |
| **Frames** | 16-64 (depends on VRAM) |
| **FPS** | 8-24 |
| **VRAM** | 20GB+ FP16, ~6-10GB FP8 |
| **Key Warning** | Can OOM on 24GB VRAM — always use FP8 quantized models |

### VRAM Management

- **Always use FP8 quantized models** on 24GB cards
- Reduce frame count if OOM persists
- Lower resolution helps significantly
- Close other GPU-using applications
- Consider `--lowvram` flag for ComfyUI

---

## Cross-Family Compatibility Rules

### LoRA Compatibility

LoRAs are **model-family specific** and are NOT interchangeable:

| LoRA Trained For | Works With | Does NOT Work With |
|-----------------|------------|-------------------|
| SD 1.5 | SD 1.5 and its fine-tunes | SDXL, Flux, SD3 |
| SDXL | SDXL and its fine-tunes | SD 1.5, Flux, SD3 |
| Flux | Flux models only | SD 1.5, SDXL, SD3 |
| SD3 | SD3/3.5 models only | SD 1.5, SDXL, Flux |

Using a LoRA with the wrong base model will produce garbage images or errors.

### ControlNet Compatibility

ControlNets are also **model-family specific**:

| ControlNet Trained For | Works With | Does NOT Work With |
|-----------------------|------------|-------------------|
| SD 1.5 (v1.1 series) | SD 1.5 base + fine-tunes | SDXL, Flux, SD3 |
| SDXL | SDXL base + fine-tunes | SD 1.5, Flux, SD3 |
| Flux | Flux models only | SD 1.5, SDXL, SD3 |

### VAE Compatibility

| VAE | Compatible Models | Notes |
|-----|-------------------|-------|
| `vae-ft-mse-840000-ema-pruned` | SD 1.5 family | Best external VAE for SD 1.5 |
| SDXL built-in VAE | SDXL family | Good quality, no external needed |
| `sdxl_vae.safetensors` | SDXL family | External SDXL VAE option |
| `ae.safetensors` (Flux VAE) | Flux only | Required for Flux, incompatible with SD |
| SD3 built-in VAE | SD3 family | Integrated, no external needed |

**Rule**: Never mix VAEs across model families. An SD 1.5 VAE decoding Flux latents will produce garbage.

### Embedding/Textual Inversion Compatibility

| Embedding Type | Compatible Models |
|---------------|-------------------|
| SD 1.5 embeddings | SD 1.5 family only |
| SDXL embeddings | SDXL family only |
| Flux/SD3 | Generally don't use traditional embeddings |

### Sampler/Scheduler Compatibility

Most samplers work across all models, but some combinations are optimal:

| Model | Best Sampler | Best Scheduler | Notes |
|-------|-------------|----------------|-------|
| SD 1.5 | `euler_ancestral`, `dpmpp_2m` | `karras`, `normal` | All standard samplers work |
| SDXL | `dpmpp_2m`, `euler` | `karras`, `normal` | Same as SD 1.5 |
| SDXL Turbo | `euler_ancestral` | `normal` | Must use 1-4 steps |
| SDXL Lightning | `euler` | `sgm_uniform` | Must match step count to LoRA |
| Flux Schnell | `euler` | `simple` | 4 steps only |
| Flux Dev | `euler` | `sgm_uniform` | 20-50 steps |
| SD3 | `euler`, `dpmpp_2m` | `sgm_uniform`, `normal` | Lower CFG needed |

## Quick Decision Guide

### Choosing a Model

| Use Case | Recommended Model | Why |
|----------|------------------|-----|
| Maximum ecosystem/community support | SD 1.5 | Most LoRAs, ControlNets, embeddings |
| High quality, good prompt following | SDXL | Best balance of quality and ecosystem |
| Fastest generation | SDXL Turbo/Lightning | 1-4 steps |
| Best prompt understanding | Flux Dev | T5-XXL encoder, natural language |
| Fast + good quality | Flux Schnell | 4 steps, no negative needed |
| Text in images | SD3.5 | Best text rendering |
| Low VRAM (<6GB) | SD 1.5 | Smallest memory footprint |
| Video generation | LTXV / AnimateDiff | Only options for video |

### Choosing Resolution

| Model | Minimum | Recommended | Maximum (before OOM on 24GB) |
|-------|---------|-------------|-------------------------------|
| SD 1.5 | 256x256 | 512x512 | 768x768 |
| SDXL | 512x512 | 1024x1024 | 1536x1536 |
| Flux (FP8) | 512x512 | 1024x1024 | 2048x2048 |
| Flux (FP16) | 512x512 | 1024x1024 | 1024x1024 (tight) |
| SD3 | 512x512 | 1024x1024 | 1536x1536 |

Going below the recommended resolution produces blurry/low-quality results. Going above the maximum risks OOM errors or quality degradation (tiling artifacts).

## Sources

- **Official:** none found as a vendor pairing matrix. Kitchen hardware gates: ComfyUI `comfy/model_management.py` (`supports_fp8_compute`, `supports_nvfp4_compute`, `supports_mxfp8_compute`); UNETLoader `weight_dtype` in `nodes.py`.
- **Empirical:** base-model / VAE / CLIP pairing rules from observed load failures.
