Agent skill

Color Correction

by artokun in artokun/comfyui-mcp

Diagnose and fix video/image color OBJECTIVELY with the getimage (action:"analyzecolor") tool (scopes/stats such as black/white points, contrast, saturation, clipping, cast) instead of eyeballing a…

MITAuto-check passedMedia & Creative

Install Color Correction

skills CLI
$ npx skills add artokun/comfyui-mcp --skill color-correction -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install artokun/comfyui-mcp color-correction --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/artokun/comfyui-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugin/skills/color-correction .claude/skills/color-correction && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
color-correction
GitHub stars
803
Token cost
~2.4k tokens
SKILL.md length
1,011 words
Files
1
Skills in repo
42
Repo updated
First seen
Licence
MIT

At a glance

Diagnose and fix video/image color OBJECTIVELY with the getimage (action:"analyzecolor") tool (scopes/stats such as black/white points, contrast, saturation, clipping, cast) instead of eyeballing a…

  • A render looks washed out / flat / dull / over-saturated / color-cast
  • SKILL.md covers The core principle, The get_image…, The "washed out" signature and The load-bearing insight: a…, plus 6 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Deciding between a color-match and a contrast/levels fix

What it does

Color Correction is an agent skill from artokun/comfyui-mcp. Diagnose and fix video/image color OBJECTIVELY with the getimage (action:"analyzecolor") 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…

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Media & Creative, covering Diffusion and image models. The repository describes itself as: Local-first, agent-native control plane for ComfyUI — MCP server + sidebar agent that generates images, video & audio, authors and runs workflows, and edits your live graph in… The licence is MIT.

When your agent uses it

  • A render looks washed out / flat / dull / over-saturated / color-cast
  • Deciding between a color-match and a contrast/levels fix

Example prompts

  • “analyzecolor”
  • “washed out”
  • “/color-correction”

What it can do on your machine

Read from SKILL.md and the folder at commit 6ad6fc0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Color Correction loads about 2.4k tokens when it runs. Until then it costs about 180 tokens; SKILL.md has 1,011 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~180
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from artokun/comfyui-mcp at commit 6ad6fc0, republished under its MIT licence (© artokun). 1,011 words, ~2,438 tokens.

