Nodes/ComfyUI-Owlv_Nodes/KontextTextEncode 🦉| Owlv
ComfyUI Node

KontextTextEncode 🦉| Owlv

Have an LLM write the prompt, and get CLIP conditioning out the other end

By OwlvChirotha·Created 11 months ago·Updated 10 months ago· 1
KontextTextEncode 🦉| Owlv
  • clip
  • llm
  • conditioning
  • text
presetScene Telesport
seed0
image1_text
image2_text
edit_instruction

KontextTextEncode 🦉| Owlv is the pack's flagship: it hands your image descriptions and an edit instruction to an LLM, gets back a finished prompt, and encodes that prompt into CLIP conditioning - all in one node. If you've been meaning to add "let an LLM write the prompt" to your workflow but didn't want to wire a whole agent graph, this is the shortcut.

First, the naming trap: despite the name, this has nothing to do with FLUX.1 Kontext, Black Forest Labs' image-editing model. "Kontext" here just means the preset/context recipes the node runs on. Different thing, same word. Don't go searching for its checkpoints.

How it works

Pick a preset from the dropdown and the node loads that preset's system prompt - think "You are a creative prompt engineer…" - then bundles up your inputs as the user message. It calls the connected LLM's invoke(messages, seed=…) method, gets text back, and runs that text through the CLIP encoder you supplied. What comes out is standard conditioning, so it plugs straight into a KSampler, plus the raw text for you to inspect or route elsewhere.

The presets are creative transformation instructions, not vanilla "describe this image" prompts. Scene Telesport teleports your subject to a random location, Shift View moves the camera, Relight restages the lighting, Change Clothes replaces the outfit using a second reference. Each outputs "only the transformation instruction, without any explanations." So this is aimed at generating variety - re-shoot, re-light, re-dress - which also happens to be exactly the kind of sentence an instruction-editing model like Qwen-Image-Edit or Flux Kontext wants. Wire the text output into an edit model and you've got an automated "variation generator."

One rule is baked into the logic: edit_instruction always wins. If you type one in, the LLM is told it "must strictly follow the edit instruction above," and the preset only fills the gaps. No instruction, no problem - the preset drives entirely.

Inputs that matter

  • clip (CLIP, required) - the encoder for whatever checkpoint you're conditioning. Note it's required even if you only care about the text output; the node always encodes.
  • llm (LLM, required) - the interesting one. This is ComfyUI's LLM port type, the same family of loaders behind the new Qwen3/Mistral text encoders. Whatever node on your graph outputs LLM plugs in here.
  • preset - dropdown of ~20 built-ins plus your custom presets from the pack's Add/Remove nodes.
  • seed - base seed for LLM sampling. If you want reproducible generations, lock it.
  • image1_text, image2_text - multiline descriptions of your subject/reference. Wire them from a captioner node if you're automating, or just type.
  • edit_instruction - takes priority over the preset when present.

Outputs

  • conditioning - CLIP conditioning with the final text, pooled output, and seed tucked into the metadata. Goes to a sampler's positive (or negative) input.
  • text - the final prompt string. Audit it, display it, or feed it to an instruction-editing model.

Where it fits in 2026

LLM-assisted prompting stopped being a browser-tab hobby and became a node category; this pack is one of the small implementations of that idea. The community's accepted framing is that if your encoder is an LLM, having an LLM write the instruction is translation between two speakers of the same language - and if your workflow is instruction editing (the default way to get character variation these days), this node is a clean way to generate the instructions on the fly.

Gotchas

  • Empty LLM output is a hard error. The node raises "[OwlV] LLM returned empty text" rather than returning a blank conditioning. If you hit it, check the LLM service and that the preset isn't misbehaving.
  • The clip port is CLIP. If your checkpoint uses an LLM text encoder (Z-Image, Klein, Flux 2), this node's conditioning output is the wrong kind - it targets classic CLIP-encoded models (SDXL, Flux 1, etc.). Feed the text elsewhere for LLM-encoder checkpoints.
  • Preset dropdown freshness. The dropdown refreshes via the node's inline Add/Remove Custom Preset buttons. If you edited user_kontext_presets.json by hand, restart or trigger a refresh.
  • Tiny pack, one-person author, no community support base - verify behavior on your own workflow before depending on it.

Install

ComfyUI Manager, search "ComfyUI-Owlv_Nodes" or "OwlV", install, restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/OwlvChirotha/ComfyUI-Owlv_Nodes.git

No model downloads and no extra pip dependencies. The only real setup is having an LLM node that outputs the LLM type somewhere in your graph to connect to it.

Categoryconditioning/owlv

Inputs (7)

NameTypeDefaultDescription
clipCLIP
llmLLM
presetCOMBOScene Telesport20 options: Scene Telesport, Shift View, Relight, Product Photography, Zoom In, Colorize, +14
seedINT00–18446744073709550000Base seed for LLM sampling.
image1_textoptSTRINGDescribe the first image / subject.
image2_textoptSTRINGDescribe the second image / reference.
edit_instructionoptSTRINGDetailed edit instructions.

Outputs (2)

NameTypeDescription
conditioningCONDITIONING
textSTRING