🔱 Gemini Body
Height, build, frame and everything below the neck
- body
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_heightandbody_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.
Inputs (21)
| Name | Type | Default | Description |
|---|---|---|---|
| body_type | COMBO | NONE | 9 options: NONE, ECTOMORPH, MESOMORPH, ENDOMORPH, PEAR, APPLE, +3 |
| body_height | COMBO | NONE | 9 options: NONE, VERY_SHORT, SHORT, BELOW_AVERAGE, AVERAGE, ABOVE_AVERAGE, +3 |
| body_weight | COMBO | NONE | 6 options: NONE, SKINNY, THIN, AVARAGE, OVERWEIGHT, OBESE |
| body_build | COMBO | NONE | 9 options: NONE, SLIM, ATHLETIC, MUSCULAR, AVERAGE, CURVY, +3 |
| body_frame | COMBO | NONE | 4 options: NONE, SMALL BONED, MEDIUM BONED, LARGE BONED |
| body_shoulder | COMBO | NONE | 5 options: NONE, REGULAR, BROAD, NARROW, SLOPING |
| body_chest | COMBO | NONE | 5 options: NONE, BROAD CHEST, NARROW CHEST, BARREL CHEST, FLAT CHEST |
| body_breasts | COMBO | NONE | 18 options: NONE, ROUND, TEARDROP, BELL-SHAPED, SIDE SET, CLOSE SET, +12 |
| body_torso | COMBO | NONE | 8 options: NONE, SHORT TORSO, LONG TORSO, BALANCED TORSO, NARROW TORSO, WIDE TORSO, +2 |
| body_waist | COMBO | NONE | 8 options: NONE, DEFINED WAIST, STRAIGHT WAIST, HIGH WAIST, LOW WAIST, TAPERED WAIST, +2 |
| body_hip | COMBO | NONE | 8 options: NONE, STRAIGHT HIPS, SQUARE HIPS, TRIANGLE HIPS, HEART HIPS, ROUND HIPS, +2 |
| body_legs | COMBO | NONE | 9 options: NONE, LONG LEGS, SHORT LEGS, STRAIGHT LEGS, CURVY LEGS, BOW LEGS, +3 |
| body_skin_tone | COMBO | NONE | 10 options: NONE, VERY_FAIR, FAIR, LIGHT, MEDIUM, OLIVE, +4 |
| body_posture | COMBO | NONE | 6 options: NONE, UPRIGHT, SLOUCHED, CONFIDENT, RELAXED, RIGID |
| api_key | STRING | API key will be visible in plain text. Consider adding your api to the api.json located inside this custom node folder. | |
| model | COMBO | gemini-2.5-flash | 5 options: gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite, gemini-2.0-flash, gemini-2.0-flash-lite |
| max_tokens | INT | 50001–8192 | For Gemini models, a token is equivalent to about 4 characters. 100 tokens is equal to about 60-80 English words. |
| temperature | FLOAT | 0.70–2 | A 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. |
| randomize | BOOLEAN | false | — |
| use_image | BOOLEAN | false | — |
| image | COMBO | 1 options: example.png |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| body | ARTHABODY | — |