Settings

Theme

Hexwords: Hex colors that are similar to words

hexwords.netlify.app

792 points by cialowicz · 181 comments (172 loaded)

Reader

53 threads
karateka

I built something very similar a few years ago https://hex-colours.netlify.app/

  • gpt5

    You mean identical? Seems like OP likely got inspired by your page :)

  • wodenokoto

    Since yours hold a lot more uncommon words (by virtue of simply having many more words) a feature, if you are in the mood for updating, could be to sort by word frequency along with alphabetical sorting.

  • unnouinceput

    yours lacks #B00B1E though.

  • jy14898

    Nice, hexwords only has 1000 words, compared to your 3500

    • Jleagle

      Lots of the 2,500 don't seem very recognisable, possibly from another language?

      • abyssin

        Fesses is from French, for instance.

        • Jarmsy

          But common in informal English as a shortening of confesses.

          • wiredfool

            I've only seen that as 'fess up'

          • wizzwizz4

            In my head, it's a conjugation of "fess", which is a shortening of "confess". (Until I thought of it that way I was thinking "I've never seen this before", despite the word being in my vocabulary.)

  • hellohowareu

    Feature idea for you and OP: add the visual swatch of color which the hex color represents. Makes it much more meaningful

dark-star

So which of these actually spell the color they represent (or something closely related)? From a quick glance, I have no found any. Do color-words like that exist in other languages maybe?

  • btown

    #1C1E57 (ICIEST) is dark blue, which could hold true in certain contexts!

    #DEBA65 (DEBAGS) is brown, much like de color of de bags made of de paper.

    And on a related and exceptionally juvenile note, it should be very possible - and frankly obligatory, for those in fashion tech companies reading this - to create and sell a #B00B1E colored bra.

    • TheSpiceIsLife

      Tangentially related, and equally juvenile, I own the telephone number in Australia: 08 80087355

      Still gives me a chuckle. Grow up.

      • DeathArrow

        I just called, why didn't you pick up?

        • TheSpiceIsLife

          Voicemail not enabled and no SIP client logger in.

          Should have connected for a few giggles this arvo.

      • idontpost

        RIP your voicemail

        • phabricator

          It's 2022: RIP the concept of voicemail

          • mitchdoogle

            You think the concept of people leaving audio messages to one another is dead? That seems like something that will never die out.

            • scubbo

              The concept of people leaving audio messages _with a reasonable expectation that someone will listen to them_ is (thankfully) dying out, at least among my social circles.

              You can leave a message if you want, I'm not going to listen to it. The only entities that make unexpected phone calls are scammers and bots.

              • Smithalicious

                I get spam calls but I never get spam voice mails. As such I never pick up unexpected calls but I do listen to messages.

                Might be a regional thing?

                • scubbo

                  Given that I never get ham voice calls, it is reasonable for me to assume that any voice mails that I receive are therefore spam (but, no, you're right, I don't recall ever noticing a spam voice mail. But then I wouldn't notice one, whether it existed or not, because I don't check them)

                • jsjohnst

                  > I never get spam voice mails

                  You must not be in the United States then. Pretty much guaranteed every phone number in the US has received at least one “automobile extended warranty” voicemail.

            • rolph

              in my circle its common to email mp3 attachments

      • dr_dshiv

        OB(viously) BOOBLESS?

      • scubbo

        (EXTREMELY minor spoilers for Everything Everywhere All At Once) .

        .

        .

        .

        .

        .

        .

        My inner child chuckled to see 55378008 displayed on a calculator near the end of that movie.

  • SamBam

    #D0661E - a nice brown doggie.

    #CA771E - brown cattle.

    #C10ACA - a purple cloaca.

    #C017A1 - coital, similarly purplish pink.

    Lots of blues and greens starting with #5EA... (Sea...). #5EABED (Seabed), #5EABEE (Seabee), #5EAD06 (Seadog) and #5EA by itself.

    (I used https://hex-colours.netlify.app/, which looks like it was the original from another comment, and allows you to search pieces of words.)

  • cecilpl2

    #C0A575 (coasts) is a sandy-brown beach color.

    #6E0DE5 (geodes) definitely has that deep purple color you think of.

    And my favorite, #5A6E57 (sagest) is about as close to the color sage as you can get.

  • sisk

    #B00B00 (dark red) was my favorite

  • mbil

    Good question. I thought of an algorithm to find the hex word colors that most closely match the color they represent...

    Basically: get the color of the _word_ by doing an image search and extracting the dominant color from the first image result. Then compare that color to the hex color (in CIELAB color space) to get the color difference. Track the hex words with lowest difference.

    Here's a rough impl in Python:

      import sys
      import os
      import heapq
      
      import requests
      from google.cloud import vision
      
      from colormath.color_objects import sRGBColor, LabColor
      from colormath.color_conversions import convert_color
      from colormath.color_diff import delta_e_cie2000
      
      from bs4 import BeautifulSoup
      
      def download_image_for_query(query):
          search_key = os.getenv("GOOGLE_CUSTOM_SEARCH_ENGINE_KEY")
          search_engine_id = os.getenv("GOOGLE_CUSTOM_SEARCH_ENGINE_ID")
          resp = requests.get(
              f"https://www.googleapis.com/customsearch/v1?key={search_key}&cx={search_engine_id}&q={query}&searchType=image"
          )
          img_url = resp.json()["items"][0]["link"]
          img_content = requests.get(img_url).content
          return img_content
      
      def dominant_rgb_colors(image_content, num_colors=1):
          vision_client = vision.ImageAnnotatorClient()
          image = vision.Image(content=image_content)
          response = vision_client.annotate_image({"image": image})
          return [
              (int(c.color.red), int(c.color.green), int(c.color.blue))
              for c in response.image_properties_annotation.dominant_colors.colors
          ][:num_colors]
      
      # class to store hex word and calculate the difference from "true" image, based on image search
      class HeapibleHexWord:
          def generate_rgb_version(self):
              return tuple(int(self.hex_version.lstrip("#")[i:i+2], 16) for i in (0, 2, 4))
              
          def __init__(self, hex_version, english_version):
              self.hex_version = hex_version
              self.english_version = english_version
              self.rgb_version = self.generate_rgb_version()
              self.delta_from_true = float("inf")
              
          def calculate_delta_from_true(self):
              true_rgb = sRGBColor(*self.rgb_version)
              query = self.english_version
              img_content = download_image_for_query(query)
              test_rgb = sRGBColor(*dominant_rgb_colors(img_content)[0])
             
              # via http://hanzratech.in/2015/01/16/color-difference-between-2-colors-using-python.html
              delta = delta_e_cie2000(
                  convert_color(true_rgb, LabColor),
                  convert_color(test_rgb, LabColor)
              )
              self.delta_from_true = delta
              
          def __lt__(self, other):
              return self.delta_from_true < other.delta_from_true
      
      # scrape words from hexwords site
      hexwords_url = 'https://hexwords.netlify.app/'
      
      hexwords_page = requests.get(hexwords_url)
      soup = BeautifulSoup(hexwords_page.text, 'html.parser')
      
      buttons = soup.find_all('button', class_='svelte-1m9ptdb')
      
      hex_words = []
      for button in buttons:
          if button.text == '':
              continue
          hex_version, _, english_version = button.text.split("\n")
          hex_words.append((hex_version, english_version.replace("(", "").replace(")", "")))
      
      # iterate over the hex words, calculating the color diff between the word's hex
      # color and the "true" color based on image search
      
      hex_words_heap = []
      heapq.heapify(hex_words_heap)
      
      NUM_WORDS = 10 # looks like throttled at some point
      
      for i, hex_word in enumerate(hex_words[:NUM_WORDS]):
          print(f"working on {i}: {hex_word}")
          heapible_hex_word = HeapibleHexWord(*hex_word)
          heapible_hex_word.calculate_delta_from_true()
          heapq.heappush(hex_words_heap, heapible_hex_word)
      
      # popping from the min heap yields hexwords with smallers difference from true color
      heapq.heappop(hex_words_heap).english_version
    • mike_d

      I sometimes wish HN had the equivalent of Reddit Gold. Well done.

    • aasasd

      Alas, I'm gonna bet a lot of images are an object in the center and plenty of white or other background around it.

    • aronhegedus

      awesome! Agree with previous comment, this is cool

  • magneticnorth

    A couple more I spotted:

    #ACAC1A is a shade of green and Acacia is a type of tree.

    #57061E (stogie) is dark brown, and a stogie is a cigar.

  • failTide

    #CABB1E is kind of like a taxicab yellow

  • kbd

    #A55E55 (asses) is brown. Oh... wait.

    • withinboredom

      There is a large population of brown asses in the world.

      • mauvehaus

        The issues isn't the color of the asses, but rather that the word spelled is assess. As in, the tax assessor is coming to assess our property now that we put on that addition. I expect our assessment to go up.

  • myrmidon

    #AC1D1C is red, just like its PH test- that was the most satisfying one to me at first glance.

  • stingrae

    maybe #5EABED, which is a shade of blue?

  • bee_rider

    Kind of a stretch, but #B05535 (bosses) and #BE57ED (bested) are both sort of purplish colors that looter games like Borderlands sometimes use for "pretty rare, but not unique" items (which would typically be dropped by a boss monsters when you defeat them).

  • swid

    How many colors do you typically identify or would be willing to accept? Somewhere between 10 and 25 would be sufficient… not every word will have a color association, but many will have more than one.

    I think you need to be pretty strict to not find a match after 50 words.

  • wwilim

    #ACCE55 is green and #F1A5C0 is pinkish red, great colors for a login prompt

  • jsf01

    5EABED (a blue) and B00B00 (blood red) were the best matches I found

  • davchana

    Similar things in a number's value v/s its number of characters I think is called True Number, & only 4 is a true number like 4 value & FOUR has exact 4 letters.

  • madcaptenor

    My children definitely have clothes in colors close to #BAB1E5. #B00B00 kind of looks like blood.

  • donpott

    A bit of a stretch, but I remarked upon #ACE71C (acetic), which is an oily, vinegary green

  • rhplus

    SEABED - blue CASSIS - purplish pink berry color

  • CamelRocketFish

    #C0C0A5 (COCOAS) Is brown

tralarpa

And also three-digit color codes, such as #BAD. And for non-hex colors, we have this: https://stackoverflow.com/questions/8318911/why-does-html-th...

pdpi

Hexspeak[0] is a time-honoured tradition, with constants like 0xDEADBEEF used to mark uninitialised memory. Fun to see it applied to colours.

0. https://en.wikipedia.org/wiki/Hexspeak

  • collegeburner

    Yeah B16B00B5 and CAFEBABE are 2 of my favorite funnier ones Ive used a bunch of times. They make for more interesting placeholder values than "foo" and "bar" anyway.

    • hypertele-Xii

      Without commenting on the reasonability of it, you may want to be aware that a growing population of vegetarian and female tech workers may find these offensive.

      • collegeburner

        Beef dies in the wild too so DEADBEEF should not, I do not care if they want to use B16D1CC instead :) I can't see why CAFEBABE would be offensive though.

        ...And honestly I guess I don't care? If people are that mad about some levity then I probably do not want to work with them.

        • mitchdoogle

          If you want levity, why not just use terms that aren't offensive? If you can't think of a joke without being sexist or misogynist, then that's on you - don't blame others for "not having a sense of humor"

      • havblue

        You might get a pass on #cafebabe if your local baristas don't speak 1337.

      • avgcorrection

        Dead beef is offensive (potentially) how?

      • goldenkey

        I'm pretty sure both women and men love big boobs and big dicks...

    • netsharc

      Shouldn't that be B16?

      I'd make a joke about beware of the woke crowd coming for you, but I think even joking about that causes offense nowadays.

      • hypertele-Xii

        No 6 looks like a 'b'. I think closest to 'g' is 9.

        • function_seven

          But 'B' is already there, and all the other characters are uppercase, so '6' -> 'G' scans easier to my eye.

          '619' may be 'big', but it doesn't scan that well. 'B16' looks more like 'BIG'

  • jerrysievert

    I remember seeing 0xdeadbeef for the first time in dbx, which was my first experience with seeing uninitialized memory - was really surprised to not see it in the list on the website, since it's rgb+o (red/green/blue + opacity).

kretaceous

I've always wanted to make something like this! This is awesome. Filters to weed out leetspeak words, use only letters/numbers, etc would be great.

It was on my "toy project list" after reading these two very interesting stories/threads:

The famous CAFEBABE story: https://stackoverflow.com/questions/2808646/why-are-the-firs...

Why does HTML think “chucknorris” is a color?: https://stackoverflow.com/questions/8318911/why-does-html-th...

want2takearide

If anybody is wondering SOBBED (#50BBED[1]) is pretty close to Zima Blue[2].

[1]: https://color-hex.org/color/50bbed

[2]: https://en.wikipedia.org/wiki/Zima_Blue_and_Other_Stories

mattrb

Reminds me a lot of https://c0ffee.surge.sh

c22

I'm gonna start using #ACCE55 to indicate successful login and #B00B00 on failure.

amelius

7->T and 6->G is pushing it too far, imho.

mikece

Where has this been all of my career? Very #BADA55 indeed!

gtm1260

Ya'll are missing my favorite one, although I guess its technically two words. "Dad CEO": #dadce0

nr2x

This should be turned into some hybrid between Wordle and MDN.

techbelly

Nicely done. This is a fun idea that comes up time and again.

I think I might have made one of the first implementations way back in 2011: https://web.archive.org/web/20111117062015/techbelly.com/sem...

And someone quickly made a better version inspired by it here: http://lexadecimal.pixielabs.io/

turtledove

Found a slur in the dataset, not sure if these are programmatically generated (I assume so) but may want to consider filtering those out.

  • Veen

    It's worth pointing out that they are slurs in the U.S., not globally. One is a type of meatball where I'm from.

    • turtledove

      Yep. But if your user base is likely to include Americans, then you might want to consider filtering them out. (As it could be shocking to read.)

      Note the word consider, by the way. I'm not demanding anything here, I'm saying the author should make a deliberate choice about their inclusion rather than including them just because they were auto generated.

  • joshuahaglund

    For the curious, I think they mean decimal values 16408693 and 16410119. Which have other archaic meanings but their primary modern meanings are a slur. 16410349 is apparently British slang for exhausted, so maybe gets a pass?

CobrastanJorji

#5A6E57, SAGEST, is interesting because it appears to be the most sage-like color on the board and is therefore autological.

svnpenn

Doesnt work with Firefox

http://0x0.st/oMvf.png

zem

in my last job we used to work #C0FFEE coloured elements into our UI as a little easter egg of sorts.

Deuterium

Nice! I made a hexwords mode on https://www.lazycolor.com/ I haven't really touched the site in a decade... maybe I'll update it next decade.

abathur

This is dumb, and I am in love with it. I'll have to use some of these... :)

xigoi

I have a project named “xidoc”. I spent a long time trying to come up with a logo and a primary color, then I got the cute idea of using the letter ξ (xi) in the color #d0c (which happens to be a quite lovely magenta).

andrewbaron

From 2014 http://bada55.io/ includes a much more expansive set considering hex colors do not require all six characters. #101

andix

You can do the same with ipv6 addresses. Something like dead:beef::babe

thenoblesunfish

Would be fun to plot all these on a color wheel to see how non-uniform it is, as a consequence of the distribution in English words (which can be represented this way).

langsoul-com

Reminds me about when people had to generate a string of random characters but take anything out that's close to a slur.

Forgot what the end result was, no vowels and numbers?

  • IntrepidWorm

    Yeah, it's a prime example of a sisyphean task. Language is too varied and fluid, and the internet is far too juvenile to be censored for any length of time (not a dig, but you try telling reddit they can't say slurs anymore).

