Skip to main content
October 1, 2026 · colors · 9 min read

Pulling a Palette from an Image — Six Tools Compared

Six image-to-palette tools, each tested against the same two photos. Which ones cluster well, which average everything into mud.

Last updated October 1, 2026 · 9 min read

The strong opinion up front: almost every "extract a palette from an image" tool returns the wrong five colors. They average the pixels, which gives you five near-neutrals that technically occur in the photo but tell you nothing useful about the design the photo is doing.

The useful tools cluster, not average. They look at how pixels are grouped, pick representatives from each dominant group, and throw away the clumps that are too close together. The output is almost always more saturated and more opinionated than the "pure math" tools, because real design palettes are opinionated.

Here's how six different approaches compare on the same two reference images — a dusk cityscape (lots of indigo, one neon orange sign) and a vintage movie poster (red, cream, black, two muted greens).

The test images, described

Image A — Dusk cityscape. Indigo sky grading to lavender near the horizon. A single orange neon sign in the lower third. Dark silhouetted buildings. Highlight: a window glow of warm yellow.

The "right" palette: three indigos (one dark, one mid, one lavender), one deep orange, maybe one warm yellow. The sign and the window glow are the design story — they're 3% of the pixels but 100% of what you'd pull from this to brand with.

Image B — Vintage poster. Flat red background. Cream header type. Black silhouette figure. Two muted sage-green plant motifs. Small white and brown details.

The "right" palette: the red, the cream, the black, one of the sages, and one of the browns. Five colors maximum.

Approach 1 — median cut (classic)

The algorithm most "extract palette" tools use. Divide the color space into boxes recursively, splitting along the longest axis each time, until you have as many boxes as palette slots. Report the median color of each box.

What it gives you on Image A: five indigos. The sky dominates, median cut keeps subdividing the indigo mass before touching the orange outlier.

What it gives you on Image B: the red, two muddy browns (averages of red + black boundary pixels), one grey, one cream. Loses the sage.

Where it's useful: large flat photos where you genuinely want the dominant tones (interior photography, landscape panoramas with no accent). Where it fails: anything with a point of interest.

Approach 2 — k-means clustering

The industry standard upgrade over median cut. Pick k centroids, assign each pixel to its nearest, recompute centroids, iterate. The seed matters a lot — k-means++ seeds much better than random.

What it gives you on Image A: three or four indigos and one orange. Catches the sign because it clusters tightly rather than getting averaged into the sky. If you ask for six colors it starts repeating indigos.

What it gives you on Image B: red, cream, black, one sage (!), one grey transition. Four of the five target colors — the best of the pure-math approaches.

K-means in Lab or OKLCH space is noticeably better than in RGB. The clusters respect perceptual distance instead of RGB cube distance, which means your sages don't get labeled "close to greys."

Approach 3 — dominant color + harmony derivation

A different philosophy: pick the single most dominant color from the image, then generate the rest of the palette by color-theory rules (complement, analogous, triadic). The image seeds the palette rather than defining it.

What it gives you on Image A: starts with the indigo, derives a tetradic set that includes an orange close to the real sign. Clean, usable, but not actually extracted from the image — more like "inspired by."

What it gives you on Image B: starts with the red, builds an analogous set of warm oranges and reds that the poster does not contain. Can feel disconnected from the source.

This is the "lazy and often correct" approach. If what you want is a usable brand palette and you're using the image as a mood reference rather than a source of truth, this works. For that workflow, the Color Palette from Base Color Generator does the "pick the dominant tone, build the palette" step well once you have the seed hex.

Approach 4 — hand-sampled with an eyedropper, then expanded

The oldest trick: open the image, use an eyedropper, click on the five regions you care about, write down the hex codes, build the palette by hand.

What it gives you on Image A: exactly the five target colors, because you're a human who can see what matters in the composition.

What it gives you on Image B: same — the designer's eye solves what the algorithm can't.

The catch: slow. Fine for one project, impossible for 200 product photos.

Hybrid workflow that works: eyedrop the two or three colors you know you want, then feed them as seeds into a palette generator. The Named Color Palette Generator is a decent way to lock a base color and shop for coordinates with human-readable names so you can discuss them without a hex-code shouting match.

Approach 5 — saturation-weighted clustering

A variant of k-means that weighs saturated pixels more heavily than desaturated ones. The theory: desaturated pixels are usually shadow/light transition artifacts, not intentional palette colors.

What it gives you on Image A: the orange sign shows up as a palette entry even though it's 3% of pixels. The lavender shows up because it's the saturated end of the sky. The dark silhouettes get collapsed into one color because they're all low-saturation and all similar.

What it gives you on Image B: red, sage, sage (two different sages!), cream, black. The two sages distinction is a win — a plain k-means merges them.

This is the approach that most modern "mood-aware" palette tools use. It biases toward design-interesting colors.

Approach 6 — AI-generated "palette inspired by this vibe"

