Skip to content

Releases: gauravxsuvo/Hueclid

v0.4.0 - Phase 2: data pipeline

Choose a tag to compare

@gauravxsuvo gauravxsuvo released this 08 Sep 16:23
2ac2043

v0.4.0 - Phase 2: data pipeline

Same running app as v0.3.0. This release is backend research infrastructure only, not part of the deployed site, it doesn't change anything a visitor to hueclid.cinexg.com sees or does. It's the groundwork the next phase (the real dE00 clustering engine) needs to actually be runnable at dataset scale.

What's new

  • Postgres histogram cache: the decode -> linear-light resize -> sRGB->Lab -> histogram-binning step is now cached in Postgres, keyed by a hash of the image bytes. Binning is deterministic, so a repeat image skips straight to clustering instead of redoing that work. Fully opt-in via DATABASE_URL, and fails soft: no database configured, or an unreachable one, and everything behaves exactly as it did before this existed.
  • A resumable, parallel ingestion CLI: walks a directory of downloaded UI screenshots and populates the same cache. Idempotent (an interrupted run just resumes, nothing gets redone) and parallelized across CPU cores, since the binning step is CPU-bound and embarrassingly parallel across images, that took a real Rico ingestion run from an estimated 4-5 hours down to under 40 minutes.
  • Validated at real scale, not just synthetic tests: 66,263 Rico screenshots, 1,460 Enrico screenshots, and 57,544 WebUI screenshots, all binned and cached. 116,356 unique images after dedup (Enrico is a curated Rico subset, so it correctly reuses Rico's cached bins instead of recomputing them).

Not in it yet

The real dE00 k-medoids clustering engine, Oklab wired into the extraction and API path, the 3D visualization, and the role-graph palette synthesis research contribution. Same list as the last few releases, just one space closer, this phase was the plumbing that makes the next one runnable on real data instead of one image at a time.

Running it

Nothing changes for the deployed site, still self-hosted at hueclid.cinexg.com, container images publish to GHCR on every push to main. The Postgres cache and ingestion tool are for local/research use, see the README and backend/.env.example for setup.

v0.3.0 - Oklab, and an upload UX pass

Choose a tag to compare

@gauravxsuvo gauravxsuvo released this 11 Aug 05:57
22c51a1

v0.3.0 - Oklab, and an upload UX pass

Same running API as v0.2.0. This release adds the second color space and cleans up the parts of the site people actually touch: the upload flow, the header, and a couple of extraction bugs.

What's new

  • Oklab and Oklch, conformance-checked against CSS Color 4's published matrices and Ottosson's original reference tables, not just derived from memory. Unlike CIELAB, Oklab is a true Euclidean metric space, so plain Euclidean distance is already the perceptually correct one and the arithmetic mean is a valid cluster centroid. That makes it a fair, first-class comparison arm against CIELAB + dE00 instead of a strawman. 21 new tests cover the reference values, the round-trips, and that mean-minimizes-distance property directly. This release adds the color-space primitives; wiring Oklab into palette extraction itself is a later step.
  • Upload flow redesign: a live preview of the chosen image sits in the drop zone instead of a generic prompt, with an explicit "Replace image" control, and the page scrolls to the result on its own once extraction finishes.
  • Header redesign: fixed, rounded, with a dedicated GitHub button and clearer separation from the primary nav links.
  • Smooth scrolling across the site (Lenis), fully gated behind the reduced motion preference.

Also fixed

  • Extract now blocks on an invalid color count instead of silently clamping it to the nearest legal value on blur
  • Transparent PNG/WEBP uploads no longer contribute a phantom black swatch to the palette. Pillow's RGB conversion was discarding alpha and keeping whatever RGB happened to sit underneath invisible pixels; transparency now composites onto white first, matching how the image actually renders in a browser
  • The roadmap timeline's unreleased-phase text no longer gets stuck blurred on touch devices, which had no pointer to clear the hover-gated blur with

Not in it yet

The real dE00 k-medoids clustering engine, Oklab wired into the extraction and API path, the 3D visualization, and the role-graph palette synthesis research contribution. Same list as the last two releases, just one space closer.

Running it

Nothing changes here from v0.2.0. Still self-hosted at hueclid.cinexg.com, container images publish to GHCR on every push to main. See the README for local setup.

v0.2.0 - Landing page rebuild

Choose a tag to compare

@gauravxsuvo gauravxsuvo released this 08 Aug 17:18
250bb6a

Same color engine and API as v0.1.0, this release is entirely the site people actually land on.

What changed

  • The upload tool moved to the first screen, next to the headline. Four sample images ship with it, real mesh gradients run through the real pipeline, so a first visit can see it work without finding a file first
  • New palette gallery: three columns of cards on independent scroll speeds, each one's five colors growing in as it arrives, every swatch copies its hex on click
  • New visual language: warm paper and ink instead of flat white and black, Instrument Serif alongside Geist, five accents tuned separately for light and dark, light as the default with a toggle
  • Word by word scroll reveals throughout, a color band that cycles palettes with a wipe instead of a color blend, and a scroll linked progress rail
  • Open Graph and Twitter Card metadata, so links to the site now carry a real preview image and description

Also fixed along the way

  • the upload control was unreachable by keyboard, display:none had taken it out of the tab order
  • there was no navigation at all on a phone below 640px
  • overflow-x: hidden on the page body was quietly breaking position: sticky, switched to overflow-x: clip

Correction to the v0.1.0 notes

That release said nothing was hosted publicly on purpose. That's no longer true and hasn't been since right after it was tagged: the project has been running at hueclid.cinexg.com since the v0.1.0 commit, this release just makes that the actual front door.

Not in it yet

Same as before: Oklab as a first-class color space, the real dE00 k-medoids clustering engine, the 3D visualization, and the role-graph palette synthesis research contribution.

v0.1.0 - Phase 0: Foundation

Choose a tag to compare

@gauravxsuvo gauravxsuvo released this 06 Aug 04:29
dbdcc00

The first tagged release. Core color math plus a working end-to-end slice: upload an image, get back a ranked, weighted, accessible color palette.

What's in it

  • sRGB to linear to XYZ to CIELAB conversion, vectorized, conformance-tested against all 34 Sharma et al. (2005) reference pairs for CIEDE2000
  • 10,000-sample round-trip property tests, max error under 1e-6
  • Proper gamut mapping for out-of-gamut colors (CSS Color 4 / Oklch chroma reduction), not hard clipping
  • Lab-space histogram binning and weighted k-means palette extraction
  • FastAPI /api/v1/extract endpoint with validation, CORS, and a full test suite (66 tests passing)
  • Next.js frontend: drag and drop image upload, live palette preview, area-weighted swatches
  • CI on every push and PR: backend tests plus lint, frontend lint plus type-check plus build
  • Docker-ready for self-hosting, both backend and frontend

Not in it yet

Oklab as a first-class color space, the real dE00 k-medoids clustering engine, the 3D visualization, and the actual research contribution, APCA-constrained role-graph palette synthesis. That's all still ahead.

Running it

Nothing is hosted publicly on purpose at this stage, this release is meant to be run locally. See the README for setup.