Extensions/ComfyUI-YogurtNodes
ComfyUI Extension

ComfyUI-YogurtNodes

ComfyUI-YogurtNodes is a collection of custom nodes for ComfyUI, providing a series of practical image processing and workflow enhancement functionalities.

By yogurt7771·Created 2 years ago·Updated 9 days ago· 1
yogurt7771/ComfyUI-YogurtNodes
Nodes154
On cloudLocal install
CategoryYogurtNodes/Image, YogurtNodes/IO
Stars1
Updated9 days ago

Nodes (154)

Add Text To Image (Yogurt Nodes)

Slap a caption on your output — before it leaves ComfyUI

YogurtNodes/Image
Any Bridge (Yogurt Nodes)

A pass-through node with thirty-two built-in sinks

YogurtNodes/IO
Batch Images (Yogurt Nodes)

Up to 32 images, one batch — without the resolution headache

YogurtNodes/Image
Checkpoint Selector (Yogurt Nodes)

Pick a checkpoint and get its filename as a string — the automation enabler

YogurtNodes/Models
ComfyUI Client Get Output (Yogurt Nodes)

Pull one node's results out of a remote run — by id or by title

YogurtNodes/Net
ComfyUI Client Load (Yogurt Nodes)

Run a whole workflow on another ComfyUI — this node is the remote

YogurtNodes/Net
ComfyUI Client Run (Yogurt Nodes)

Submit and wait — the node that actually fires the remote job

YogurtNodes/Net
ComfyUI Client Set Float (Yogurt Nodes)

Dial the remote workflow's decimals from your local graph

YogurtNodes/Net
ComfyUI Client Set Image (Yogurt Nodes)

Upload a local image into the remote workflow's Load Image node

YogurtNodes/Net
ComfyUI Client Set Int (Yogurt Nodes)

Patch an integer input on the remote workflow, mid-graph

YogurtNodes/Net
ComfyUI Client Set Seed (Yogurt Nodes)

Seed every sampler on the remote in one shot

YogurtNodes/Net
ComfyUI Client Set String (Yogurt Nodes)

Write the prompt into the remote workflow, from a local string

YogurtNodes/Net
Composite Repaint Regions (Yogurt Nodes)

Sew the repainted crops back onto the base image, seams invisible

YogurtNodes/Masks
ControlNet Selector (Yogurt Nodes)

Pick a ControlNet by name without a second loader in sight

YogurtNodes/Models
Convert LoRA Keys (Yogurt Nodes)

Rename LoRA keys by JSON — the fix when a LoRA just won't load

YogurtNodes/Models
Create Directory (Yogurt Nodes)

The two-wire node that quietly un-breaks your save paths

YogurtNodes/IO
Create LoRA Mapping JSON (Yogurt Nodes)

The translation table when one LoRA's keys don't fit another

YogurtNodes/Models
Create Parent Directory (Yogurt Nodes)

One input, one output, and a footgun hidden in the name

YogurtNodes/IO
Crop Image By Regions (Yogurt Nodes)

Crop only the regions your mask wants repainted — dynamic, not fixed

YogurtNodes/Masks
DataSize (Yogurt Nodes)

The 'how big is this thing' node your workflows quietly need

YogurtNodes/Logic
Deserialize Any (Yogurt Nodes)

Pickle round-trip for any Python object — and the security warning that comes with it

YogurtNodes/IO
DictContainsKey (Yogurt Nodes)

Ask 'is this key there?' and get a boolean back

YogurtNodes/Logic
DictContainsValue (Yogurt Nodes)

Check for a value in any dict — handy when you care about contents, not names

YogurtNodes/Logic
DictFilter (Yogurt Nodes)

Slice a dict down to the entries you actually care about

YogurtNodes/Logic
DictFromLists (Yogurt Nodes)

Two lists in, one dict out — with an escape hatch for ragged lists

YogurtNodes/Logic
DictGet (Yogurt Nodes)

Pull a value out of any dict without the KeyError ambush

YogurtNodes/Logic
DictInvert (Yogurt Nodes)

Flip a dict upside down — values become keys, with a duplicate-safety switch

YogurtNodes/Logic
DictKeys (Yogurt Nodes)

See what a dict actually contains — the debugging node you'll use constantly

YogurtNodes/Logic
DictLength (Yogurt Nodes)

How many keys are in this dict? An integer, instantly

YogurtNodes/Logic
DictMerge (Yogurt Nodes)

Slam up to 32 dicts together — and decide who wins the collisions

YogurtNodes/Logic
DictSubset (Yogurt Nodes)

Extract just the fields you need from a dict

YogurtNodes/Logic
DictValues (Yogurt Nodes)

Strip a dict down to its contents — keys optional

YogurtNodes/Logic
Diffusion Model Selector (Yogurt Nodes)

A dropdown for diffusion models that hands the trigger word along too

YogurtNodes/Models
EndNode (Yogurt Nodes)

The node with 32 inputs, no outputs, and one very specific job

YogurtNodes/Logic
FreedomGPT Generate Image

Generate images from a cloud API, no local GPU required

YogurtNodes/LLM
FreedomGPT Generate Text

The obscure 'unrestricted' LLM node, for when you need it

YogurtNodes/LLM
FreedomGPT Image Understand

Ask a cloud vision model what's actually in your image

YogurtNodes/LLM
Gemini Generate Image

Google's image model, piped straight into your ComfyUI graph

YogurtNodes/LLM
Gemini Generate Text

Gemini 2.5 in your graph — with chat history and the thinking shown

YogurtNodes/LLM
Gemini Image Understand

Your images, described by Gemini — no local model, no VRAM cost

