comfyui_gr85
Nodes:Image Dimension Resizer, Image Sizer, Random Ratio, Show Text, Random Title Character, Random Wildcard Tag Picker, Random Show Atm Loc Outfit, Contains Word,…
Nodes (37)
A text-triggered switch for your workflow
Turning a phrase list into Florence-2's grounding format
The plain-split version of the phrase-list helper
Drop the tiny detections, keep the rest
Find things in an image by describing them in words
Turning grounding JSON into usable numbers
Twelve sliders instead of one comma-separated string
Per-block scaling on your CLIP text encoder
The node that fills in the other two
Stop hand-typing 60 block ratios
Snap any resolution onto a standard bucket
Force landscape or portrait without breaking the ratio
Set a pixel budget, get dimensions that respect it
A rotating run of integers as one string
The one-node fix for a type-mismatch wire
Cutting one mask into a grid of separate islands
Turning your own masks into Impact Pack's detection format
Stitching scattered mask islands back into one shape
Breaking one mask into its separate islands, with bounding boxes
Deriving a fresh seed from an old one without leaving the graph
Compositing a processed patch back into the full image
A seeded random number you can actually wire into a graph
The integer sibling to Random Float, same seeded-draw idea
Jitter a mask's rotation and position for free variety
Sampling a random aspect ratio between two bounds
Point- and box-prompted masking, once you've got a SAM2 model loaded
SaveImage with your own path and filename numbering
Dump any string to disk with auto-numbered filenames
Picking one of up to 10 strings, tied to a seed
The cheapest way to see what a string node actually produced
{a|b|c} syntax without installing a whole wildcard pack
Sanitizing text before it hits a filename or a fragile field
The three-placeholder sibling in the pack's tag-injection family
Two placeholders, straight from the README
Ten placeholders, and two of them do nothing by default
The simplest way to drop one value into a template
One option per line, no brace syntax required
comfyui_gr85 – Custom Nodes for ComfyUI
This repository provides a small collection of GR85-flavoured custom nodes for ComfyUI. It includes utilities for working with image dimensions, randomization, prompt manipulation, and seed utilities.
The implementation is being migrated from the legacy INPUT_TYPES / RETURN_TYPES API to the modern comfy_api.latest schema-based API (io.ComfyNode, define_schema, execute, and ComfyExtension).
Currently Simple Wildcard Picker has been migrated fully to the new API; other nodes still use the classic style.
Node overview
Resolution helpers
-
GR85_ImageDimensionResizer (
ImageDimensionResizer, categoryGR85/Resolution)- Computes new width/height based on a selected target resolution while preserving the original pixel count and aspect ratio.
-
GR85_ImageSizer (
ImageSizer, categoryGR85/Resolution)- Rescales to a target aspect ratio with orientation (
original/landscape/portrait) and snaps the result to a given tolerance (e.g. multiples of 16).
- Rescales to a target aspect ratio with orientation (
-
GR85_ImageSizerAll (
ImageSizerAll, categoryGR85/Resolution)- Takes a pixel budget and aspect ratio components and returns new dimensions that match the pixel count and orientation, adjusted to a given tolerance.
-
GR85_RandomRatio (
RandomRatio, categoryGR85/Resolution)- Given two width/height pairs, samples a random aspect ratio between their ratios and returns it as integer width/height components.
Prompt helpers
-
GR85_SeedBasedOutputSelector (
SeedBasedOutputSelector, categoryGR85/Prompt/Selection)- Selects one string from up to 10 inputs based on a seed. Only non-
Noneinputs are considered, and the seed is used with modulo to choose the index.
- Selects one string from up to 10 inputs based on a seed. Only non-
-
GR85_SimpleWildcardPicker (
SimpleWildcardPicker, categoryGR85/Prompt/Wildcards)- New implementation (v3 API):
- Implemented as an
io.ComfyNodeusingdefine_schemaandexecute. - Inputs:
prompt(multiline string)seed(integer)
- Behavior: expands
{a|b|c}-style wildcards (with support for nested braces) using a seeded RNG so results are reproducible.
- Implemented as an
- New implementation (v3 API):
-
Tag injector nodes (all classic API for now, category
GR85/Prompt/Tags)- TagInjectorSingle – injects a single tag into a template using placeholder names like
__elements__. - TagInjectorDuo – same idea, but for two tags (e.g.
elementsandstuff). - TagInjectorLarge – larger template that injects multiple semantic placeholders such as
__location__,__weather__,__style__, etc.
- TagInjectorSingle – injects a single tag into a template using placeholder names like
Random / utility nodes
-
GR85_NextSeed (
NextSeed, categoryGR85/Random/Seed)- Given a seed, produces a new random seed in the full 64‑bit range.
-
GR85_RandomFloat (
RandomFloat, categoryGR85/Random/Numbers)- Generates a random float in
[min_value, max_value], with configurable decimal precision, seeded for reproducibility.
- Generates a random float in
-
GR85_RandomInt (
RandomInt, categoryGR85/Random/Numbers)- Generates a random integer in
[min_value, max_value], seeded for reproducibility.
- Generates a random integer in
Architecture and loading
This extension supports both:
- Legacy discovery via
NODE_CLASS_MAPPINGS/NODE_DISPLAY_NAME_MAPPINGSin__init__.py(for most nodes). - Modern discovery via
comfy_api.latestand aComfyExtensionentrypoint (forSimpleWildcardPicker).
The root __init__.py provides:
NODE_CLASS_MAPPINGSandNODE_DISPLAY_NAME_MAPPINGSfor the classic nodes.GR85Extension(ComfyExtension)with:get_node_list()returning the list of newio.ComfyNodenodes.
async def comfy_entrypoint()which ComfyUI calls to load the extension.
Migration guide
1. Simple Wildcard Picker
What changed
- Previously,
SimpleWildcardPickerwas a classic custom node defined with:INPUT_TYPESRETURN_TYPES,RETURN_NAMES,FUNCTION,CATEGORY- Registration via
NODE_CLASS_MAPPINGS["GR85_SimpleWildcardPicker"]in__init__.py.
- That legacy implementation and registration have been removed.
- A new implementation now exists:
- Class:
SimpleWildcardPicker(io.ComfyNode)innodes/prompt/simple_wildcard_picker.py. - Schema:
define_schema()usingio.Schema,io.String.Input,io.Int.Input,io.String.Output. - Execution:
execute()returns anio.NodeOutput. - Registration: via
GR85Extension.get_node_list()andcomfy_entrypoint(). - Node ID: still
GR85_SimpleWildcardPicker(nov3suffix), display name"Simple Wildcard Picker".
- Class:
Behavior compatibility
- The wildcard expansion logic has been preserved:
- Same
{a|b|c}syntax. - Nested braces are supported.
- A seeded RNG (
Random(seed)) is used for reproducible choices.
- Same
- The internals were refactored into a helper function (
_process_wildcards) used by the newexecute()method.
Impact on existing workflows
-
Graphs that reference node ID
GR85_SimpleWildcardPickershould continue to work, but they now use the new schema-based node. -
Code or tooling that relied on:
NODE_CLASS_MAPPINGS["GR85_SimpleWildcardPicker"], or- the legacy
INPUT_TYPES/FUNCTIONshape ofSimpleWildcardPicker
will need to be updated to work with the new
io.ComfyNodeAPI and extension-based discovery.
How to update custom integrations
- Instead of importing and introspecting the legacy class, treat it as a standard
io.ComfyNode:- Use its schema via
SimpleWildcardPicker.define_schema(). - Expect
execute(prompt, seed)to be a classmethod returningio.NodeOutput.
- Use its schema via
- Do not rely on
NODE_CLASS_MAPPINGSfor this node anymore; it is no longer present there.
2. Other nodes (classic API)
- All other GR85 nodes still use the classic:
INPUT_TYPESRETURN_TYPES/RETURN_NAMESFUNCTION/ instance methodsNODE_CLASS_MAPPINGS/NODE_DISPLAY_NAME_MAPPINGS
- They will continue to behave as before.
Planned direction
- Over time, these nodes can be migrated in the same style as
SimpleWildcardPicker:- Introduce an
io.ComfyNodeimplementation withdefine_schema+execute. - Register it via
GR85Extension.get_node_list(). - Optionally remove the old mapping entry once you are comfortable with the migration.
- Introduce an
If you want to migrate another specific node (e.g. GR85_SeedBasedOutputSelector or one of the latent utilities), follow the same pattern as SimpleWildcardPicker and update the extension’s get_node_list() accordingly.