Files
colorhash/README.md
Tai Groot bf06224d7a feat: add OKLCH-aware palette generation (#5)
* chore: update deps, fix escape codes, expand tests, add README

- Bump Go 1.18 → 1.26, simplecolorpalettes v0.9.5 → v0.9.7
- Fix swapped fg/bg ANSI escape code values in trueColorString
- Expand test suite from 2 to 13 tests (determinism, positivity, color assignment, background contrast, stringer palette)
- Add README with usage examples

* feat: add OKLCH-aware palette generation

Add GenerateOKLCHPalette() which creates n evenly-spaced colors in the
OKLCH color space at a given lightness and chroma. This produces
perceptually uniform palettes where all colors appear equally bright.

Uses the new OKLCH support from simplecolorpalettes.

Note: go.mod contains a replace directive for local development that
must be removed before merge (after simplecolorpalettes is published).

* build: update simplecolorpalettes to v0.9.8 (charmtone palette)
2026-02-22 22:02:46 -05:00

1.2 KiB

colorhash

Deterministic color assignment from arbitrary input. Feed it a string or byte stream and get back a consistent color every time.

Features

  • Deterministic — same input always produces the same color
  • Pluggable palettes — bring your own ColorSet or use simplecolorpalettes
  • Multiple output formatscolor.Color, ANSI escape codes, true-color terminal strings
  • String and byte input — hash strings directly or stream bytes via io.Reader

Install

go get github.com/taigrr/colorhash

Usage

Hash a string to a color

import (
    "github.com/taigrr/colorhash"
    "github.com/taigrr/simplecolorpalettes/palettes/html"
)

palette := html.GetPalette() // or any ColorSet
c := colorhash.StringToColor(palette, "username")
// c is a deterministic color.Color

ANSI terminal colors

fmt.Println(colorhash.Red("error message"))
fmt.Println(colorhash.Green("success"))
fmt.Println(colorhash.BIYellow("bold high-intensity yellow"))

Automatic color from a palette

sp := colorhash.CreateStringerPalette(false, false, palette)
colored := sp.GetString("username") // wraps "username" in its assigned color

License

0BSD