YogurtNodes/LLM
Get Image Size (Yogurt Nodes)

Nine outputs off one wire, and the quiet workhorse of adaptive workflows

YogurtNodes/Image
Glob Files (Yogurt Nodes)

Feed a whole folder of images into ComfyUI without typing paths by hand

YogurtNodes/IO
Grok Generate Image

Closed-source image gen inside ComfyUI, with zero local VRAM spent

YogurtNodes/LLM
Grok Generate Text

An LLM in the graph for prompt-writing, captioning, and workflow logic

YogurtNodes/LLM
Grok Image Understand

A vision model that reads your images and feeds the answer back in

YogurtNodes/LLM
GRSAI Generate Image

Nano Banana without a GPU — GRSAI's hosted image API, in your graph

YogurtNodes/LLM
History Builder

Giving the pack's LLM nodes a memory across turns

YogurtNodes/LLM
H/L Frequency Detail Restore Threshold (Yogurt Nodes)

Put detail back into soft upscales — a frequency-split restore with knobs

YogurtNodes/Image
Image Crop By Mask (Yogurt Nodes)

Crop exactly to the mask — and get the coordinates back

YogurtNodes/Image
Image Scale To Total Pixels Advanced (Yogurt Nodes)

Resize to a pixel budget, not a resolution — with a mask proving it

YogurtNodes/Image
Image Tile (Seam Mask) (Yogurt Nodes)

The crop-and-stitch upscale pipeline, minus the seams

YogurtNodes/Image
Image Untile (Seam Mask) (Yogurt Nodes)

Sew your tiles back together without the seam lines

YogurtNodes/Image
IsEmpty (Yogurt Nodes)

The tiny boolean check that keeps your workflows from derailing

YogurtNodes/Logic
JsonDeepCopy (Yogurt Nodes)

Copy a JSON object so mutating it doesn't wreck the original

YogurtNodes/Logic
JsonFlatten (Yogurt Nodes)

Turn a nested config into flat keys — and back again

YogurtNodes/Logic
JsonGetPath (Yogurt Nodes)

Pull one value out of a JSON blob with a path, not a pile of nodes

YogurtNodes/Logic
JsonMerge (Yogurt Nodes)

Merge JSON objects the deep way — no more lost keys

YogurtNodes/Logic
JsonParse (Yogurt Nodes)

Turn a JSON string into a real object the graph can use

YogurtNodes/Logic
JsonPathExists (Yogurt Nodes)

Ask 'is this key there?' before you try to read it

YogurtNodes/Logic
JsonSetPath (Yogurt Nodes)

Write one value into a nested JSON object without rebuilding it

YogurtNodes/Logic
JsonStringify (Yogurt Nodes)

Turn an object back into text — for loggers, LLMs, and API payloads

YogurtNodes/Logic
JsonUnflatten (Yogurt Nodes)

Reassemble flat keys into the nested JSON you actually wanted

YogurtNodes/Logic
JsonValidate (Yogurt Nodes)

Confirm your JSON is the right shape before you trust it

YogurtNodes/Logic
ListBinaryOps (Yogurt Nodes)

One node for union, intersection, zips, and every other two-list trick

YogurtNodes/Logic
ListConcat (Yogurt Nodes)

Jam up to 32 lists into one — the merge your batch workflow is missing

YogurtNodes/Logic
ListContains (Yogurt Nodes)

One Boolean that decides your whole workflow

YogurtNodes/Logic
ListFilter (Yogurt Nodes)

Keep only the list items you actually want

YogurtNodes/Logic
ListFind (Yogurt Nodes)

Where in the list is it? Ask ListFind

YogurtNodes/Logic
ListIndex (Yogurt Nodes)

Grab the Nth thing out of any list — including backwards

YogurtNodes/Logic
ListJoin (Yogurt Nodes)

You have a list. Make it a sentence.

YogurtNodes/Logic
ListLength (Yogurt Nodes)

Count what you've got before you loop over it

YogurtNodes/Logic
ListSlice (Yogurt Nodes)

Slice a list the Python way — mind the stop value

YogurtNodes/Logic
ListUnique (Yogurt Nodes)

Dedupe a list without scrambling the order

YogurtNodes/Logic
Load Audio

Feed audio into ComfyUI without fighting the file browser

YogurtNodes/IO
Load Audio Path (Yogurt Nodes)

Load audio from a path, not the input folder

YogurtNodes/IO
Load Bytes (Yogurt Nodes)

Raw file bytes in — the boring bridge node that makes automation work

YogurtNodes/IO
Load Image (Yogurt Nodes)

Yes, it's basically LoadImage — and that's fine

YogurtNodes/IO
Load Image Path (Yogurt Nodes)

Load an image from a path, not from the input dropdown

YogurtNodes/IO
LoRA Load Only (Yogurt Nodes)

Load a LoRA without applying it — the front door to LoRA surgery

YogurtNodes/Models
Load Video (Yogurt Nodes)

Pull a video in, trim it, feed your video workflow

YogurtNodes/IO
Load Video Path (Yogurt Nodes)

Get a video into your graph without a file browser, with a time range

YogurtNodes/IO
LoRA Add (Rank Aware) (Yogurt Nodes)

Merging a rank-128 style with a rank-8 character without the wreckage

YogurtNodes/Models
LoRA Layers Operation (Yogurt Nodes)

Surgically zeroing or scaling specific blocks inside a LoRA

YogurtNodes/Models
LoRA Merge Full Rank (Yogurt Nodes)

Merge up to five LoRAs into one file — exactly, not approximately

YogurtNodes/Models
LoRA Compress (Yogurt Nodes)

Shrink a LoRA's rank with SVD without trashing its effect