Not extraction at all. You describe the image, an AI generates a palette with a story. Useful when the image is your mood but you need the palette to be flexible.

What it gives you on Image A: four or five colors that evoke "dusk city neon" — probably indigo, lavender, warm orange, charcoal, soft yellow. Often perfectly usable and often not literally in the image.

What it gives you on Image B: a vintage-poster-feeling palette that may or may not match the specific poster. If the AI model has seen a thousand vintage posters, you get a cliché of the aesthetic.

The Keyword Color Palette Generator does this well — type "dusk cityscape with neon sign" and get a palette generated from the mood rather than pixel math. Pair with eyedropping two anchor colors and you have a design-worthy palette in two minutes.

The scoring table

| Approach | Image A score | Image B score | Best use case | |---|---|---|---| | Median cut | 2/5 | 3/5 | Large flat photos | | K-means (Lab) | 4/5 | 4/5 | General-purpose extraction | | Dominant + harmony | 3/5 | 2/5 | Mood references | | Hand eyedropper | 5/5 | 5/5 | One-off, when precision matters | | Saturation-weighted | 5/5 | 5/5 | Design-worthy palettes from photos | | AI from description | 4/5 | 4/5 | When the image is inspiration, not source |

The honest answer: saturation-weighted clustering is the right default for designers; hand eyedropping is the right method when the result matters and you have 15 minutes; k-means in Lab space is the right fallback when you need to automate the process over hundreds of images.

The failure modes to watch for

JPEG artifacts creating phantom palette entries. Compression smears color boundaries. A hard red-to-black transition in the source becomes a thin brown gradient in the JPEG. Extraction tools will report that brown as a palette color. Fix: downscale the image to 400px wide before extraction, or sample from a PNG when you have one.

Shadows and highlights masquerading as palette. The same red shirt in sun and shadow is two different RGB values. A naive extractor returns both. Fix: group by hue family after extraction, keep the most saturated member of each group.

Palettes that are "correct" and useless. A photo of a forest in autumn has thousands of distinct oranges, reds, yellows, and browns. Any extractor returns five of them. The result is a palette that reads as "autumn forest" and could not be reused for anything else. Sometimes that's what you want. Often it isn't.

Ignoring text and logos. If the image is a product photo on a brand background, the extracted palette will give you a lot of the background and almost none of the product. Crop first.

A workflow that works

What experienced designers actually do when they want a palette from an image:

1. Crop to the thing that matters. If it's a dusk cityscape with one neon sign, crop to include the sign without the whole featureless sky. 2. Downscale to 400–800px. Removes JPEG noise, speeds extraction, emphasises blocks over gradients. 3. Extract 8–10 colors, not 5. You can discard duplicates after; you can't invent colors the algorithm missed. 4. Hand-eyedrop the point of interest. If the sign is the design story, click on it manually. Make sure it's in the final palette. 5. Reduce to 4–6 by hand. Keep the ones that work together, drop the near-duplicates. 6. Convert to OKLCH, build a shade ramp from each. The palette is seeds, not finished tokens. 7. Verify contrast between any pair you'd pair as text/bg. Half of extracted palettes have a lovely cream and a lovely sage that pair at 1.9:1 contrast and are unusable as text.

For the ramp-building step, the Tints and Shades Generator turns each extracted color into a full shade range so you have the lighter/darker variants you'll need. For an inspiration-first palette before you even open the image, the Color Palette from Mood Generator is the fastest way to seed before you refine with image data.

The actual recommendation

Pick two tools and keep them in your workflow:

  • A saturation-weighted extractor for the first pass. 80% of the time it's good enough.
  • A keyword/mood palette generator for when the image is inspiration rather than source material. Faster, more flexible, often more usable.

Skip the median-cut tools. The era when averaging five boxes was the state of the art ended a decade ago.

When extraction isn't the right starting point

Not every "I want a palette from this" problem is actually an extraction problem. Three cases where you should put the image away and start differently:

The image is one of a series. If you're branding a product and have a dozen reference photos, extraction gives you a palette per image and no coherence across them. Better: hand-pick two anchor colors across the whole series, then build the palette from those anchors. The Monochromatic Palette Generator handles the "one anchor, build around it" job directly, with less interpretive overhead than image extraction.

The image is a mood, not a reference. You looked at a sunset and want a palette that feels like that sunset. Extraction will give you five pink-oranges that technically occur in the pixels. You'd be happier with a mood-generated palette and a lot of latitude. The Sunset Palette Generator targets this specific vibe-first case.

The image is already in a brand you can't legally use. Extracting from a competitor's product shot gets you their palette, not yours. Reach for extraction only on reference material you own or that is in the public domain; otherwise you're borrowing an identity, not building one.

The pattern: extraction answers "what colors are literally in this image." That's often not the question you had — you had "what palette would look right in a design that borrows this feeling." The second question has a better answer in a different tool.