Download SKILL.mdSave it as .claude/skills/color-correction/SKILL.md (or your agent's skills folder).
name
color-correction
description
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.
globs
**/*.json, **/packs/**

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:

bash
"<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)"

Grab the middle frame, or frame 0. For window-drift checks grab a frame from each window.

What the numbers mean (8-bit)
FieldReads like a scopeHealthy-ish
luma.blackPoint (1st pct)where shadows bottom out~0–16 (lifted if >16)
luma.whitePoint (99th pct)where highlights top out~240–255 (dim if <235)
luma.contrast (std)overall punch~45+ (flat if <45)
luma.dynamicRangewhite−blackwide is good
saturation.meanSaturation (HSV S)vectorscope spread~0.25+ (dull if <0.22)
channels.{r,g,b}Mean + castHintRGB parade / white balancespread <~12 = neutral
luma.clippedHighPct/LowPctblown / crushed pixelskeep low (<~2%)

Flags: washedOut, lowContrast, liftedBlacks, dimHighlights, lowSaturation, colorCast.


The "washed out" signature

Washed out means compressed tonal range, and it has an exact fingerprint:

  • whitePoint well below 255 (e.g. 191), so highlights never reach white
  • blackPoint lifted off 0 (e.g. 45), giving milky shadows
  • contrast low (std < 45)
  • often normal saturation. Washout is usually not a saturation problem.

If you see that, the fix is a levels / contrast stretch, not a color match. In a real case, a WAN-Animate frame measured blackPoint 45 / whitePoint 191 / contrast 43, clearly a range problem; saturation 0.25 was fine.


The load-bearing insight: a reference-match can't add contrast the source lacks

The instinct is to "match the render to the input photo" with a color-match node (ColorMatchV2 mkl/hm, ImageColorMatchAdobe+, easy imageColorMatch). Measure the reference first. If the reference is itself flat (e.g. a casual phone selfie with blackPoint 40, contrast 44), matching to it cannot produce punch; you'll match your way to the same flat numbers. In the real case, mkl and Adobe matches both left the frame flagged washedOut (whitePoint only crept from 191 to ~218).

So:

  • Use a reference-match (ColorMatchV2, ImageColorMatchAdobe+) when you want to match a known-good graded frame or shot-match across clips, and the reference is actually good.
  • Use a levels / contrast stretch when the defect is compressed range (the washout case). It targets full range regardless of the reference. This is usually the real fix.

The fix: contrast / levels stretch (core nodes, no install)

AdjustContrast (core comfy_extras.nodes_dataset, category image/adjustments) has one factor (1.0 = none, >1 = more). It pivots around mid-gray, so it pushes the white point up and the black point down together. Tune it by measurement, not feel. A real measured sweep on the washout frame:

factorblackPointwhitePointcontrastsatclippedHighverdict
1.329239560.330%✅ not washed (slightly soft)
~1.4~20~247~60~0.38~1–2%✅ sweet spot
1.67254670.447.2% ⚠️punchy but blows highlights

Pick the factor that lands whitePoint ~248 to 255 with clippedHighPct < ~2%. Going too far (1.6 here) blows highlights and over-warms, because per-channel contrast drops blue more than red and castHint worsens. The sweet spot was ~1.4.

Other levers when contrast alone isn't enough:

  • CurveEditor (core, utilities) feeds a CURVE for precise black/white-point and gamma control (a true levels curve) when you need more than a single contrast pivot.
  • AdjustContrast plus a small saturation/brightness adjust (same image/adjustments family) to fine-tune after the stretch.
  • A mild reference-match after the stretch, only if you need to shot-match.

Show full SKILL.md (345 more words)Show less

The sandbox pattern (test corrections side by side, then measure)

Don't tune blind on the full pipeline. Build a tiny separate workflow (panel_new_workflow) and let one run produce several candidates you then measure:

LoadImage (the washed frame, staged into input/)
LoadImage (the reference, if shot-matching)
        │
        ├─► AdjustContrast factor 1.3 ─► SaveImage "contrast13"
        ├─► AdjustContrast factor 1.6 ─► SaveImage "contrast16"
        ├─► ColorMatchV2 (mkl, ref)   ─► SaveImage "balance_mkl"
        └─► ImageColorMatchAdobe+(LAB)─► SaveImage "balance_adobe"

Run once, then get_image (action:"analyze_color") every output, plus the reference and the untouched frame, and compare blackPoint / whitePoint / contrast / saturation / clippedHigh. Whichever lands the numbers in range wins; interpolate the factor (1.3 vs 1.6 gives 1.4) and confirm with one more pass. Stage the frame into the ComfyUI input dir first (cp the extracted PNG there) so LoadImage can see it. Input and output dirs may be custom, so don't guess paths.


Porting the fix into a render graph

Place the chosen correction after decode, before the save. For a WAN/video graph that's right after WanVideoDecode (or the per-chunk color-match) and feeding the VHS_VideoCombine/save node. One AdjustContrast node is usually the whole fix. Keep it as a single inline node (or a small bypassable group) so it's easy to toggle and re-tune. Re-render a clip, extract a frame, get_image (action:"analyze_color") it, and nudge the factor to hit whitePoint ~250.


Video-specific gotchas

  • Per-window drift (WAN long video). WAN-Animate/long clips render in temporal windows and can desaturate or dim across them. Measure a frame from the first window and a late window. If they differ, that's drift, not a global grade issue; use the embeds' between-window colormatch, not a final stretch.
  • Relight LoRA is not levels. A WanAnimate relight LoRA changes lighting, not black/white points. It won't fix a compressed-range washout. Measure before and after to prove it.
  • Don't over-stretch. Watch clippedHighPct; blown highlights are unrecoverable. Prefer the lower factor that still clears dimHighlights.
  • Cast is often inherited. If the reference has the same warm/cool cast (festival/sunset light), a matching cast on the render is correct. Don't "fix" it.

Quick reference — the decision tree

get_image (action:"analyze_color") on the frame
  ├─ washedOut / lowContrast / dimHighlights ........ contrast/levels stretch (AdjustContrast ~1.4 → measure)
  ├─ lowSaturation only ............................. saturation boost (small)
  ├─ colorCast (and reference is neutral) ........... white-balance / neutralization, or reference-match
  ├─ want to MATCH a known-good graded frame ........ ColorMatchV2 / ImageColorMatchAdobe+ (ref must be good)
  └─ blackPoint/whitePoint already 0/255, sat ok .... color is healthy — stop touching it

Always re-measure after the fix. If get_image (action:"analyze_color") still flags it, the fix was wrong. Adjust and measure again. Numbers over vibes.

Sources

  • Official: comfyui-mcp get_image action:"analyze_color" product behavior (this repo).
  • Empirical: washed-out signature and levels-stretch recipes from observed renders.

© artokun, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugin/skills/color-correction of artokun/comfyui-mcp.

Open the folder on GitHubat commit 6ad6fc0

Compare with similar skills

Color Correction next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Color Correction compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Color Correction this skillartokun/comfyui-mcp803—~2.4kAutomated safety check: PassMIT
Iibzanllp/infinite-image-browsing1.4k—~3.3kAutomated safety check: PassMIT
9Router Image Generationdecolua/9router31k—~830Automated safety check: PassMIT
Character Refseternityspring/shuohao-skills4.3k—~1.7kAutomated safety check: WarnApache-2.0
H3 Videoagent-next/video-agent120—~2.9kAutomated safety check: PassApache-2.0
Stable Diffusion with DiffusersOrchestra-Research/AI-Research-SKILLs13k5 repos~3.2kAutomated safety check: PassMIT

Similar skills

  • Iib

    zanllp/infinite-image-browsing

    Interact with IIB (Infinite Image Browsing) service for searching, browsing, tagging, and organizing AI-generated images.

    1.4k GitHub stars~3.3k tokensUpdated today
    Media & CreativeAuto-check passed
  • Generates images through a 9Router gateway's image endpoint, with model discovery, the request fields and per-provider quirks for OpenAI, Gemini, MiniMax and others.

    31k GitHub stars~830 tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Character Refs

    eternityspring/shuohao-skills

    给任何故事里的角色真出参考图(小说改编、自己原创的故事、单独设计一个角色都行,不需要小说原文): 一段话描述角色,拆成分层字段、补全后确认, 先出一张正面全身锚点,其余视图(大头照、90° 侧面、背面、细节、45° 大头照)都只参考这张锚点, 按需分档出图。每张图带标识、可单独重出,重出后自动标出哪些图过期。

    4.3k GitHub stars~1.7k tokensUpdated yesterday
    Media & CreativeAuto-check: warnings
  • H3 Video

    agent-next/video-agent

    OpenVideo skill (v0.1.0): generate high-quality local video with the OpenVideo product (MiniMax H3 backend).

    120 GitHub stars~2.9k tokensUpdated today
    Media & CreativeAuto-check passed
  • Stable Diffusion with Diffusers

    Orchestra-Research/AI-Research-SKILLs

    Generates and edits images with Stable Diffusion through Hugging Face Diffusers, covering text-to-image, image-to-image, inpainting, SDXL and custom pipelines.

    13k GitHub starsUsed in 5 repos~3.2k tokens
    Media & CreativeAuto-check passed
  • Image Gen

    open-octo/octo-agent

    Acquire images as files — generate them with an AI image model (14 providers: OpenAI/gpt-image, Gemini, Qwen, Zhipu, Volcengine, Stability, FLUX, Ideogram, MiniMax, and more), search openly-licensed…

    125 GitHub stars~3.1k tokensUpdated today
    Media & CreativeAuto-check: notes

More from artokun/comfyui-mcp

All 42 skills in this repo
  • AI Toolkit Trainer

    artokun/comfyui-mcp

    Train custom LoRAs with ostris AI-Toolkit. An agent skill from artokun/comfyui-mcp.

    803 GitHub stars~2.7k tokensUpdated 4 days ago
    Auto-check passed
  • Anima Base

    artokun/comfyui-mcp

    Anime/illustration text-to-image (ANIMA 1.0, ~2B Cosmos DiT).

    803 GitHub stars~4k tokensUpdated 4 days ago
    Auto-check passed
  • Civitai

    artokun/comfyui-mcp

    Discover Civitai models with the BUILT-IN downloadmodel action:"searchcivitai" and install/generate them locally.

    803 GitHub stars~1.1k tokensUpdated 4 days ago
    Auto-check passed
  • Comfyui Frontend Extensions

    artokun/comfyui-mcp

    Authoring ComfyUI v2 frontend extensions with @comfyorg/extension-api, covering defineNode/defineExtension/defineWidget, shell UI (sidebar tabs, commands, hotkeys), typed events, and handles.

    803 GitHub stars~5.4k tokensUpdated 4 days ago
    Auto-check passed
  • Comfyui Launch Flags

    artokun/comfyui-mcp

    Pick the right ComfyUI startup flags for VRAM, attention, caching, and speed.

    803 GitHub stars~3.1k tokensUpdated 4 days ago
    Auto-check passed
  • Installer Packs

    artokun/comfyui-mcp

    A skill your agent uses when installing a model family from an installer pack, or when building/deriving a new pack from an upstream installer or a workflow JSON.

    803 GitHub stars~952 tokensUpdated 4 days ago
    Auto-check passed

Questions about Color Correction

What does Color Correction do?

Diagnose and fix video/image color OBJECTIVELY with the getimage (action:"analyzecolor") tool (scopes/stats such as black/white points, contrast, saturation, clipping, cast) instead of eyeballing a…. Color Correction is an agent skill from artokun/comfyui-mcp. Diagnose and fix video/image color OBJECTIVELY with the getimage (action:"analyzecolor") tool (scopes/stats such as black/white points, contrast, saturation, clipping, cast) instead of eyeballing a contact sheet.

When should I use Color Correction?

Color Correction fits situations like: A render looks washed out / flat / dull / over-saturated / color-cast; deciding between a color-match and a contrast/levels fix.

How do I install Color Correction in Claude Code?

Run `npx skills add artokun/comfyui-mcp --skill color-correction -a claude-code`. Or copy the skill folder (plugin/skills/color-correction in artokun/comfyui-mcp) into .claude/skills/color-correction in your project. Claude Code loads it when a task matches its description.

How do I install Color Correction in Codex?

Run `npx skills add artokun/comfyui-mcp --skill color-correction -a codex`. Or copy the skill folder (plugin/skills/color-correction in artokun/comfyui-mcp) into .agents/skills/color-correction in your project. Codex loads it when a task matches its description.

Can I use Color Correction in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add artokun/comfyui-mcp --skill color-correction -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/color-correction, .gemini/skills/color-correction, .github/skills/color-correction and .opencode/skills/color-correction in your project.

What does Color Correction need to run?

SKILL.md names no scripts, command-line tools or credentials: Color Correction is instructions for the agent only.

Does Color Correction access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Color Correction safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Color Correction use?

Color Correction is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Color Correction use?

About 2.4k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Color Correction?

Skills that share tags, products or a category with Color Correction: Iib (zanllp/infinite-image-browsing, 1.4k stars), 9Router Image Generation (decolua/9router, 31k stars), Character Refs (eternityspring/shuohao-skills, 4.3k stars) and H3 Video (agent-next/video-agent, 120 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Color Correction?

artokun (a GitHub user) maintains it in artokun/comfyui-mcp, which has 803 GitHub stars. The repository holds 42 skills in this directory. The repository was last updated on October 5, 2026.

Source: artokun/comfyui-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.