fjfaase

My initial and surname when written as an hexcode make a nice orange colour: Texas rose, according to some website.

Are there more people that can write their name as a hexcode?

phabricator

Thanks for making an interesting article and only plugging your site at the end. I don't mind submarine ads if I can learn something from them.

sigil

Really disappointed #dadb0d didn't make the cut.

duffyjp

You should collaborate with https://colornames.org/

danielvaughn

Whenever I give a demo, I always use #BADA55 because I have the maturity of a 12 year old. This will definitely expand my repertoire.

loudthing

This is simultaneously interesting and useless.

paradite

I use d3 for visualization, and my favourite default color for everything is #d3d3d3. Works well in a lot of situations.

tunesmith

I love that "booboo" is blood red.

soheil

I wonder if there is another base other than 16 that would generate the most beautiful colors with most words.

tonicbbleking

To me, #CA551A wins it. Looks a lot like cassia tree bark, aka cinnamon.

apricot

I like that AC1D1C is red but BA51C is green. Hex code litmus paper.

jalk

Love it. Now I need some nice looking/sounding palette phrases :-)

ljoshua

#B00B00 is one of my favorites as a dad with young kids (it’s red). :)

phelm

Didn't someone once set the PETA website to #BEEEEF

bezoz

This would make a pretty cool MIT Mystery Hunt puzzle!

