palette themer.
upload a cover image; yala themes the landing page on it. no color picker. no fiddling. the record is the brief.
how the extraction works.
on every artwork upload, a server-side worker job runs:
- random sample — we pull ~5,000 pixels from the image at uniformly random positions. fast, doesn’t load the full bitmap into JS.
- RGBA quantization — collapse near-identical colors into buckets, count occurrences.
- luminance filter — drop near-blacks (<15% lum) and near-whites (>85% lum) before ranking. this is the bit old yala didn’t do; without it, scans of dark records always returned black as “the” color, which makes for a black landing page that’s unreadable.
- frequency rank — the top 5 buckets become your palette: surface, ink, accent, primary, contrast.
the result lives on link.palette (jsonb in postgres). landing pages render directly from it.
how much control do I get?
none, by design. if the extraction returns a palette you don’t like, the move is to upload different artwork. yala isn’t a color picker; it’s a record-themed page generator.
the exception: bio pages let you set an accent color override (single hex value) on the profile editor. if you want your bio to feel more palette-y than the cover suggests, override the accent.
when does the palette update?
every time you upload new artwork, the worker re-runs and stamps the result. landing-page revalidation happens automatically (a few seconds). until extraction finishes, the palette preview shows “extracting…” with a soft loader.