Color Wheel Picker

A wheel of 16 named colors, one fair spin — for team assignments, art prompts, and every "we both wanted the red one" standoff. Each name holds a 22.5° segment and wins 6.25% of spins, figures computed at build time by the engine that runs the wheel. The names are the picks; edit them into any palette you like.

Spin: sixteen colors

The pick is the color NAME on the segment — segment fills are just the wheel's drawing palette.

Press “Spin the wheel”. The winner is drawn by cryptographic randomness the instant you press — the spin you watch is just the announcement.

Small disputes, instantly settled

Color choices are strange: they are almost never important and yet reliably contested. Which color each player gets in the board game. Which team is "red team" in training. Which color the kids' rooms get painted first. What color tonight's art-class still life should feature. The wheel converts each of these from a negotiation into a draw that nobody can relitigate — the spin history stands as the record.

Everything below is a walk through what the engine actually does with this preset. Every angle, percentage and count on the page is computed at build time by the same code that runs the wheel, and the worked draws use scripted bytes so they can be replayed — a live spin draws its bytes from crypto.getRandomValues instead. The distinction this wheel depends on — the names being picked versus the fills the segments are drawn in — has its own guide, Segment geometry and colours; the full mechanism is on the methodology page, and the rest of the guides are collected at /guides/.

What the preset is, and how to change it

The preset is 16 color names in a fixed order: Red, Orange, Yellow, Green, Teal, Cyan, Blue, Navy, Purple, Magenta, Pink, Brown, Black, Gray, White, Gold. They are ordinary text labels loaded into the same editable entry list every other wheel uses, so nothing about them is special to the engine. A wheel of 16 names is divided into 16 equal segments of 360/16 degrees, in list order, each 22.5° wide, and each name wins 6.25% of spins. Edit the list and the wheel is rebuilt from whatever you leave: delete the neutrals, add the two shades you are actually arguing about, or replace everything with a palette of your own. Edited lists are saved in your browser's local storage so they survive a reload, and Reset list puts the 16 default names back. Because the entries are labels, a name does not have to be a color at all; the engine cares only that it fits on a segment.

16 names, 8 fills

The one thing this wheel has to be clear about is that the color you see on a segment is not the color being picked. Segments are painted from the site's fixed drawing palette of 8 fills, cycled in list order, chosen so that neighbouring segments contrast and the white label text stays readable on every fill. The pick is the name on the segment; the fill is only where the name is drawn. The table is the engine's own output for this preset — index, name, the angles the segment occupies clockwise from the pointer, the midpoint the pointer rests on when that name wins, and the fill it is painted with.

Index Name (the pick) Arc Midpoint Fill (the drawing) Palette slot
0 Red 0°–22.5° 11.25° #7e22ce 1
1 Orange 22.5°–45° 33.75° #2563eb 2
2 Yellow 45°–67.5° 56.25° #047857 3
3 Green 67.5°–90° 78.75° #b45309 4
4 Teal 90°–112.5° 101.25° #dc2626 5
5 Cyan 112.5°–135° 123.75° #0e7490 6
6 Blue 135°–157.5° 146.25° #db2777 7
7 Navy 157.5°–180° 168.75° #4d7c0f 8
8 Purple 180°–202.5° 191.25° #7e22ce 1
9 Magenta 202.5°–225° 213.75° #2563eb 2
10 Pink 225°–247.5° 236.25° #047857 3
11 Brown 247.5°–270° 258.75° #b45309 4
12 Black 270°–292.5° 281.25° #dc2626 5
13 Gray 292.5°–315° 303.75° #0e7490 6
14 White 315°–337.5° 326.25° #db2777 7
15 Gold 337.5°–360° 348.75° #4d7c0f 8

Two things follow from that table. First, the fills repeat: 16 divided by 8 leaves a remainder of 0, so the palette cycles exactly 2 times and every fill appears on 2 segments — Red and Purple share one, for instance. A shared fill means nothing: those are indices 0 and 8, separate outcomes at 6.25% each. Second, the fill belongs to the position, not the word. The segment labelled Red sits at index 0 and takes the first palette fill, #7e22ce; reverse the list and the engine reports the same fill, #7e22ce, at index 0 — now under the name Gold. Whether a fill happens to resemble the name printed on it is coincidence, and the wheel does not try to arrange one. The palette's single adjustment — the last segment takes the second palette fill whenever plain cycling would give it the same fill as the first — stays quiet on this preset, because a remainder of 0 never hands the last segment the first fill. Trim the list to 9 names, one more than the palette holds, and it wakes: the remainder becomes 1, the last segment (Purple) would wrap to #7e22ce beside the first, and the engine paints it #2563eb instead. The segment geometry guide walks through the cycle and the boundary arithmetic for every wheel size.

One scripted spin, byte by byte

Scripted spin on the 16-color wheel. Feed the engine the byte 195 and ask it to spin the preset. It asked the byte source once: the byte's excess top bits were masked away, leaving index 3, the name Green, with a landing angle of 78.75° — the midpoint of that segment, which the rotation is then calculated to decelerate onto.

