Nodes/comfyui_davcha/StringScheduleHelper
ComfyUI Node

StringScheduleHelper

One Text Box That Splits Into a Prompt Plus Its Step Schedule

By dchatel·Created 2 years ago·Updated 14 days ago· 2
StringScheduleHelper
    • base_prompt
    • schedule
    • has_schedule
    text

    If you've ever done prompt scheduling - the "this prompt for the first stretch of steps, that one for the rest" trick that AnimateDiff and a lot of SDXL/Flux scheduling nodes live on - you know the actual annoyance. It's not the scheduling. It's that your base prompt lives in one widget and the step-keyed schedule lives in another, and the two drift out of sync every time you edit. StringScheduleHelper is davcha's fix: one multiline box, and the node splits the lines for you.

    What it is

    It's a small node in comfyui_davcha, dchatel's "Some personal QoL and experimental nodes" pack (the author posts on r/StableDiffusion as Occsan). The pack is exactly what it says on the tin - a grab-bag of QoL helpers and experiments, some of which the author has offered to spin out into standalone repos because, in his own words, you shouldn't have to "deal with the experimental crap" to get the useful ones. StringScheduleHelper is one of the calm ones.

    Feed it a text field and it buckets each line. Lines that start with a number and a colon become schedule entries; everything else becomes the base prompt:

    a cozy living room, warm afternoon light
    10: a black cat asleep on the sofa
    20: the same room at night, moonlight through the window
    

    How it works

    The mechanism is one regex per line, (\d+):(.+). A numbered line gets rewritten into step-keyed form - "10": "a black cat asleep on the sofa" - and all of them get joined with commas and newlines into the schedule output. The non-numbered lines get newline-joined into base_prompt. has_schedule is true whenever at least one numbered line existed; if none did, schedule degrades to "0": "" so a downstream scheduling node still receives a valid-but-empty string and you can branch on has_schedule to bypass it entirely.

    That "0": "...", "10": "..." shape is the classic step-schedule convention in this ecosystem - AnimateDiff prompt schedules look exactly like it, where the key means "from this step onward." So the intended wiring is straightforward: base_prompt goes into your normal CLIP text encode, and schedule (plus has_schedule) goes into whatever scheduling node your workflow already uses.

    The fields that matter

    The fields that matter:

    • text (required, multiline) - your whole prompt-plus-schedule in one box. It's flagged with dynamicPrompts, the same flag the stock CLIPTextEncode uses, so {a|b} and seed syntax still expand before the split.
    • base_prompt (STRING) - the non-scheduled lines, newline-joined.
    • schedule (STRING) - the step-keyed schedule.
    • has_schedule (BOOLEAN) - whether any schedule lines were found.

    Installing it

    Install is the usual dance. ComfyUI Manager → search comfyui_davcha, or clone it:

    cd ComfyUI/custom_nodes
    git clone https://github.com/dchatel/comfyui_davcha
    

    Then restart ComfyUI. No model files, no heavy downloads - the README is literally one sentence. One gotcha worth knowing before you pull the whole pack for this node: requirements.txt only lists webp and rapidfuzz, but the module imports llama_cpp and scipy at the top level with no guard. If the entire pack fails to register after a fresh install, that's why - install llama-cpp-python and scipy and restart. If you already run LLM or video packs you probably have both.

    Troubleshooting

    Two parsing traps while you're in there. First, any line starting with digits followed by a colon gets treated as a schedule entry, even by accident - 2024: the year of... will be silently yanked out of your base prompt. Second, blank lines vanish; the regex needs at least one character per line. And remember the keys are step numbers, not sigmas or percentages - if the node you're feeding expects 0.0–1.0 timing, this output isn't the same unit.

    It's not going to change your life. It's a text-splitting convenience, the rare QoL node that does one thing, has one input, and ships no config panel. But if you're the sort of person who keeps a prompt and its schedule together in one file, it's exactly the node you'd wish you'd had before you met it.

    Categorydavcha

    Inputs (1)

    NameTypeDefaultDescription
    textSTRING

    Outputs (3)

    NameTypeDescription
    base_promptSTRING
    scheduleSTRING
    has_scheduleBOOLEAN