Skip to content

How the algorithm for coloring the iTunes song list works

stackoverflow.com
102 pointscgs9 comments
On HN

Comments

You may find this post by Wade Cosgrove of Panic interesting

http://www.panic.com/blog/2012/12/itunes-11-and-colors/

I've taken their algorithm and ported it over to JavaScript a while ago: https://github.com/lukashed/itunes-colors

How I'd do it:

1. pick 500 random points from the album art

2. cluster them in 10 classes (k-means is an old, well understood algorithm)

3. pick the median point of dominant class for the bg

4. pick a contrasting color from a different cluster for the text

I wouldn't pick the median of the dominant class for the BG, but rather from the borders (even though this could work)

for 4 you want that, picking from one of the colors of the album or a contrasting color if this is not available from the album

How I'd do it: Use Embedly! Our extract API returns the dominant colors of all the images it finds: http://embed.ly/docs/extract/api/response#extract-images

For those that are curious, what happens under the covers is a random sampling of the image followed by a conversion to LAB color space (even better than YUV in terms of human perception) and finally some K-means clustering.

To see this in action, check out http://tightro.pe.

They also use a similar trick based on the icon colors for the iTunes ios app update feature (for those of us who still like plugging our phone or tablet into the USB cable). In the latest iTunes, when you click on an app in icon mode to find out what's new in the update, the background reflects the colors of the icon, which can make for some odd combinations...

I've done something similar in one of my older iOS apps however I used a 8x8 sample. Still an interesting read.

So iTunes changes colour for every album you click on? This sounds awful..

Not really. It changes the background colour of the album view , see http://thomaspark.me/wordpress/wp-content/uploads/2012/12/it...

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.