Nodes/LLM-text-processor_MOD/LLM-text-processor_MOD
ComfyUI Node

LLM-text-processor_MOD

Ten image inputs, one local LLM, zero API keys

By Eklipsis·Created 2 months ago·Updated 2 months ago· 1
LLM-text-processor_MOD
  • image_1
  • image_2
  • image_3
  • image_4
  • image_5
  • image_6
  • image_7
  • image_8
  • image_9
  • image_10
  • RESPONSE
  • REASONING
  • PERF
model
mmprojnone
system_prompt
promptDescribe this image in detail.
max_tokens2048
temperature0.70
top_p0.80
top_k20
repeat_penalty1.00
ctx_size8192
memory_modeauto
n_gpu_layers99
n_cpu_moe_layers1
seed1
timeout_seconds300
reasoningoff
enable_processingtrue
extra_args

Want an LLM to caption your outputs, rewrite a booru-tag prompt into plain English, or describe what's actually in an image - without paying for an API? This is the node. It's a fork of KingManiya's well-regarded ComfyUI-LLM-text-processor, modified to accept up to ten separate image inputs. That's basically the whole MOD: the original takes one image, this one takes a handful.

One honest caveat before you get invested: the README says straight out this is a one-time fork that will not be updated. If one image is all you ever need, go to the upstream repo instead. You're here because you want the multi-image version, and for that it works well.

What it actually is

A local-LLM text processor. It runs GGUF models through llama.cpp - the same quantized format family behind much of ComfyUI's big diffusion models, but here you're loading actual language models like Qwen3-VL, Gemma 4, or gpt-oss. No cloud, no key. Its only Python deps are numpy and Pillow, both already in ComfyUI; all the heavy lifting happens in a separate llama-cli binary.

How it works

Under the hood the node shells out to llama-cli and waits. The model dropdown is populated by recursively scanning ComfyUI/models/LLM for .gguf files (mmproj files are hidden from that list, which is nice). Pick your model, optionally pick a matching mmproj vision projector, and the prompt is written to a temp file and handed to the binary.

The image handling is where this MOD earns its keep. Each connected image - and each frame of a ComfyUI batch - gets written to a temp PNG and passed to llama.cpp in the same request. So you can caption a full grid or a range of video frames in one call, not one painstaking image at a time.

Reasoning models get special treatment. The node passes a --reasoning flag and parses the output: anything between [Start thinking] and [End thinking] lands in the REASONING output, the clean answer goes to RESPONSE, and llama.cpp's speed line goes to PERF. Wire the thinking in somewhere or just ignore it.

The inputs that matter

Most of the surface is sampler knobs you'll never touch. The ones you actually set:

  • model - your GGUF, from ComfyUI/models/LLM. Put files anywhere under that folder.
  • mmproj - the vision projector. Required the moment you connect any image.
  • system_prompt - presets are plain .txt files in ComfyUI/models/LLM/prompts/. Drop a captioner.txt there and it appears in the dropdown.
  • prompt - the instruction sent to the model.
  • max_tokens - raise this. More on that below.
  • reasoning - off, on, or auto. off is the right default for simple captioning and rewriting.
  • ctx_size - context window; bigger eats more VRAM.

Temperature, top_p, top_k, repeat_penalty, seed, and the memory_mode/n_gpu_layers trio can all stay at defaults until you know you need them.

Installing it

Easiest path is ComfyUI Manager: search for LLM-text-processor_MOD, install, restart. Or the manual way:

cd ComfyUI/custom_nodes
git clone https://github.com/Eklipsis/ComfyUI-LLM-text-processor-MOD.git

Restart ComfyUI and you'll find it under LLM Text Processor. Then put models in place:

ComfyUI/models/LLM/My-Model/model-q4_k_m.gguf
ComfyUI/models/LLM/My-Model/mmproj-bf16.gguf

The real install friction isn't Python - it's llama.cpp. The node auto-downloads official llama.cpp release binaries, but only on Windows x64 with CUDA 13. Everyone else has to have llama-cli working some other way first. That's the actual gotcha, not the git clone.

