Nodes/koo-apes-prompter/KoO Apes Prompter 1.1
ComfyUI Node

KoO Apes Prompter 1.1

Point This Node at a Local LLM and It Rewrites Your Rough Idea Properly

By kooailab·Created 15 days ago·Updated 13 days ago· 0
KoO Apes Prompter 1.1
  • image
  • image_2
  • prompt
◄provider_presetOllama Native►
◄engine_model►
◄base_urlhttp://127.0.0.1:11434►
◄timeout600.00►
◄max_output_tokens8192►
◄temperature-1.00►
◄top_p-1.00►
◄top_k-1►
◄sampling_nonce-1►
◄send_samplingtrue►
◄model_supports_imagestrue►
◄token_fieldmax_tokens►
◄idea►
◄modeEnhance►
◄target_modelGeneric►
◄creativityBalanced►
◄preserve_subjecttrue►
◄preserve_compositionfalse►
◄preserve_camerafalse►
◄preserve_materialsfalse►
◄preserve_lightingfalse►
◄preserve_colorsfalse►
◄prompt_lengthMedium►
◄custom_instructions►
◄system_prompt_override►
◄generated_prompt►
◄prompt_modelQwen 3.5 9B►
◄director_profile►
◄director_model_path►
◄director_mmproj_path►
◄director_llama_server►
◄director_context_size8192►
◄director_image_min_tokens1024►
◄director_max_tokens768►
◄director_gpu_layersauto►
◄director_keep_model_loadedfalse►
◄director_presetGeneral Director►
◄image_1_roleAuto►
◄image_2_roleAuto►
◄lock_generated_promptfalse►
◄reference_subject_sourceAuto►
◄reference_face_sourceAuto►
◄reference_outfit_sourceAuto►
◄reference_pose_sourceAuto►
◄reference_composition_sourceAuto►
◄reference_camera_sourceAuto►
◄reference_scene_sourceAuto►
◄reference_lighting_sourceAuto►
◄reference_colors_sourceAuto►
◄reference_mood_sourceAuto►
◄reference_materials_sourceAuto►
◄runtimeLLAMA.CPP►
◄ollama_modelqwen3.8►
◄ollama_endpointhttp://127.0.0.1:11434/v1►

KoO Apes Prompter 1.1 is a prompt director: you type a rough idea, it asks a language model to expand that idea into a finished prompt, and it hands the result back as one STRING you wire into a text encoder. No magic, no account, no key - unless you deliberately point it at a paid API.

It's worth caring about because prompting changed under everyone's feet. In 2026 your prompt is wrapped in a chat template and fed to a general-purpose LLM - Z-Image and Flux 2 Klein run a Qwen3 encoder, not CLIP. Having an LLM write the instruction the LLM will read went from hack to default.

What the node is actually doing

No clever inference trick here. The node assembles a big system prompt out of stacked sections and ships it to an OpenAI-style chat endpoint or an Ollama one. In core.py the stack is: a "you are a visual director" instruction, a conflict-resolution contract, the mode adapter, the target model adapter, creativity and length settings, your preserve locks, a director preset, custom instructions, and an output contract demanding one prompt and no commentary.

That layering is why the target_model dropdown exists at all. Pick FLUX.2 Klein and the adapter wants concise natural language with an explicit change-versus-protect split; pick LTX 2.5 under Video and it's told to describe a shot with chronological motion and a defined end framing.

Connect an image and a vision model first writes an evidence digest of what's visible - subject, materials, lighting, composition - then the prompt is compiled against that instead of invented. That's Image Edit, Style Transfer and Dataset Caption earning their keep.

The fields a beginner actually sets

Forty-odd widgets show up when you drop the node. Ignore most of them.

  • idea - your rough thought, in plain words.
  • mode - the job. Enhance is the safe default; Video, Image Edit and Dataset Caption change the task, not just the tone.
  • target_model - which encoder you're feeding. Get this wrong and you get tag soup for an instruction-following encoder, or flowery sentences for a tag-based model.
  • provider_preset, base_url, engine_model - where the LLM lives. Default is Ollama Native at 127.0.0.1:11434; the others are llama.cpp, LM Studio, vLLM, LocalAI, OpenRouter and a generic OpenAI-compatible endpoint.

temperature, top_p and top_k default to -1, which means "don't send this, use the server's default" - not a temperature of minus one. sampling_nonce is just the seed under another name. token_field exists because newer OpenAI-compatible servers reject max_tokens. The preserve_* toggles are literal instructions not to touch those things; subject is on by default, which is why your character doesn't get quietly redesigned.

Output is one socket: prompt (STRING). Drop a CLIPTextEncode after it - or whatever encoder node your model family uses - and you're done.

Installing it

Registry publication is still pending on this pack, so don't count on ComfyUI Manager finding it. Clone it, or unzip the release so __init__.py sits directly inside the folder:

cd ComfyUI/custom_nodes
git clone https://github.com/kevintronchin-blip/koo-apes-prompter

