























A collection of ComfyUI utility custom nodes. These provide functionality not offered in the core app or other custom nodes. Several nodes enhance existing ideas with improved UX and quality-of-life features.
Table of contents generated with markdown-toc
Calculate image histograms for RGB channels and L (luminance); displays a graphical representation.
Reduces outputs to just two: Original and Histogram. Can self-preview (original or histogram) and forward the selected histogram downstream.
*Based on original code by Phil Gyford and ComfyUI node by aimingfail.*
Generates halftone from an input image; can self-display or send output to other nodes.
Creates a side-by-side or split image from two inputs. Optional self-preview, headers (font/size/color), and label toggles.
Example (side-by-side instead of split):
Upload and download images to/from imgBB. Includes nodes for downloading images and a URL “storage” node that keeps the original link alongside the workflow.
Create imgbb_api_key.json under ./loaders/:
{
"api_key": "YOUR_API_KEY_HERE"
}
Obtain a key at
Drop-in replacement for the core “Load Checkpoint,” but flattens complex directory trees so checkpoints appear as if in a single folder — ideal for sharing workflows.
Produces B/W or grayscale clipped images with three modes (each reversible). Useful for masks and stylization.
*Based on original code by XSS.*
VAE decode with inline preview and QoL options.
*Based on original code by XSS.*
Creates a grayscale contrast mask. Select low/high thresholds (1–255), optional blur.
*Based on original code by XSS.*
Generates pixel-art style images. Choose interpolation and pixel size.
*Based on original Mosaic code by XSS.*
Enhances the idea by Yuigahama Yui:
./fonts/ directory.Example
| :-: | :-: |
| Original | Output |
Example workflow JSON (also embedded in the image below):
[](workflows/ComfyUI_YFG_Comical-Text-Mask-Overlay-Workflow.png)
*Based on the ComfyUI-Text node by Yuigahama Yui.*
Multi-input image switchers (3, 5, 10, 15, 20 inputs). Provide a routing matrix, inline preview, and graceful handling of missing inputs (with user warnings). Designed to avoid “ganged” switcher confusion in complex workflows.
Modified version of the WAS node (original wasn’t functioning). Requires a Random.org account and API key.
*Based on original code by WASasquatch.*
Integrates with the random.org JSON-RPC API to generate true random numbers from atmospheric noise.
Key is not exposed in UI, workflow JSON, or image metadata. Loaded at runtime from:
RANDOM_ORG_API_KEY, orrandom_org_api_key.json next to RandomOrgV2.py.Emits three types for broad node compatibility:
NUMBERFLOATINTAvoid repeats within a Python session:
ensure_unique — toggle de-duplicationunique_scope — "range" (per [min, max]) or "global" (across all ranges)history_size — how many values to remembertime_window_sec — ignore duplicates older than this windowretry_limit — extra draws to try before giving upOld node remains available as RandomOrgTrueRandomNumber_node.
New node is RandomOrgV2TrueRandomNumber_node.
random_org_api_key.json next to RandomOrgV2.py:“`json
{
“api_key”: “YOUR_API_KEY_HERE”
}
“`
“`bash
export RANDOM_ORG_API_KEY=YOUR_API_KEY_HERE
“`
On Windows (PowerShell):
“`powershell
setx RANDOM_ORG_API_KEY “YOUR_API_KEY_HERE”
“`
minimum = 1maximum = 100mode = randomensure_uniqueunique_scope = rangehistory_size and time_window_secThis node selects a single image from a given directory (with optional recursion into subdirectories).
It supports true randomness (via Random.org integration if configured) or deterministic selection by index/filename.
It also tracks previously selected images so you can compare “current” vs “previous” outputs.
random: choose a random image (true random if Random.org is enabled, otherwise local PRNG).by_index: pick image by numeric index (safe wraparound).by_filename: select a file by exact name or substring.by_query: glob-style matching (*.png, cat*, etc.), random among matches.history_size and time_window_sec for fine control.total_count = number of eligible images found.image_directory *(string)* – Path to the folder containing images.include_subdirs *(bool, default: True)* – Whether to scan subdirectories.selection_mode *(choice, default: random)* – Image selection method.index *(int)* – Used when selection_mode=by_index.filename_query *(string)* – Used when selection_mode=by_filename or by_query.random_source *(choice, default: auto)* –auto: use Random.org if API key is configured, else local PRNG.local: always use local PRNG.random_org: force Random.org usage (requires API key).ensure_unique *(bool)* – Prevent repeats during a session.unique_scope *(choice)* – "directory" or "global".history_size *(int, default: 512)* – Max remembered items.time_window_sec *(int, default: 0)* – Forget items older than this many seconds.retry_limit *(int, default: 16)* – Max retries when avoiding duplicates.image – The loaded image tensor.path_current – Full path of the selected image (current).index_current – Index of the selected image (current).filename_current – Filename of the selected image.width – Width of the image in pixels.height – Height of the image in pixels.sha256 – SHA256 checksum of the file (useful for deduplication).total_count – Total number of eligible images discovered in the directory (after filters).path_previous – Full path of the image from the previous run.index_previous – Index of the image from the previous run.random_org_api_key.json next to the node:random_org_api_key.json next to RandomOrgV2.py:“`json
{
“api_key”: “YOUR_API_KEY_HERE”
}
“`
“`bash
export RANDOM_ORG_API_KEY=YOUR_API_KEY_HERE
“`
On Windows (PowerShell):
“`powershell
setx RANDOM_ORG_API_KEY “YOUR_API_KEY_HERE”
“`
If the embedded workflow doesn’t load, use the JSON:
workflows/ComfyUI_YFG_Comical-Example-Workflow.json
Huge thanks to creators whose work inspires or integrates with these nodes:
…and many others. Thank you for your talent and generosity.