Nodes/Artha-Gemini/🔱 Gemini Body
ComfyUI Node

🔱 Gemini Body

Height, build, frame and everything below the neck

By Cyrostar·Created about a year ago·Updated about a year ago· 1
🔱 Gemini Body
    • body
    â—„body_typeNONEâ–º
    â—„body_heightNONEâ–º
    â—„body_weightNONEâ–º
    â—„body_buildNONEâ–º
    â—„body_frameNONEâ–º
    â—„body_shoulderNONEâ–º
    â—„body_chestNONEâ–º
    â—„body_breastsNONEâ–º
    â—„body_torsoNONEâ–º
    â—„body_waistNONEâ–º
    â—„body_hipNONEâ–º
    â—„body_legsNONEâ–º
    â—„body_skin_toneNONEâ–º
    â—„body_postureNONEâ–º
    â—„api_keyâ–º
    â—„modelgemini-2.5-flashâ–º
    â—„max_tokens5000â–º
    â—„temperature0.7â–º
    â—„randomizefalseâ–º
    â—„use_imagefalseâ–º
    ◄image▾►

    Faces get all the attention in character work, but a character that survives two different images needs a body spec too - otherwise "same person" drifts into "vaguely similar person with a different build." Gemini Body is the below-the-neck half of the Artha character system: 14 dropdowns covering body type (Ectomorph, Mesomorph, Hourglass, Inverted Triangle…), height, weight, build, frame, shoulders, chest, torso, waist, hips, legs, skin tone and posture. It's the sibling of Gemini Face, and like its sibling it feeds the pack's Gemini Portrait node - the body output wires straight into Portrait's body optional input, which merges it with the face, form, makeup and clothing specs into one character description.

    The node ships in the 🔱 Artha-Gemini pack (category Artha/LLM/GEMINI) from Cyrostar, and it follows the family's two-mode design. No image means no API call: pick your values and you get a dict out the body output instantly, with NONE fields skipped. Flip randomize and every field gets a random pick from the valid options. Flip use_image and the node sends your reference photo to Gemini Vision with a body-analysis agent that returns a BODY … bullet list describing what it sees - same wire, same destination, but now sourced from an actual image rather than your choices.

    The inputs that matter

    The fields are self-explanatory, so here's the honest guide to which ones carry the most weight in a downstream prompt:

    • body_type - the big one. Ectomorph/mesomorph/endomorph plus the fashion-figure shapes (pear, apple, hourglass). This sets the whole silhouette.
    • body_build - slim, athletic, muscular, curvy, heavy, petite… the intensity knob.
    • body_height and body_weight - the concrete numbers that anchor everything else.
    • body_skin_tone - worth setting if consistency across images matters, because it's the detail models love to drift on.

    The rest (body_frame, body_shoulder, body_chest, body_torso, body_waist, body_hip, body_legs, body_posture) are refinements. Leave them NONE until you need them; Portrait ignores the empties. Shared cluster on every node applies here too: api_key, model (gemini-2.5-flash), max_tokens, temperature, randomize, use_image, image. Output is one body wire of type ARTHABODY.

    Install & troubleshooting

    One install covers all the Artha nodes:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Cyrostar/Artha-Gemini
    cd Artha-Gemini
    pip install -r requirements.txt
    

    Restart ComfyUI, or use ComfyUI Manager and search "Artha-Gemini". Dependencies are just google-genai, Pillow, numpy, torch and soundfile - no models to download. The only external requirement is a Gemini API key from Google AI Studio, used exclusively by use_image mode; the dropdown mode is fully offline.

    Two gotchas to internalize before you build a workflow. First, image is a file dropdown with an upload widget, not an IMAGE tensor socket - selecting a file from your ComfyUI/input folder or uploading one is the only way to feed it. Second, use_image mode is a billed Gemini call on every run, and if you leave your key in the api_key field it's stored in plain text in your workflow JSON. The author's own tooltip says as much; the cleaner route is api.json in the pack folder (gemini_api_key) or a GEMINI_API_KEY environment variable. Also worth knowing: in image mode, body features the model can't confidently identify come back as missing lines, not guesses - the agent is told to drop what it can't see, which keeps bad data out of your character.

    CategoryArtha/LLM/GEMINI

    Inputs (21)

    NameTypeDefaultDescription
    body_typeCOMBONONE9 options: NONE, ECTOMORPH, MESOMORPH, ENDOMORPH, PEAR, APPLE, +3
    body_heightCOMBONONE9 options: NONE, VERY_SHORT, SHORT, BELOW_AVERAGE, AVERAGE, ABOVE_AVERAGE, +3
    body_weightCOMBONONE6 options: NONE, SKINNY, THIN, AVARAGE, OVERWEIGHT, OBESE
    body_buildCOMBONONE9 options: NONE, SLIM, ATHLETIC, MUSCULAR, AVERAGE, CURVY, +3
    body_frameCOMBONONE4 options: NONE, SMALL BONED, MEDIUM BONED, LARGE BONED
    body_shoulderCOMBONONE5 options: NONE, REGULAR, BROAD, NARROW, SLOPING
    body_chestCOMBONONE5 options: NONE, BROAD CHEST, NARROW CHEST, BARREL CHEST, FLAT CHEST
    body_breastsCOMBONONE18 options: NONE, ROUND, TEARDROP, BELL-SHAPED, SIDE SET, CLOSE SET, +12
    body_torsoCOMBONONE8 options: NONE, SHORT TORSO, LONG TORSO, BALANCED TORSO, NARROW TORSO, WIDE TORSO, +2
    body_waistCOMBONONE8 options: NONE, DEFINED WAIST, STRAIGHT WAIST, HIGH WAIST, LOW WAIST, TAPERED WAIST, +2
    body_hipCOMBONONE8 options: NONE, STRAIGHT HIPS, SQUARE HIPS, TRIANGLE HIPS, HEART HIPS, ROUND HIPS, +2
    body_legsCOMBONONE9 options: NONE, LONG LEGS, SHORT LEGS, STRAIGHT LEGS, CURVY LEGS, BOW LEGS, +3
    body_skin_toneCOMBONONE10 options: NONE, VERY_FAIR, FAIR, LIGHT, MEDIUM, OLIVE, +4
    body_postureCOMBONONE6 options: NONE, UPRIGHT, SLOUCHED, CONFIDENT, RELAXED, RIGID
    api_keySTRINGAPI key will be visible in plain text. Consider adding your api to the api.json located inside this custom node folder.
    modelCOMBOgemini-2.5-flash5 options: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.0-flash, gemini-2.0-flash-lite
    max_tokensINT50001–8192For Gemini models, a token is equivalent to about 4 characters. 100 tokens is equal to about 60-80 English words.
    temperatureFLOAT0.70–2A temperature of 0 means only the most likely tokens are selected, and there's no randomness. Conversely, a high temperature injects a high degree of randomness into the tokens selected by the model, leading to more unexpected, surprising model responses.
    randomizeBOOLEANfalse—
    use_imageBOOLEANfalse—
    imageCOMBO1 options: example.png

    Outputs (1)

    NameTypeDescription
    bodyARTHABODY—