Kinburg-Nodes
My nodes for ComfyUI
Nodes (95)
Pick a color once, get HEX, RGB, RGBA and alpha out
Drop one image from a batch by index
π¨ Kinburg-Nodes
<!-- BEGIN GENERATED badges β tools/gen_readme_index.py --> <!-- END GENERATED badges -->A personal collection of custom ComfyUI nodes. One folder = one package: ComfyUI reads the node mappings from the root __init__.py, and the sets are split into subpackages.
<!-- BEGIN GENERATED index β tools/gen_readme_index.py -->
π Node Index
All 95 nodes, grouped by the package they live in. Every package links to its full documentation under docs/.
π§ LLM & Vision Systems
| Package | Nodes |
|---|---|
| local_llm/ β Local LLM (GGUF) & Live Logging | Context Sizer (GGUF), Kinburg Live Log π, LLM Live Log (old id), Local LLM (GGUF), Local LLM Chat (GGUF), Local LLM Settings (GGUF), Send Image to Chat, Send Image to Live Log π, Token Counter (GGUF), Vision Settings (GGUF) |
| llm_server/ β Local LLM (server client, text) | Local LLM (server client, text) |
| context/ β Character Card, Entity Card, Context Collector | Character Card, Context Collector, Entity Card |
| vision_judge/ β Vision LLM Judge & Criteria Builder | Criteria Builder π, Vision LLM Judge |
| card_presets/ β Card Save & Card Presets | Card Presets, Card Save |
| grammar_presets/ β Grammar Presets | Grammar Presets |
| show_text/ β Show Text (Markdown) | Show Text (Markdown) |
| gguf_convert/ β Safetensors β GGUF Converters | Diffusion Safetensors -> GGUF (city96), Safetensors -> GGUF (llama.cpp) |
π Iterative Samplers & Optimizers
π π Iterative Samplers & Optimizers
| Package | Nodes |
|---|---|
| ouroboros/ β Ouroboros (Self-Correcting Sampler) π | Ouroboros (Self-Correcting Sampler) π, Ouroboros Critic Settings π, Ouroboros Live Log ππ, Sampler Settings |
| chimera/ β Chimera (Multi-Sampler) π¦ | Chimera (Multi-Sampler) π¦ |
π΅ Audio & Music Suite
| Package | Nodes |
|---|---|
| siren/ β Siren Suite π§ | Siren (Music Sampler) π§, Siren Cast (Voice Plan) π§, Siren Compare (Audio) π§, Siren Scope (Audio β Image) π§, Siren Score (Lyrics β Plan) π§, Siren Section (Audio Window) π§ |
| audio_sr/ β Audio SR (48 kHz Upscale) π | Audio SR (48 kHz Upscale) π |
| save_song/ β Save Song & Song Tags | Save Song, Song Tags |
π¬ Video Generation & Storyboarding
π π¬ Video Generation & Storyboarding
| Package | Nodes |
|---|---|
| morpheus/ β Morpheus Suite π | Morpheus (Video Sampler) π, Morpheus Dream Board π, Morpheus Dream π, Morpheus Storyboard π |
| phantas/ β Phantas Suite π | Phantas Storyboard π, Phantas π |
| orpheus/ β Orpheus Suite πΆ | Orpheus (Audio β Shots) πΆ |
ποΈ Presets & Asset Management
π ποΈ Presets & Asset Management
| Package | Nodes |
|---|---|
| model_presets/ β Model Capture & Settings Management | Model Capture π₯, Model Select π, Settings Save πΎ, Settings Select β |
| prompt_presets/ β Prompt Presets | Prompt Presets |
| prompt_variations/ β Prompt Variations | Prompt Variations |
| lora/ β Lora Trigger Loader & Accumulator | Lora Trigger Loader, Lora Unlim Accumulator |
πΌοΈ Image Processing & Visualizers
π πΌοΈ Image Processing & Visualizers
| Package | Nodes |
|---|---|
| image_compare/ β Image Compare (HTML) & Color Caption | Color Caption, Image Compare (HTML) |
| image_batch/ β Unlim Image Batch & List | Unlim Image Batch, Unlim Image List |
| collage/ β Collage Layout Builder | Collage |
π οΈ Workflow Control & Utilities
π π οΈ Workflow Control & Utilities
| Package | Nodes |
|---|---|
| util/ β General Workflow Utilities | Any Switch, Any to String, Color Picker, Combo to String, Date String, JSON Extract, Text Transform, Unlim Text Concat |
| timer/ β Execution Timer | Start Timer, Stop Timer |
| gen_info/ β Generation Info & Filter | Generation Info, Generation Info Filter |
| group_control/ β Group Control ποΈ | Group Control ποΈ |
| loops/ β Flexible Iteration Loops | Delay, For Each (Collect), For Each (Open), Get by Index, List Output, Repeat (Close), Repeat (Open), While (Close), While (Open) |
| accumulators/ β Name-Based Accumulators | Get Accumulator (audio), Get Accumulator (captions), Get Accumulator (gen info), Get Accumulator (images list), Get Accumulator (images), Get Accumulator (prompts), Get Accumulator (texts), Set Accumulator (audio), Set Accumulator (captions), Set Accumulator (gen info), Set Accumulator (images), Set Accumulator (prompts), Set Accumulator (texts) |
| list_ops/ β List & Batch Operations | Image Batch Insert, Image Batch Remove, List Insert, List Remove |
| report/ β Investigation Report DB | β no nodes of its own |
<details> <summary><b>π All node ids (for workflow JSON / bug reports)</b></summary>
| Display name | Node id | Category |
|---|---|---|
| Any Switch | KinburgAnySwitch | Kinburg-Nodes/util |
| Any to String | AnyToString | Kinburg-Nodes/util |
| Audio SR (48 kHz Upscale) π | KinburgAudioSR | Kinburg-Nodes/audio |
| Card Presets | CardPresets | Kinburg-Nodes/LLM/presets |
| Card Save | CardSave | Kinburg-Nodes/LLM/presets |
| Character Card | CharacterCard | Kinburg-Nodes/LLM/context |
| Chimera (Multi-Sampler) π¦ | KinburgChimeraSampler | Kinburg-Nodes/Bestiary/Chimera |
| Collage | CustomCollageNode | Kinburg-Nodes/image |
| Color Caption | ColorCaption | Kinburg-Nodes/image/compare |
| Color Picker | ColorPicker | Kinburg-Nodes/util |
| Combo to String | ComboToString | Kinburg-Nodes/util |
| Context Collector | ContextCollector | Kinburg-Nodes/LLM/context |
| Context Sizer (GGUF) | KinburgContextSizer | Kinburg-Nodes/LLM |
| Criteria Builder π | CriteriaBuilder | Kinburg-Nodes/LLM/presets |
| Date String | KinburgDateString | Kinburg-Nodes/util |
| Delay | KinburgDelay | Kinburg-Nodes/flow/loops |
| Diffusion Safetensors -> GGUF (city96) | SafetensorsToGGUFDiffusion | Kinburg-Nodes/LLM/GGUF |
| Entity Card | EntityCard | Kinburg-Nodes/LLM/context |
| For Each (Collect) | KinburgForEachCollect | Kinburg-Nodes/flow/loops |
| For Each (Open) | KinburgForEachOpen | Kinburg-Nodes/flow/loops |
| Generation Info | GenerationInfo | Kinburg-Nodes/util |
| Generation Info Filter | GenerationInfoFilter | Kinburg-Nodes/util |
| Get Accumulator (audio) | GetAccumAudio | Kinburg-Nodes/flow/accumulators |
| Get Accumulator (captions) | GetAccumCaptions | Kinburg-Nodes/flow/accumulators |
| Get Accumulator (gen info) | GetAccumGenInfo | Kinburg-Nodes/flow/accumulators |
| Get Accumulator (images list) | GetAccumImagesList | Kinburg-Nodes/flow/accumulators |
| Get Accumulator (images) | GetAccumImages | Kinburg-Nodes/flow/accumulators |
| Get Accumulator (prompts) | GetAccumPrompts | Kinburg-Nodes/flow/accumulators |
| Get Accumulator (texts) | GetAccumTexts | Kinburg-Nodes/flow/accumulators |
| Get by Index | KinburgGetByIndex | Kinburg-Nodes/flow/loops |
| Grammar Presets | GrammarPresets | Kinburg-Nodes/LLM/presets |
| Group Control ποΈ | KinburgGroupControl | Kinburg-Nodes/util |
| Image Batch Insert | ImageBatchInsert | Kinburg-Nodes/image |
| Image Batch Remove | ImageBatchRemove | Kinburg-Nodes/image |
| Image Compare (HTML) | ImageCompareHTML | Kinburg-Nodes/image/compare |
| JSON Extract | KinburgJSONExtract | Kinburg-Nodes/util |
| Kinburg Live Log π | KinburgLiveLog | Kinburg-Nodes/LLM |
| LLM Live Log (old id) | KinburgLLMLog | Kinburg-Nodes/LLM |
| List Insert | ListInsert | Kinburg-Nodes/flow/list |
| List Output | KinburgListEmit | Kinburg-Nodes/flow/loops |
| List Remove | ListRemove | Kinburg-Nodes/flow/list |
| Local LLM (GGUF) | LocalLLMGGUF | Kinburg-Nodes/LLM |
| Local LLM (server client, text) | LocalLLMServerText | Kinburg-Nodes/LLM |
| Local LLM Chat (GGUF) | LocalLLMChatGGUF | Kinburg-Nodes/LLM |
| Local LLM Settings (GGUF) | LocalLLMSettingsGGUF | Kinburg-Nodes/LLM |
| Lora Trigger Loader | LoraTriggerLoader | Kinburg-Nodes/lora |
| Lora Unlim Accumulator | LoraUnlimAccumulator | Kinburg-Nodes/lora |
| Model Capture π₯ | KinburgModelCapture | Kinburg-Nodes/model |
| Model Select π | KinburgModelSelect | Kinburg-Nodes/model |
| Morpheus (Video Sampler) π | KinburgMorpheus | Kinburg-Nodes/Bestiary/Morpheus |
| Morpheus Dream Board π | KinburgDreamBoard | Kinburg-Nodes/Bestiary/Morpheus |
| Morpheus Dream π | KinburgMorpheusDream | Kinburg-Nodes/Bestiary/Morpheus |
| Morpheus Storyboard π | KinburgMorpheusStoryboard | Kinburg-Nodes/Bestiary/Morpheus |
| Orpheus (Audio β Shots) πΆ | KinburgOrpheusScore | Kinburg-Nodes/Bestiary/Orpheus |
| Ouroboros (Self-Correcting Sampler) π | KinburgOuroboros | Kinburg-Nodes/Bestiary/Ouroboros |
| Ouroboros Critic Settings π | KinburgCriticSettings | Kinburg-Nodes/Bestiary/Ouroboros |
| Ouroboros Live Log ππ | KinburgOuroborosLog | Kinburg-Nodes/Bestiary/Ouroboros |
| Phantas Storyboard π | KinburgPhantasStoryboard | Kinburg-Nodes/Bestiary/Phantas |
| Phantas π | KinburgPhantas | Kinburg-Nodes/Bestiary/Phantas |
| Prompt Presets | PromptPresets | Kinburg-Nodes/prompt |
| Prompt Variations | PromptVariations | Kinburg-Nodes/prompt |
| Repeat (Close) | KinburgRepeatClose | Kinburg-Nodes/flow/loops |
| Repeat (Open) | KinburgRepeatOpen | Kinburg-Nodes/flow/loops |
| Safetensors -> GGUF (llama.cpp) | SafetensorsToGGUF | Kinburg-Nodes/LLM/GGUF |
| Sampler Settings | KinburgSamplerSettings | Kinburg-Nodes/Bestiary |
| Save Song | KinburgSaveSong | Kinburg-Nodes/audio |
| Send Image to Chat | LocalLLMChatSendImage | Kinburg-Nodes/LLM |
| Send Image to Live Log π | KinburgSendImageToLog | Kinburg-Nodes/LLM |
| Set Accumulator (audio) | SetAccumAudio | Kinburg-Nodes/flow/accumulators |
| Set Accumulator (captions) | SetAccumCaptions | Kinburg-Nodes/flow/accumulators |
| Set Accumulator (gen info) | SetAccumGenInfo | Kinburg-Nodes/flow/accumulators |
| Set Accumulator (images) | SetAccumImages | Kinburg-Nodes/flow/accumulators |
| Set Accumulator (prompts) | SetAccumPrompts | Kinburg-Nodes/flow/accumulators |
| Set Accumulator (texts) | SetAccumTexts | Kinburg-Nodes/flow/accumulators |
| Settings Save πΎ | KinburgSettingsSave | Kinburg-Nodes/model |
| Settings Select β | KinburgSettingsSelect | Kinburg-Nodes/model |
| Show Text (Markdown) | KinburgShowText | Kinburg-Nodes/util |
| Siren (Music Sampler) π§ | KinburgSirenSampler | Kinburg-Nodes/Bestiary/Siren |
| Siren Cast (Voice Plan) π§ | KinburgSirenCast | Kinburg-Nodes/Bestiary/Siren |
| Siren Compare (Audio) π§ | KinburgSirenCompare | Kinburg-Nodes/Bestiary/Siren |
| Siren Scope (Audio β Image) π§ | KinburgSirenScope | Kinburg-Nodes/Bestiary/Siren |
| Siren Score (Lyrics β Plan) π§ | KinburgSirenScore | Kinburg-Nodes/Bestiary/Siren |
| Siren Section (Audio Window) π§ | KinburgSirenSection | Kinburg-Nodes/Bestiary/Siren |
| Song Tags | KinburgSongTags | Kinburg-Nodes/audio |
| Start Timer | StartTimer | Kinburg-Nodes/util |
| Stop Timer | StopTimer | Kinburg-Nodes/util |
| Text Transform | KinburgTextTransform | Kinburg-Nodes/util |
| Token Counter (GGUF) | KinburgTokenCounter | Kinburg-Nodes/LLM |
| Unlim Image Batch | UnlimImageBatch | Kinburg-Nodes/image |
| Unlim Image List | UnlimImageList | Kinburg-Nodes/image |
| Unlim Text Concat | UnlimTextConcat | Kinburg-Nodes/util |
| Vision LLM Judge | VisionLLMJudge | Kinburg-Nodes/LLM |
| Vision Settings (GGUF) | LocalLLMVisionSettingsGGUF | Kinburg-Nodes/LLM |
| While (Close) | KinburgWhileClose | Kinburg-Nodes/flow/loops |
| While (Open) | KinburgWhileOpen | Kinburg-Nodes/flow/loops |
π¦ Installation
- Clone this repository into
ComfyUI/custom_nodes(or install it through ComfyUI-Manager). - The Local LLM nodes need
llama-cpp-python(CUDA build). It is installed automatically byinstall.py(which ComfyUI-Manager runs on install). To do it by hand, run with this ComfyUI's Python:
The Image Compare and Date String nodes need nothing extra.<ComfyUI>/.venv/Scripts/python.exe <ComfyUI>/custom_nodes/Kinburg-Nodes/install.py - The GGUF converters use packages that already ship with ComfyUI (
huggingface_hub,gguf,torch,safetensors) and fetch the conversion scripts themselves (giton PATH,auto_cloneon). Only quantization needs an external binary you provide:llama-quantizefor the LLM converter, or the patchedllama-quantizefrom city96's llama.cpp fork for the diffusion converter (see ComfyUI-GGUF/tools/README.md). Leavingquantize = noneneeds nothing extra.
Each node's parameters are documented in their tooltips. The Local LLM node also exposes a
help output with a quick cheat-sheet β wire it to a "Preview as Text" node to read it.
π§ͺ Tests
python tests/run.py
with ComfyUI's own interpreter (.venv/Scripts/python.exe). 1395 checks in 23 suites, about two
and a half minutes β over local_llm/ (chat, worker, both send-image nodes, lazy guard),
morpheus/ (storyboard, dream board, trims), phantas/ (timing, board, render), orpheus/
(timing, detect, node), siren/ (cast, score), audio_sr/, lora/, util/diskcache.py, three of
the web/*.js extensions (chat, dream board, group control), and the docs audit below. Nothing real
is loaded (llama.cpp, H3 and the browser are all stubbed), so it is a regression net for those paths
and not a substitute for trying a change in the app. tests/README.md says exactly what is and
is not covered.
π Keeping the docs honest
The node index in this README is generated, so it cannot drift from the nodes the pack registers:
python tools/gen_readme_index.py
It rewrites only the regions between the <!-- BEGIN/END GENERATED --> markers β every other line
here is hand-written. --check verifies instead of writing (that is the docs test suite, so a
stale index fails the tests), and --run-tests also refreshes the tests badge from a real run.
Adding a node needs no edit there at all: it appears in the index on the next run. Adding a
package needs only its ## heading in the right docs/*.md file β the tool reads the folder
name out of the heading, and fails with undocumented: <folder> if a node's folder has no section
to live in. A group's position comes from its own <!-- index-order: N --> line.
Alongside the index it audits the prose: every node must be mentioned, every local link and anchor
must resolve, and every backticked snake_case term must be a real node input or output β anything
else has to be listed in tools/known_terms.txt (sampler names, enum values, comfy internals).
That last check is the one that catches a renamed input still being documented under its old name.
π License
MIT β see LICENSE.