% open brand-extractor
Brand Extractor
Reads a restaurant's real colours and photo style off its own pixels, so the pitch isn't a guess.
PROBLEM
When I get ready to pitch a restaurant a new website, the first thing I want is their actual look — the colours they really use, whether their photos are dark and moody or bright and airy. I was reading it off vibe, and a vibe-guess is exactly the thing a busy owner can smell. The colour line in my recon notes kept coming back as a maybe, because nothing was actually looking at their pixels.
WHAT I BUILT
A little tool that reads a venue's real images and hands back its palette in plain words — the dominant colours with how much of the frame each one owns, the warm-versus-cool split, and the photography feel on two dials: dark-moody to bright-airy, and vibrant to muted. It reads their own website, not their Instagram. No social scraping, on purpose.
HOW IT WORKS
Three small Python files, Pillow doing the colour maths, no numpy. It pulls the images a site actually shows you — the og:image, the hero shots, CSS background images — and filters out the logos and icons so they don't skew the read. Then it names the dominant colours, works out the warm/cool share and the photo style, and tags how confident it is. If it can't find any real images, it stops and asks me to paste a couple of URLs instead of inventing a palette.
WHERE IT'S AT
Live. I ran it on our Korean restaurant's site — eight images in, and it came back warm 91%, a deep-orange and charcoal palette, vibrant and high-contrast, high confidence. That colour line in my recon notes is evidence now, not a hunch. It's wired straight into the intake step so every prospect read starts from their real look.
WHAT I LEARNED
The honest move was teaching it to refuse. If there are no real images to read, it exits and asks me for input rather than guessing — because a confident wrong colour is worse than no colour at all. A tool that pitches a restaurant the wrong palette has done damage; one that says 'I need two photos first' hasn't.
STACK
Python 3.13 · Pillow · requests
$ python brand.py --name "WATDA" --site watda.co.nz
images found: 8 (site og:image + heroes + CSS backgrounds)
palette: deep-orange 38% charcoal 27% cream 14% ...
warmth: warm 91% / cool 9%
photo: dark-moody · vibrant · high-contrast
confidence: HIGH % cd ..