Install any skill in seconds. Free to start, no credit card required.
Get Started Free →artokun/color-correction
Diagnose and fix video/image color OBJECTIVELY with the analyze_color tool (scopes/stats — black/white points, contrast, saturation, clipping, cast) instead of eyeballing a contact sheet. Covers the "washed out" signature, why reference color-match (mkl/ColorMatch/ColorMatchAdobe) CAN'T add contrast a flat source lacks, the levels/contrast-stretch fix (core AdjustContrast / CurveEditor), the measure→fix→re-measure loop, the side-by-side sandbox pattern, and where to place the fix in a render gra
Passed 17 of 20 test cases with the skill, and 12 of 20 without it.
and 6 more in the full report
6 fixed14 passed either way3 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 5 test cases the skill fixed. Same model, same prompt, with and without the skill.
I am parsing the dictionary returned by the color analysis MCP tool in a script. Which specific keys under the luma object contain the 1st percentile shadow evaluation and 99th percentile highlight evaluation?
| Checked | Without skill | With skill |
|---|---|---|
| identifies luma.blackPoint for the 1st percentile shadow level | Missed | Passed |
| identifies luma.whitePoint for the 99th percentile highlight level | Missed | Passed |
The instructions your model reads when the skill loads.
You cannot reliably judge color from a storyboard or contact sheet. "Is it washed
out?" flip-flops by eye, especially on AI-gen video. Make color measurable with the
get_image (action:"analyze_color") MCP tool, read the numbers like a colorist reads scopes, pick the
fix the data points to, then re-measure to confirm. The whole skill is this loop:
extract a frame ─► get_image (action:"analyze_color") ─► read black/white points + contrast + saturation
▲ │
│ ▼
re-measure ◄──── apply fix (levels / contrast / match) ◄── diagnose from the numbers
Origin: on a WAN-Animate render we argued for many turns over whether the clip was "washed out." The instant we measured it, the answer was unambiguous and the correct fix (a contrast stretch, not the color-match nodes we'd been adding) fell straight out.
get_image (action:"analyze_color") toolRead-only. Source = asset_id, a ComfyUI output ref (filename/subfolder/type), or
an image path (absolute, or under the output dir). It returns per-image stats, heuristic
flags, a one-line verdict, and optionally an overlaid R/G/B/luma histogram PNG.
get_image({ action: "analyze_color", filename: "render_00007_.png" }) # absolute numbers
get_image({ action: "analyze_color", path: "frame.png", reference_path: "src.jpg" }) # + shot-match deltas
get_image({ action: "analyze_color", filename: "x.png", histogram: true }) # + histogram image
For videos, get_image (action:"analyze_color") is image-only (no ffmpeg dep). Extract a frame first with the
ComfyUI venv's cv2:
"<comfy-venv>/python" -c "import cv2; c=cv2.VideoCapture(r'IN.mp4'); n=int(c.get(7)); \
c.set(1, n//2); _,f=c.read(); cv2.imwrite(r'frame.png', f)"
test cases passed, vs 12 / 20 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.