π± Gemini Form
Abs on, lats on, glutes⦠decide carefully
- form
Gemini Form is the fitness layer of the Artha character system - the node that answers "how built is this character?" with checkboxes instead of adjectives. It lists 17 muscle groups - chest, shoulders, arms, biceps, triceps, forearms, abs, core, obliques, back, lats, traps, legs, quadriceps, hamstrings, calves, glutes - and each is a simple boolean. Flip abs on and the word "Visible abdominal muscles" joins your character spec; flip lats on and it's "Wide latissimus dorsi". You're not writing anatomy, you're ordering from a menu of predefined descriptions that Gemini will later weave into prose. It's a thin node, deliberately - it's one input to a larger machine.
That machine is Gemini Portrait. Form's form output (type ARTHAFORM) wires into Portrait's form optional input, alongside face, body, makeup and cloth. Portrait is what turns all those structured specs into an actual character prompt, and Form is the part that keeps a character's physique consistent across runs - the same reason Face and Body exist. It's from the π± Artha-Gemini pack (Artha/LLM/GEMINI category) by Cyrostar.
How it works
There's no dropdown forest here, so the two-mode pattern is slightly lopsided. In manual mode you don't even get a randomize toggle - you flip whichever toggles you want, and the node builds a dict containing only the muscles you enabled, each mapped to its canned description from the pack's profile.json. No API call, no key needed, instant.
use_image is the interesting path. Flip it, pick a reference photo, and the node sends the image to Gemini Vision with a fitness-analysis agent whose instructions are explicit: ignore face and clothes, describe only the physique, and output FORM β¦ bullet lines. So you can point it at a photo of a swimmer, get a structured fitness readout, and feed that into Portrait - your character inherits the physique from the image. That's the mode that spends your Gemini API key; the toggle mode is free.
The inputs that matter
Honestly, they're all the same shape, so the decision is which muscle groups to commit to:
abs,chest,arms,legs- the four a beginner should start with. They carry most of the silhouette.shoulders,back,lats,traps- the V-shape cluster; flip these for a broad-shouldered look.glutes,hamstrings,calves- the lower-body set, plusquadriceps.core,obliques,biceps,triceps,forearms- detail refinements for when the basics aren't enough.
Then the standard pack cluster: api_key, model (gemini-2.5-flash), max_tokens, temperature, use_image, and the image file dropdown. Output is a single form wire of type ARTHAFORM, which only really connects to Gemini Portrait.
Install & gotchas
It's in the pack, so one install serves all the π± nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/Cyrostar/Artha-Gemini
cd Artha-Gemini
pip install -r requirements.txt
Restart ComfyUI afterward, or search "Artha-Gemini" in ComfyUI Manager. No model downloads - just google-genai, Pillow, numpy, torch and soundfile. A Gemini API key from Google AI Studio is only needed for use_image mode.
Same traps as the rest of the family: image is a file dropdown, not an IMAGE socket - you upload or select a file, you don't wire a Load Image node into it. And use_image is a billed call every run. If you're only doing the toggle version, you need no key at all, which makes Form one of the cheapest ways to dip into the pack. One design note: everything defaults to False, so if you toggle nothing and run it, you get an empty dict and Portrait quietly skips it - harmless, but if your final character prompt is missing the physique section, that's why.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| chest | BOOLEAN | false | β |
| shoulders | BOOLEAN | false | β |
| arms | BOOLEAN | false | β |
| biceps | BOOLEAN | false | β |
| triceps | BOOLEAN | false | β |
| forearms | BOOLEAN | false | β |
| abs | BOOLEAN | false | β |
| core | BOOLEAN | false | β |
| obliques | BOOLEAN | false | β |
| back | BOOLEAN | false | β |
| lats | BOOLEAN | false | β |
| traps | BOOLEAN | false | β |
| legs | BOOLEAN | false | β |
| quadriceps | BOOLEAN | false | β |
| hamstrings | BOOLEAN | false | β |
| calves | BOOLEAN | false | β |
| glutes | BOOLEAN | false | β |
| 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. |
| use_image | BOOLEAN | false | β |
| image | COMBO | 1 options: example.png |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| form | ARTHAFORM | β |