Load Ideogram4 Phase C V2 Router
The Ideogram4 LoRA router loader, with receipts
- router
- diagnostics
The name is a mouthful, so here's the honest one-liner: this node is the paranoid loader for the "Phase C V2" system that makes Ideogram4 LoRA strength smart. It doesn't generate anything itself. It reads a router file - a small network that decides how hard to push a LoRA at every step - checks every byte of it, and hands it to Gen2_ApplyIdeogram4PhaseCV2Strength, which does the actual work. You run this node because you want the pair; nobody loads a router for its own sake.
Where it fits in the bigger picture: Ideogram 4 dropped open weights in June 2026 (fp8 and nf4 only, no bf16), and the community settled into a niche of graphic design and character work. LoRAs are the usual way to bend it, and LoRAs have a problem - a fixed strength applied everywhere, at every denoising step, whether the content matches or not. Phase C V2 is this pack's answer: gate the LoRA per content, per timestep, per group. This node is the front door to that.
How it works
The router artifact is a .safetensors with exactly seven tensor keys - the activator norm and projection layers, plus universal_anchors and a pair of context matrices you never touch. Around it sit up to three JSON files: a router config (schema ai-toolkit.ideogram4-v3-phase-c-v2-router-config, version 2), a group registry that maps LoRA modules into gate groups, and a source manifest. Those can live as separate files or be embedded in the safetensors' own metadata - that's what the artifact_layout choice is about.
The word "strictly" in the node's description is doing real work. The loader checks schema versions, JSON shape, fingerprints, SHA256 of every file, and records the expected hashes of the embedding and TE-adapter artifacts the router was trained against. It fails closed: any mismatch, wrong suffix, or placeholder selection throws an error instead of loading a half-validated router. It also spot-checks that a JSON file didn't change mid-read. This is a pack author who has been burned by silent corruption and decided the fix is a bouncer.
The inputs that matter
- artifact_layout -
separate_filesorself_contained. Self-contained is cleaner if your router ships with its configs baked in; it requires all three JSON dropdowns to stay on<embedded>. - router_name - the
.safetensorsinComfyUI/models/gen2/. If the dropdown shows<no .safetensors files>, that's the problem. - router_config_name / group_registry_name / source_manifest_name - JSON sidecars, defaulting to
<embedded>. You only pick files here inseparate_filesmode. - verify_hashes - defaults to
trueand you should leave it that way. This one's a trap: it feels like a performance knob, but it's your corruption detector. Only disable it if a manifest hash is stale and you've confirmed the files are right.
Both outputs are worth knowing. router (typed GEN2_IDEOGRAM4_PHASE_C_V2_ROUTER) feeds straight into the Apply node. diagnostics is a STRING of the whole validation: every path, every SHA256, both fingerprints, group count. Wire it to a text display once and you'll see exactly what the router thinks it's paired with.
Installing it
The pack installs the normal way - via ComfyUI Manager (search ComfyUI-gen2) or:
cd ComfyUI/custom_nodes
git clone https://github.com/petmycat/ComfyUI-gen2.git
cd ComfyUI-gen2
pip install -r requirements.txt
Then restart ComfyUI. Note the README's requirement: ComfyUI v0.28.0 or newer - these nodes use the modern V3 node API, so a stale install just won't show them. No Python deps beyond the pack's own requirements.txt (scipy, safetensors, transformers), and no model download bundled - the router artifacts are yours to source.
Common issues
- Dropdowns showing
<no ... files>means nothing is inComfyUI/models/gen2/- the router reads from there, not frommodels/controlnetor anywhere else. - "A real .safetensors file must be selected" - you left the placeholder selected instead of choosing an actual file.
- Hash or fingerprint mismatches: don't disable
verify_hashes, re-download the file. This pack treats a wrong checksum as a hard stop by design. - The Phase C V2 nodes aren't documented in the pack README yet - the README covers the V9 trigger path that feeds the Apply node, but the router/apply pair is newer and you're essentially on the bleeding edge. That's fine, just don't expect a template workflow to copy.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| artifact_layout | COMBO | separate_files | 2 options: separate_files, self_contained |
| router_name | COMBO | 1 options: <no .safetensors files> | |
| router_config_name | COMBO | <embedded> | 2 options: <embedded>, <no .json files> |
| group_registry_name | COMBO | <embedded> | 2 options: <embedded>, <no .json files> |
| source_manifest_name | COMBO | <embedded> | 2 options: <embedded>, <no .json files> |
| verify_hashes | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| router | GEN2_IDEOGRAM4_PHASE_C_V2_ROUTER | — |
| diagnostics | STRING | — |