1.0.1
September 14th, 2026
- Storage is namespaced. Everything the addon writes lives under one
imagecolorskey on the asset, holdingcolors,stampand the pinnedcolor. If a container blueprint already has animagecolorsfield, or an asset carries animagecolorsvalue that Image Colors did not write, the addon keeps out: no sampling, no swatches, no overwrite; the command and the action report those images with the reason in the log. - Templates follow.
{{ hero:imagecolors }}prints the chosen color,:colorgives that color in every format,:colorsloops the palette,:is_pinnedtells whether an editor chose it.{{ hero:color }}and{{ hero:colors }}are gone. GraphQL has anImageColorstype with the same three fields. - The action reports failure. Extract colors now fails with a message when none of the selected images could be read, and with "Colors extracted for 1 of 2 images" when some could not; the reason is in the log. It used to say "Colors extracted" regardless.
- The README's text-over-image example was wrong.
:contrastis measured against the solid color, so it says nothing about text on the photo itself. The example now puts the title on a band in the image's color, and the documentation explains the difference. - No third-party artwork. The pipette icon is the addon's own drawing and the plus is Statamic's own icon; the Lucide credit is gone.
- Conditions work.
{{ if hero:imagecolors:color:is_dark }},{{ if hero:imagecolors:is_pinned }}and comparisons like{{ if hero:imagecolors:color:contrast >= 4.5 }}were always false, because Antlers refuses to call methods inside a condition. The color values now expose properties instead.
1.0.0
September 14th, 2026
Image Colors gives every image asset a palette of its own colors, and lets an editor decide which one is the color of that image. Templates get it as hex, RGB, HSL or OKLCH, plus whether it is light or dark, which text color reads on it, and how much contrast that gives. Use it for a background behind a photo, a caption over it, a placeholder while it loads, a card tinted to match. The image file itself is never touched.