⚗ Alchemica Skin Colorimeter (ITA°)
Measure the skin tone your render actually has, in ITA°
- image
- ita
- report
"She looks the same to me" is not a measurement. This node gives you one, in degrees.
What it is
AlchemicaSkinColorimeter reports the skin tone of the largest face in an image as ITA°, the individual typology angle from dermatology (ITA = atan((L* − 50) / b*) in CIELAB, Chardon 1991). The bands it prints: above 55 very light, 41–55 light, 28–41 intermediate, 10–28 tan, −30–10 brown, below −30 dark.
Practical uses, all of them comparisons rather than single readings: is this LoRA lightening my character's skin at 0.8 weight; did the "Mediterranean summer" prompt actually change anything; do two branches of a seed sweep agree; did the fine-tune someone published keep the skin tone of the base. Krea 2 renders skin beautifully and is not remotely literal about tone words, which is exactly the gap this closes.
It's the English twin of the pack's 1.0 AlchemicaPelleITA (which still exists, hidden, with Italian sockets). Same code, standard names - if you find AlchemicaPelleITA in an old graph, it's this node with immagine instead of image.
How it measures
The interesting engineering is all in where it samples. It runs insightface's buffalo_l face pack on the CPU, takes the largest face, and crops the band between the eyes and the mouth - nose and inner cheeks. Because that's local to the face, the reading is independent of how the shot is framed: a tight portrait and a full-body photograph of the same person measure the same.
From there it's colour maths, no model involved: sRGB → linear → XYZ → L*a*b*, then it keeps only skin-like pixels (L* between 20 and 92, a* above 2, b* above 4 - which excludes eyes, brows, lips, hair and background) and takes the median L* and b*. Median, not mean, so a highlight on the forehead doesn't drag the number.
The pack uses this same scale internally, which is a nice detail to know: when its prompt enhancer writes "tanned" or "fair" it's working against a table of what ITA° Krea 2 actually paints for each skin word, because the model's idea of a word is not yours. The colorimeter is the measuring end of that loop.
Inputs and outputs
One input: image (IMAGE), and it accepts a batch - each image is measured on its own and reported on its own line, with ITA, L* and b*. The ita (FLOAT) output is the mean of the images where a face was found; if none had one you get −999, which is unmistakable on purpose. report (STRING) carries the per-image breakdown, and since this is an output node you'll see it in the node itself and in the console.
There's nothing to wire it into. It's a read-out: measure, adjust the prompt or the LoRA weight, measure again.
Installing it
ComfyUI Manager, search "AlchemicaSampler", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nessuno76/ComfyUI-AlchemicaSampler
# restart the ComfyUI server
The pack declares no Python dependencies beyond ComfyUI, but this node needs insightface (and onnxruntime) to find faces - the same dependency the pack's Face Match node uses. That library used to be one of the worst installs in local generation: for three years there was no wheel for newer Pythons, so you compiled it yourself, which on Windows meant Visual Studio build tools. Version 1.0 (May 2026) removed the C++ build requirement. Weights are separate: buffalo_l (~326MB) downloads itself into ~/.insightface or a models/insightface folder, and those weights are non-commercial.
It runs on CPU through onnxruntime, so it costs you no VRAM.
Where it goes wrong
- −999 and "no face" on every line. Almost always insightface or its model folder missing. The node fails quietly rather than throwing, which is kind until you trust a measurement that never happened.
- No face in the frame. Profile shots, hands, backs of heads - the detector needs a face, and it only looks at the largest one.
- The number moved between two runs you thought were identical. Lighting. ITA is measured on pixels, so golden hour and a studio softbox disagree about the same person. Compare like with like.
- Values beyond ±60. The pack clamps its own internal use of ITA at ±60° for this reason: real skin rarely goes past it, renders happily do, and a very pale render can read +70.
- You want identity, not tone. Wrong node - that's ⚗ Alchemica Face Match, which returns an ArcFace similarity score.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | One or more images; the largest face of each is measured |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| ita | FLOAT | — |
| report | STRING | — |