Nodes/ComfyUI-Artha-Nodes/πŸ”± Artha Gemini Face
ComfyUI Node

πŸ”± Artha Gemini Face

A face-description builder that does the vocab for you

By CyrostarΒ·Created 10 months agoΒ·Updated 8 months agoΒ· 0
πŸ”± Artha Gemini Face
  • image
  • face
β—„head_typeNONEβ–Ί
β—„hair_colorNONEβ–Ί
β—„hair_lengthNONEβ–Ί
β—„hair_style_femNONEβ–Ί
β—„hair_style_masNONEβ–Ί
β—„face_appealNONEβ–Ί
β—„face_ageNONEβ–Ί
β—„face_shapeNONEβ–Ί
β—„face_eyebrow_typeNONEβ–Ί
β—„face_eyebrow_shapeNONEβ–Ί
β—„face_eye_typeNONEβ–Ί
β—„face_eye_sizeNONEβ–Ί
β—„face_eye_colorNONEβ–Ί
β—„face_nose_typeNONEβ–Ί
β—„face_lip_typeNONEβ–Ί
β—„face_lip_colorNONEβ–Ί
β—„face_ear_typeNONEβ–Ί
β—„face_cheek_typeNONEβ–Ί
β—„face_chin_typeNONEβ–Ί
β—„randomizefalseβ–Ί
β—„use_imagefalseβ–Ί
β—„api_keyβ–Ί
β—„modelgemini-2.5-flashβ–Ί
β—„max_tokens5000β–Ί
β—„temperature0.7β–Ί

Artha Gemini Face is the node that forces you to decide what a character actually looks like. Describing a face from a blank prompt box is hard - "um, nice face, maybe brown eyes" - because you're trying to reach for vocabulary you don't have in the moment. This node hands you nineteen dropdowns, each pre-populated with real aesthetic terms, and whatever you pick becomes a typed ARTHAFACE object that Artha Gemini Portrait turns into a proper character description. It's a structured way to be specific, and specificity is where good character prompts come from.

It's part of the Artha character pipeline: Face, Body, Form, Cloth, and Makeup each produce a typed attribute object, and Portrait merges them. Face is the biggest and most granular of the five.

What you pick

Nineteen combo boxes, all defaulting to NONE (meaning "leave this out"):

head_type, hair_color, hair_length, hair_style_fem, hair_style_mas, face_appeal, face_age, face_shape, face_eyebrow_type, face_eyebrow_shape, face_eye_type, face_eye_size, face_eye_color, face_nose_type, face_lip_type, face_lip_color, face_ear_type, face_cheek_type, face_chin_type.

The values come from a profile.json bundled with the pack - face_eye_color gives you BROWN, BLUE, HAZEL, GREEN, GRAY, AMBER, and so on. You don't have to fill all nineteen; filling the handful that matter (eye color, hair length, face shape) gets you most of the way, and Portrait skips anything left at NONE. Note the two gender-split hair style dropdowns - Portrait picks the one that matches its identity setting, so you can set both and let it decide.

Two toggles sit at the bottom:

  • randomize - rolls one value per category. Fun for character roulette, useful for batch variety.
  • use_image - the vision mode. Connect an image and the node asks Gemini to describe the face from the photo instead, returning that description as the face value. This is the only path that needs an API key.

The one output

face (type ARTHAFACE) - a dict of your chosen attributes, or the vision description if you went that route. Wire it into Artha Gemini Portrait's face input alongside body, form, cloth, and makeup.

Where it can bite you

The picker mode is free and local - no key needed. The vision mode is a paid API call, so flipping use_image on without an image just falls through to the picker, but flipping it on with an image costs you a request every run. And if the vision call fails, the node returns an empty string and prints the error to the ComfyUI console; an empty face output means "check the console," not "try again silently."

There's also a subtle habit to build: when you do use the picker and feed Portrait, remember your dropdown picks are attribute values, not final prose. Portrait's job is to turn them into a sentence - so think of Face as "the facts," and Portrait as "the writing."

Install

One install for the whole πŸ”± pack:

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

Restart ComfyUI, or search "Artha" in ComfyUI Manager. Vision mode needs a key from Google AI Studio - put it in api.json in the pack folder rather than the node's plaintext field, and you're good.

CategoryArtha/LLM/Gemini

Inputs (26)

NameTypeDefaultDescription
head_typeCOMBONONE4 options: NONE, SMALL HEADED, AVERAGE PROPOTION, LARGE HEADED
hair_colorCOMBONONE13 options: NONE, BLACK, BROWN, DARK BROWN, MEDIUM BROWN, LIGHT BROWN, +7
hair_lengthCOMBONONE7 options: NONE, BALD, VERY SHORT, SHORT, MEDIUM, LONG, +1
hair_style_femCOMBONONE29 options: NONE, BALD, STRAIGHT, WAVY, CURLY, COILY, +23
hair_style_masCOMBONONE28 options: NONE, BALD, STRAIGHT, WAVY, CURLY, COILY, +22
face_appealCOMBONONE6 options: NONE, VERY ATTRACTIVE, ATTRACTIVE, AVERAGE, BELOW AVERAGE, UNATTRACTIVE
face_ageCOMBONONE11 options: NONE, BABY, TODDLER, TWEEN, TEEN, EARLY TWENTIES, +5
face_shapeCOMBONONE8 options: NONE, OVAL, ROUND, SQUARE, OBLONG, HEART, +2
face_eyebrow_typeCOMBONONE4 options: NONE, THIN, MEDIUM, THICK
face_eyebrow_shapeCOMBONONE6 options: NONE, ROUND, FLAT, S-SHAPED, HARD ANGLED, SOFT ANGLED
face_eye_typeCOMBONONE11 options: NONE, ROUND, ALMOND, DROOPY, HOODED, ASIAN, +5
face_eye_sizeCOMBONONE4 options: NONE, NORMAL, BIG, SMALL
face_eye_colorCOMBONONE7 options: NONE, BROWN, BLUE, HAZEL, GREEN, GRAY, +1
face_nose_typeCOMBONONE11 options: NONE, GREEK, ROMAN, BUTTON, SNUB, NUBIAN, +5
face_lip_typeCOMBONONE8 options: NONE, FULL, WIDE, ROUND, THIN, OVAL SHAPED, +2
face_lip_colorCOMBONONE11 options: NONE, NATUREL, NUDE BEIGE, NUDE PINK, PEACHY NUDE, SOFT PINK, +5
face_ear_typeCOMBONONE4 options: NONE, ROUND, OVAL, ELF
face_cheek_typeCOMBONONE7 options: NONE, HIGH CHEEKBONES, LOW CHEEKBONES, ROUNDED CHEEKS, HOLLOW CHEEKS, CHISELED CHEEKS, +1
face_chin_typeCOMBONONE3 options: NONE, STRAIGHT, CLEFT
randomizeBOOLEANfalseβ€”
use_imageBOOLEANfalseβ€”
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. Higher values increase randomness.
imageoptIMAGEβ€”

Outputs (1)

NameTypeDescription
faceARTHAFACEβ€”