LLM Generate (Basic)
The node that actually calls your LLM
- provider
- text
- meta
LLM Generate (Basic) is the payoff node of the comfyui-llm-bikeshed pack. Everything else - the providers, the options, the lifecycle nodes - exists to feed this one a backend and a question, and this is the node that gets an answer back. It's the one you reach for when you just want text out of a local model with minimal ceremony: wire a provider in, type a prompt, and the text output carries whatever your model says.
The mental model that makes this pack make sense: it never runs a model inside ComfyUI. Like an API-wrapper node, it's an HTTP client wearing a node costume (the KB's external-api-nodes.md frames the pattern exactly). Under the hood it builds a chat message list - your system_prompt first if it's non-empty, then your prompt as the user turn - and sends it over POST /v1/chat/completions to whatever server your provider node points at. LM Studio, oobabooga Textgen, llama.cpp, and OpenAI all speak that dialect, which is the whole trick of the pack: one generation node, many backends. This is the "LLM as a tool in the graph" pattern from llm-in-comfyui.md - the language model doing a job upstream of the sampler, not the frozen text encoder inside your checkpoint. Different thing, easy to conflate.
The inputs that matter
The required provider input is non-negotiable: it takes an LLM_PROVIDER object from LLM Provider: OAI Compatible or LLM Provider: Textgen, and without it the node has nothing to talk to. Everything else is ordinary:
prompt- your actual request. Multiline, so paste as much as you like.system_prompt- optional role instructions ("You are a prompt engineer…"). Leave it empty and the pack simply omits it from the request.temperature- default 0.7. Low for deterministic, high for creative.max_tokens- default 1024, the ceiling on the reply.seed- default -1 means "don't send a seed," which most local backends treat as random. Set a real number for reproducibility - and mind thecontrol_after_generatedropdown ComfyUI attaches to every INT widget, which will happily randomize your seed each run until you set it to fixed.
The outputs
text(STRING) - the model's reply. Wire it to a text preview/display node to see it in the graph, or into the next step of your pipeline.meta(LLM_META) - a compact bundle carrying the provider and the options that were actually sent. Its real use is chaining: connect it to the next generation node'smetainput and the model stays loaded across the chain, unloading only after the last node. That's the pack's VRAM management doing its job - you're telling it "more generations are coming."
One quirk worth knowing: the node's IS_CHANGED returns NaN, the ComfyUI "always rerun" idiom (comfyui-node-plumbing.md). It never lets the cache skip it, which is right for a node talking to a live server, but it does cost you the cache for everything upstream.
Installing it
Same as every node in this pack:
cd ComfyUI/custom_nodes
git clone https://github.com/VirusShell/comfyui-llm-bikeshed.git
cd comfyui-llm-bikeshed
pip install -r requirements.txt
then restart ComfyUI - or just search "comfyui-llm-bikeshed" in ComfyUI Manager. Dependencies are only pyyaml and requests, which ComfyUI core already ships, so requirements.txt is nearly empty and there are no model downloads: the models live in your external server (LM Studio / Textgen), not in this pack.
Where people get burned
The most common failure is an empty or erroring output because the backend isn't actually running - ComfyUI will happily sit on a dead http://localhost:1234 for the request timeout (120s by default) before failing. Point the provider at the right port, make sure a model is actually loaded in LM Studio or Textgen, and confirm the model dropdown refreshed. Also remember the node is synchronous: your whole queue blocks while the LLM thinks. That's expected with local generation, but it means a slow model makes a run feel frozen. And if you're on Textgen and hitting auth errors, the key belongs in config.yaml (or an env var) - never in the workflow JSON.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| provider | LLM_PROVIDER | — | |
| temperature | FLOAT | 0.700–2 | — |
| max_tokens | INT | 10240–128000 | Output token cap only (not prompt + completion). 0 omits this face limit so the host default applies; an Options or meta limit is kept. 1 or more is sent. No prompt cap; you own timeout and OOM. |
| seed | INT | 00–18446744073709550000 | — |
| system_prompt | STRING | — | |
| prompt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |
| meta | LLM_META | Carries provider + options for chaining to downstream generation nodes. |