loading…
Search for a command to run...
loading…
Extract palettes from images, generate harmonies, gradients, random palettes; Check WCAG and APCA contrast; Suggest nearest passing OkLCH lightness; Simulate co
Extract palettes from images, generate harmonies, gradients, random palettes; Check WCAG and APCA contrast; Suggest nearest passing OkLCH lightness; Simulate color-blindness; Convert and sort colors across formats (hex / RGB / HSL / OkLCH / …)
A color palette toolkit for designers, frontend devs, and photographers. One binary, three modes — CLI, MCP server, and Web UI — sharing a single pure-Go core.
Go Report Card Go Reference Latest release License: MIT Go Reference CI

data: URI, or stdin. Methods: soft (default, designer-friendly), softk, kmeans, okkmeans, mediancut, octree, popularity, wu, dbscan, wkmeans, with mood presets for soft/softk.--suggest) finds the nearest passing OkLCH lightness for a failing fg / bg pair.analyze)..cube LUT — palette-driven, two grading methods: Smooth (RBF over OkLab) or Layered (K-NN over OkLCH)..cube text into ffmpeg's lut3d filter, so ffmpeg must be on the server's PATH.library.json from the CLI, the REST API, or the MCP library.save tool — they join the Saved category alongside the defaults.theme.extend.colors, GIMP .gpl, GIMP .ggr (gradient), SVG, PNG, JPEG, Adobe .ase, Adobe .aco.huetension extract photo.jpg -k 6
huetension harmony complementary "#3498db"
huetension gradient "#ff0066" "#00bcd4" --steps 9
huetension contrast "#222" "#fff" --algo wcag21
ANSI swatches by default, JSON / CSS / SCSS / Tailwind / GIMP .gpl / PNG / .ase / .aco on demand.
huetension mcp --transport stdio
15 default-enabled tools (color.convert, harmony.generate, image.extract, library.list, …) speaking the same JSON contract as the CLI. Drop into Claude Desktop, an editor, or any MCP client:
{
"mcpServers": {
"huetension": {
"command": "huetension",
"args": ["mcp", "--transport", "stdio"]
}
}
}
huetension web # http://127.0.0.1:8080
The embedded Vue SPA — color wheel, harmonies, image extraction, contrast / blindness checks, library, palette-driven 3D LUTs. Same REST envelope as huetension --format json.
go installgo install github.com/leporel/huetension/cmd/huetension@latest
Requires Go ≥ 1.26. The SPA assets are committed under web/dist/ and embedded into the binary, so this produces a fully functional Web UI without bun.
Pick the right archive from the latest release:
| OS | Arch | File |
|---|---|---|
| Linux | amd64 | huetension_<v>_linux_amd64.tar.gz |
| Linux | arm64 | huetension_<v>_linux_arm64.tar.gz |
| macOS | amd64 | huetension_<v>_darwin_amd64.tar.gz |
| macOS | arm64 | huetension_<v>_darwin_arm64.tar.gz |
| Windows | amd64 | huetension_<v>_windows_amd64.zip |
| Windows | arm64 | huetension_<v>_windows_arm64.zip |
Each archive ships the binary, LICENSE, README.md, and huetension.example.yaml. SHA-256 checksums are published next to the archives.
The release image is ghcr.io/leporel/huetension. Three common shapes:
Web UI + REST API —
docker run --rm -p 8080:8080 \
ghcr.io/leporel/huetension:latest \
web --address 0.0.0.0:8080
MCP over HTTP —
docker run --rm -p 7337:7337 \
-v "$HOME/.config/huetension:/data:ro" \
ghcr.io/leporel/huetension:latest \
mcp --transport http --address 0.0.0.0:7337 \
--auth-token "$TOKEN" --data-dir /data
Web + MCP on the same port (serve) —
docker run --rm -p 8080:8080 \
-v "$HOME/.config/huetension:/data:ro" \
ghcr.io/leporel/huetension:latest \
serve --address 0.0.0.0:8080 \
--auth-token "$TOKEN" --data-dir /data
The SPA is served at /, the REST API mounts under /api/v1, and the MCP HTTP transport mounts under /mcp. Add --mcp-transport http,sse to also expose SSE at /mcp/sse.
For MCP-over-stdio inside Docker (Claude Desktop and similar), see docs/mcp.md.
git clone https://github.com/leporel/huetension
cd huetension/web && bun install --frozen-lockfile && bun run build
cd .. && go build ./cmd/huetension
Build order matters: the SPA assets are embedded, so bun run build must run before go build.
| Command | What it does |
|---|---|
extract <source> |
Pull a palette from an image (file / URL / data: / stdin). |
analyze <source> |
Image color-distribution strips by color space + distance metric. |
harmony <type> <color> |
Generate a harmony around a base color. |
gradient |
Two-endpoint or N-stop gradients with easing. |
contrast |
WCAG 2.1 / APCA contrast scores. |
blindness |
Simulate protanopia / deuteranopia / tritanopia / achromatopsia. |
convert / sort |
Color-list utilities; read stdin when no args. |
random |
Generate a random palette, optionally harmonised. |
css / tailwind |
Export-only conveniences. |
lut |
Palette-driven 3D LUT (.cube) — RBF or K-NN grading. |
library / library add |
Manage the on-disk palette catalogue. |
mcp / web / serve |
Long-running servers (see below). |
version / completion |
Print version, generate shell completions. |
Full reference in docs/cli.md. Every command supports --help.
huetension mcp runs the MCP server over stdio (default; for Claude Desktop / editors), http (recommended for remote use), or sse (legacy). The same mcp: section of config.yaml controls which tools are exposed, and is also honoured by huetension serve.
Tool catalogue, transport details, image-sandbox flags, and container configs live in docs/mcp.md.
Tools page (the default route):
.gpl / PNG / SVG / .ase / .aco. Includes a palette-driven 3D LUT tab with in-browser grading preview.Library page (/library):
config.yaml lives in the data directory — ~/.config/huetension/ on Linux/macOS, %APPDATA%\huetension\ on Windows. Override with --data-dir or HUETENSION_DATA_DIR.
# Blacklist — start from the default-enabled set, remove specific tools.
mcp:
disable:
- image.extract
- library.save
# Whitelist — expose ONLY these tools; everything else is off.
mcp:
enable:
- color.convert
- harmony.generate
- contrast.check
Precedence: flag > HUETENSION_* env > config.yaml > built-in default.
Full reference in docs/config.md; annotated example at huetension.example.yaml.
The data directory also holds library.json. Bundled palettes ship with the binary; saved palettes (via huetension library add, POST /api/v1/library, or the MCP library.save tool) are appended under the Saved category.
{
"version": 1,
"palettes": [
{
"id": "brand-minimal",
"name": "Brand minimal",
"source": "user",
"categories": ["Saved"],
"colors": [
{ "hex": "#111827", "name": "Ink" },
{ "hex": "#F9FAFB", "name": "Paper" },
{ "hex": "#2563EB", "name": "Accent" }
]
}
]
}
Repo layout:
cmd/huetension/ — CLI entrypoint, command tree.internal/color, internal/palette, internal/harmony, internal/gradient, internal/contrast, internal/blindness, internal/extract, internal/exporter, internal/imageio, internal/cliutil, internal/lut — pure-Go core.internal/web/ — REST API + embedded SPA.internal/mcp/ — MCP server + tool registry.internal/serve/ — combined SPA + REST + MCP listener.web/ — Vue 3 SPA source; built bundle committed to web/dist/.docs/ — long-form documentation.Common tasks:
go test ./... -short # fast tests (skips heavy extract sidecar)
go test ./... # full suite
cd web && bun run dev # SPA dev server with HMR
huetension web --dev http://localhost:5173 # Go API in front of Vite
Release process: docs/RELEASING.md.
Extract testdata guidance: internal/extract/testdata/README.md.
MIT — see LICENSE.
Built after exploring these projects:
Выполни в терминале:
claude mcp add huetension-mcp -- npx Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development