ComfyUI Quality of Life Suite

March 24, 2026 ยท View on GitHub

Thank you to all the valuable contributors. Kindly submit any pull requests to the development branch instead of the main branch. Your efforts are greatly appreciated.

A feature-rich ComfyUI extension providing 50+ quality-of-life nodes including OpenAI (ChatGPT & DALL-E 2) integration, text processing, image/latent scaling, math utilities, and more.


Table of Contents


Features

  • ๐Ÿค– OpenAI Integration โ€” ChatGPT (GPT-3.5 / GPT-4) prompt generation and DALL-E 2 image creation
  • ๐Ÿ“ String Suite โ€” Concatenate, trim, replace, split, and save text; convert text to an image
  • ๐ŸŽฒ NSP (Noodle Soup Prompts) โ€” Random prompt term generation from categorised terminology
  • ๐Ÿ–ผ๏ธ Image Tools โ€” Scale images using multiplication factors instead of fixed pixel dimensions
  • ๐Ÿ”ฒ Latent Tools โ€” Upscale latents by factor and select individual latents from a batch
  • ๐Ÿ”ข Number / Math Tools โ€” Evaluate equations, convert between types, read image/latent dimensions
  • ๐Ÿ› ๏ธ Utility Nodes โ€” Thin wrappers for text, integer, float, and seed inputs
  • ๐Ÿ› Debug Nodes โ€” Write intermediate values to the console, optionally passing them through

All nodes appear in the ComfyUI menu under the O/ top-level category.


Installation

Option A โ€” Manual (zip)

  1. Download the repository as a zip file.
  2. Extract the folder into <ComfyUI root>/custom_nodes/.
  3. The resulting path should look like custom_nodes/ComfyUI-QualityOfLifeSuit_Omar92/.
  4. Restart ComfyUI (a browser reload is not sufficient).

Option B โ€” Git clone

cd <ComfyUI root>/custom_nodes
git clone https://github.com/omar92/ComfyUI-QualityOfLifeSuit_Omar92.git

Then restart ComfyUI.

After installation you will find all nodes grouped under O/โ€ฆ in the node search / right-click menu.

Tip: See how directory should look like.png at the repository root for the expected folder structure.


Configuration

On the first run ComfyUI will automatically create a config.json file inside the extension folder:

{
  "autoUpdate": true,
  "branch": "main",
  "openAI_API_Key": "sk-#################################"
}
KeyDefaultDescription
autoUpdatetruePull the latest changes from GitHub every time ComfyUI starts. Set to false to disable.
branch"main"Git branch to pull updates from. Use "dev" for the latest development changes.
openAI_API_KeyplaceholderYour OpenAI API key. Required for all ChatGPT and DALL-E nodes. Get yours at platform.openai.com/api-keys.

Security note: The API key is stored in config.json and is never embedded in generated images.


Node Reference

OpenAI Suite

Located under O/OpenAI and O/OpenAI/Advanced/โ€ฆ.

Simple ChatGPT

ChatGPT Simple _O โ€” O/OpenAI

The quickest way to use ChatGPT. Provide a short prompt and the node returns a fully formed Stable Diffusion prompt or a detailed image description.

InputTypeDescription
promptSTRINGYour input text / subject
modeldropdownOpenAI model to use (e.g. gpt-3.5-turbo)
behaviourdropdowntags โ€” returns SD-style comma-separated tags; description โ€” returns a natural language description
seedINTControls randomness; same seed โ‰ˆ same output
OutputType
resultSTRING

ChatGPT compact _O โ€” O/OpenAI

Mid-complexity ChatGPT node with a customisable system initialisation message.

InputTypeDescription
promptSTRINGUser message
initMsgSTRINGSystem message that shapes the AI's behaviour
modeldropdownOpenAI model
seedINTRandomness seed

Advanced OpenAI

load_openAI _O โ€” O/OpenAI/Advanced

Loads the OpenAI client. Required by all Advanced nodes.

InputTypeDescription
base_urlSTRINGAPI endpoint (defaults to OpenAI; change for compatible providers)
api_keySTRINGYour OpenAI API key
OutputType
clientCLIENT

Chat_Message _O โ€” O/OpenAI/Advanced/ChatGPT

Creates a single chat message.

InputTypeDescription
roledropdownuser, assistant, or system
contentSTRINGMessage text
OutputType
messagesOPENAI_CHAT_MESSAGES

