Prompt Core
The SickOllie prompt assembler with placement control and trigger injection
- final_prompt
The Studio version of SickOllie's Prompt Core (SOPromptLogEngineStudio) is what Classic's prompt engine grows up into once you've lived with it for a while. It keeps everything that worked - manual or log-file source, per-stream fixed/increment/decrement/randomize/shuffle modes, the NAME/OUTFIT_A/OUTFIT_B/OUTFIT_C/SCENE/ITEM placeholder system - and adds the two things Classic users kept asking for: you get to say where each component lands, and you get proper LoRA trigger injection.
What changed from Classic
Placement modes. Every component stream gains a placement dropdown: smart (auto), token, append, prepend, or off. Smart looks for a matching placeholder and replaces it, appending the component if none exists. Token Only replaces only when the token is present. Append and Prepend remove the matching placeholder and put the value after or before the prompt, respectively. Off injects nothing and strips the known placeholder. This is the fix for the Classic behavior where a missing token silently meant a component never showed up - now you can force it in.
Trigger support. There's a TRIGGER token with its own placement, plus trigger_override and an optional main_trigger input. Wire Loader Core's main_trigger output in and the trigger lands at the front of the prompt by default (when you're not using a placeholder), which is where LoRA activation words belong. The override is there for when the detected trigger is a recipe-like mess and you'd rather type ch9ractername yourself.
Persistent prompt display, built in. Studio's Prompt Core has the persistent resolved-prompt display baked into its dashboard, which is why the standalone Persist node is Classic-only. The assembly panel shows whether each component is active, missing, waiting for a placeholder, or not placed, and only components that actually participate advance their indexes.
Inputs and outputs that matter
Inputs worth setting: prompt_source (manual/log), manual_prompt, prompt_log_file, the per-stream outfit_log_file_A/B/C and scene_log_file, and the placement/mode pairs. name_value is where Loader's clean_name lands; item_value (relabeled BRAND in the dashboard if you configure it) handles the configurable slot.
The single output is final_prompt - connect it to Studio Generation Core's positive_text. That's it. Studio deliberately trimmed the fourteen Classic outputs down to one because Auto Context in Output Core reconstructs the prompt/outfit/scene context from the workflow graph instead of demanding a wire bundle.
Installing it
Part of the SickOllie pack:
cd ComfyUI/custom_nodes
git clone https://github.com/sickollie/SickOllie
or ComfyUI Manager → "SickOllie". Restart, hard-refresh. Starter logs ship under the pack's Starter Content.
Where people get burned
The usual one is placement confusion: setting a component to Token Only when the token isn't in your template and watching nothing happen. The dashboard's placement status panel is your diagnostic - if it says "waiting for placeholder," you've got a token mismatch. And remember trigger injection defaults to off until you set a placement, so a fresh Studio workflow won't add your LoRA's trigger word until you tell it to. That's intentional; it keeps auto-detected triggers from hijacking your prompt until you've vetted them.
Inputs (50)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt_source | COMBO | manual | 3 options: manual, input, log |
| manual_prompt | STRING | — | |
| prompt_log_file | COMBO | [None] | 5 options: [None], prompts/Creative Library/MASTER - Ready Prompts.txt, prompts/Creative Library/MASTER - Saved Recipe Prompts.txt, prompts/Creative Library/Prompts/All Prompts.txt, prompts/Creative Library/Templates/All Templates.txt |
| prompt_mode | COMBO | increment | 5 options: fixed, increment, decrement, randomize, shuffle |
| prompt_index | INT | 0-2147483648–2147483647 | — |
| outfit_token_A | STRING | OUTFIT_A | — |
| outfit_placement_A | COMBO | smart | 5 options: smart, token, append, prepend, off |
| outfit_log_file_A | COMBO | [None] | 2 options: [None], outfits/Creative Library/MASTER - Outfit Looks.txt |
| outfit_mode_A | COMBO | randomize | 5 options: fixed, increment, decrement, randomize, shuffle |
| outfit_index_A | INT | 0-2147483648–2147483647 | — |
| outfit_token_B | STRING | OUTFIT_B | — |
| outfit_placement_B | COMBO | smart | 5 options: smart, token, append, prepend, off |
| outfit_log_file_B | COMBO | [None] | 2 options: [None], outfits/Creative Library/MASTER - Outfit Looks.txt |
| outfit_mode_B | COMBO | randomize | 5 options: fixed, increment, decrement, randomize, shuffle |
| outfit_index_B | INT | 0-2147483648–2147483647 | — |
| outfit_token_C | STRING | OUTFIT_C | — |
| outfit_placement_C | COMBO | smart | 5 options: smart, token, append, prepend, off |
| outfit_log_file_C | COMBO | [None] | 2 options: [None], outfits/Creative Library/MASTER - Outfit Looks.txt |
| outfit_mode_C | COMBO | randomize | 5 options: fixed, increment, decrement, randomize, shuffle |
| outfit_index_C | INT | 0-2147483648–2147483647 | — |
| scene_token | STRING | SCENE | — |
| scene_placement | COMBO | smart | 5 options: smart, token, append, prepend, off |
| scene_log_file | COMBO | [None] | 2 options: [None], scenes/Creative Library/MASTER - Scenes.txt |
| scene_mode | COMBO | randomize | 5 options: fixed, increment, decrement, randomize, shuffle |
| scene_index | INT | 0-2147483648–2147483647 | — |
| name_token | STRING | NAME | — |
| name_value | STRING | — | |
| item_token | STRING | ITEM | — |
| item_value | STRING | — | |
| prefix_enabled | BOOLEAN | false | — |
| prefix_text | STRING | — | |
| suffix_enabled | BOOLEAN | false | — |
| suffix_text | STRING | — | |
| prefix_suffix_separator | STRING | , | — |
| cleanup_enabled | BOOLEAN | true | — |
| cleanup_rules | STRING | \?\[|\] \\?[()] :\s*[+-]?(?:\d+(?:\.\d*)?|\.\d+) | — |
| saved_prompt | STRING | — | |
| trigger_token | STRING | TRIGGER | — |
| trigger_placement | COMBO | off | 5 options: smart, token, append, prepend, off |
| trigger_override | STRING | — | |
| outfit_source_A | COMBO | log | 2 options: manual, log |
| outfit_manual_A | STRING | — | |
| outfit_source_B | COMBO | log | 2 options: manual, log |
| outfit_manual_B | STRING | — | |
| outfit_source_C | COMBO | log | 2 options: manual, log |
| outfit_manual_C | STRING | — | |
| scene_source | COMBO | log | 2 options: manual, log |
| scene_manual | STRING | — | |
| main_triggeropt | STRING | — | |
| manual_prompt_inputopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| final_prompt | STRING | — |