Comflowy Omost LLM
LLM-in-the-loop area conditioning
- canvas_conds
- generated_text
Omost is lllyasviel's clever idea: instead of one global prompt, you describe a scene as a set of regions - "a red-haired woman on the left, a mountain behind her, warm light everywhere" - and the model composes them into a coherent image using ComfyUI's area-conditioning system. It's the most reliable way to get multi-element compositions right, and it's genuinely fiddly to set up locally because the official Omost model wants a serious GPU. The Comflowy Omost LLM node is the shortcut: it produces the same structured "canvas" output, but the region-drafting is done by a hosted LLM through Comflowy's free API instead of Omost's local model.
Comflowy is upfront about the trick. The README says they didn't run Omost's official model at all - they implemented it via prompt engineering. A detailed system prompt instructs the hosted LLM to emit a strict JSON canvas: a global description plus local_descriptions with locations (left, center, top-right...), areas, distances, styles, and HTML color names. It's Omost's output format, produced without Omost's weights. Faster to run, and it costs you nothing extra beyond the free LLM tier.
How it works and what it outputs
You type a scene description, pick a model from the same hosted LLM list the Comflowy LLM node uses (Qwen2-7B, GLM-4-9B, Yi-1.5, InternLM2.5, etc.), and the node POSTs it to Comflowy's /api/open/v0/prompt endpoint with the Omost system prompt. The JSON that comes back is parsed into an OMOST_CANVAS_CONDITIONING object - the same type the real Omost pipeline uses.
That's the key: this node doesn't produce images. It produces the canvas that downstream nodes consume. Wire its output into Comflowy Omost To Conditioning to get actual CONDITIONING you can feed a sampler, or into Comflowy Omost Preview to see a rough layout render first.
The inputs
- prompt (required, multiline) - your scene. This is where the quality lives; the more spatial detail you give it, the better the layout.
- llm_model (required) - same seven hosted models as the plain LLM node. The 7B options handle the JSON schema more reliably than the 1.5B.
- seed (required) - reproducibility; oversized seeds get truncated to 32 bits.
Outputs: canvas_conds (OMOST_CANVAS_CONDITIONING) and generated_text (STRING). The second output is a gift - it shows you the raw JSON the LLM produced, which is how you debug why a layout came out wrong.
Installing and gotchas
Install Comflowy's Custom Nodes via Manager (search "Comflowy") or clone https://github.com/6174/comflowy-nodes into custom_nodes, restart, set your key with Comflowy Set API Key. Just requests as a dependency, and the Omost pieces are bundled in the pack - no extra model downloads, which is the whole point.
The failure mode to know: if the LLM returns malformed JSON, the node hands you a canvas_conds that's an empty list plus an error string in generated_text. Check that text output before chasing your sampler config - nine times out of ten the LLM just didn't follow the schema that run, and re-running fixes it. Network errors to the Comflowy API are the other usual suspect, per the README.
This is the node that makes Omost-style composition approachable on a laptop. The trade for not running the real Omost model is that the layout quality is only as good as the hosted LLM's JSON discipline - but for most prompts, it's remarkably close, and it's free.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| llm_model | COMBO | 7 options: Qwen/Qwen2-7B-Instruct, Qwen/Qwen2-1.5B-Instruct, THUDM/glm-4-9b-chat, THUDM/chatglm3-6b, 01-ai/Yi-1.5-9B-Chat-16K, 01-ai/Yi-1.5-6B-Chat, +1 | |
| seed | INT | 00–18446744073709550000 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| canvas_conds | OMOST_CANVAS_CONDITIONING | — |
| generated_text | STRING | — |