The mask is doing the work there. The engine keeps just enough bits to cover the 16 names and ignores the rest of the byte, which you can see by feeding it two bytes that differ only in their top bits: byte 3 and byte 195 both produce Green. Rejection sampling is the other half of the mechanism — any masked value at or beyond the segment count is discarded and a fresh byte drawn — but on this particular count it never fires. The build ran every one of the 256 values a byte can hold through uniformInt as the first byte of a spin on the 16-name wheel: all 256 were accepted on the first draw, 0 were rejected, and the accepted bytes fall on the 16 names exactly 16 times each. That is a property of the count, not a shortcut in the engine. Delete one name — Gold, say — and the same exhaustive run on 15 names accepts 240 bytes, rejects 16 and redraws for each, and still lands exactly 16 bytes on every name. A remainder would not discard those 16 values at all — it would silently favour low-numbered segments, the modulo bias the methodology page describes. Scripted, the redraw looks like this: bytes 15 then 195 on the 15-name wheel cost 2 draws — the first masked value fell at or beyond 15 and was discarded, and the second gave Green. On a live spin the bytes come from the browser's cryptographically secure generator, the pick is made the instant you press Spin, and only then does the roughly four-second ease-out rotation begin — a rotation calculated to decelerate onto the segment that already won. If your system asks for reduced motion, the rotation is skipped and the identical draw is announced at once.

Assigning colors to several teams

Tick eliminator mode and each spin removes the name it picks, which is exactly what handing out team colors needs: no two teams can land the same color, and nobody chooses. The convention is yours to fix before the first spin — the walk-through gives the first pick to Team A and works down the list — and the engine supplies the draws. Each one is a fresh uniform draw over the names still on the wheel: 1/16 for the first team, 1/15 for the second, and so on. Below, 4 teams are assigned with scripted bytes; every row is the engine's own output.

Spin Team Names on the wheel Chance each Assigned Left after
1 Team A 16 1/16 (6.25%) Magenta 15
2 Team B 15 1/15 (6.67%) Yellow 14
3 Team C 14 1/14 (7.14%) Blue 13
4 Team D 13 1/13 (7.69%) White 12

Result: Team A Magenta, Team B Yellow, Team C Blue, Team D White, with 12 names still on the wheel for anyone who joins late. Spin 2 needed 2 draws because a scripted byte fell outside the shrinking range and was rejected — the redraw rule applies at every step, and it is what keeps the second draw at exactly 1/15 rather than tilted toward the top of the list. Elimination states are immutable values, so the sequence above can be replayed exactly; the spin history of a live run lives only on the page and dies with the tab. Let the mode run to the end and it becomes a knockout: with a tape that hands over byte 0 every time, the engine removes Red first, continues in list order, and needs 15 spins to leave Gold as the survivor — an order entirely of the bytes' making, which is the point. Because every spin is uniform over what remains, each of the 16 names survives a full run with probability exactly 1/16, or 6.25%. Two practical rules follow from the mechanism: eliminator mode needs at least two entries — with one, the engine answers "Eliminator mode needs at least two entries." — and editing the list mid-elimination restarts the elimination on the new list, so settle the roster of colors before the first team spins. Eliminator mode has its own guide, Eliminator mode, explained, and running a wheel for a room of people another, Using the wheel for groups.

Custom palettes through the parser

Paint finalists on one line. Paste Sage, Terracotta, Ochre, Slate, Oatmeal as a single line. Because that one line contains commas, the parser splits on the commas and trims each piece, giving 5 entries; the same names on 5 separate lines parse identically. The resulting wheel has 5 segments of 72° each, and every finalist wins 20% of spins.

Multi-line input keeps its commas. Type "Rust, dusty", "Mint, pale", "Navy, inky" on 3 separate lines and the parser returns 3 entries with the commas intact — the first is "Rust, dusty" — because splitting on commas happens only when the whole input is a single line. Entries are trimmed and blank lines dropped, so stray spaces and empty lines cost nothing. Duplicates are the trap worth naming. Type Red, red, RED, Blue on 4 lines and the parser keeps all 4, because each line is an entry: the name red then occupies 3 segments and wins 75% of spins, which is either a deliberate weighting or an accident. Tick Remove duplicate entries and later copies are dropped case-insensitively, first occurrence wins: the list collapses to 2 names, "Red" keeps the capitalisation it was first typed with, and each name is back to 50%. The caps are equally plain and never silent. A single label of 83 characters is refused with "Entries are limited to 80 characters — "Ultramarine Ultramar…" is too long to fit on a segment." — the limit is 80 characters so a label still fits on a segment — and a palette of 101 shades is refused with "A wheel holds at most 100 entries — this list has 101. Remove some entries; nothing was silently dropped." Nothing is trimmed and nothing dropped in either case. The parser's rules are collected in Entry lists and parsing rules.

Sharing a palette by link

