Nodes/h4 ToolKit/h4 : Debug-a-Tron-3000 Router (v2.1.0)
ComfyUI Node

h4 : Debug-a-Tron-3000 Router (v2.1.0)

The Debug-a-Tron Router

By m3rr·Created 11 months ago·Updated 2 months ago· 0
h4 : Debug-a-Tron-3000 Router (v2.1.0)
  • model_in_a
  • clip_in_a
  • clip_vision_in_a
  • vae_in_a
  • conditioning_in_a
  • conditioning_positive_in_a
  • conditioning_negative_in_a
  • latent_in_a
  • image_in_a
  • mask_in_a
  • model_in_b
  • clip_in_b
  • clip_vision_in_b
  • vae_in_b
  • conditioning_in_b
  • conditioning_positive_in_b
  • conditioning_negative_in_b
  • latent_in_b
  • image_in_b
  • mask_in_b
  • Branch A · Model
  • Branch A · CLIP
  • Branch A · CLIP_Vision
  • Branch A · VAE
  • Branch A · Conditioning
  • Branch A · Positive
  • Branch A · Negative
  • Branch A · Latent
  • Branch A · Image
  • Branch A · Mask
  • Branch B · Model
  • Branch B · CLIP
  • Branch B · CLIP_Vision
  • Branch B · VAE
  • Branch B · Conditioning
  • Branch B · Positive
  • Branch B · Negative
  • Branch B · Latent
  • Branch B · Image
  • Branch B · Mask
modepassthrough
go_ultrafalse
ultra_capture_first_steptrue
ultra_capture_mid_stepfalse
ultra_capture_last_steptrue
ultra_preview_imagestrue
ultra_json_logtrue
ultra_highlight_missing_conditioningtrue
ultra_token_previewfalse
ultra_latent_anomaly_checkstrue
ultra_model_diff_trackingfalse
ultra_watch_expression
ultra_cache_artifactstrue

Once you graduate to two-pass workflows - a base diffuser and a refiner, or an image track and a text track running side by side - debugging gets awkward. Do you drop two Debug-a-Trons in and compare logs manually? The Router is the pack's answer: it's the Debug-a-Tron feature set with every slot duplicated for Branch A and Branch B, so both lanes pass through one node and one log stream, with per-branch reporting built in.

Given the README's framing around "dual-branch graphs (diffuser vs. refiner)" this is squarely aimed at people doing high-res fix or refinement splits - exactly the workflows where comparing branch state matters. It shares the h4 ToolKit's profile: small, shelved, zero community footprint, but well-documented by its author.

How it works

Every slot the base Debug-a-Tron has, the Router has twice, suffixed _a and _b: model_in_a/model_in_b, conditioning_positive_in_a/_b, latent_in_a/_b, and so on through the whole ten-slot catalogue. The outputs mirror that - ten Branch A sockets and ten Branch B sockets.

The genuinely useful part is the branch intelligence:

  • Per-branch summaries - the console report aggregates connection counts per branch and tells you what's missing, e.g. "Branch A: 8/10 connected; missing → Branch A · CLIP."
  • Targeted VAE fallback - each branch's VAE inlet falls back to its own branch's model, not the other lane's.
  • Passthrough by default - mode defaults to passthrough (not monitor), so both branches keep flowing during live runs without extra configuration. Branch-parity is the assumed state.
  • Branch-aware diagnostics - latent snapshots, preview filenames, anomaly messages, and conditioning warnings all carry the branch label, so a "NaN at step 12" message tells you which lane it happened in.

All the GO PLUS ULTRA controls from the base node are here too: snapshots, anomaly checks, JSON logs, model fingerprinting, watch expressions. They apply per branch, and the artifact filenames tag the branch.

Using it

  1. Insert it where two lanes should be evaluated in parallel.
  2. Leave mode on passthrough for live mirroring; switch to monitor if you only want telemetry and don't want to touch the outputs.
  3. Flip GO PLUS ULTRA for branch-tagged snapshots and JSON logs.

The console report gives you branch health at a glance - missing feeds are called out instantly, which beats squinting at two separate debuggers. It's the right tool when the question is "which branch is lying to me," rather than "what's in this one wire."

Install

Same pack-wide story - Manager search "h4 ToolKit", or:

cd ComfyUI/custom_nodes
git clone https://github.com/m3rr/h4_ToolKit

Restart. Deps are colorama and numpy, auto-installed at startup; no model downloads.

Troubleshooting

  • Outputs don't match what I wired - remember every output belongs to a branch; Branch A · Latent comes from latent_in_a, not latent_in_b. It's a lot of sockets and easy to cross.
  • Missing-branch warnings - those are the feature; check which branch is unconnected in the summary line rather than digging through the log.
  • Artifacts - branch-tagged JSON/previews land under ComfyUI/temp/h4_debugatron_ultra/, gated by go_ultra and ultra_cache_artifacts.
Categoryh4 Toolkit/Debug

Inputs (33)

NameTypeDefaultDescription
modeCOMBOpassthrough2 options: monitor, passthrough
model_in_aoptMODELConnect any diffusion model blob to inspect or forward downstream. (Branch A)
clip_in_aoptCLIPAttach a CLIP text encoder payload for logging and pass-through. (Branch A)
clip_vision_in_aoptCLIP_VISIONOptional CLIP vision encoder payload. (Branch A)
vae_in_aoptVAESupply a VAE instance for inspection or passthrough. (Branch A)
conditioning_in_aoptCONDITIONINGGeneric conditioning list or bundle. (Branch A)
conditioning_positive_in_aoptCONDITIONINGPositive conditioning branch when separated upstream. (Branch A)
conditioning_negative_in_aoptCONDITIONINGNegative conditioning branch when separated upstream. (Branch A)
latent_in_aoptLATENTLatent dictionary (samples / noise etc.). (Branch A)
image_in_aoptIMAGEImages or batches headed into the debugger. (Branch A)
mask_in_aoptMASKMask tensor payloads to monitor or route. (Branch A)
model_in_boptMODELConnect any diffusion model blob to inspect or forward downstream. (Branch B)
clip_in_boptCLIPAttach a CLIP text encoder payload for logging and pass-through. (Branch B)
clip_vision_in_boptCLIP_VISIONOptional CLIP vision encoder payload. (Branch B)
vae_in_boptVAESupply a VAE instance for inspection or passthrough. (Branch B)
conditioning_in_boptCONDITIONINGGeneric conditioning list or bundle. (Branch B)
conditioning_positive_in_boptCONDITIONINGPositive conditioning branch when separated upstream. (Branch B)
conditioning_negative_in_boptCONDITIONINGNegative conditioning branch when separated upstream. (Branch B)
latent_in_boptLATENTLatent dictionary (samples / noise etc.). (Branch B)
image_in_boptIMAGEImages or batches headed into the debugger. (Branch B)
mask_in_boptMASKMask tensor payloads to monitor or route. (Branch B)
go_ultraoptBOOLEANfalseFlip the switch marked GO PLUS ULTRA?! to open deep-dive logging, previews, and artefact capture.
ultra_capture_first_stepoptBOOLEANtrueCapture analytics for the earliest latent frame observed (or current latent when history is unavailable).
ultra_capture_mid_stepoptBOOLEANfalseWhen latent history is provided, also analyse the midpoint frame for drift checks.
ultra_capture_last_stepoptBOOLEANtrueCapture analytics for the most recent latent frame to spot end-of-run anomalies.
ultra_preview_imagesoptBOOLEANtrueAttempt to decode the analysed latent into a quick preview image when a VAE is connected.
ultra_json_logoptBOOLEANtrueSerialise the captured diagnostics to a JSON file under ComfyUI's temp directory for later comparison.
ultra_highlight_missing_conditioningoptBOOLEANtrueWarn when positive/negative or auxiliary conditioning branches are absent to prevent silent misconfigurations.
ultra_token_previewoptBOOLEANfalseAttempt to echo prompt fragments and key embedding stats for the first few conditioning entries.
ultra_latent_anomaly_checksoptBOOLEANtrueScan tensors for NaN/Inf values and suspicious variance spikes to surface stability issues early.
ultra_model_diff_trackingoptBOOLEANfalseHash model and LoRA parameter signatures so you can verify which weights were active this run.
ultra_watch_expressionoptSTRINGEvaluate a Python expression against the inbound payloads (available globals: torch, np, slot names). Leave blank to disable.
ultra_cache_artifactsoptBOOLEANtrueKeep generated preview images and JSON logs on disk instead of treating them as temporary diagnostics.

Outputs (20)

NameTypeDescription
Branch A · ModelMODEL
Branch A · CLIPCLIP
Branch A · CLIP_VisionCLIP_VISION
Branch A · VAEVAE
Branch A · ConditioningCONDITIONING
Branch A · PositiveCONDITIONING
Branch A · NegativeCONDITIONING
Branch A · LatentLATENT
Branch A · ImageIMAGE
Branch A · MaskMASK
Branch B · ModelMODEL
Branch B · CLIPCLIP
Branch B · CLIP_VisionCLIP_VISION
Branch B · VAEVAE
Branch B · ConditioningCONDITIONING
Branch B · PositiveCONDITIONING
Branch B · NegativeCONDITIONING
Branch B · LatentLATENT
Branch B · ImageIMAGE
Branch B · MaskMASK