Nodes/comfyui-cyberdelia-z-engineer/Cyberdelia Prompt Controls — Presets
ComfyUI Node

Cyberdelia Prompt Controls — Presets

Type your prompt once, wire it everywhere

By cyberdeliaAI·Created 4 months ago·Updated a day ago· 13
Cyberdelia Prompt Controls — Presets
    • mode
    • prompt
    • use_vision
    • active_system_prompt
    modetrue
    prompt
    use_visionfalse
    active_system_prompt

    Fair warning before anything else: this node does nothing. No LLM call, no network request, no CLIP, no image decoding. route() takes its four widgets and hands them straight back out as four outputs - it's the same species as ComfyUI's own Primitive and PrimitiveStringMultiline, the "one source, many consumers" value nodes that exist so a prompt lives in one place instead of being retyped into three boxes and mismatched in the third.

    That sounds underwhelming until you're running two Prompt Engineer nodes at once. The pack ships Prompt Engineer - Text (plain STRING out, for Krea2, external encoders, metadata) and Prompt Engineer - Conditioning (positive/negative out, if you want the CLIP encoding done for you), and both want the same text, mode, use_vision and system prompt. With the controls node you edit your concept in one field and fan it out. The Presets variant is the one worth adding, because it also gives you a system-prompt picker and a fourth socket.

    What the preset half is really doing

    The dropdown is a frontend-only widget - it doesn't serialize into the workflow, so it never fights with widgets_values - and it fetches the preset list from the pack's own routes: /cyberdelia/z-engineer/presets for system presets, /cyberdelia/z-engineer/vision-presets when Vision mode is on. It follows the node's own use_vision toggle, which is the polite way of saying it can't see what the downstream engineer node is set to.

    Pick a preset and its entire text is copied into the active_system_prompt field. Not the name - the text. That's a deliberate design choice and a good one: the actual prompt lives in the workflow, so a later edit to the preset file can't silently change what an old workflow generates. Same text goes out the fourth socket, into the engineer node's matching active_system_prompt input, and once that wire carries something non-empty it replaces the engineer's local system_prompt or vision_system_prompt entirely (that's a straight prompt_override or (...) in z_engineer.py - the local field is simply ignored).

    Inputs and outputs

    Four of each, same names in the same order:

    • mode (BOOLEAN, default on = "✨ engineered (LLM)") → the engineer's mode. Off means raw passthrough, no LLM, no network at all.
    • prompt (multiline STRING) → the engineer's text. This is the seed idea.
    • use_vision (BOOLEAN, optional) → the engineer's use_vision.
    • active_system_prompt (multiline STRING, optional) → the engineer's active_system_prompt.

    Nothing is required for runtime - the node is inert, so it can't fail on its own.

    Install and wire it

    ComfyUI Manager, search Cyberdelia, or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/cyberdeliaAI/comfyui-cyberdelia-z-engineer.git
    pip install -r comfyui-cyberdelia-z-engineer/requirements.txt
    

    Then restart ComfyUI. The only dependency is requests; the legacy repo name is kept on purpose so existing installs update in place. It's MIT, by Cyberdelia AI Lab, forked from BennyDaBall930's ComfyUI-Z-Engineer - which is why the internals, the class IDs, and the preset folder are all still named z_engineer. (The name also collides with the Cyberdelia who ships the CyberRealistic checkpoints. I found nothing tying the two together; don't go looking for checkpoint docs here.)

    Wiring means converting widgets to inputs on the engineer node - right-click the text field → Convert Widget to Input, same for mode, use_vision, active_system_prompt - then connect:

    Cyberdelia Prompt Controls - Presets
      mode ─────────────────► Prompt Engineer (mode)
      prompt ───────────────► Prompt Engineer (text)
      use_vision ───────────► Prompt Engineer (use_vision)
      active_system_prompt ─► Prompt Engineer (active_system_prompt)
    

    Personal presets are plain UTF-8 .txt files. Filename becomes the label, whole file becomes the prompt:

    ComfyUI/user/z_engineer/presets/          # system presets
    ComfyUI/user/z_engineer/vision_presets/   # vision presets
    

    Hit ↻ Refresh presets after adding one. Name clashes with a bundled preset get a (User) suffix, and there are two built-ins: Cyberdelia Detailed 200–250 and Cyberdelia Faithful Image Caption.

    Where people get burned

    The connected active_system_prompt wins silently. Leave it wired and the engineer node's own preset dropdown still looks live - you can still click it - but its text goes nowhere. Disconnect or empty the wire if you want the local fields back.

    Keep use_vision in sync. The controls node's picker offers text presets or vision presets based on its toggle. If the controls node says text and the engineer node says vision, you're feeding prose instructions into an image-description request, and the output will be mysteriously bad rather than error out.

    No frontend, no picker. If the JS doesn't load or the routes fail to register, the widget degrades to [presets unavailable] and the node is just a text box. The text still passes through fine - presets are convenience, not mechanism.

    One engineer node? You don't need this. Four wires and a conversion ritual to save typing one prompt field. The honest use case is the shared-prompt one, or a preset you apply across several engineer nodes from a single click.

    CategoryCyberdelia/Prompt

    Inputs (4)

    NameTypeDefaultDescription
    modeBOOLEANtrue
    promptSTRING
    use_visionoptBOOLEANfalse
    active_system_promptoptSTRING

    Outputs (4)

    NameTypeDescription
    modeBOOLEAN
    promptSTRING
    use_visionBOOLEAN
    active_system_promptSTRING