Nodes/ComfyUI LC123 Nodes/🗒️LC Subject
ComfyUI Node

🗒️LC Subject

Build a character prompt from dropdowns, not from memory

By lonecatone23·Created 2 months ago·Updated 3 days ago· 18
🗒️LC Subject
    • prompt
    description
    posestanding
    actionnone
    outfitnone
    position_horizontalcenter
    position_verticalmiddle
    position_depthmidground

    Writing a character prompt is a list, and lists are easier to assemble than to remember. Who they are, what pose, what action, what they're wearing, where they stand in the frame - get any one of those wrong and the render quietly drifts. LC Subject is the character module of the LC123 prompt-builder family: it turns "describe this person" into structured dropdowns with a text box for the freeform part.

    It's the "who" alongside LC Scene Builder's "where" and LCStyleSelector's "how it looks". You describe the subject in your own words, then pick a pose (85 choices), an action (48), and an outfit preset (72, split into Female/ and Male/ lines) from curated lists, plus where they sit in the frame. Out the prompt socket comes a clean, comma-joined subject line.

    The inputs

    • description - freeform: who or what the subject is (look, age, vibe).
    • pose - body pose (standing, contrapposto, sitting…). "none" leans on the description only.
    • action - what they're doing (walking toward camera, glancing back, laughing…). "none" skips the line.
    • outfit - clothing preset, or "none" to describe the outfit in text.
    • position_horizontal (left/center/right/far left/far right), position_vertical (top/middle/bottom/upper third/lower third), position_depth (foreground/midground/background/extremes).

    Output: one prompt STRING.

    The clever bit: bbox trailers

    Here's what makes it more than a prompt template. Alongside the human-readable line, the node appends a machine marker (|||LC_POS:h|v|d|||) carrying the placement. The LC Prompt Assembler reads that trailer and turns it into a bounding box on a 0–1000 coordinate grid - which is exactly what Ideogram and Krea2-style regional builders want for "put the subject on the right side of the frame" without you hand-typing box coordinates. The trailer is stripped from the final caption text, so your prompt stays clean and the JSON gets the boxes.

    Where it fits

    The README's stack: Subjects + Scene + Camera + Lighting + Style + Palette → LC Prompt Assembler → prompt → CLIP / json → regional builders. Wire several LC Subjects into an LC Subject Array for multi-character scenes, or keep one and assemble. On tag-based models the freeform description reads best as short phrases rather than sentences - the structured dropdowns help there, since curated phrasing tends to match how those models were trained.

    Install

    Part of LC123 - ComfyUI Manager (search "LC123") or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes
    

    Restart. No extra pip packages; MIT licensed. Cloud-hosted ComfyUI needs LC123 requested or run locally.

    The honest take: if you never touch regional builders, the bbox trailer is invisible overhead and you're getting a structured prompt template - still useful, but you could hand-write it. The moment you're doing multi-subject or regional work, the trailer turns "subject on the right" into an actual box without you measuring pixels, and that's where it earns its keep.

    CategoryLC123/prompt

    Inputs (7)

    NameTypeDefaultDescription
    descriptionSTRINGWho or what the subject is (look, age, vibe). Freeform text.
    poseCOMBOstandingBody pose. Choose none to rely on the description only.
    actionCOMBOnoneWhat they are doing. none skips this line.
    outfitCOMBOnoneClothing preset (Female/… or Male/…). none = describe outfit in text.
    position_horizontalCOMBOcenterLeft / center / right placement in the frame.
    position_verticalCOMBOmiddleTop / middle / bottom placement in the frame.
    position_depthCOMBOmidgroundForeground / midground / background depth.

    Outputs (1)

    NameTypeDescription
    promptSTRING