
Color Correction
Diagnose and fix video/image color OBJECTIVELY with the get_image...
Install
npx skills add artokun/comfyui-mcp --skill color-correction -g -a claude-code -y- Repository
- artokun/comfyui-mcp883
- Category
- Media
- Updated
- 9d ago
- License
- MIT
- Context cost
- Mediumabout 2,240 tokens
- Runs scripts
- No, instructions only
What it does
Diagnose and fix video/image color OBJECTIVELY with the get_image (action:"analyze_color") tool (scopes/stats such as 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 graph (after decode, before save). Use when a render looks washed out / flat / dull / over-saturated / color-cast, or when deciding between a color-match and a contrast/levels fix.
Color Correction (measure, don't eyeball)
The core principle
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.
The get_image (action:"analyze_color") tool
Read-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)"


