Nodes/Overtli Studio Suite/🏠 OVERTLI LLM Text Enhancer
ComfyUI Node

🏠 OVERTLI LLM Text Enhancer

LM Studio, Ollama, or any OpenAI-compatible endpoint

By OvertliDSΒ·Created 5 months agoΒ·Updated 2 days agoΒ· 16
🏠 OVERTLI LLM Text Enhancer
  • image
  • response
β—„providerLM Studioβ–Ί
β—„promptβ–Ί
β—„text_mode_enabledfalseβ–Ί
β—„text_modeOffβ–Ί
β—„image_mode_enabledfalseβ–Ί
β—„image_modeOffβ–Ί
β—„video_mode_enabledfalseβ–Ί
β—„video_modeOffβ–Ί
β—„tts_mode_enabledfalseβ–Ί
β—„tts_modeOffβ–Ί
β—„modelauto [local]β–Ί
β—„custom_instructionsβ–Ί
β—„style_preset_1Offβ–Ί
β—„style_preset_2Offβ–Ί
β—„style_preset_3Offβ–Ί
β—„additional_stylesβ–Ί
β—„temperature1.0β–Ί
β—„max_tokens750β–Ί
β—„vision_enabledtrueβ–Ί
β—„batch_image_modeall_framesβ–Ί
β—„max_batch_frames0β–Ί
β—„timeout_seconds60β–Ί
β—„max_image_dimension1280β–Ί
β—„api_keyβ–Ί
β—„api_base_urlβ–Ί
β—„persist_api_keytrueβ–Ί
β—„unload_lm_studiotrueβ–Ί
β—„unload_ollamatrueβ–Ί
β—„cleanup_vramtrueβ–Ί

Everything in the Overtli Studio Suite that talks to Pollinations or the Copilot cloud has a catch for some users: your prompt leaves the machine, and a filter sits between you and the output. GZ_LLMTextEnhancer is the local answer, and the pack's README flags it as the recommended route when you want the LLM enhancement job without the cloud. It takes your rough idea, runs it through a language model you run, and hands back a generation-ready prompt as a plain string.

How it works

The provider dropdown offers three local-flavored targets: LM Studio, Ollama, and OpenAI-Compatible. None of them are magic - the node speaks an OpenAI-style chat API to whatever endpoint you point it at. LM Studio is the headline case because it's the closest to zero-config: fire up LM Studio, load any model, hit "Start Server", and the node talks to it on http://localhost:1234 with no API key. Ollama uses its own endpoint (http://localhost:11434 under the hood) and the author's own example workflow notes the /v1 base URL convention. "OpenAI-Compatible" is the escape hatch that makes the node work with any local server exposing an OpenAI-shaped API, or a remote one if you really want.

The model input is a single option: auto [local]. That's deliberate - the node asks the running server what models it has and picks one, rather than maintaining a hardcoded list that rots as you swap models in LM Studio. If your server is running and nothing comes back, that's the first thing to check: the model list is only as good as the server that serves it.

The inputs that matter

  • provider - LM Studio, Ollama, or OpenAI-Compatible.
  • prompt - your raw idea, multiline.
  • image - optional vision context. Vision-capable local models can describe or rewrite based on what they see, which makes this a decent local image-captioning path too.
  • The mode group: text_mode_enabled/text_mode plus image/video/TTS families, same preset library as the rest of the suite. One group on at a time.
  • style_preset_1..3 and additional_styles - style layering, as elsewhere.
  • api_base_url / api_key - needed only for the OpenAI-Compatible route or a non-default LM Studio setup.
  • timeout_seconds (default 60) and max_image_dimension (default 1280) - the latter caps how big images get before they're sent to a vision model.

There are also three toggle pairs worth noticing because they're doing real work: unload_lm_studio, unload_ollama, and cleanup_vram. Local LLMs and your diffusion model compete for the same VRAM, and the good local nodes handle the juggling - when these are on (default), the node asks the server to unload its model after inference or otherwise cleans up, so your sampler gets the card back. That's the difference between a node that plays nice in a full workflow and one that makes you babysit memory.

Output

One response STRING. Wire it into a CLIP Text Encode, or into the prompt of any text-generation step. There's a conservative output sanitizer in the pipeline that drops short "here is your enhanced prompt" confirmation leads when substantial body text follows - but it deliberately leaves dialogue, scripts, and transcripts alone so it doesn't mangle creative output. If a model still wraps answers in preamble, it's usually a formatting habit the sanitizer chose not to fight.

Installing and the real gotchas

