--- draft: true title: "Deterministically Mapping Strings to RGB Colors" aliases: ["Deterministically Mapping Strings to RGB Colors"] date: "2025-01-25" series: ["strings-to-colors"] series_order: 0 author: "Nick Dumas" authorTwitter: "" cover: "" tags: ["golang"] keywords: ["golang"] summary: "Using Go so I don't have to think about color palettes." showFullContent: false --- {{< lead >}} {{ }} ## Inspiration The XMPP site has a document describing https://xmpp.org/extensions/xep-0392.html#algorithm-genpalette ## The Plan - Take an arbitrary UTF-8 string - Generate an RGB or RGBA color code for it in a deterministic way - SHA1 the string - Interpret equally sized chunks of the hash as integers - Scale those integers into an 8-bit unsigned space ## The Implementation ### Hashing {{< highlight go >}} {{}} ### Interpolation - Not sure if interpolation is the right technical term - Using generics {{< highlight go >}} {{}} ## The Results Below is a sample of "lorem ipsum" with each word colored using this algorithm.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

It doesn't look too bad. ## Possible Improvements - Provide HSV or HSL color values - Light/dark mode awareness - Accessibility. The colors chosen are effectively random with no regard for color schemes, background, display device capability