ComfyUI Node Runs on cloud

advanced xyPlot

Grid-test any setting on any node, without rewriting your workflow

By TinyTerraΒ·Created 3 years agoΒ·Updated 3 months agoΒ· 605
advanced xyPlot
    • adv_xyPlot
    β—„grid_spacing0β–Ί
    β—„save_individualsfalseβ–Ί
    β—„flip_xyfalseβ–Ί
    β—„x_plotβ–Ί
    β—„y_plotβ–Ί
    β—„z_plotβ–Ί
    β—„invert_backgroundfalseβ–Ί

    advanced xyPlot is the flagship tinyterra node and the reason a lot of people install the pack at all: it lets you run a grid of generations varying anything - the checkpoint, the prompt, a LoRA weight, CFG, scheduler - by writing a few lines of syntax instead of duplicating nodes. If you've ever compared five LoRA weights by hand, this is the node that turns that hour into one run.

    The core idea: you plug it into a tinyterra pipe sampler (pipeKSampler_v2, pipeKSamplerSDXL, or the legacy v1), define an X axis and a Y axis, and the sampler runs the full cartesian product - every X value against every Y value - laying the results out as a grid image. The README describes it as "generate xyz plots using any previous input nodes," which is the key phrase: it reaches into other nodes in your graph and overwrites their widget values per cell.

    How the syntax works

    Each axis is a multiline box (x_plot, y_plot, and z_plot for a third dimension that runs whole extra grids). The format:

    <axis number:label>
    [node_ID:widget_name='value']
    

    So to test two checkpoints and two prompts:

    <1:ckpt>
    [2:ckpt_name='model_a.safetensors']
    [2:ckpt_name='model_b.safetensors']
    
    <2:prompt>
    [4:text='Summer sunset']
    [4:text='Winter storm']
    

    The label can be any string, or a magic one: v_label concatenates the values being tested, tv_label adds the widget titles, idtv_label adds node IDs. Node IDs come from ComfyUI Manager's "Badge: ID + nickname" setting (turned on in Manager settings), which you'll want enabled before you start.

    There's autocomplete support: connect the xyPlot to a sampler and typing in the boxes suggests node IDs, widgets, and even an "add axis" snippet. The %search;replace% syntax lets you transform the current value, and appending .append to a widget name appends your value to the existing one instead of replacing it.

    Inputs that matter

    • x_plot / y_plot / z_plot - the three axis definitions.
    • grid_spacing - pixels between grid cells (0 = flush).
    • save_individuals - also save each cell as its own image, which is the setting you want on if you're going to upscale individual winners afterward.
    • flip_xy - swap the axes.
    • invert_background - light grid background instead of black.

    Output is a single adv_xyPlot that wires into the sampler's adv_xyPlot input (or into advPlot images for image-based plots).

    Installing it

    Part of tinyterraNodes:

    cd ComfyUI/custom_nodes
    git clone https://github.com/TinyTerra/ComfyUI_tinyterraNodes.git
    

    or ComfyUI Manager β†’ tinyterraNodes. No dependencies, no model files.

    Gotchas

    This is the pack's best node and also its fiddliest. The axis-number syntax is unforgiving - a typo'd node ID silently does nothing (the console warns "Invalid Plot - defaulting to None"). Turn on node ID badges before you start, or you'll be guessing. XY plots multiply quickly: 5Γ—5 is 25 generations, and a Z axis makes it worse, so budget for the run time. And anything you don't specify is taken from the connected nodes' current values - which is the feature, but it means the grid silently depends on the rest of your graph's state. The helper nodes in the same menu (advPlot range, string, combo, merge) exist specifically to generate this syntax so you don't hand-write it.

    Category🌏 tinyterra/xyPlot

    Inputs (7)

    NameTypeDefaultDescription
    grid_spacingINT00–500β€”
    save_individualsBOOLEANfalseβ€”
    flip_xyBOOLEANfalseβ€”
    x_plotSTRINGβ€”
    y_plotSTRINGβ€”
    z_plotSTRINGβ€”
    invert_backgroundBOOLEANfalseβ€”

    Outputs (1)

    NameTypeDescription
    adv_xyPlotADV_XYPLOTβ€”