ComfyUI Node

APNext Node

The base prompt-builder you point at your own word lists

By dagthomas·Created 3 years ago·Updated 13 days ago· 283
APNext Node
    • prompt
    • random
    prompt
    separator,
    string
    seed0
    attributesfalse

    Think of this as the plain-vanilla version of the whole APNext prompt family. The Architecture, Photography, Human, People, Typography and Video Game nodes are all this same engine with a specific set of word lists baked in. APNext Node is the one without the baked-in lists - it's the base you feed your own. If you've ever wanted a prompt node whose dropdowns are your categories instead of somebody else's taste in cameras, this is the one.

    Out of the box it's deliberately minimal: a text box, a seed, and a couple of toggles. The power only shows up once you drop your own JSON category files into the pack's data/next/ folder, at which point they appear as dropdowns on this node and it starts assembling prompts the same way its specialized siblings do.

    How it works

    You type a base prompt, the node appends whatever categories you've defined (each set to a specific value, Random, or None), and joins the pieces with your separator. The seed fixes the random draws so a good result is reproducible. That's the entire mechanism - it's string assembly, not generation. No model runs, no API is called, nothing downloads.

    The attributes toggle is the one non-obvious control. The pack's category files support an "advanced format" where each item can carry extra descriptor tags (a "motion blur" entry might also pull in "dynamic, cinematic"). Flip attributes on and those sub-descriptors get folded into the output; leave it off and you just get the plain picks.

    A heads-up rooted in how these prompts are built: the dagthomas lists lean SDXL-era, meaning weighted parentheses and tag-style phrasing. That's ideal for SDXL, Illustrious and Pony, where attention weights and comma tags are the native language. On the newer LLM-encoded checkpoints (Z-Image, Flux 2, Anima) the weighting is discarded and the model wants instructions, not tag bags - so build your custom lists accordingly if that's your target.

    Inputs and outputs that matter

    • prompt (multiline, required) - your base text. The category picks get added onto this.
    • separator (default ,) - what joins the assembled fields. Comma is right for tag-based models.
    • string (optional) - an extra chunk of text to merge in, handy for chaining another node's output through.
    • seed - locks the random selections; roll it to reshuffle.
    • attributes (boolean) - pull in the extra descriptor tags attached to each item, or don't.

    Two outputs: prompt is your base plus everything assembled, ready to wire into a CLIP Text Encode. random hands back just the randomly chosen additions on their own, which is useful when you want to log or reuse only the part the node invented.

    Adding your own categories

    This is the actual point of the base node. Create a folder under data/next/ (say data/next/mymood/), drop in a JSON file per field - a simple ["item1", "item2"] array, or the advanced object form with preprompt, separator, items and attributes. Restart ComfyUI and your category shows up as a dropdown here. It's the cleanest way to get a maintained, reusable dropdown prompt setup without writing a node - which is exactly the use case people keep asking about on r/comfyui.

    Installing it

    Via ComfyUI Manager, search comfyui_dagthomas and install. Or by hand:

    cd ComfyUI/custom_nodes
    git clone https://github.com/dagthomas/comfyui_dagthomas
    cd comfyui_dagthomas
    pip install -r requirements.txt
    

    The requirements list is heavy because the pack also carries LLM and image-effect nodes; this node itself needs none of them.

    Common issues

    If the node shows up bare with no interesting dropdowns, that's expected - the base node ships without categories, and you populate data/next/ yourself. Added a category folder and it's not appearing? You forgot to restart, or your JSON doesn't parse; validate it and reload. And if your custom lists produce mush, the fix is the same as everywhere in this pack: define fewer, tighter categories rather than randomizing a dozen at once.

    Categorycomfyui_dagthomas

    Inputs (5)

    NameTypeDefaultDescription
    promptSTRING
    separatorSTRING,
    stringoptSTRING
    seedoptINT00–18446744073709550000
    attributesoptBOOLEANfalse

    Outputs (2)

    NameTypeDescription
    promptSTRING
    randomSTRING