Nodes/FoW - Light/⌨️​ FoW - Prompt Refiner Light
ComfyUI Node

⌨️​ FoW - Prompt Refiner Light

One editor for all nine buckets

By SirWillance·Created 2 years ago·Updated about a year ago· 5
⌨️​ FoW - Prompt Refiner Light
  • clip
  • Positive Conditioning
  • Negative Conditioning
  • Combined Positive Prompt
  • Combined Negative Prompt
positive_subject
positive_environment
positive_style
positive_shot
positive_detail
negative_static
negative_content
negative_definition
negative_dynamic

The flagship node, and the reason this pack exists

FoW - Prompt Refiner Light is what FoW_Suite_LIGHT is actually about. It's a single node with one big button - "Open Prompt Interface" - that opens a draggable, resizable modal where you type your whole prompt into nine labeled boxes: five positive (subject, environment, style, shot, detail) and four negative (static, content, definition, dynamic). It encodes each box, concatenates them into a Positive and a Negative conditioning, and hands you both. No nine-node graph needed; the modal is the graph.

The pack's author, SirWillance, built the whole suite as a two-month first coding project, and it shows in the best way: this node was designed by someone who got tired of ComfyUI's prompt UX, not by someone inventing new ML. The Light tier is deliberately minimal - no tokenization, no per-token weights (the pitch is that Standard/Pro add those). What you get instead is a clean editor and a genuinely unusual collaboration feature: you can save your prompts to a .txt file and hand it to someone with a beefier machine.

How it works

The backend is a straight-forward encode-and-concat. Each non-empty box gets its text cleaned (a leftover " FoW " delimiter convention is converted to commas), encoded through your CLIP, and stacked with ComfyUI's ConditioningConcat:

cleaned_text = text.replace(" FoW ", ", ").replace(" FoWs ", ", ").replace(" FoWe ", ", ").strip()
cond = clip.encode_from_tokens_scheduled(clip.tokenize(cleaned_text))

Empty boxes are skipped; if everything's empty it encodes an empty string so the graph still runs. The modal's buttons are the UI: 💾 saves to PromptRefinerLightOutput.txt (newline-separated positive/negative), ✔ pushes the prompts to ComfyUI, 🧼 clears, and "Show Tips" toggles the guidance alerts that are on by default.

The inputs and outputs that matter

You mostly won't touch the inputs directly - the modal writes into them. They are positive_subject, positive_environment, positive_style, positive_shot, positive_detail, and negative_static, negative_content, negative_definition, negative_dynamic (all multiline strings), plus the required clip (CLIP) input.

The outputs are the useful part:

  • Positive Conditioning and Negative Conditioning (CONDITIONING) - straight into a KSampler.
  • Combined Positive Prompt and Combined Negative Prompt (STRING) - the joined text, handy for logging or a text node.

Installing it

One install, whole suite:

cd ComfyUI/custom_nodes
git clone https://github.com/SirWillance/FoW_Suite_LIGHT

Restart ComfyUI, and it appears under "🧿 FoW - Light". ComfyUI Manager also has it - search "Force of Will Suite Light". No dependencies, no model downloads; it runs on your checkpoint's CLIP.

Where people get burned

The save-to-txt feature is the fiddly one. It writes newline-separated positive/negative to PromptRefinerLightOutput.txt, and the README's own troubleshooting says the most common failure is a format issue (not newline-separated) or a path problem after a Manager reinstall - so if the save button does nothing, check the file landed and restart ComfyUI. The bigger conceptual trap: nine labeled boxes can convince you that organizing the prompt is the result. It isn't. On SDXL-lineage models this structure genuinely helps; on LLM-encoded models the boxes still work as an instruction, but the KB's prompt-engineering essay is clear that structure beats keywords there too. And if you're running a distilled checkpoint at CFG 1, the negative side of this node is mostly decoration - same reason as every other negative in this pack. Still, as a "type here, get conditioning" node, it's the cleanest one in the suite, and for a beginner that's worth a lot.

Category🧿 FoW - Light/🔧 Prompt Refinement/📊 Modulation

Inputs (10)

NameTypeDefaultDescription
clipCLIP
positive_subjectoptSTRING
positive_environmentoptSTRING
positive_styleoptSTRING
positive_shotoptSTRING
positive_detailoptSTRING
negative_staticoptSTRING
negative_contentoptSTRING
negative_definitionoptSTRING
negative_dynamicoptSTRING

Outputs (4)

NameTypeDescription
Positive ConditioningCONDITIONING
Negative ConditioningCONDITIONING
Combined Positive PromptSTRING
Combined Negative PromptSTRING