Prompt Phase Splitter (Arctenox's Essentials)
Prompt Phase Splitter promises temporal prompts. Read the fine print.
- base_positive
- base_negative
- clip
- positive
- negative
- phase_info
- resolved_wildcards
Here's the pitch, straight from the README: split generation into three temporal phases - composition, detail, texture - each with its own prompt, weight, and step count. That sounds like per-step prompt scheduling, which is a genuinely useful thing to have.
Here's what the source actually does: it's a prompt blender, not a scheduler. The percentage fields (composition_end_percent, detail_start_percent, and friends) are descriptive - they show up in the phase_info string, but nothing in the node consults them against sampling steps. What really happens is the phase prompts get merged into a single conditioning before it ever reaches your KSampler. If you bought this hoping for true temporal conditioning, you'll be disappointed. If you use it as "organize one prompt into three weighted chunks," it's fine.
How it works
With a CLIP model attached, the node resolves wildcards in every phase prompt using a seeded RNG (wildcard_seed −1 = randomize every run), then combines the active phase prompts with your base conditioning. The blend_mode chooses how:
concat(default) - joins all phase prompts into one string, prefixedmasterpiece, best quality, and encodes it once. Honestly? This is "build me a longer prompt" in a trench coat.append- adds each phase as its own conditioning entry, the way you'd append conditionings in a vanilla graph.add/subtract- does tensor arithmetic on the conditioning embeddings, scaling each phase by its weight. This is where the node actually earns the "splitter" name, and where the weights do real work.
The negative side passes through untouched - you get base_negative back exactly as you fed it.
The inputs that matter
base_positive and base_negative come from your CLIP Text Encode nodes, and you also feed a clip in. That clip input is the whole mechanism: if it's unconnected, the node shrugs and returns your base conditioning unchanged with a "No CLIP provided" note.
For each of composition, detail and texture there's an enable toggle, a prompt, a weight (0–3) and percent boundaries. The three enable toggles and weights are what you'll actually touch; the percent fields are mostly for your own documentation. There's also an off-by-default enable_character phase for subject emphasis, and a standalone wildcard_prompt that gets appended to composition.
The outputs
positive- the combined CONDITIONING, wired into your KSampler.negative- your base negative, passed through.phase_info- a human-readable breakdown of which phases are active and at what weights. Worth glancing at once so you know what you're actually sending to the sampler.resolved_wildcards- shows what each wildcard resolved to, handy when a generation surprises you.
Install
ComfyUI Manager, search Arctenox's Essentials, install, restart. Or:
cd ComfyUI/custom_nodes/
git clone https://github.com/Arctenox/Arctenoxs-Essentials_ComfyUI
Restart, and you're done - no model downloads, just torch, numpy and optional psutil.
Gotchas
- Set expectations: default
concatmode is basically prompt concatenation. Useaddorsubtractif you want the weighted-blend behavior the phase framing promises. - If the output never changes, check that
clipis connected. It's the difference between "works" and "silently passes through." - The whole pack is marked DEPRECATED - Arctenox is folding it into a new combined pack. Fine for a workflow you're running today, not something to build long-term infrastructure on.
Inputs (24)
| Name | Type | Default | Description |
|---|---|---|---|
| base_positive | CONDITIONING | — | |
| base_negative | CONDITIONING | — | |
| enable_composition | COMBO | enabled | Enable composition phase |
| composition_prompt | STRING | masterpiece, best quality, composition, framing, rule of thirds | Applied in early sampling (composition structure). Supports wildcards. |
| composition_weight | FLOAT | 1.00–3 | Strength of composition phase |
| composition_end_percent | FLOAT | 0.300–1 | When to end composition phase (0.3 = 30% of steps) |
| enable_detail | COMBO | enabled | Enable detail phase |
| detail_prompt | STRING | intricate details, fine details, sharp focus, high detail | Applied in middle sampling (detail refinement). Supports wildcards. |
| detail_weight | FLOAT | 1.00–3 | Strength of detail phase |
| detail_start_percent | FLOAT | 0.250–1 | When to start detail phase |
| detail_end_percent | FLOAT | 0.650–1 | When to end detail phase |
| enable_texture | COMBO | enabled | Enable texture phase |
| texture_prompt | STRING | smooth textures, refined surface, polished finish | Applied in late sampling (texture refinement). Supports wildcards. |
| texture_weight | FLOAT | 1.00–3 | Strength of texture phase |
| texture_start_percent | FLOAT | 0.600–1 | When to start texture phase |
| enable_character | COMBO | disabled | Enable character/subject focus phase |
| character_prompt | STRING | 1girl, detailed face, expressive eyes, natural pose | Character/subject focus (applied when enabled). Supports wildcards. |
| character_weight | FLOAT | 1.20–3 | Strength of character phase |
| character_start_percent | FLOAT | 0.000–1 | When to start character phase |
| character_end_percent | FLOAT | 1.000–1 | When to end character phase |
| blend_mode | COMBO | concat | concat (join prompts), append (separate entries), add (strengthen), subtract (weaken) |
| wildcard_prompt | STRING | Standalone wildcard prompt. Appended to composition or base. | |
| wildcard_seed | INT | 0-1–18446744073709550000 | Seed for wildcards. -1 = Randomize every run. 0+ = Fixed. |
| clipopt | CLIP | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| negative | CONDITIONING | — |
| phase_info | STRING | — |
| resolved_wildcards | STRING | — |