Rebuild the LLM, image generation and upscale nodes on a declarative framework (yogurt_nodes/llm/framework): - Protocol adapters per API format: gemini, openai_chat, openai_images, openrouter_images, xai_images, grsai_draw, freedomgpt_*, ark_images, dashscope_image, topaz, magnific. - Provider nodes output YOGURT_LLM_PROVIDER: Google AI Studio, Vertex AI, Google GenAI Compatible, OpenAI, OpenAI Compatible, OpenRouter, xAI, GRSAI, FreedomGPT, Volcengine Ark, BytePlus ModelArk, DashScope, Topaz, Magnific. Compatible providers never fall back to official keys. - One node per model family with a DynamicCombo version selector that shows only the selected version's parameters, Autogrow image inputs, an optional provider input (official API by default) and a custom model option: Nano Banana, GPT Image, Grok Imagine, Seedream, Qwen Image, Wan Image, Gemini/GPT/Grok/Claude Chat, Topaz (precision and generative), Magnific (creative and precision). - Existing LLM nodes keep their node ids and move to YogurtNodes/LLM/Legacy with a "(Legacy)" suffix; the registry supports _SUBCATEGORY for this. - README sections and yogurt_nodes/llm/EXTENDING.md describe providers, key lookup and how to add providers or models.
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
- Navigate to your ComfyUI custom nodes directory:
cd custom_nodes
- Clone this repository:
git clone https://github.com/yogurt7771/ComfyUI-YogurtNodes.git
- Install dependencies:
cd ComfyUI-YogurtNodes
pip install -r requirements.txt
🚀 Usage
- Start ComfyUI
- Look for "Yogurt Nodes" category in the node browser
- 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: 183.
| Group | Count |
|---|---|
| Image Processing Nodes | 11 |
| 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 | 55 |
| 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. |
| H/L Frequency Detail Restore Threshold | YogurtHLFrequencyDetailRestoreThreshold |
YogurtNodes/Image |
H/L frequency detail restore with independent high/low delta thresholds. |
| 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 |
|---|---|---|---|
| Chat (Custom Model) | YogurtCustomModelChat |
YogurtNodes/LLM |
Chat with any model id on the connected provider. |
| Claude Chat | YogurtClaudeChat |
YogurtNodes/LLM |
Anthropic Claude via OpenRouter or an OpenAI-compatible relay. |
| FreedomGPT Generate Image (Legacy) | YogurtFreedomGPTGenerateImage |
YogurtNodes/LLM |
Generate images using FreedomGPT API |
| FreedomGPT Generate Text (Legacy) | YogurtFreedomGPTGenerateText |
YogurtNodes/LLM |
Generate text using FreedomGPT API |
| FreedomGPT Image Understand (Legacy) | YogurtFreedomGPTImageUnderstand |
YogurtNodes/LLM |
Understand image content using FreedomGPT vision models |
| GPT Chat | YogurtGPTChat |
YogurtNodes/LLM |
OpenAI GPT text generation with optional image understanding and chat history. |
| GPT Image | YogurtGPTImageGenerateImage |
YogurtNodes/LLM |
OpenAI GPT Image generation and editing (2.5 / 2 / 1.5 / 1 / 1 Mini). |
| GRSAI Generate Image (Legacy) | YogurtGRSAIGenerateImage |
YogurtNodes/LLM |
Generate or edit images with the GRSAI API and return torch tensors |
| Gemini Chat | YogurtGeminiChat |
YogurtNodes/LLM |
Gemini text generation with optional image understanding and chat history. |
| Gemini Generate Image (Legacy) | YogurtGeminiGenerateImage |
YogurtNodes/LLM |
Generate image using Gemini API and return as torch.Tensor (h,w,c) and text |
| Gemini Generate Text (Legacy) | YogurtGeminiGenerateText |
YogurtNodes/LLM |
Generate text using Gemini API |
| Gemini Image Understand (Legacy) | YogurtGeminiImageUnderstand |
YogurtNodes/LLM |
Understand images using Gemini API |
| Grok Chat | YogurtGrokChat |
YogurtNodes/LLM |
xAI Grok text generation with optional image understanding and chat history. |
| Grok Generate Image (Legacy) | YogurtGrokGenerateImage |
YogurtNodes/LLM |
Generate image using xAI Grok API and return as torch.Tensor (h,w,c) and text |
| Grok Generate Text (Legacy) | YogurtGrokGenerateText |
YogurtNodes/LLM |
Generate text using xAI API |
| Grok Image Understand (Legacy) | YogurtGrokImageUnderstand |
YogurtNodes/LLM |
Understand image content using xAI vision models |
| Grok Imagine | YogurtGrokImagineGenerateImage |
YogurtNodes/LLM |
xAI Grok Imagine image generation and editing. |
| History Builder | YogurtHistoryBuilder |
YogurtNodes/LLM |
构建与 LLM 节点兼容的会话历史 |
| Image Generation (Custom Model) | YogurtCustomModelGenerateImage |
YogurtNodes/LLM |
Image generation with any model id on the connected provider. |
| Magnific Creative Upscale | YogurtMagnificCreativeUpscale |
YogurtNodes/LLM |
Magnific creative upscaling with prompt, creativity and engine controls. |
| Magnific Image Upscale API (Legacy) | YogurtMagnificImageUpscaleAPI |
YogurtNodes/LLM |
Call the Magnific image upscaler API, wait for completion, and return an IMAGE batch. |
| Magnific Precision Upscale | YogurtMagnificPrecisionUpscale |
YogurtNodes/LLM |
Magnific precision upscaling (V2 with flavors, or V1). |
| Nano Banana | YogurtNanoBananaGenerateImage |
YogurtNodes/LLM |
Nano Banana image generation and editing (2.1 / 2 / 2 Lite / Pro / 1). |
| OpenAI Generate Image (Legacy) | YogurtOpenAIGenerateImage |
YogurtNodes/LLM |
Generate image using OpenAI API and return as torch.Tensor (h,w,c) and text |
| OpenAI Generate Text (Legacy) | YogurtOpenAIGenerateText |
YogurtNodes/LLM |
Generate text using OpenAI API |
| OpenAI Image Understand (Legacy) | YogurtOpenAIImageUnderstand |
YogurtNodes/LLM |
Understand image content using OpenAI vision models |
| OpenRouter Generate Image (Legacy) | YogurtOpenRouterGenerateImage |
YogurtNodes/LLM |
Generate image using OpenRouter API and return as torch.Tensor (h,w,c) and text |
| OpenRouter Generate Text (Legacy) | YogurtOpenRouterGenerateText |
YogurtNodes/LLM |
Generate text using OpenRouter API |
| OpenRouter Image Understand (Legacy) | YogurtOpenRouterImageUnderstand |
YogurtNodes/LLM |
Understand image content using OpenRouter API |
| Provider: Alibaba DashScope | YogurtDashScopeProvider |
YogurtNodes/LLM |
Alibaba Cloud DashScope (Bailian) provider for Qwen Image and Wan. |
| Provider: BytePlus ModelArk | YogurtBytePlusArkProvider |
YogurtNodes/LLM |
BytePlus ModelArk (international) provider for Seedream models. |
| Provider: FreedomGPT | YogurtFreedomGPTProvider |
YogurtNodes/LLM |
FreedomGPT provider; use with the custom-model chat and image nodes. |
| Provider: GRSAI | YogurtGRSAIProvider |
YogurtNodes/LLM |
GRSAI drawing relay provider (Nano Banana / GPT Image). |
| Provider: Google AI Studio | YogurtGoogleAIStudioProvider |
YogurtNodes/LLM |
Google AI Studio (Gemini API) provider; connect to Gemini / Nano Banana nodes. |
| Provider: Google GenAI Compatible | YogurtGoogleGenAICompatibleProvider |
YogurtNodes/LLM |
Any Gemini-API-compatible endpoint with a custom base URL. |
| Provider: Magnific | YogurtMagnificProvider |
YogurtNodes/LLM |
Magnific upscaler API provider. |
| Provider: OpenAI | YogurtOpenAIProvider |
YogurtNodes/LLM |
Official OpenAI API provider. |
| Provider: OpenAI Compatible | YogurtOpenAICompatibleProvider |
YogurtNodes/LLM |
Any OpenAI-compatible endpoint (chat completions / images) with a custom base URL. |
| Provider: OpenRouter | YogurtOpenRouterProvider |
YogurtNodes/LLM |
OpenRouter provider with optional upstream provider routing. |
| Provider: Topaz Labs | YogurtTopazProvider |
YogurtNodes/LLM |
Topaz Labs Image API provider. |
| Provider: Vertex AI | YogurtVertexAIProvider |
YogurtNodes/LLM |
Vertex AI provider (express-mode API key or service-account credentials). |
| Provider: Volcengine Ark | YogurtVolcengineArkProvider |
YogurtNodes/LLM |
Volcengine Ark (China) provider for Seedream and Doubao models. |
| Provider: xAI | YogurtXAIProvider |
YogurtNodes/LLM |
xAI (Grok) API provider. |
| Qwen Generate/Edit Image (Legacy) | YogurtQwenGenerateImage |
YogurtNodes/LLM |
使用阿里云百炼 Qwen 图片模型进行文生图或多图编辑 |
| Qwen Image | YogurtQwenImageGenerateImage |
YogurtNodes/LLM |
Alibaba Qwen Image generation and editing. |
| SeeDream Generate Image (Legacy) | YogurtSeeDreamGenerateImage |
YogurtNodes/LLM |
使用豆包SeeDream API生成图像,支持文生图、图生图、多图生图和序列图像生成 |
| Seedream | YogurtSeedreamGenerateImage |
YogurtNodes/LLM |
ByteDance Seedream image generation and editing (5.0 Pro / Flash / Lite, 4.5, 4.0). |
| Topaz Generative Upscale | YogurtTopazGenerativeUpscale |
YogurtNodes/LLM |
Topaz generative upscaling (Wonder 3.5, Bloom 2, Reimagine, Redefine, Recovery V2). |
| Topaz Image Upscale API (Legacy) | YogurtTopazImageUpscaleAPI |
YogurtNodes/LLM |
Call the Topaz Labs Image API, wait for completion, and return an IMAGE batch. |
| Topaz Upscale | YogurtTopazUpscale |
YogurtNodes/LLM |
Topaz precision upscaling (Standard V2, Low Resolution V2, High Fidelity V2, CGI, Text Refine). |
| Vertex AI Generate Image (Legacy) | YogurtVertexAIGenerateImage |
YogurtNodes/LLM |
Generate image using Vertex AI API and return as torch.Tensor (h,w,c) and text |
| Vertex AI Generate Text (Legacy) | YogurtVertexAIGenerateText |
YogurtNodes/LLM |
Generate text using Vertex AI |
| Vertex Image Understand (Legacy) | YogurtVertexAIImageUnderstand |
YogurtNodes/LLM |
Understand images using Vertex AI |
| Wan Generate/Edit Image (Legacy) | YogurtWanGenerateImage |
YogurtNodes/LLM |
使用阿里云百炼 Wan 图片模型进行文生图或图像编辑 |
| Wan Image | YogurtWanImageGenerateImage |
YogurtNodes/LLM |
Alibaba Wan image generation and editing. |
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:
-
Code Argument
- Pass the
api_keyargument directly when initializingGeminiClient(highest priority).
- Pass the
-
api_key.json File
- Create an
api_key.jsonfile incustom_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.
- Create an
-
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
- Set the environment variable
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:
-
Code Argument
- Pass the
api_keyargument directly when initializingOpenAIClient(highest priority).
- Pass the
-
api_key.json File
- Create an
api_key.jsonfile incustom_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_urlis optional and defaults to the official OpenAI API. - This will be used only if the code argument is not provided.
- Create an
-
Environment Variable
- Set the environment variables
OPENAI_API_KEYand optionallyOPENAI_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
- Set the environment variables
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:
-
Code Argument
- Pass the
api_keyargument directly when initializingOpenRouterClient(highest priority).
- Pass the
-
api_key.json File
- Create an
api_key.jsonfile incustom_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.
- Create an
-
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
- Set the environment variable
If the API Key is not configured correctly, OpenRouter nodes will not work. You can obtain your API Key from OpenRouter Platform.
🧩 LLM / Image / Upscale Nodes: Providers and Models
LLM-related nodes come in two kinds that are wired together:
- Model nodes (
YogurtNodes/LLM/Image,Text,Upscale): one node per model family, e.g. Nano Banana, GPT Image, Seedream, Gemini Chat, Claude Chat, Topaz Upscale. Themodeldropdown switches versions, and the inputs below it change to show only what that version supports. - Provider nodes (
YogurtNodes/LLM/Providers): hold the connection settings (key, base URL, proxy, timeout) and output aproviderthat you connect to a model node. The same model can be called through different providers, e.g. Nano Banana via Google AI Studio, Vertex AI, OpenRouter or GRSAI.
Notes:
- When a model node's
providerinput is not connected, the family's default official provider is used, with the key read from theapi_key.jsonkey or environment variable listed below. - Connecting a provider that does not offer the selected model fails with an error listing the supported providers.
- OpenAI Compatible and Google GenAI Compatible are for custom base URLs (relays). Their
api_keymust be filled in the node; they never fall back to the official keys inapi_key.json. - Reference image inputs are dynamic: connecting one adds the next slot.
timeout0 means no limit; image generation usually takes tens of seconds to minutes.- Use the advanced
extrainput (a JSON object) to pass parameters that are not exposed yet. - For models that are not built in yet, use
Custom modelin a family's dropdown, or theChat (Custom Model)/Image Generation (Custom Model)nodes with a model id. - The previous nodes remain under
YogurtNodes/LLM/Legacywith a(Legacy)suffix, so existing workflows keep working.
| Provider node | api_key.json key |
Environment variable | Default for model nodes |
|---|---|---|---|
| Google AI Studio | gemini |
GEMINI_API_KEY |
Nano Banana, Gemini Chat |
| Vertex AI | vertex_ai_json, vertex_ai_project, vertex_ai_region |
GOOGLE_APPLICATION_CREDENTIALS |
— |
| Google GenAI Compatible | must be set in the node | — | — |
| OpenAI | openai, openai_base_url |
OPENAI_API_KEY, OPENAI_BASE_URL |
GPT Image, GPT Chat, custom-model nodes |
| OpenAI Compatible | must be set in the node | — | — |
| OpenRouter | openrouter |
OPENROUTER_API_KEY |
Claude Chat |
| xAI | xai (or grok), xai_base_url |
XAI_API_KEY (or GROK_API_KEY) |
Grok Imagine, Grok Chat |
| GRSAI | grsai, grsai_base_url |
GRSAI_API_KEY |
— |
| FreedomGPT | freedomgpt |
FREEDOMGPT_API_KEY |
— |
| Volcengine Ark | seedream (or ark) |
ARK_API_KEY |
Seedream |
| BytePlus ModelArk | byteplus |
BYTEPLUS_API_KEY |
— |
| Alibaba DashScope | dashscope (or qwen, wan), dashscope_base_url |
DASHSCOPE_API_KEY |
Qwen Image, Wan Image |
| Topaz Labs | topaz, topaz_base_url |
TOPAZ_API_KEY |
Topaz Upscale, Topaz Generative Upscale |
| Magnific | magnific, magnific_base_url |
MAGNIFIC_API_KEY |
Magnific Creative / Precision Upscale |
See yogurt_nodes/llm/EXTENDING.md for adding providers and models.
🤝 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