← Back to all sparks
P

palettecore

ANALYTICS
Velocity6.3

R package palettecore by heidihelena — release notes from GitHub.

Accessible palettes generated from one seed, with every audit number computed on the hex you actually get

accessibilitycolor-sciencedata-visualizationoklchpython-r-parity
Current state
palettecore generates sequential, diverging and categorical colour palettes from a single seed using CIEDE2000 arc-length spacing in OKLCH, and audits each one for colour-vision-deficiency separation, greyscale survival, gamut and WCAG contrast. It exists as a numpy-only Python core and an R mirror validated hex-exact against shared parity fixtures, plus a CLI the project describes as its agent-friendly entry point. Four releases landed inside 24 hours in late July.
Where it's heading
The arc is about making the audit honest rather than making the palettes prettier. The 0.2.2 release, prompted by an external review, moved every diagnostic to compute on the 8-bit quantised hex codes actually returned rather than on internal floats — a change that flips results near thresholds and had been quietly overstating one deuteranopia score. The 0.4.0 helix kind and the vividness control extend the generator, but the same release also tightens its own claims, reframing helix as checked rather than assumed CVD-safe.
Prediction
Given the pattern of auditing its own assertions, expect the next release to extend the cvd_luminance_monotonic diagnostic beyond helix to the other palette kinds.

Recent moves

  1. 23d ago

    palettecore 0.4.0

    A helix palette kind traces a cubehelix-inspired path through OKLCH with evenly designed lightness steps, and a vividness control lifts chroma toward the gamut edge on every kind without touching lightness. The release also corrects a case where vividness reduced chroma at gamut-limited stops, and reframes helix's CVD safety as checked rather than assumed.

    View source ↗
  2. 24d ago

    palettecore 0.2.2

    An external review forced a real correction: every audit number is now computed on the 8-bit hex actually returned, not on internal floats. The release documents a concrete case where the old path reported a passing deuteranopia score of 6.0 while the returned colours recompute to 5.9, below threshold. Palette output is unchanged.

    View source ↗
  3. 24d ago

    palettecore 0.2.1

    A version bump so the Zenodo integration archives a release and mints a DOI. The notes confirm palettes are identical to 0.2.0.

    View source ↗
  4. 24d ago

    palettecore 0.2.0

    ⚡ SPARK

    The first public release: sequential, diverging and categorical palettes from one seed, spaced by CIEDE2000 arc length in OKLCH, with Machado CVD simulation, greyscale, gamut and WCAG diagnostics that warn on every unmet threshold. Ships as a numpy-only Python core, a hex-exact R mirror with ggplot2 scale functions, and a JSON-emitting CLI.

    View source ↗