Search "Overtli" in ComfyUI Manager, or clone the repo and pip install -r requirements.txt (requests/Pillow/numpy only - no model download, since the models belong to your local server). Then restart.

Gotchas, in order of how often they bite. The server must actually be running and exposing its API - the README troubleshooting calls this out directly; LM Studio needs the Local Server started, Ollama needs to be up. auto [local] fails when the endpoint is wrong. A local 8B model writes worse English than a frontier API - that's expected and not the point; you're here for offline, uncensored, free-per-call. And if a vision-capable model is loaded but vision_enabled is off, or vice versa, you'll get confusing behavior - match the toggle to what the loaded model can do.

CategoryOVERTLI STUDIO/LLM

Inputs (30)

NameTypeDefaultDescription
providerCOMBOLM Studio3 options: LM Studio, Ollama, OpenAI-Compatible
promptSTRINGβ€”
text_mode_enabledBOOLEANfalseβ€”
text_modeCOMBOOff15 options: Off, πŸ“ Enhance, πŸ“ Refine, πŸ“ Creative Rewrite, πŸ“ Detailed Visual, πŸ“ Artistic Style, +9
image_mode_enabledBOOLEANfalseβ€”
image_modeCOMBOOff25 options: Off, πŸ–ΌοΈ Tags, πŸ–ΌοΈ Simple Description, πŸ–ΌοΈ Detailed Scene Description, πŸ–ΌοΈ Ultra Detailed Description, πŸ–ΌοΈ Portrait Photography, +19
video_mode_enabledBOOLEANfalseβ€”
video_modeCOMBOOff12 options: Off, πŸŽ₯ Cinematic Video Prompt, πŸŽ₯ Loop Video Prompt, πŸŽ₯ Action Sequence, πŸŽ₯ Ambient/B-Roll, πŸŽ₯ Product Showcase, +6
tts_mode_enabledBOOLEANfalseβ€”
tts_modeCOMBOOff9 options: Off, 🎀 Voiceover Script, 🎀 Character Voice, 🎀 Audiobook Narration, 🎀 Podcast Intro, 🎀 Commercial Spot, +3
modelCOMBOauto [local]1 options: auto [local]
imageoptIMAGEβ€”
custom_instructionsoptSTRINGβ€”
style_preset_1optCOMBOOff492 options: Off, 3D / CGI / Stylized 3D :: 3D Cartoon [3d] [stylized], 3D / CGI / Stylized 3D :: 3D Render [3d] [cgi], 3D / CGI / Stylized 3D :: 3D Sculpt Turntable Style [3d] [sculpt], 3D / CGI / Stylized 3D :: CAD Product Render [3d] [industrial], 3D / CGI / Stylized 3D :: Clay Render / ZBrush Style [3d] [sculpt], +486
style_preset_2optCOMBOOff492 options: Off, 3D / CGI / Stylized 3D :: 3D Cartoon [3d] [stylized], 3D / CGI / Stylized 3D :: 3D Render [3d] [cgi], 3D / CGI / Stylized 3D :: 3D Sculpt Turntable Style [3d] [sculpt], 3D / CGI / Stylized 3D :: CAD Product Render [3d] [industrial], 3D / CGI / Stylized 3D :: Clay Render / ZBrush Style [3d] [sculpt], +486
style_preset_3optCOMBOOff492 options: Off, 3D / CGI / Stylized 3D :: 3D Cartoon [3d] [stylized], 3D / CGI / Stylized 3D :: 3D Render [3d] [cgi], 3D / CGI / Stylized 3D :: 3D Sculpt Turntable Style [3d] [sculpt], 3D / CGI / Stylized 3D :: CAD Product Render [3d] [industrial], 3D / CGI / Stylized 3D :: Clay Render / ZBrush Style [3d] [sculpt], +486
additional_stylesoptSTRINGβ€”
temperatureoptFLOAT1.00–2β€”
max_tokensoptINT75064–32768β€”
vision_enabledoptBOOLEANtrueβ€”
batch_image_modeoptCOMBOall_frames3 options: all_frames, first_middle_last, first_frame
max_batch_framesoptINT00–512β€”
timeout_secondsoptINT605–1200β€”
max_image_dimensionoptINT1280256–4096β€”
api_keyoptSTRINGβ€”
api_base_urloptSTRINGβ€”
persist_api_keyoptBOOLEANtrueβ€”
unload_lm_studiooptBOOLEANtrueβ€”
unload_ollamaoptBOOLEANtrueβ€”
cleanup_vramoptBOOLEANtrueβ€”

Outputs (1)

NameTypeDescription
responseSTRINGβ€”