Problems you'll actually hit

  • No models in the dropdown - nothing .gguf under models/LLM, or you haven't restarted since adding it.
  • Image input fails - mmproj set to none, or the projector doesn't match your model. The node even parses llama.cpp's n_embd mismatch error into a readable "choose the mmproj that belongs to your model" message, so the failure mode is at least legible.
  • Empty or cut-off response - max_tokens too low, and reasoning models burn tokens thinking before they answer. With multiple images and reasoning on, start at 4096+ tokens and a 16384+ context. 2048 is not enough.
  • Out of memory - lower ctx_size before anything else, then a smaller quant.
  • It freezes mid-graph - generation is a blocking subprocess; it runs until llama-cli returns or timeout_seconds (default 300) kills it. Expected behavior, just set your timeout accordingly.

The honest take

This is a tiny, well-scoped fork of a node people genuinely use - the original gets recommended on r/StableDiffusion for prompt-to-natural-language work, typically paired with a Qwen model. It's GPL-3.0, fully local, and shells out to a pinned official llama.cpp release, which is more than can be said for some sketchier "LLM vision" nodes floating around the ecosystem. But it's frozen in time. If ten image inputs are the thing you need, grab it; otherwise the upstream repo is the better long-term home.

CategoryLLM Text Processor

Inputs (28)

NameTypeDefaultDescription
modelCOMBOGGUF model loaded from ComfyUI/models/LLM. mmproj files are hidden from this list.
mmprojCOMBOnoneVision projector GGUF. Required when one or more images are connected.
system_promptCOMBOSystem prompt preset from ComfyUI/models/LLM/prompts, or none.
promptSTRINGDescribe this image in detail.User prompt sent to the selected model.
max_tokensINT20481–32768Maximum number of tokens to generate.
temperatureFLOAT0.700–2Sampling temperature. Lower is more deterministic.
top_pFLOAT0.800–1Nucleus sampling threshold.
top_kINT201–1000Top-K sampling cutoff.
repeat_penaltyFLOAT1.000–3Penalty applied to repeated tokens.
ctx_sizeINT8192512–1048576Context window size in tokens. Use a value supported by the selected GGUF; larger context uses more VRAM.
memory_modeCOMBOautoAdvanced memory placement mode: auto, gpu_layers, cpu_moe_layers, or gpu_and_cpu_moe_layers.
n_gpu_layersINT99-1–999Used only in gpu_layers and gpu_and_cpu_moe_layers modes. Number of model layers to place on the GPU.
n_cpu_moe_layersINT11–999Used only in cpu_moe_layers and gpu_and_cpu_moe_layers modes. Number of MoE layers to keep on the CPU.
seedINT1-1–4294967295Random seed. Use -1 for a random seed.
timeout_secondsINT30010–3600Maximum time to wait before generation is stopped.
reasoningCOMBOoffReasoning output mode.
image_1optIMAGEOptional image input 1. A single image or ComfyUI batch is passed to llama.cpp.
image_2optIMAGEOptional image input 2. A single image or ComfyUI batch is passed to llama.cpp.
image_3optIMAGEOptional image input 3. A single image or ComfyUI batch is passed to llama.cpp.
image_4optIMAGEOptional image input 4. A single image or ComfyUI batch is passed to llama.cpp.
image_5optIMAGEOptional image input 5. A single image or ComfyUI batch is passed to llama.cpp.
image_6optIMAGEOptional image input 6. A single image or ComfyUI batch is passed to llama.cpp.
image_7optIMAGEOptional image input 7. A single image or ComfyUI batch is passed to llama.cpp.
image_8optIMAGEOptional image input 8. A single image or ComfyUI batch is passed to llama.cpp.
image_9optIMAGEOptional image input 9. A single image or ComfyUI batch is passed to llama.cpp.
image_10optIMAGEOptional image input 10. A single image or ComfyUI batch is passed to llama.cpp.
enable_processingoptBOOLEANtrueWhen enabled, run normal node processing. When disabled, forward the input prompt directly as RESPONSE.
extra_argsoptSTRINGOptional advanced llama.cpp parameters. Leave empty for normal use.

Outputs (3)

NameTypeDescription
RESPONSESTRINGFinal model response with reasoning blocks removed.
REASONINGSTRINGExtracted reasoning when present in model output.
PERFSTRINGllama.cpp prompt and generation speed.