combine_chat_messages _O โ€” O/OpenAI/Advanced/ChatGPT

Merges two message lists into one, allowing you to chain multi-turn conversations.

Chat completion _O โ€” O/OpenAI/Advanced/ChatGPT

Sends a message list to the API and returns the model's reply.

InputTypeDescription
clientCLIENTFrom load_openAI _O
modeldropdownOpenAI model
messagesOPENAI_CHAT_MESSAGESBuilt with Chat_Message / combine_chat_messages
seedINTRandomness seed
OutputType
textSTRING
completionOPENAI_CHAT_COMPLETION

DALL-E 2

create image _O โ€” O/OpenAI/Advanced/Image

Generates images from a text prompt using DALL-E 2.

InputTypeDescription
clientCLIENTFrom load_openAI _O
promptSTRINGImage description
numberINT (1โ€“10)How many images to generate
sizedropdown256x256, 512x512, or 1024x1024
OutputType
IMAGEIMAGE
MASKMASK

variation_image _O โ€” O/OpenAI/Advanced/Image

Creates variations of an existing image using DALL-E 2.

InputTypeDescription
clientCLIENTFrom load_openAI _O
imageIMAGESource image
numberINT (1โ€“10)Number of variations
sizedropdownOutput resolution

String Suite

Located under O/text and O/text/operations.

Text _O โ€” O/utils Simple pass-through text input node.

Concat Text _O โ€” O/text/operations Concatenates up to 13 strings with a configurable separator (default: , ).

Trim Text _O โ€” O/text/operations Removes leading and trailing whitespace from a string.

Replace Text _O โ€” O/text/operations Replaces all occurrences of a substring with another string.

InputDescription
textInput string
oldSubstring to find
newReplacement string

QOL Split String โ€” O/text/operations Splits a string by a delimiter and exposes up to 13 individual outputs.

InputDescription
textInput string
delimiterCharacter(s) to split on

saveTextToFile _O โ€” O/text Saves text to a file inside the ComfyUI /output folder. A timestamp is appended to the filename to avoid overwriting.

InputDescription
textContent to save
filenameBase filename
appendIf true, appends to an existing file instead of creating a new one

Text-to-Image

Text2Image _O โ€” O/text

Renders text onto a canvas and outputs it as an IMAGE. Useful with ControlNet to place styled text into a generated image.

InputTypeDescription
textSTRINGText to render
fontdropdownFont selected from the fonts/ directory
sizeINT (0โ€“255)Font size in points
font_R/G/B/AINT (0โ€“255)Font colour (RGBA)
background_R/G/B/AINT (0โ€“255)Background colour (RGBA)
width / heightINTCanvas size in pixels
expandboolAuto-expand canvas to fit the text
x / yINTText position on canvas

Custom fonts: Add any .ttf, .otf, or .ttc file to the fonts/ folder and restart ComfyUI โ€” it will appear in the font dropdown automatically.


NSP (Noodle Soup Prompts)

Located under O/text/NSP.

NSP is a community-maintained collection of categorised prompt terms. The extension downloads the list automatically on first use.

RandomNSP _O Returns a random term from the chosen category.

InputDescription
terminologyCategory (e.g. artist, style, subject, โ€ฆ)
seedRandomness seed

ConcatRandomNSP_O Appends a random NSP term to an existing string โ€” handy as an in-route modifier.

InputDescription
textExisting string
terminologyNSP category
separatorString inserted between text and the NSP term (default , )
seedRandomness seed

Latent Tools

Located under O/latent.

LatentUpscaleFactor _O Upscales a latent tensor using separate width and height multiplication factors.

InputDescription
samplesInput LATENT
upscale_methodInterpolation method
WidthFactorMultiplier for width (e.g. 2 doubles the width)
HeightFactorMultiplier for height
cropWhether to crop after upscaling

Example: 512ร—512 latent with WidthFactor=2, HeightFactor=2 โ†’ 1024ร—1024. Use factors < 1 to downscale (e.g. 0.5 โ†’ 256ร—256).

LatentUpscaleFactorSimple _O Same as above but uses a single factor applied to both dimensions.

selectLatentFromBatch _O Picks a single latent from a batch by index. Useful when you generate multiple images and want to apply further processing to just one of them.

