Nodes/ComfyUI Nox Prompter/Nox Prompt Builder
ComfyUI Node

Nox Prompt Builder

The formula-driven Wan 2.2 prompt assembler at the heart of the pack

By jamesk9526·Created 11 months ago·Updated 11 months ago· 0
Nox Prompt Builder
    • prompt
    • negative_prompt
    • aesthetic_notes
    • dynamic_notes
    • preset_status
    formulaAdvanced Formula
    subject_focusBattle-hardened warrior drenched in rain, wearing leather armor and fur
    scene_settingMuddy battlefield at night, lightning in the distance, flames flickering
    motion_arcCharges forward roaring, swings blade in a slow-motion crash zoom
    narrative_hookCamera locks onto her determined eyes as thunder cracks overhead
    model_emphasisCinematic aesthetic control, precise semantic adherence
    light_sourceDaylight
    light_qualitySoft Light
    time_of_dayDusk
    shot_sizeMedium Close-up
    compositionBalanced
    lens_focalMedium
    lens_angleNone
    lens_typeSingle Shot
    camera_basicNone
    camera_advancedNone
    color_toneWarm Tone
    motion_typeRunning
    emotionJoy
    visual_styleAnime
    special_effectNone
    keyword_styleauto
    quality_profileBalanced
    randomize_missingfalse
    random_seed0
    palette_overrides
    extra_descriptorsModel feature emphasis: complex & dynamic motion
    lighting_prompt
    lighting_summary
    lighting_technical_notes
    custom_keywords
    negative_prompt
    prompt_prefix
    prompt_suffix
    camera_prompt
    camera_summary
    camera_notes
    camera_directives
    prompt_filter_enabledtrue
    prompt_filter_profilebalanced
    preset_actionnone
    preset_name

    This is the node the whole pack is built around. Nox Prompt Builder is described in the README as a "formula-driven Wan 2.2 builder," and that's the honest pitch: it takes a subject, a scene, and a motion arc, then assembles them into a structured prompt using one of four formulas, with curated vocabulary for lighting, camera, color, motion, and style - plus inline overrides and seeded randomization. If you've been typing the same "cinematic, highly detailed" preamble into every prompt, this is the node that turns prompt writing into filling in a form.

    How it works

    The four formula options in constants.py define the assembly order: Basic is Subject + Scene + Motion; Advanced adds aesthetic controls and stylization; Story Spotlight focuses subject, environmental beat, camera language, and emotional tone; Trailer Teaser opens on the hook. The builder resolves your dropdowns (light source, light quality, time of day, shot size, lens, color tone, motion type, emotion, visual style, special effect) against the shared vocabulary dictionaries, then formats the result according to keyword_style.

    keyword_style is the control that matters for model fit: auto emits labeled clauses, inline flows as natural prose, compact produces dense strings - which is the Wan-style format the pack is tuned for. There's also randomize_missing: leave dropdowns at "None" and it fills them from its curated vocabularies using random_seed, which is genuinely great for idea batches where you want a loose family of variations. palette_overrides and custom_keywords let you inject output from Nox Prompt Palette Mixer, and lighting_prompt / camera_prompt (plus their summary and notes siblings) are pass-throughs for Nox Prompt Lighting Master and Nox Prompt Camera Master - that's the pack's whole "centralized lighting/camera control" story.

    Inputs and outputs that matter

    The required four are formula, subject_focus, scene_setting, and motion_arc. After that, set keyword_style, pick your aesthetic dropdowns, and enable randomize_missing with a seed if you want batch variation. Outputs: prompt (the goods - straight to positive conditioning), negative_prompt, aesthetic_notes and dynamic_notes (human-readable summaries, useful for review), and preset_status. Standard preset_action/preset_name save/load applies.

    Installing it

    Pack install, once. ComfyUI Manager: search "Nox Prompter", install, restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/jamesk9526/NoxPrompter-ComfyUI-CustomNode
    

    Restart and the NoxPrompter category appears. No requirements.txt, no model downloads - pure stdlib.

    Where people get burned

    The Wan 2.2 framing cuts both ways. The pack's compact style and block structure are exactly what an LLM-encoded video model wants, but a few habits leak in from SDXL days that do nothing on Wan: the default model_emphasis ("cinematic aesthetic control, precise semantic adherence") is flavor text that an LLM encoder mostly ignores, and any (word:1.3)-style weights you add elsewhere get silently discarded. If you're feeding this into an SDXL-lineage checkpoint instead, the compact style reads worse - that family wants tag-style prompting, and you'll want keyword_style on inline. Also note the README's python test_nodes.py verification step doesn't ship in the repo, and its old ComfyNoxPrompter URL is stale - use the clone command above.

    CategoryNoxPrompter/Builders

    Inputs (42)

    NameTypeDefaultDescription
    formulaCOMBOAdvanced Formula4 options: Basic Formula, Advanced Formula, Story Spotlight, Trailer Teaser
    subject_focusSTRINGBattle-hardened warrior drenched in rain, wearing leather armor and fur
    scene_settingSTRINGMuddy battlefield at night, lightning in the distance, flames flickering
    motion_arcSTRINGCharges forward roaring, swings blade in a slow-motion crash zoom
    narrative_hookoptSTRINGCamera locks onto her determined eyes as thunder cracks overhead
    model_emphasisoptSTRINGCinematic aesthetic control, precise semantic adherence
    light_sourceoptCOMBODaylight48 options: None, Daylight, Artificial Light, Moonlight, Practical Light, Firelight, +42
    light_qualityoptCOMBOSoft Light30 options: None, Soft Light, Hard Light, Top Light, Side Light, Backlight, +24
    time_of_dayoptCOMBODusk24 options: None, Daytime, Nighttime, Dusk, Sunset, Dawn, +18
    shot_sizeoptCOMBOMedium Close-up21 options: None, Close-up, Medium Close-up, Medium Shot, Medium Long Shot, Long Shot, +15
    compositionoptCOMBOBalanced20 options: None, Centered, Balanced, Right-weighted, Left-weighted, Symmetrical, +14
    lens_focaloptCOMBOMedium18 options: None, Medium, Wide Angle, Long, Telephoto, Fisheye, +12
    lens_angleoptCOMBONone20 options: None, Over-the-shoulder, High Angle, Low Angle, Tilted Angle, Aerial Shot, +14
    lens_typeoptCOMBOSingle Shot19 options: None, Single Shot, Two Shot, Three Shot, Group Shot, Establishing Shot, +13
    camera_basicoptCOMBONone24 options: None, Dolly In, Push-in, Pull-out, Pan Right, Pan Left, +18
    camera_advancedoptCOMBONone32 options: None, Handheld, Compound, Following, Orbit, Steadicam Glide, +26
    color_toneoptCOMBOWarm Tone18 options: None, Warm Tone, Cool Tone, High Saturation, Low Saturation, Pastel Tone, +12
    motion_typeoptCOMBORunning28 options: None, Running, Skateboarding, Soccer, Tennis, Ping Pong, +22
    emotionoptCOMBOJoy23 options: None, Anger, Pleasure, Slight sadness, A Little Fear, Fear, +17
    visual_styleoptCOMBOAnime34 options: None, Felt Style, 3D Cartoon, Pixel Art, Puppet Animation, 3D Game, +28
    special_effectoptCOMBONone20 options: None, Tilt-shift, Time-lapse, Light Trails, Chromatic Bloom, Particle Swarm, +14
    keyword_styleoptCOMBOauto3 options: auto, inline, compact
    quality_profileoptCOMBOBalanced4 options: Balanced, Cinematic, Minimal, Narrative
    randomize_missingoptBOOLEANfalse
    random_seedoptINT00–1000000
    palette_overridesoptSTRING
    extra_descriptorsoptSTRINGModel feature emphasis: complex & dynamic motion
    lighting_promptoptSTRING
    lighting_summaryoptSTRING
    lighting_technical_notesoptSTRING
    custom_keywordsoptSTRING
    negative_promptoptSTRING
    prompt_prefixoptSTRING
    prompt_suffixoptSTRING
    camera_promptoptSTRING
    camera_summaryoptSTRING
    camera_notesoptSTRING
    camera_directivesoptSTRING
    prompt_filter_enabledoptBOOLEANtrue
    prompt_filter_profileoptCOMBObalanced4 options: balanced, cinematic, minimal, narrative
    preset_actionoptCOMBOnone4 options: none, save, load, list
    preset_nameoptSTRING

    Outputs (5)

    NameTypeDescription
    promptSTRING
    negative_promptSTRING
    aesthetic_notesSTRING
    dynamic_notesSTRING
    preset_statusSTRING