Install dependencies with ComfyUI's own Python, then restart. On the Windows portable build:

python_embeded\python.exe -m pip install -r ComfyUI\custom_nodes\koo-apes-prompter\requirements.txt

requirements.txt is two lines - aiohttp and Pillow, both already present in a normal ComfyUI. There's deliberately no llama-cpp-python, no Ollama SDK, no OpenAI SDK: it talks HTTP, manages a llama-server process if you ask it to, and never pip-installs at runtime.

You still need a model of your own. It scans ComfyUI/models/LLM for GGUFs (plus matching mmproj files for vision) or browses to any file on disk. No llama.cpp yet? The managed installer pulls a pinned official build (b10516, SHA256-verified) in CPU, CUDA 12.4 or Vulkan flavours - Windows x64 only. Mac and Linux point it at their own llama-server or use Ollama.

Keep exactly one copy installed. Two copies register the same workflow ID and both break.

Where people get burned

Nodes 2.0. The custom canvas UI needs the Legacy/LiteGraph renderer; on frontend 1.51.10 the new renderer skips the node-level drawing and mouse hooks it depends on. Blank rectangle with no buttons? Not a broken install - switch renderers.

The cached prompt. If generated_prompt already has text and no images are connected, the node returns that text verbatim without calling the LLM. Good for repeatable batches, maddening when you've rewritten the idea and nothing changes. Clear the box or hit Generate.

Vision mismatches. An image into a text-only GGUF, or a model paired with the wrong mmproj, fails at generation time. Use a vision model with a matching mmproj, or turn model_supports_images off.

Runtime plumbing. A missing DLL usually means someone moved llama-server.exe out of its distribution folder - keep the whole thing together, or use "repair" on a managed variant. A startup timeout is almost always RAM/VRAM, so read the server's own stderr before blaming the node.

Last thing: this pack is obscure - zero mentions of "Apes Prompter" in our Reddit corpus - so the README and source beat any tutorial.

CategoryKoO

Inputs (56)

NameTypeDefaultDescription
provider_presetCOMBOOllama Native7 options: Ollama Native, llama.cpp, LM Studio, vLLM, LocalAI, OpenRouter, +1
engine_modelSTRING—
base_urlSTRINGhttp://127.0.0.1:11434—
timeoutFLOAT600.000.25–3600—
max_output_tokensINT81921–1048576—
temperatureFLOAT-1.00-1–2—
top_pFLOAT-1.00-1–1—
top_kINT-1-1–1000—
sampling_nonceINT-1-1–2147483647—
send_samplingBOOLEANtrue—
model_supports_imagesBOOLEANtrue—
token_fieldCOMBOmax_tokens2 options: max_tokens, max_completion_tokens
ideaSTRING—
modeCOMBOEnhance10 options: Enhance, Archviz, Photography, Character, Product, Image Edit, +4
target_modelCOMBOGeneric7 options: Generic, Krea 2, FLUX.2 Klein, Z-Image, Qwen Image, MiniMax, +1
creativityCOMBOBalanced4 options: Strict, Balanced, Creative, Dice
preserve_subjectBOOLEANtrue—
preserve_compositionBOOLEANfalse—
preserve_cameraBOOLEANfalse—
preserve_materialsBOOLEANfalse—
preserve_lightingBOOLEANfalse—
preserve_colorsBOOLEANfalse—
prompt_lengthCOMBOMedium5 options: Short, Medium, Detailed, Maximum Detail, Maximum
custom_instructionsSTRING—
system_prompt_overrideSTRING—
generated_promptSTRING—
prompt_modelCOMBOQwen 3.5 9B5 options: Qwen 3.5 9B, Qwen 3.5 9B — Uncensored, Qwen 3.5 9B — HauhauCS Aggressive, Gemma 3 12B, Custom
director_profileSTRING—
director_model_pathSTRING—
director_mmproj_pathSTRING—
director_llama_serverSTRING—
director_context_sizeINT8192512–1048576—
director_image_min_tokensINT10241–1048576—
director_max_tokensINT7681–1048576—
director_gpu_layersSTRINGauto—
director_keep_model_loadedBOOLEANfalse—
director_presetSTRINGGeneral Director—
image_1_roleCOMBOAuto7 options: Auto, Subject, Scene, Style, Pose, Composition, +1
image_2_roleCOMBOAuto7 options: Auto, Subject, Scene, Style, Pose, Composition, +1
lock_generated_promptBOOLEANfalse—
reference_subject_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_face_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_outfit_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_pose_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_composition_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_camera_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_scene_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_lighting_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_colors_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_mood_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
reference_materials_sourceCOMBOAuto4 options: Auto, Image 1, Image 2, Blend
runtimeCOMBOLLAMA.CPP2 options: LLAMA.CPP, OLLAMA
ollama_modelSTRINGqwen3.8—
ollama_endpointSTRINGhttp://127.0.0.1:11434/v1—
imageoptIMAGE—
image_2optIMAGE—

Outputs (1)

NameTypeDescription
promptSTRING—