InputDescription
samplesBatch LATENT
indexZero-based index of the latent to select

Image Tools

Located under O/image.

ImageScaleFactor _O Scales an IMAGE tensor using separate width and height multiplication factors.

InputDescription
imageInput IMAGE
upscale_methodInterpolation method
WidthFactorWidth multiplier
HeightFactorHeight multiplier
MulOf46When enabled, rounds output dimensions to the nearest multiple of 8 โ€” required by most Stable Diffusion models (enabled by default)
cropWhether to crop after scaling

ImageScaleFactorSimple _O Same as above but with a single uniform scale factor.

GetImage_(Width&Height) _O โ€” O/numbers Reads the pixel dimensions of an IMAGE and outputs them as separate INT values.


Number / Math Tools

Located under O/numbers.

Equation1param _O Evaluates a Python math expression with one variable x.

InputDescription
xFLOAT value for x
equationExpression string, e.g. x * 2 + 1

Outputs: FLOAT, INT

Equation2params _O Evaluates two expressions with variables x and y.

InputDescription
xFirst FLOAT
ySecond FLOAT
equationFirst expression, e.g. x + y
equation_2Second expression, e.g. x * y

Outputs: FLOAT, INT, FLOAT, INT (one pair per equation)

floatToInt _O โ€” Convert FLOAT โ†’ INT

intToFloat _O โ€” Convert INT โ†’ FLOAT

floatToText _O โ€” Convert FLOAT โ†’ STRING

seed2String _O โ€” Convert a SEED value โ†’ STRING

GetLatent_(Width&Height) _O โ€” Read width and height from a LATENT tensor as INTs


Utility Nodes

Located under O/utils.

NodeOutputDescription
Text _OSTRINGText input widget
seed _OINTSeed input widget
int _OINTInteger input widget
float _OFLOATFloat input widget
Note _O(none)Read-only sticky note for annotating workflows

Debug Nodes

Located under O/debug/โ€ฆ.

NodeDescription
Debug Text _OPrints [prefix] text to the console. No output โ€” terminal only.
Debug Text route _OSame as above but also passes the string through, so it can be inserted mid-route.
Debug OpenAI Chat Messages _OPrints the full message list to the console.
Debug OpenAI Chat Completion _OPrints the full completion object to the console.

Example Workflows

The Workflows/ directory contains ready-to-use workflow files and screenshots:

FileDescription
All nodes Workdflow .jsonMaster workflow demonstrating every node
ChatGPT.pngSimple ChatGPT-to-prompt workflow
ChatGPT_Advanced.pngAdvanced multi-message ChatGPT workflow
string_o.pngString manipulation node examples

To load a workflow from an image, drag the PNG file onto the ComfyUI canvas.

Simple ChatGPT Workflow

Simple ChatGPT workflow

  1. Add a ChatGPT Simple _O node.
  2. Type your subject in the prompt field (e.g. "a futuristic cityscape at night").
  3. Choose tags behaviour to get Stable Diffusion prompt tags, or description for a natural language description.
  4. Connect the output STRING to your KSampler positive conditioning.

Advanced ChatGPT Workflow

Advanced ChatGPT workflow

  1. Add load_openAI _O and enter your API key (or rely on config.json).
  2. Create a Chat_Message _O with role = system to set the AI's behaviour.
  3. Create another Chat_Message _O with role = user for your actual prompt.
  4. Use combine_chat_messages _O to merge both messages.
  5. Feed the result into Chat completion _O to get the AI's reply as a STRING.

Fonts

The fonts/ folder ships with several built-in fonts:

FileFont
Alkatra.ttfAlkatra
CALIBRI.TTFCalibri
COMIC.TTFComic Sans
COMICI.TTFComic Sans Italic
COMICZ.TTFComic Sans Bold

To add a custom font, copy any .ttf, .otf, or .ttc file into the fonts/ directory and restart ComfyUI. The font will appear automatically in the dropdown of the Text2Image _O node.


Auto-Update

The extension automatically checks for updates every time ComfyUI starts (when autoUpdate is true in config.json). It uses pygit2 to pull the latest commits from the configured branch.

To disable auto-update, open config.json and set:

"autoUpdate": false

To switch to the development branch for the latest (potentially unstable) features:

"branch": "dev"

Thanks for reading, and I hope my tools will help you!

Contact