oniony

I really don't like this colour: #DE7E57

hajimuz

Badass color is not bad ass at all… :)

thrdbndndn

What does "alpha" switch do?

uwagar

is it just for me? the copy icon seems on top of every word obstructing the view... :(

gloryless

This is amazing, love it!!

danreedx86

ahem, you missed #d00d00

nathias

pretty cool, now we need something like a prettier plugin that forces hexes to the nearest hexword to make it useful

iso1631

No #B00B1E?

joshwcomeau

I love this

jjslocum3

What a fun and fantastic mnemonic tool!

travisgriggs

#BADA55 is brown.

Giggle.

spencerflem

I love this <3

kwatsonafter

This is the kind of quirky, brilliant link I crave from Hacker News. If I was near you creator, I would garland you and rub your feet.

superb-owl

You many want to consider a naughty words filter. https://github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and...

  • warning26

    Since the raison d'être of this project seems to be spelling ridiculous things out of hex colors, I think it would lose a lot of its appeal with such a filter.

  • failTide

    I understand a lot of those, but why is "beaver cleaver" on the list? I could see how it might be used in a dirty way, but that can't be the most common way it's used, right?

    • hoppyhoppy2

      Well it's on the filter list, so someone must consider it more offensive than words not on the list such as "gaping poophole thrusting".

    • bee_rider

      The "dirty" use seems pretty silly (sounds like something out of a crass 80's movie or something), but I can't really imagine using it in a non-dirty manner either. I mean I know people have hunted and trapped beavers, but when the capture them they don't just, like, thwack them with a giant cleaver, right? Would ruin the pelt if nothing else.

  • samb1729

    Or better yet, they could ignore this suggestion entirely!

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection