Model Profile Router (Inteliweb)
Four model stacks, one workflow, zero rewiring
- profile_in
- low_model
- low_text_encoder
- low_vae
- medium_model
- medium_text_encoder
- medium_vae
- high_model
- high_text_encoder
- high_vae
- ultra_model
- ultra_text_encoder
- ultra_vae
- MODEL
- TEXT ENCODER
- VAE
- GPU PROFILE
The Model Profile Router is the payoff for the GPU Profile Selector, and the pair is genuinely clever once you see the whole loop. You build four complete model stacks - a LOW stack (say, a GGUF-quantized checkpoint), a MEDIUM, a HIGH, and an ULTRA - all feeding into one Router. Then a single profile token decides which stack actually runs. Same workflow file, different machine: on your 8 GB card you set LOW, on a rented 24 GB box you flip to ULTRA, and nothing downstream changes because the Router always hands out MODEL, TEXT ENCODER, and VAE.
How it works
The twelve model inputs (low_model through ultra_vae) are all declared lazy, and the backend's check_lazy_status() only ever requests the effective profile's three inputs. That's the important engineering bit: ComfyUI never evaluates the loaders on inactive profiles, so the LOW path's GGUF loader doesn't run when you're on ULTRA. It's not just a switch that picks an already-loaded model - it routes which loaders execute at all.
Priority is profile_in (a wired GPU PROFILE, highest) → GLOBAL (follows a channel named by a GPU Profile Selector) → LOCAL (the profile dropdown itself). In GLOBAL mode the global_channel dropdown is populated live from the GLOBAL selectors in your workflow, and if that channel disappears the Router falls back to HIGH • LOCAL rather than silently hopping to another channel - a deliberate safety choice that keeps you from running the wrong stack by accident.
Inputs and outputs
The effective_profile field is informational only - the frontend updates it and you shouldn't hand-edit it. The profile dropdown sets GLOBAL/LOW/MEDIUM/HIGH/ULTRA. Outputs are MODEL, TEXT ENCODER (which is a CLIP internally), VAE, and a pass-through GPU PROFILE so you can see what actually got selected. It works with native loaders, GGUF loaders, anything that emits standard MODEL/CLIP/VAE sockets.
Install and setup
Same pack, same one-time install:
cd ComfyUI/custom_nodes
git clone https://github.com/maoper11/comfyui_inteliweb_nodes.git
cd comfyui_inteliweb_nodes
python -m pip install -r requirements.txt
Restart ComfyUI. No extra dependencies beyond psutil and nvidia-ml-py, no model files to download - the models are yours.
Where people get burned
The biggest trap is the frontend's auto-mute: loaders connected to inactive profiles get set to MUTE, and that's intended. If your workflow "loses" a loader, check whether a shared loader is muted because the active profile doesn't use it - the frontend keeps a loader enabled when the active profile references it, but a loader exclusive to another profile gets muted. Second, if global_channel shows only none, there's no GLOBAL GPU Profile Selector in the workflow, so set the profile dropdown to a concrete tier. Finally, remember this is niche territory: profile-based model routing barely shows up in the wider ComfyUI conversation, so you're mostly on your own with the README's demo workflow (workflows/testing-inteliweb-nodes-v0.20.1.json, which uses Z-Image Turbo). It's a power-user tool, but for "one workflow across two GPUs" it's the least fiddly answer I've found.
Inputs (16)
| Name | Type | Default | Description |
|---|---|---|---|
| profile | COMBO | HIGH | GLOBAL follows Global Channel. LOW/MEDIUM/HIGH/ULTRA make this router local. |
| effective_profile | STRING | HIGH • LOCAL | Informational status automatically updated by the Inteliweb frontend extension. |
| global_channel | COMBO | none | Global channel listened to by this router. The list is populated from GLOBAL GPU Profile Selectors in the workflow. |
| profile_inopt | INTELIWEB_GPU_PROFILE | Optional external GPU PROFILE. When connected it has highest priority. | |
| low_modelopt | MODEL | Optional MODEL for this profile. | |
| low_text_encoderopt | CLIP | Optional text encoder (CLIP type) for this profile. | |
| low_vaeopt | VAE | Optional VAE for this profile. | |
| medium_modelopt | MODEL | Optional MODEL for this profile. | |
| medium_text_encoderopt | CLIP | Optional text encoder (CLIP type) for this profile. | |
| medium_vaeopt | VAE | Optional VAE for this profile. | |
| high_modelopt | MODEL | Optional MODEL for this profile. | |
| high_text_encoderopt | CLIP | Optional text encoder (CLIP type) for this profile. | |
| high_vaeopt | VAE | Optional VAE for this profile. | |
| ultra_modelopt | MODEL | Optional MODEL for this profile. | |
| ultra_text_encoderopt | CLIP | Optional text encoder (CLIP type) for this profile. | |
| ultra_vaeopt | VAE | Optional VAE for this profile. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| MODEL | MODEL | — |
| TEXT ENCODER | CLIP | — |
| VAE | VAE | — |
| GPU PROFILE | INTELIWEB_GPU_PROFILE | — |