Skip to content

Instantly share code, notes, and snippets.

@adamjmurray
Last active April 15, 2021 22:07
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adamjmurray/21d7d3ae1f2ef8c66a19 to your computer and use it in GitHub Desktop.
Save adamjmurray/21d7d3ae1f2ef8c66a19 to your computer and use it in GitHub Desktop.
Ableton Push Color Map

The MIDI velocity / CC value (depending on the button) determines the color of the Ableton Push as follows. Names were taking from Ableton's python scripts for the Push interface, which can be found @ https://github.com/gluon/AbletonLive9_RemoteScripts/blob/master/Push/Colors.py#L165

See also simplified list @ https://gist.github.com/adamjmurray/430a7a930305b315c48a

For more information on how to set Push colors in User Mode, see Julien Bayle's guide @ http://julienbayle.net/ableton-push/#usermode

The numbers below are the velocity value for MIDI note-based buttons, or the CC value for MIDI CC-based buttons (i.e. the top 2 rows above the 8x8 matrix).

PUSH COLORS

0   black / off
1   dark grey
2   grey
3   white

4   white-red (rose?)

5   red [bright]
6   red
7   red [dim]

8   red-amber

9   amber [bright]
10  amber
11  amber [dim]

12  amber-yellow

13  yellow [bright]
14  yellow
15  yellow [dim]

16  yellow-lime

17  lime [bright]
18  lime
19  lime [dim]

20  lime-greeinish

21  green [bright]
22  green 
23  green [dim]

24  green-spring

25  spring [bright]
26  spring 
27  spring [dim]

28  spring-turquoise

29  turquoise [bright]
30  turquoise
31  turquoise [dim]

32  turquoise-cyan

33  cyan [bright]
34  cyan
35  cyan [dim]

36  cyan-sky

37  sky [bright]
38  sky
39  sky [dim]

40  sky-ocean

41  ocean [bright]
42  ocean
43  ocean [dim]

44  ocean-blue

45  blue [bright]
46  blue
47  blue [dim]

48  blue-orchid

49  orchid [bright]
50  orchid
51  orchid [dim]

52  orchid-magenta

53  magenta [bright]
54  magenta
55  magenta [dim]

56  magenta-pink

57  pink [bright]
58  pink 
59  pink [dim]

60  bright orange

61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
@brunchboy
Copy link

I’m working on supporting Ableton Push as a control surface for Afterglow, an open source lighting control system, and I came across this gist while trying to figure out how to color the pads. It was very helpful, and I would like to contribute some additional discoveries I have made. I wanted to be able to approximate any color on a pad, so to get a deeper understanding of the palette, I rendered the first sixty note colors to the grid, starting at the bottom left. Doing so revealed something rather intriguing:

Push pad palette

As others have described, the colors are in related groups of four, starting with a grayscale ramp from black to white. There has been some confusion about the nature of the first color in each subsequent group, including speculation that they might be a blend between the current and following group. But when laid out like this, it is evident that the first color is a desaturated (lightened, blended with white) version of the group color. Then we have three fully saturated versions of the color, in maximum, medium, and low brightness.

But what also struck me was the arrangement of the hues. The first group is red. Then it moves through the rainbow. It seemed that if we analyzed color in the hue-saturation-lightness color space, it might be possible to algorithmically translate any color to the best matching note value. And indeed, this turns out to be the case! My attempt at coding this up has allowed me to take any incoming color object, and come up with a good approximation of that color on an Push pad. The source is here but as an aid for people unfamiliar with Clojure (or Lisp-like languages), here is the algorithm in pseudocode:

  • If the lightness of the color is less than 3, consider it black, and send a velocity of zero. (Lightness ranges from zero, black, to 100, pure white. For pure, saturated colors, the brightest you can get is a lightness of 50, after that point they start to desaturate and turn white.)
  • If the saturation of the color is less than 20, consider it grayscale, and send a note value from the first chunk, depending on the lightness. For lightness < 15, we send 1, the dark gray. For lightness from 15—37, we send 2, the medium gray, and for lightness >= 37, we send 3, white.
  • Otherwise, we treat it as a color, and figure out which color chunk it belongs in by dividing the hue by 360 (the rainbow is mapped onto a hue circle with red at zero), multiplying by 13 (the number of color chunks the pads support) and discarding the fractional part. That tells us which color group to use, but we need to multiply by four (the size of each color group), and add 4 (to skip the first, grayscale group). That gets us the note value of the first color in the correct color group, and now we just need to account for the lightness.
    • If the lightness is > 60, we use the desaturated (whitened) version of the color, and add nothing.
    • If the lightness is between 37 and 60, we send the brightest of the fully-saturated versions of the color, by adding 1.
    • If the lightness is between 15 and 37, we send the medium brightness fully-saturated version of the color, by adding 2.
    • If the lightness is less than 15, we send the dim fully-saturated version of the color by adding 3.

I was delighted to find that Ableton had provided such a useful palette in the Push, and look forward to making use of it! I hope this information can help others, as well.

I believe the note values beyond 60 are arranged to be convenient for use by the functional modes that Live uses for the pads, with related colors next to each other. Most, if not all, of the colors in that range seem to be duplicates from the hue range, just arranged differently.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment