Parse Lines
Human-readable prompt files, machine-ready JSON
- JSON
ComfyUI's default prompt box is fine until you have a prompt that needs structure - separate sections, weighted lines, a chunk that only belongs in the negative, or a prompt stored in an external file so you can edit it without touching the graph. Parse Lines is the node that takes plain, readable text and converts it into the structured JSON that this pack's prompt pipeline runs on. It's the front end of a small idea: your prompt text stays human-first, and the machine gets what it needs.
The output is a JSON value (an EZ_JSON object) that plugs into the pack's EZ Prompt node, which turns it into conditioning. So the chain is: Parse Lines → EZ Prompt → KSampler. Parse Lines alone doesn't generate anything - it's the parsing half.
What the text format can do
Each line is a prompt line, optionally weighted by appending * 1.2 (or any number). Beyond that, a few keywords unlock structure:
BREAK(or---) ends the current chunk. For CLIP-based models with a 75-token limit, this is how you get more than 75 tokens in, or keep "blue eyes and dress belong to the girl, green eyes and jacket belong to the boy" from bleeding together.BUNDLE: namegroups lines into a named bundle, and<bundle:name>/<bundle-inline:name>reference it - reuse the same tag set in multiple places without repeating it.FILE: pathincludes another prompt file (resolved againstComfyUI/models/prompts), so your prompt library can live in text files, not node widgets.REGION: {x, y, width, height, ...}andMASK-REGION: name {strength, isolated}tag lines for regional or masked prompting - the pack's EZ Mask Regions nodes consume those.<lora:name>declares a LoRA to apply, with* weighton the line.//and#start comments (escape with\if you need a literal one), and the parser cleans up stray whitespace.
That's a lot of surface area, but you can ignore 90% of it - most people just use weighted lines, BREAK, and maybe FILE:. The parser errors loudly on syntax it doesn't recognize (like a BREAK buried in the middle of a line), which beats silent misbehavior.
Inputs and outputs
text(multiline STRING) - paste the prompt text or wire it in.JSONoutput (EZ_JSON) - feed to EZ Prompt.
Install
Part of the Prompt Helpers pack by Pauan. ComfyUI Manager → search "Prompt Helpers", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Pauan/comfyui-prompt-helpers
Restart ComfyUI. Dependencies are just PyYAML and desktop-notifier; no models. The pack requires ComfyUI 0.8.0+ (Nodes 2.0 API), so update ComfyUI if the nodes don't appear.
Where people get burned
FILE:paths are relative toComfyUI/models/prompts, not the workflow folder. Drop your prompt files there, and note thatFILE:forces the node to re-run every time - a deliberate hack (there's a GitHub discussion about it) so edited files actually take effect.- A missing file is a hard error:
File not found: ..., right in the middle of a queue. - The 75-token reasoning is a CLIP-era rule. If you're on a modern LLM-encoded model (Flux, Anima, Z-Image), there's no 75-token chunk boundary, so
BREAKis meaningless there - it won't hurt, it just won't do anything. This node is aimed squarely at SD 1.5/SDXL-lineage prompting.
The honest pitch: if you're still hand-writing every prompt in a ComfyUI text box, this node feels like overhead. If you're managing a library of prompts - weighted, sectioned, shared across workflows - Parse Lines is what makes that work without a mountain of node widgets.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| text | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| JSON | EZ_JSON | — |