Nodes/CCIP Judge/CCIP Score
ComfyUI Node

CCIP Score

CCIP checks 'is that still her?'

By o-ankomochi-o·Created 3 months ago·Updated 29 days ago· 0
CCIP Score
  • image
  • reference_image
  • distance
  • pass_mask
  • info
threshold0.213
modelccip-caformer_b36-24
reference_folder

You render a batch of a hundred anime images with your character LoRA and about half come back wearing a different face. Your options: eyeball every one, or wire up a node that does the eyeballing for you. CCIP Score is that second option - it answers one question per image: is this still the same character?

It's the first of three scorers in the CCIP Judge pack (o-ankomochi-o/comfyui-ccip-judge), which together rate a batch on character appearance, pose, and composition before routing only the winners into a liked folder. The name is not an API - nothing here phones home for scoring. CCIP is a character-similarity embedding that ships inside dghs-imgutils, and it's the same metric the anime LoRA dataset tools use to pull one character out of a pile of video frames. So this isn't a toy the author invented; it's the standard anime-community measure of "same person."

How it works

For every image in the batch, the node extracts a CCIP feature embedding, then computes its distance to each embedding in your reference pool and averages them. Lower distance = closer to your character. Distance under the threshold (default 0.213) means pass.

One subtlety worth knowing: CCIP will happily score an empty image, so the node runs an anime person detector (with a face detector as backup) first. If no character is found, you get distance = NaN, which compares false against any threshold - a failed detection can never sneak into your liked pile.

The inputs that matter

  • image - your generated batch, straight from VAEDecode.
  • threshold - the pass line, default 0.213. Lower is stricter. The author calibrated that on anime generally, not on your character, so expect to nudge it.
  • reference_folder - a folder of reference images of your character. The reference_image IMAGE input takes precedence if both are wired, so you can either load refs from disk or connect a loaded batch.
  • model - which CCIP model to use, default ccip-caformer_b36-24. Leave it alone unless you know you want another.

You get three outputs: distance (one float per image, wiring into the pack's Three-Stage Filter or Image Router), pass_mask (one boolean per image), and info - a text summary of how many passed and how many failed detection. The info string is genuinely useful when you're calibrating: it tells you if a bad pass-rate is detection failures rather than a too-tight threshold.

Installing it

The whole pack installs in one shot:

cd ComfyUI/custom_nodes
git clone https://github.com/o-ankomochi-o/comfyui-ccip-judge.git
cd comfyui-ccip-judge
python -m pip install -r requirements.txt

ComfyUI Manager finds it as "CCIP Judge" if you prefer that route. On the Windows portable build, use ..\..\python_embeded\python.exe -m pip install -r requirements.txt. Two things to know: the DWPose model downloads from Hugging Face on first run (the pack's only network call), and you want Python 3.10–3.12 - 3.13 breaks the install because dghs-imgutils pins numpy<2, which has no 3.13 wheels. Don't install both onnxruntime and onnxruntime-gpu in the same environment.

Where people get burned

  • Reference pool bias. If your references are all front-facing portraits and your generations are side profiles, the mean distance inflates and good images fail. Mix angles and poses in the reference folder.
  • All references must contain a detectable character, or the node throws instead of scoring.
  • The default threshold is a starting point, not gospel. Run a small labeled batch through Score Overlay first and re-calibrate - that's the honest workflow, and the README says so explicitly.

If your character consistency problem is about face identity across scenes, this node is the automation you were hand-doing. For pose and framing, the other two scorers in the pack - OKS and Angle - have you covered.

Categoryimage_judge

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
thresholdFLOAT0.2130–2
modelSTRINGccip-caformer_b36-24
reference_folderSTRING
reference_imageoptIMAGE

Outputs (3)

NameTypeDescription
distanceFLOAT
pass_maskBOOLEAN
infoSTRING