YogurtNodes/Models
LoRA Scale Alpha (Yogurt Nodes)

Bake a LoRA's strength into its alpha so you can just use 1.0

YogurtNodes/Models
LoRA Scale Weights (Yogurt Nodes)

Turn a weak LoRA into a strong one by scaling the tensors themselves

YogurtNodes/Models
Lora Selector (Yogurt Nodes)

A LoRA picker that hands you the metadata too

YogurtNodes/Models
LoRA Simple Add (Yogurt Nodes)

Two LoRAs, one weighted sum — the quick blend, not the exact merge

YogurtNodes/Models
LoRA Stat Viewer (Yogurt Nodes)

Before you regex your LoRA into pieces, look at its keys

YogurtNodes/Models
Magnific Image Upscale API

The paid upscaler, wired straight into your graph

YogurtNodes/LLM
Mask Region Planner (Yogurt Nodes)

Plan crop-first repaint tiles so you don't regenerate the whole image

YogurtNodes/Masks
Merge LoRA To Model (Yogurt Nodes)

Applying a LoRA that's already a graph object, not a filename

YogurtNodes/Models
None (Yogurt Nodes)

The Node That Outputs Nothing (And Why You'll Want It)

YogurtNodes/Logic
OpenAI Generate Image

Generate Images With OpenAI, Straight Into a Sampler-Ready Tensor

YogurtNodes/LLM
OpenAI Generate Text

An LLM Call, Wired Straight Into Your Workflow Logic

YogurtNodes/LLM
OpenAI Image Understand

Ask a Vision Model About Your Image, In-Graph

YogurtNodes/LLM
OpenRouter Generate Image

Image Generation via OpenRouter

YogurtNodes/LLM
OpenRouter Generate Text

Text Generation via OpenRouter

YogurtNodes/LLM
OpenRouter Image Understand

One API key, every vision model — this node shops for you

YogurtNodes/LLM
PackAny (Yogurt Nodes)

Bundle 32 Values Down One Wire

YogurtNodes/Logic
Path Operator (Yogurt Nodes)

Path Math Without Opening a Terminal

YogurtNodes/IO
Poisson Blend (Yogurt Nodes)

Compositing that makes the pasted object stop looking pasted

YogurtNodes/Image
Preview Any Bridge (Yogurt Nodes)

The node that shows you what's actually flowing through that wire

YogurtNodes/IO
Preview Any Bridge (Output) (Yogurt Nodes)

Preview Any Data as Text (While It Passes Through)

YogurtNodes/IO
Preview Image Bridge (Yogurt Nodes)

Preview Your Images Wherever They're Flowing

YogurtNodes/IO
Preview Image Bridge (Output) (Yogurt Nodes)

The End-of-Branch Twin of the Image Preview Bridge

YogurtNodes/IO
Preview Mask Bridge (Yogurt Nodes)

See Your Masks Without Ending the Branch

YogurtNodes/IO
Preview Mask Bridge (Output) (Yogurt Nodes)

See your mask in the graph while the dims ride along

YogurtNodes/IO
Preview Repaint Regions (Yogurt Nodes)

See Your Repaint Tiles Before You Commit Compute

YogurtNodes/Masks
Qwen Generate/Edit Image

Qwen Image Generation and Editing, Via Alibaba's DashScope

YogurtNodes/LLM
Range (Yogurt Nodes)

A Range Node for LoRA Sweeps and Batch Runs

YogurtNodes/Number
RangeItem (Yogurt Nodes)

Grab One Value Out of a Range

YogurtNodes/Number
Regex Node (Yogurt Nodes)

Extract and Rewrite Text With Regex, Inside Your Graph

YogurtNodes/String
Replace Delimiter (Yogurt Nodes)

Fix Ugly Delimiters in One Node

YogurtNodes/String
Replace Image In Batch (Yogurt Nodes)

Swapping one bad frame out of a video batch without the rebuild

YogurtNodes/Image
Save Bytes Bridge (Yogurt Nodes)

Save Raw Bytes (Not Just Images) to Your Output Folder

YogurtNodes/IO
Save Bytes Bridge (Non Output) (Yogurt Nodes)

Save Bytes Mid-Graph Without Ending the Line

YogurtNodes/IO
Save Image Bridge (Yogurt Nodes)

The save node that doesn't stop the graph

YogurtNodes/IO
Save Image Bridge Ex (Yogurt Nodes)

The save bridge, but with any file extension you want

YogurtNodes/IO
Save Image Bridge Ex (Non Output) (Yogurt Nodes)

Save anywhere, in any format, without the spotlight

YogurtNodes/IO
Save Image Bridge (Non Output) (Yogurt Nodes)

Saving without showing up in the output list

YogurtNodes/IO
Save Image Bridge Simple (Yogurt Nodes)

The save bridge with the settings stripped out

YogurtNodes/IO
Save Image Bridge Simple (Non Output) (Yogurt Nodes)

A no-frills save that stays out of the results

YogurtNodes/IO
Save LoRA (Yogurt Nodes)

Save a LoRA state back to disk, not just load one

YogurtNodes/Models
Save Mask Bridge (Yogurt Nodes)

Save masks like you save images — and keep them in the graph

YogurtNodes/IO
Save Mask Bridge (Yogurt Nodes)

Save masks in any format the pack's plain node won't

YogurtNodes/IO
Save Mask Bridge (Non Output) (Yogurt Nodes)

The flexible mask saver that keeps its head down

YogurtNodes/IO
Save Mask Bridge (Non Output) (Yogurt Nodes)

Mask saver that writes the file and skips the spotlight

YogurtNodes/IO
Save Mask Bridge (Yogurt Nodes)

The four-knob mask saver

YogurtNodes/IO
Save Mask Bridge Simple (Non Output) (Yogurt Nodes)

The quietest way to save a mask

YogurtNodes/IO
Save Text Bridge (Yogurt Nodes)

Write text, JSON, or markdown to disk without ending the graph

YogurtNodes/IO
Save Text Bridge (Non Output) (Yogurt Nodes)

The text logger that never shows up in results

YogurtNodes/IO
SeeDream Generate Image

ByteDance's Seedream, dropped straight into your graph

YogurtNodes/LLM
Serialize Any (Yogurt Nodes)

Stuff any Python object into a bytes file

YogurtNodes/IO
Split Mask (Yogurt Nodes)

Connected components for repaint workflows

YogurtNodes/Masks
Split Path (Yogurt Nodes)

Turn one file path into six useful pieces

YogurtNodes/IO
String Concat (Yogurt Nodes)

Stitch up to eight strings together, and toggle each one

YogurtNodes/String
String Format (Yogurt Nodes)

Python's f-string, minus the f, for prompts that build themselves

YogurtNodes/String
String Join (Yogurt Nodes)

Glue text together without a tangle of catenate nodes

YogurtNodes/String
String Lines Count (Yogurt Nodes)

Count the lines in your prompt lists, so your workflow knows how much it's about to do

YogurtNodes/String
String Lines Switch (Yogurt Nodes)

Pull line 3 out of a prompt list and feed it somewhere else

YogurtNodes/String
StringSplit (Yogurt Nodes)

Turn one comma-separated text blob into a real list

YogurtNodes/Logic
String To Value (Yogurt Nodes)

The fastest way to turn '42' into a number ComfyUI can actually use

YogurtNodes/String
Switch (Yogurt Nodes)

A regex-powered case statement for your workflow

YogurtNodes/Logic
Tile Info To TTP Image Assy Args (Yogurt Nodes)

The glue node that makes tiled upscaling graphs actually wire together

YogurtNodes/Image
ToDict (Yogurt Nodes)

Turn key-value pairs into a real dictionary, with a safety net for missing values

YogurtNodes/Logic
ToList (Yogurt Nodes)

The type-coercion node that makes stubborn data fit the list sockets

YogurtNodes/Logic
Topaz Image Upscale API

The paid upscaling baseline, as a cloud call in your workflow

YogurtNodes/LLM
UnpackAny (Yogurt Nodes)

The other half of PackAny — split one bundled wire back into up to 32 outputs

YogurtNodes/Logic
Vertex AI Generate Image

Gemini image generation, inside your local ComfyUI graph — if you can stomach the GCP setup

YogurtNodes/LLM
Vertex AI Generate Text

A Gemini text node that does either AI Studio or Vertex — your pick

YogurtNodes/LLM
Vertex Image Understand

Give your workflow a second pair of eyes — Gemini looks at your renders

YogurtNodes/LLM
Wan Generate/Edit Image

The only way to touch 'Wan' image generation without renting a data center

YogurtNodes/LLM
Readme

ComfyUI-YogurtNodes

ComfyUI-YogurtNodes is a collection of custom nodes for ComfyUI, providing a series of practical image processing and workflow enhancement functionalities.

✨ Features

  • Custom node integration
  • Easy-to-use image processing functions
  • Full compatibility with ComfyUI workflows
  • Text and image manipulation capabilities
  • Advanced string processing utilities
  • Model management and selection tools
  • Comprehensive I/O operations support
  • Integrated Gemini API for language and image understanding
  • Logic control nodes for complex workflows

📦 Installation

Requirements

  • ComfyUI (installed and running)
  • Python 3.x
  • Required Python packages:
    • numpy
    • pillow
    • google-genai (for Gemini nodes)
    • openai (for OpenAI and OpenRouter nodes)
    • requests (for API calls)
    • opencv-python (for Poisson Blend)

Installation Steps

  1. Navigate to your ComfyUI custom nodes directory:
cd custom_nodes
  1. Clone this repository:
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
  1. Install dependencies:
cd ComfyUI-YogurtNodes
pip install -r requirements.txt

🚀 Usage

  1. Start ComfyUI
  2. Look for "Yogurt Nodes" category in the node browser
  3. Drag and drop desired nodes into your workflow

🔧 Available Nodes

All exported nodes are listed here. ComfyUI display names keep the " (Yogurt Nodes)" suffix at runtime.

This section is auto-generated from exported node classes and their docstrings. Run python tools/generate_readme.py to refresh.

Total exported nodes: 152.

| Group | Count | | --- | ---: | | Image Processing Nodes | 10 | | Mask Nodes | 5 | | Number Processing Nodes | 2 | | String Processing Nodes | 8 | | Logic Processing Nodes | 41 | | Model Nodes | 17 | | I/O Operation Nodes | 36 | | Language Model Nodes | 25 | | Network Nodes | 8 |

Image Processing Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | Add Text To Image | YogurtAddTextToImage | YogurtNodes/Image | Add text to image. | | Batch Images | YogurtBatchImages | YogurtNodes/Image | Batch images. | | Get Image Size | YogurtGetImageSize | YogurtNodes/Image | Get image size information. | | Image Crop By Mask | YogurtImageCropByMask | YogurtNodes/Image | Crop image to the minimum bounding box of the mask above threshold. | | Image Scale To Total Pixels Advanced | YogurtImageScaleToTotalPixelsAdvanced | YogurtNodes/Image | Image Scale To Total Pixels Advanced. | | Image Tile (Seam Mask) | YogurtImageTileWithSeamMask | YogurtNodes/Image | Split image into overlapped tiles and generate inpaint masks (white=inpaint, black=reference). | | Image Untile (Seam Mask) | YogurtImageUntileWithSeamMask | YogurtNodes/Image | Merge overlapped tiles back to one image with seam feathering (mask + overlap-based smooth transition). | | Poisson Blend | YogurtPoissonBlend | YogurtNodes/Image | 使用OpenCV泊松融合(seamlessClone)将前景融合到背景。 | | Replace Image In Batch | YogurtReplaceImageInBatch | YogurtNodes/Image | Replace one image inside an image batch at the given index. | | Tile Info To TTP Image Assy Args | YogurtTileInfoToTTPImageAssyArgs | YogurtNodes/Image | Convert tile_info to TTP_Image_Assy inputs: positions/original_size/grid_size/padding. |

Mask Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | Composite Repaint Regions | YogurtCompositeRepaintRegions | YogurtNodes/Masks | Composite repainted region crops back onto a base image. | | Crop Image By Regions | YogurtCropImageByRegions | YogurtNodes/Masks | Crop repaint image and mask batches from dynamic mask regions. | | Mask Region Planner | YogurtMaskRegionPlanner | YogurtNodes/Masks | Plan dynamic fixed-size repaint tiles from a mask batch. | | Preview Repaint Regions | YogurtPreviewRepaintRegions | YogurtNodes/Masks | Draw planned repaint region boxes over the image. | | Split Mask | YogurtSplitMask | YogurtNodes/Masks | Split a combined mask into one mask batch item per connected component. |

Number Processing Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | Range | YogurtRange | YogurtNodes/Number | get a number from a range | | RangeItem | YogurtRangeItem | YogurtNodes/Number | get a value from a range |

String Processing Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | Regex Node | YogurtRegexNode | YogurtNodes/String | Regex-based extraction and replacement for multiline text. | | Replace Delimiter | YogurtReplaceDelimiter | YogurtNodes/String | Replace delimiter in string. Support regex | | String Concat | YogurtStringConcat | YogurtNodes/String | 拼接多个字符串,支持自定义分隔符和可变数量的输入 | | String Format | YogurtStringFormat | YogurtNodes/String | Format strings | | String Join | YogurtStringJoin | YogurtNodes/String | 将多个字符串使用指定连接符连接 | | String Lines Count | YogurtStringLinesCount | YogurtNodes/String | Get the number of lines in a multiline string | | String Lines Switch | YogurtStringLinesSwitch | YogurtNodes/String | Get line from multiline string by index | | String To Value | YogurtStringToValue | YogurtNodes/String | Get value from string |

Logic Processing Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | DataSize | YogurtDataSize | YogurtNodes/Logic | Get the size/length of any data structure | | DictContainsKey | YogurtDictContainsKey | YogurtNodes/Logic | Check if a dictionary contains a specific key | | DictContainsValue | YogurtDictContainsValue | YogurtNodes/Logic | Check if a dictionary contains a specific value | | DictFilter | YogurtDictFilter | YogurtNodes/Logic | Filter dictionary entries based on key or value patterns | | DictFromLists | YogurtDictFromLists | YogurtNodes/Logic | Create a dictionary from a list of keys and a list of values | | DictGet | YogurtDictGet | YogurtNodes/Logic | Get a value by key from any dict-like object | | DictInvert | YogurtDictInvert | YogurtNodes/Logic | Invert a dictionary (swap keys and values) | | DictKeys | YogurtDictKeys | YogurtNodes/Logic | Get all keys from any dict-like object | | DictLength | YogurtDictLength | YogurtNodes/Logic | Get the length (number of keys) of any dict-like object | | DictMerge | YogurtDictMerge | YogurtNodes/Logic | Merge multiple dictionaries | | DictSubset | YogurtDictSubset | YogurtNodes/Logic | Get a subset of a dict-like object by specifying keys | | DictValues | YogurtDictValues | YogurtNodes/Logic | Get all values from any dict-like object | | EndNode | YogurtEndNode | YogurtNodes/Logic | End | | IsEmpty | YogurtIsEmpty | YogurtNodes/Logic | Check if a data structure is empty | | JsonDeepCopy | YogurtJsonDeepCopy | YogurtNodes/Logic | Create a deep copy of JSON object | | JsonFlatten | YogurtJsonFlatten | YogurtNodes/Logic | Flatten nested JSON object to flat key-value pairs | | JsonGetPath | YogurtJsonGetPath | YogurtNodes/Logic | Get value from JSON object using JSONPath | | JsonMerge | YogurtJsonMerge | YogurtNodes/Logic | Merge multiple JSON objects using deep merge | | JsonParse | YogurtJsonParse | YogurtNodes/Logic | Parse JSON string to object | | JsonPathExists | YogurtJsonPathExists | YogurtNodes/Logic | Check if a path exists in JSON object | | JsonSetPath | YogurtJsonSetPath | YogurtNodes/Logic | Set value in JSON object using JSONPath | | JsonStringify | YogurtJsonStringify | YogurtNodes/Logic | Convert object to JSON string | | JsonUnflatten | YogurtJsonUnflatten | YogurtNodes/Logic | Unflatten flat JSON object back to nested structure | | JsonValidate | YogurtJsonValidate | YogurtNodes/Logic | Validate JSON data structure | | ListBinaryOps | YogurtListBinaryOps | YogurtNodes/Logic | Perform union, intersection, difference, zip and related operations on two lists. | | ListConcat | YogurtListConcat | YogurtNodes/Logic | Concatenate multiple lists | | ListContains | YogurtListContains | YogurtNodes/Logic | Check if a list contains a specific element | | ListFilter | YogurtListFilter | YogurtNodes/Logic | Filter list elements based on regex pattern | | ListFind | YogurtListFind | YogurtNodes/Logic | Find the index of an element in a list | | ListIndex | YogurtListIndex | YogurtNodes/Logic | 通过索引从任何列表类型对象中获取元素 | | ListJoin | YogurtListJoin | YogurtNodes/Logic | Join list elements into a string | | ListLength | YogurtListLength | YogurtNodes/Logic | 获取任何列表类型对象的长度 | | ListSlice | YogurtListSlice | YogurtNodes/Logic | 从任何列表类型对象中获取切片 | | ListUnique | YogurtListUnique | YogurtNodes/Logic | Remove duplicate elements from a list while preserving order | | None | YogurtNoneNode | YogurtNodes/Logic | Return None. | | PackAny | YogurtPackAny | YogurtNodes/Logic | Pack any | | StringSplit | YogurtStringSplit | YogurtNodes/Logic | Split a string into a list | | Switch | YogurtSwitch | YogurtNodes/Logic | Switch | | ToDict | YogurtToDict | YogurtNodes/Logic | Convert pairs or mapping to a dictionary | | ToList | YogurtToList | YogurtNodes/Logic | Convert any iterable to a list | | UnpackAny | YogurtUnpackAny | YogurtNodes/Logic | Unpack any |

Model Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | Checkpoint Selector | YogurtCheckpointSelector | YogurtNodes/Models | Select Checkpoint | | ControlNet Selector | YogurtControlNetSelector | YogurtNodes/Models | Select ControlNet | | Convert LoRA Keys | YogurtConvertLoraKeys | YogurtNodes/Models | Rename LoRA keys by mapping JSON. | | Create LoRA Mapping JSON | YogurtCreateLoraMappingJson | YogurtNodes/Models | Build a best-effort mapping from LoRA A keys to LoRA B keys. | | Diffusion Model Selector | YogurtDiffusionModelSelector | YogurtNodes/Models | Select Diffusion Model | | LoRA Add (Rank Aware) | YogurtLoraAdd | YogurtNodes/Models | Merge two LoRAs, with SVD rank alignment when ranks differ. | | LoRA Compress | YogurtLoraRankCompress | YogurtNodes/Models | Compress LoRA rank with SVD for standard .lora_down/.lora_up pairs. Optionally absorb alpha/rank first to preserve the actual LoRA effect before compression. | | LoRA Layers Operation | YogurtLoraLayersOperation | YogurtNodes/Models | Modify only selected LoRA layers by index. | | LoRA Load Only | YogurtLoadLoraOnly | YogurtNodes/Models | Load a LoRA without applying it. Use with other LoRA operation nodes. | | LoRA Merge Full Rank | YogurtLoraMerge | YogurtNodes/Models | Merge up to five standard LoRAs exactly by concatenating rank dimensions. Fast and preserves the summed model-side effect exactly, but output rank/file size grow. Does not support DoRA or LoCon/reshape variants. | | LoRA Scale Alpha | YogurtLoraScaleAlpha | YogurtNodes/Models | Scale only LoRA alpha metadata so the adjusted LoRA can be saved downstream. | | LoRA Scale Weights | YogurtLoraScaleWeights | YogurtNodes/Models | Scale LoRA tensor weights globally so effect can be tuned while using strength=1. | | LoRA Simple Add | YogurtLoraSimpleAdd | YogurtNodes/Models | Simple weighted sum of two LoRA states. | | LoRA Stat Viewer | YogurtLoraStatViewer | YogurtNodes/Models | Inspect LoRA key patterns to help define regex and layer selection. | | Lora Selector | YogurtLoraSelector | YogurtNodes/Models | Select Lora | | Merge LoRA To Model | YogurtMergeLoraToModel | YogurtNodes/Models | Apply loaded LoRA to model and optional CLIP. | | Save LoRA | YogurtSaveLora | YogurtNodes/Models | Save LoRA state as safetensors. |

I/O Operation Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | Any Bridge | YogurtAnyBridge | YogurtNodes/IO | Any Bridge | | Create Directory | YogurtCreateDirectory | YogurtNodes/IO | Create a directory | | Create Parent Directory | YogurtCreateParentDirectory | YogurtNodes/IO | Create a parent directory | | Deserialize Any | YogurtDeserializeAny | YogurtNodes/IO | Deserialize bytes data to Python object using pickle | | Glob Files | YogurtGlobFiles | YogurtNodes/IO | Use glob pattern to traverse the folder, return the matching file path list | | Load Audio Path | YogurtLoadAudioPath | YogurtNodes/IO | Load audio from path. | | Load Bytes | YogurtLoadBytes | YogurtNodes/IO | Load bytes data from a file | | Load Image | YogurtLoadImage | YogurtNodes/IO | Load image. | | Load Image Path | YogurtLoadImagePath | YogurtNodes/IO | Load image from path. | | Load Video | YogurtLoadVideo | YogurtNodes/IO | Load video. | | Load Video Path | YogurtLoadVideoPath | YogurtNodes/IO | Load video from path. | | Path Operator | YogurtPathOperator | YogurtNodes/IO | Execute join, relative, or common path operations. | | Preview Any Bridge | YogurtPreviewAnyBridge | YogurtNodes/IO | Preview Any Bridge | | Preview Any Bridge (Output) | YogurtPreviewAnyBridgeOutput | YogurtNodes/IO | Preview Any Bridge (Output) node. | | Preview Image Bridge | YogurtPreviewImageBridge | YogurtNodes/IO | Preview the input images. | | Preview Image Bridge (Output) | YogurtPreviewImageBridgeOutput | YogurtNodes/IO | Preview Image Bridge (Output) node. | | Preview Mask Bridge | YogurtPreviewMaskBridge | YogurtNodes/IO | Preview the input masks. | | Preview Mask Bridge (Output) | YogurtPreviewMaskBridgeOutput | YogurtNodes/IO | Preview Mask Bridge (Output) node. | | Save Bytes Bridge | YogurtSaveBytesBridge | YogurtNodes/IO | Saves the input bytes data to your ComfyUI output directory. | | Save Bytes Bridge (Non Output) | YogurtSaveBytesBridgeNonOutput | YogurtNodes/IO | Save Bytes Bridge (Non Output) node. | | Save Image Bridge | YogurtSaveImageBridge | YogurtNodes/IO | Saves the input images to your ComfyUI output directory. | | Save Image Bridge (Non Output) | YogurtSaveImageBridgeNonOutput | YogurtNodes/IO | Save Image Bridge (Non Output) node. | | Save Image Bridge Ex | YogurtSaveImageBridgeEx | YogurtNodes/IO | Saves the input images to your ComfyUI output directory. | | Save Image Bridge Ex (Non Output) | YogurtSaveImageBridgeExNonOutput | YogurtNodes/IO | Save Image Bridge Ex (Non Output) node. | | Save Image Bridge Simple | YogurtSaveImageBridgeSimple | YogurtNodes/IO | Saves the input images to your ComfyUI output directory. | | Save Image Bridge Simple (Non Output) | YogurtSaveImageBridgeSimpleNonOutput | YogurtNodes/IO | Save Image Bridge Simple (Non Output) node. | | Save Mask Bridge | YogurtSaveMaskBridge | YogurtNodes/IO | Saves the input masks to your ComfyUI output directory. | | Save Mask Bridge | YogurtSaveMaskBridgeEx | YogurtNodes/IO | Saves the input masks to your ComfyUI output directory. | | Save Mask Bridge | YogurtSaveMaskBridgeSimple | YogurtNodes/IO | Saves the input masks to your ComfyUI output directory. | | Save Mask Bridge (Non Output) | YogurtSaveMaskBridgeExNonOutput | YogurtNodes/IO | Save Mask Bridge (Non Output) node. | | Save Mask Bridge (Non Output) | YogurtSaveMaskBridgeNonOutput | YogurtNodes/IO | Save Mask Bridge (Non Output) node. | | Save Mask Bridge Simple (Non Output) | YogurtSaveMaskBridgeSimpleNonOutput | YogurtNodes/IO | Save Mask Bridge Simple (Non Output) node. | | Save Text Bridge | YogurtSaveTextBridge | YogurtNodes/IO | Saves the input text to your ComfyUI output directory. | | Save Text Bridge (Non Output) | YogurtSaveTextBridgeNonOutput | YogurtNodes/IO | Save Text Bridge (Non Output) node. | | Serialize Any | YogurtSerializeAny | YogurtNodes/IO | Serialize any Python object to bytes using pickle | | Split Path | YogurtSplitPath | YogurtNodes/IO | Split path to parts |

Language Model Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | FreedomGPT Generate Image | YogurtFreedomGPTGenerateImage | YogurtNodes/LLM | Generate images using FreedomGPT API | | FreedomGPT Generate Text | YogurtFreedomGPTGenerateText | YogurtNodes/LLM | Generate text using FreedomGPT API | | FreedomGPT Image Understand | YogurtFreedomGPTImageUnderstand | YogurtNodes/LLM | Understand image content using FreedomGPT vision models | | GRSAI Generate Image | YogurtGRSAIGenerateImage | YogurtNodes/LLM | Generate or edit images with the GRSAI API and return torch tensors | | Gemini Generate Image | YogurtGeminiGenerateImage | YogurtNodes/LLM | Generate image using Gemini API and return as torch.Tensor (h,w,c) and text | | Gemini Generate Text | YogurtGeminiGenerateText | YogurtNodes/LLM | Generate text using Gemini API | | Gemini Image Understand | YogurtGeminiImageUnderstand | YogurtNodes/LLM | Understand images using Gemini API | | Grok Generate Image | YogurtGrokGenerateImage | YogurtNodes/LLM | Generate image using xAI Grok API and return as torch.Tensor (h,w,c) and text | | Grok Generate Text | YogurtGrokGenerateText | YogurtNodes/LLM | Generate text using xAI API | | Grok Image Understand | YogurtGrokImageUnderstand | YogurtNodes/LLM | Understand image content using xAI vision models | | History Builder | YogurtHistoryBuilder | YogurtNodes/LLM | 构建与 LLM 节点兼容的会话历史 | | Magnific Image Upscale API | YogurtMagnificImageUpscaleAPI | YogurtNodes/LLM | Call the Magnific image upscaler API, wait for completion, and return an IMAGE batch. | | OpenAI Generate Image | YogurtOpenAIGenerateImage | YogurtNodes/LLM | Generate image using OpenAI API and return as torch.Tensor (h,w,c) and text | | OpenAI Generate Text | YogurtOpenAIGenerateText | YogurtNodes/LLM | Generate text using OpenAI API | | OpenAI Image Understand | YogurtOpenAIImageUnderstand | YogurtNodes/LLM | Understand image content using OpenAI vision models | | OpenRouter Generate Image | YogurtOpenRouterGenerateImage | YogurtNodes/LLM | Generate image using OpenRouter API and return as torch.Tensor (h,w,c) and text | | OpenRouter Generate Text | YogurtOpenRouterGenerateText | YogurtNodes/LLM | Generate text using OpenRouter API | | OpenRouter Image Understand | YogurtOpenRouterImageUnderstand | YogurtNodes/LLM | Understand image content using OpenRouter API | | Qwen Generate/Edit Image | YogurtQwenGenerateImage | YogurtNodes/LLM | 使用阿里云百炼 Qwen 图片模型进行文生图或多图编辑 | | SeeDream Generate Image | YogurtSeeDreamGenerateImage | YogurtNodes/LLM | 使用豆包SeeDream API生成图像,支持文生图、图生图、多图生图和序列图像生成 | | Topaz Image Upscale API | YogurtTopazImageUpscaleAPI | YogurtNodes/LLM | Call the Topaz Labs Image API, wait for completion, and return an IMAGE batch. | | Vertex AI Generate Image | YogurtVertexAIGenerateImage | YogurtNodes/LLM | Generate image using Vertex AI API and return as torch.Tensor (h,w,c) and text | | Vertex AI Generate Text | YogurtVertexAIGenerateText | YogurtNodes/LLM | Generate text using Vertex AI | | Vertex Image Understand | YogurtVertexAIImageUnderstand | YogurtNodes/LLM | Understand images using Vertex AI | | Wan Generate/Edit Image | YogurtWanGenerateImage | YogurtNodes/LLM | 使用阿里云百炼 Wan 图片模型进行文生图或图像编辑 |

Network Nodes

| Node | Class ID | Category | Description | | --- | --- | --- | --- | | ComfyUI Client Get Output | YogurtComfyUIClientGetOutput | YogurtNodes/Net | 根据节点 ID/名称,从结果包中取出该节点的全部输出列表 | | ComfyUI Client Load | YogurtComfyUIClientLoad | YogurtNodes/Net | 配置 ComfyUI 客户端实例,供后续节点复用 | | ComfyUI Client Run | YogurtComfyUIClientRun | YogurtNodes/Net | 提交工作流并等待结果返回 | | ComfyUI Client Set Float | YogurtComfyUIClientSetFloat | YogurtNodes/Net | 向工作流节点输入设置浮点数 | | ComfyUI Client Set Image | YogurtComfyUIClientSetImage | YogurtNodes/Net | 上传图片并写入工作流节点输入 | | ComfyUI Client Set Int | YogurtComfyUIClientSetInt | YogurtNodes/Net | 向工作流节点输入设置整数 | | ComfyUI Client Set Seed | YogurtComfyUIClientSetSeed | YogurtNodes/Net | 为工作流中的节点设置随机种子 | | ComfyUI Client Set String | YogurtComfyUIClientSetString | YogurtNodes/Net | 向工作流节点输入设置字符串 |

🔑 Gemini API Key Setup

Before using Gemini-related nodes, you must obtain and configure your Gemini API Key. There are three supported methods, in the following order of priority:

  1. Code Argument

    • Pass the api_key argument directly when initializing GeminiClient (highest priority).
  2. api_key.json File

    • Create an api_key.json file in custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/ with the following content:
      {
        "gemini": "YOUR_API_KEY"
      }
      
    • This will be used only if the code argument is not provided.
  3. Environment Variable

    • Set the environment variable GEMINI_API_KEY (used only if the above two are not set).
    • Example (Windows command line):
      set GEMINI_API_KEY=YOUR_API_KEY
      

If the API Key is not configured correctly, Gemini nodes will not work. You can obtain your API Key from Google AI Studio.

🔑 OpenAI API Key Setup

Before using OpenAI-related nodes, you must obtain and configure your OpenAI API Key. There are three supported methods, in the following order of priority:

  1. Code Argument

    • Pass the api_key argument directly when initializing OpenAIClient (highest priority).
  2. api_key.json File

    • Create an api_key.json file in custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/ with the following content:
      {
        "openai": "YOUR_API_KEY",
        "openai_base_url": "https://api.openai.com/v1"
      }
      
    • The openai_base_url is optional and defaults to the official OpenAI API.
    • This will be used only if the code argument is not provided.
  3. Environment Variable

    • Set the environment variables OPENAI_API_KEY and optionally OPENAI_BASE_URL (used only if the above two are not set).
    • Example (Windows command line):
      set OPENAI_API_KEY=YOUR_API_KEY
      set OPENAI_BASE_URL=https://api.openai.com/v1
      

Custom Base URL Support

The OpenAI nodes support custom base URLs, making them compatible with:

  • Official OpenAI API
  • Azure OpenAI Service
  • OpenAI-compatible APIs (like LocalAI, Ollama, etc.)
  • Self-hosted OpenAI-compatible servers

Simply set the base_url parameter to your preferred endpoint.

If the API Key is not configured correctly, OpenAI nodes will not work. You can obtain your API Key from OpenAI Platform.

🔑 OpenRouter API Key Setup

Before using OpenRouter-related nodes, you must obtain and configure your OpenRouter API Key. There are three supported methods, in the following order of priority:

  1. Code Argument

    • Pass the api_key argument directly when initializing OpenRouterClient (highest priority).
  2. api_key.json File

    • Create an api_key.json file in custom_nodes/ComfyUI-YogurtNodes/yogurt_nodes/llm/ with the following content:
      {
        "openrouter": "YOUR_API_KEY"
      }
      
    • This will be used only if the code argument is not provided.
  3. Environment Variable

    • Set the environment variable OPENROUTER_API_KEY (used only if the above two are not set).
    • Example (Windows command line):
      set OPENROUTER_API_KEY=YOUR_API_KEY
      

If the API Key is not configured correctly, OpenRouter nodes will not work. You can obtain your API Key from OpenRouter Platform.

🤝 Contributing

Pull Requests are welcome to help improve the project!

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

📞 Contact

For questions, bug reports, or feature requests, please open an issue.

🙏 Acknowledgments

  • ComfyUI Community
  • All Contributors