π€ IG Explorer
Binary-searching latent space so you stop guessing at the slider
- FLOAT
- STRING
- INT
The name isn't decoration - IG Explorer is the node the whole pack was built around. If you've ever sat there nudging a strength slider one step at a time, squinting at the preview, trying to find where a latent walk suddenly goes weird, this automates exactly that decision. It picks the next parameter value to try, and it picks it smartly: by measuring how much the images you've already generated actually changed.
The idea is a binary search over a one-dimensional parameter axis. You're exploring something like IP-Adapter strength, conditioning weight, or noise - anything where "what value produces image X" is a curve you can only probe by generating. The Explorer doesn't generate anything itself; it tells you what to try next, you make the image, save it where it expects, and re-run. Every pass it hands you a new parameter, the filename your next image should use, and the seed for that exploration round.
Here's the mechanism, straight from the source. It keeps a state file (exploration_state.json) in your folder, one subfolder per seed (named seed_0, seed_1β¦), and a job queue of intervals (param1, param2). On each run it loads the queue, and if both endpoints of an interval already have images saved, it measures the SSIM between them. The interval with the lowest similarity - meaning the biggest visual change happened inside it - is the one it bisects. It removes that interval, splits it at the midpoint, and hands you the midpoint as the next parameter. Smallest intervals get left alone once their width drops below precision.
The inputs that matter:
- folder - a string path (
forceInput), so wire it from IG Folder or afolder_pathsoutput. It must already exist; the node creates it if not. - precision - the minimum interval width worth splitting (default
0.0001). Smaller = finer search, more images. - max_images - cap on images per exploration round.
0means unlimited. - num_explorations - cap on rounds.
0means keep going forever. - start_seed - the seed for your first round.
The three outputs are a package deal: FLOAT (the parameter to generate at), STRING (the filename prefix it expects you to save the image under), and INT (the seed for the current round). The image-saving contract is the trap everyone hits: it looks for files named image_*_00001_.png in the folder, and it wants your Save Image node to write exactly the prefix it hands you plus the frame counter. Wire the STRING into whatever path your save node uses and don't improvise.
Install is the same for every node in this pack - ComfyUI Manager β Custom Nodes Manager β search "IG Interpolation Nodes" β Install, then restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/IDGallagher/ComfyUI-IG-Nodes
cd ComfyUI-IG-Nodes && pip install -r requirements.txt
The README is literally :) - no docs, so the filename contract lives only in the code. When it finishes every round it throws "π€ All explorations finished!"; that's the signal to raise num_explorations, not a bug. And it needs scikit-image and opencv for the SSIM math, which the requirements pull in - the opencv-contrib build is the one dependency in this pack with any real chance of arguing with what you already have installed.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| folder | STRING | β | |
| precision | FLOAT | 01e-7β1 | β |
| max_images | INT | 0 | β |
| num_explorations | INT | 0 | β |
| start_seed | INT | 0 | β |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| FLOAT | FLOAT | β |
| STRING | STRING | β |
| INT | INT | β |