Writer Choice
One dropdown that decides which model writes your song
- text_encoder
- local_model
- use_local
- model
A ComfyUI text model and a local GGUF are not the same kind of animal. The first loads through a CLIPLoader and is run by ComfyUI's native Generate Text; the second needs llama.cpp or a running app's server. Normally that means two branches in your graph and a hope that whichever one you didn't pick doesn't get loaded anyway. Writer Choice collapses that into a single dropdown. Pick a bare file name and the native branch runs; pick a GGUF or an Ollama model and the Local LLM branch runs. A switch after the two branches takes only the chosen one's answer, so the other model never touches your VRAM.
If you're only ever going to use the default Gemma 4 writer, you don't need to think about this node - it's sitting there making that choice for you. It starts mattering the moment you have GGUFs you'd rather write with.
What the entries mean
The list is one place, but its labels tell you where each model comes from:
- A bare file name like
gemma4_e4b_it_fp8_scaled.safetensors- a text model inmodels/text_encoders, written by ComfyUI's own Generate Text. ComfyUI manages its memory and offers the default's download. models/LLM · ...gguf,models/text_encoders · ...,HF cache · ..., and the other... fileslabels - GGUF files, run by llama.cpp for the draft. The prefix says which folder it came from.LM Studio · ...,Ollama · ...,llama.cpp · ...and friends - models served by an app whose local API server is running.
Vision projectors, embedding models and the later pieces of split files are filtered out. So are CLIP and T5 encoders: the list only shows the language-model families that can actually write (Gemma, Qwen, Llama, Mistral). Since 0.6.1 it also lists GGUF language models kept in text_encoders - the folders where ComfyUI-GGUF's CLIPLoaderGGUF looks - by reading each file's GGUF header, so image and video encoders stay out of a list that's meant for writers.
Press R in ComfyUI after you add a file or start an app. Extra folders and servers of your own come from [llm.folders] in Plenio's config.toml.
Inputs and outputs
One input: model. That's the node.
Four outputs, and their job is routing, not writing:
- text_encoder - the file for a CLIPLoader. Empty when you chose a Local LLM model.
- local_model - the Local LLM node's model input. Empty when you chose a ComfyUI text model.
- use_local - a boolean for the switch that picks the branch.
- model - the chosen entry as listed, so you can link it to another writer (Write Song, Arrange) and keep every writing step on the same model. Handy when you want the arrangement plan and the lyrics written by the same brain.
The node also reports what it decided on the node itself - Writer: X - ComfyUI's Generate Text or - Local LLM - so when a run's lyrics come out unlike what you expected, you can see what actually wrote them without opening the console.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/jplenio/Plenio-Music-Production-System
Or Manager → Custom Nodes Manager → Plenio Music Production System, or comfy node install comfyui-plenio-music. Restart ComfyUI. No Python packages come with it - the pack's requirements.txt is deliberately empty. This node does need ComfyUI 0.37.0 or newer, since the native branch runs on ComfyUI's own text-generation nodes. Run 0 · System Check first; it tells you whether a writer exists at all and which llama.cpp runtime was found.
When it misbehaves
An empty list - just (choose a model) - means there was nothing to list: no GGUF in models/LLM, no writer in models/text_encoders, and no local LLM app serving on its default port. The node's own message spells that out and tells you to press R afterwards. It's not a broken node, it's an empty house.
If a text model file went missing you get a real error with a hint (The writer model X is not in models/text_encoders) rather than the usual value not in list, which is a genuinely nicer experience than most ComfyUI loaders give you. Download it through ComfyUI's missing-model dialog, which opens with the template, or pick something else.
One gotcha worth knowing: a model of another machine - a server on your LAN, say - is reported when the run starts, with what to do about it, rather than silently failing to exist. And if you choose a GGUF, you don't need the Gemma file at all. That's the point of the routing: pick one writer, pay for one writer.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| model | COMBO | A bare file name: a text model in models/text_encoders (ComfyUI's Generate Text). 'models/LLM · …', '… files · …', 'HF cache · …': a GGUF file. 'LM Studio · …', 'Ollama · …': a running app's model. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| text_encoder | * | The text model's file for CLIPLoader (empty for a Local LLM model). |
| local_model | * | The Local LLM model (empty for a ComfyUI text model). |
| use_local | BOOLEAN | True for a Local LLM model: the switch after the two branches takes its answer. |
| model | * | The chosen entry as listed: link it to another writer (Write Song, Arrange) so that every writing step uses the same model. |