Nodes/WWAA-CustomNodes/🪠️ WWAA JSON Prompt Builder
ComfyUI Node

🪠️ WWAA JSON Prompt Builder

Build structured JSON prompts from dropdowns, not typing

By hgabha·Created 2 years ago·Updated 7 months ago· 38
🪠️ WWAA JSON Prompt Builder
    • json_prompt
    ◄scene_descriptionA retro indoor photo shoot with pastel balloons.►
    ◄subject_categoryhuman►
    ◄enable_subject_detailstrue►
    ◄gender_presentationN/A►
    ◄age_bracketN/A►
    ◄hair_lengthN/A►
    ◄hair_style►
    ◄hair_color►
    ◄facial_expression►
    ◄makeup_details►
    ◄face_accessories►
    ◄body_pose►
    ◄clothing►
    ◄body_features►
    ◄subject_description►
    ◄backgroundplain white wall with colorful balloons►
    ◄floorwhite or light-colored, scattered balloons►
    ◄lightingdirect_flash►
    ◄lighting_customhigh contrast, vintage tone►
    ◄moodplayful►
    ◄mood_customretro, slightly chaotic energy►
    ◄photography_styledisposable_camera►
    ◄photography_custom90s disposable camera look, slightly grainy►
    ◄color_palettewarm whites, soft pinks, reds, and blues►
    ◄aspect_ratio3:4►
    ◄aspect_ratio_custom►
    ◄render_intentphoto►
    ◄camera_anglehigh_angle►
    ◄camera_angle_customsubject looking up►
    ◄depth_of_fieldshallow►
    ◄output_lightingharsh frontal flash►
    ◄include_empty_fieldsfalse►
    ◄indent_jsontrue►
    ◄custom_fields►

    Prompt syntax has moved on. Modern LLM-encoded models like Qwen-class and Flux.2 read natural language, and the current advice for structured, repeatable generation is to keep your fields separate - which is exactly what JSON does. WWAA JSON Prompt Builder is a giant form that turns ~30 labelled fields and dropdowns into one clean JSON string, so you get consistent, schema-shaped prompts without hand-typing braces.

    The mental model is a photography brief: you fill in the scene, the subject, the environment, the lighting, and the output parameters, and the node assembles it all. Its defaults are suspiciously specific - a retro balloon photo shoot with direct flash and a disposable camera look - which tells you this was built for a particular character-photo workflow at WeirdWonderfulAI.Art. Ignore those defaults and it becomes a general structured-prompt generator.

    The inputs that matter

    There are a lot, but you'll realistically touch these:

    • scene_description - the free-text scene, the one required field you type into.
    • subject_category - human/animal/object/abstract/landscape/architecture; it decides whether the subject-detail fields get used.
    • enable_subject_details - master switch for the whole subject block (hair, face, pose, clothing…). Flip it off for pure landscapes and the form stops shoving empty fields at you.
    • lighting, mood, photography_style, camera_angle - dropdowns with sensible presets, each paired with a *_custom text box for when a preset doesn't fit.
    • aspect_ratio and render_intent - output-level metadata, useful if you're piping this JSON to an LLM or a workflow that parses it.
    • custom_fields - free-form extra key-value pairs (newline separated) when the form genuinely lacks a field.
    • include_empty_fields and indent_json - the first drops empty strings from the output to keep it lean; the second controls pretty-printing. If you're feeding a captioner or LLM that's picky, indent_json: false gives you compact single-line JSON.

    Output is a single json_prompt string, which you'd usually wire into a prompt encoder or an LLM node that understands structured input.

    Install

    In ComfyUI Manager, search "WWAA Custom Nodes" and install. Manual:

    cd ComfyUI/custom_nodes
    git clone https://github.com/hgabha/WWAA-CustomNodes
    # restart ComfyUI
    

    The pack declares zero extra requirements - numpy, Pillow, torch only, all stock - so there's no dependency roulette. Look under the 🪠️ WWAA menu.

    Should you use it?

    Honest take: if you write prompts by hand and like it, this form will feel like bureaucracy. It earns its keep in two scenarios - when you want consistent, repeatable structure across hundreds of generations (LoRA dataset captions, batch photography-style work), and when a downstream LLM or captioner genuinely consumes JSON and you want field separation you can rely on. For everyone else, it's a fun toy and a decent way to see how a professional studio structures a prompt. Just remember: the JSON is a prompt, not magic. A good JSON brief still needs good words inside it.

    Category🪠️ WWAA/String

    Inputs (34)

    NameTypeDefaultDescription
    scene_descriptionSTRINGA retro indoor photo shoot with pastel balloons.—
    subject_categoryCOMBOhuman6 options: human, animal, object, abstract, landscape, architecture
    enable_subject_detailsBOOLEANtrue—
    gender_presentationoptCOMBON/A5 options: male, female, non-binary, androgynous, N/A
    age_bracketoptCOMBON/A6 options: child, teen, young_adult, middle_aged, elderly, N/A
    hair_lengthoptCOMBON/A7 options: bald, very_short, short, medium, long, very_long, +1
    hair_styleoptSTRING—
    hair_coloroptSTRING—
    facial_expressionoptSTRING—
    makeup_detailsoptSTRING—
    face_accessoriesoptSTRING—
    body_poseoptSTRING—
    clothingoptSTRING—
    body_featuresoptSTRING—
    subject_descriptionoptSTRING—
    backgroundoptSTRINGplain white wall with colorful balloons—
    flooroptSTRINGwhite or light-colored, scattered balloons—
    lightingoptCOMBOdirect_flash10 options: natural_soft, natural_harsh, studio_soft, studio_harsh, direct_flash, rim_light, +4
    lighting_customoptSTRINGhigh contrast, vintage tone—
    moodoptCOMBOplayful10 options: joyful, serene, melancholic, energetic, mysterious, romantic, +4
    mood_customoptSTRINGretro, slightly chaotic energy—
    photography_styleoptCOMBOdisposable_camera10 options: digital_modern, film_35mm, film_medium_format, disposable_camera, polaroid, vintage_90s, +4
    photography_customoptSTRING90s disposable camera look, slightly grainy—
    color_paletteoptSTRINGwarm whites, soft pinks, reds, and blues—
    aspect_ratiooptCOMBO3:48 options: 1:1, 3:4, 4:3, 16:9, 9:16, 2:3, +2
    aspect_ratio_customoptSTRING—
    render_intentoptCOMBOphoto6 options: photo, illustration, 3d_render, painting, sketch, mixed_media
    camera_angleoptCOMBOhigh_angle8 options: eye_level, high_angle, low_angle, bird_eye, worm_eye, dutch_angle, +2
    camera_angle_customoptSTRINGsubject looking up—
    depth_of_fieldoptCOMBOshallow4 options: shallow, medium, deep, bokeh
    output_lightingoptSTRINGharsh frontal flash—
    include_empty_fieldsoptBOOLEANfalse—
    indent_jsonoptBOOLEANtrue—
    custom_fieldsoptSTRING—

    Outputs (1)

    NameTypeDescription
    json_promptSTRING—