Copy share link percent-encodes each entry and joins them with | into a #items= fragment on this page's address, so a palette travels as text and nothing else. The paint finalists become https://spinthatwheel.net/color-wheel-picker/#items=Sage|Terracotta|Ochre|Slate|Oatmeal, 87 characters in all. Commas survive the trip because they are encoded rather than interpreted: the 3 yarn lines encode to Rust%2C%20dusty|Mint%2C%20pale|Navy%2C%20inky, and decoding returns the same 3 entries, commas included. The full preset encodes to 91 characters against a cap of 1800, so the default list fits with room to spare; a list that would not fit gets an honest error rather than a truncated link, and a damaged link is reported as damaged. Browsers do not include the fragment in web requests: whoever opens the link has the identical wheel rebuilt locally, and the list is never sent to the hosting server. The details are in Share links and privacy.

As a creative constraint

Artists and crafters use random color draws as deliberate constraints: spin twice and work only in those two colors; spin daily for a month-long palette challenge; spin to break the habit of reaching for the same comfortable blues. A constraint you did not choose pushes work somewhere your taste would not have gone — which is the entire value of randomness in creative practice.

Reading the result, and four misreadings

The winner is drawn the instant you press Spin; the result line under the wheel is written when the rotation settles onto it — or at once if your system asks for reduced motion — and the animation is presentation, not the draw. The spin history lives only on the page and dies with the tab. Four readings of that history are wrong, and each is wrong for the same reason: the pick comes from the bytes, not from the drawing. First, "that fill happens to resemble the name on it, so the wheel was built to favour that segment" — fills follow position, every fill appears on 2 segments, and each name wins 6.25% of spins. Second, "it slowed right past Gold, so Gold nearly won" — the rotation was calculated to stop on the winner, and no other segment was ever in contention. Third, "Red has not come up all afternoon, so it is due" — each spin is an independent draw at 6.25%, whatever came before. Fourth, "eliminator mode changes the odds" — it changes what remains, and each remaining name stays exactly as likely as the others at every step. To check rather than trust, the rigging guide walks through what to look for, and the browser's network tab will show that no request carries your list.

Assigning colored teams usually means assigning people first — the custom wheel with eliminator mode deals out names without repeats. The Dice Wheel handles turn order once teams exist, and the Zodiac Wheel is the other fixed-theme wheel on the site.

Frequently asked questions

Why 16 named colors instead of random hex codes?

Because the use cases are human: "your team is Teal" works at a glance, while "#4a9b8e" means nothing without a screen. 16 names span the familiar spectrum plus the practical neutrals (black, gray, white, brown, gold). If you need hex-level precision you need a color tool, not a decision wheel.

Are the wheel’s segment colors the colors being picked?

No — the segments cycle through the site’s fixed drawing palette of 8 fills, which exists for contrast and readability. On this 16-name wheel the palette cycles 2 times, so Red and Purple share a fill and share nothing else. The pick is the NAME on the segment. A wheel that tried to paint each segment its own color would make Black, Navy, and Purple unreadable neighbors.

How do we assign colors to several teams fairly?

Eliminator mode: each spin assigns the drawn color to the next team and removes it, so no two teams can land the same color. In the scripted walk-through on this page, 4 spins gave Team A Magenta, Team B Yellow, Team C Blue, Team D White and left 12 colors on the wheel — each spin a fresh uniform draw over what remained.

Can I put my own palette on the wheel?

Yes — replace the lines with anything: house paint finalists, brand-color candidates, yarn colors for the next project. The wheel draws uniformly over whatever list you save. Pasting "Sage, Terracotta, Ochre, Slate, Oatmeal" on one line gives 5 entries at 20% each.

Why is the segment labelled Red not painted to match its name?

Because fills belong to positions, not words. Index 0 always takes the first palette fill, #7e22ce, whatever name sits there: reverse the list and the engine gives that same fill to "Gold". Whether a fill resembles the name on it is coincidence, and it changes nothing about the draw.

Does removing a color change the odds for the rest?

Yes, and equally for every name: drop Gold and each of the 15 remaining names widens from 22.5° to 24° and wins 6.67% of spins instead of 6.25%. The engine also starts redrawing — on 15 names it rejects 16 of the 256 byte values rather than take a remainder — so the accepted bytes still land exactly 16 times on every name.

What happens if I type the same color twice?

Each line is an entry, so the list Red, red, RED, Blue on 4 lines keeps all 4 and red wins 75% of spins. Tick "Remove duplicate entries" and later copies are dropped case-insensitively, first occurrence wins: the list collapses to 2 names and each is back to 50%.

Can I share a custom palette?

Yes. "Copy share link" encodes the current list into a #items= fragment on this page's address; the paint finalists' link runs to 87 characters, and the full preset encodes to 91 characters against a cap of 1800. Browsers do not send the fragment with web requests, so the recipient's wheel is rebuilt locally from the link itself.

Names, not color science: this wheel picks from a list of names with uniform probability; it makes no claims about color theory. Lists stay in your browser — see the methodology page.