Skip to content

Instantly share code, notes, and snippets.

@DontTalkToMeThx
Last active October 17, 2023 04:52
Show Gist options
  • Save DontTalkToMeThx/d8f5522a2b63cea9afa71d3c96730ae3 to your computer and use it in GitHub Desktop.
Save DontTalkToMeThx/d8f5522a2b63cea9afa71d3c96730ae3 to your computer and use it in GitHub Desktop.
e621 Color Tag Helper
2023-10-16.19-37-29.mp4

As of 0.3, you can now click hold and drag to lasso select and get the color average of your selection! You can still click and release to get a single pixel color, if you so choose. Remember, pressing shift while mousing over the image will force the preview to update after your last selection was completed.

Wanna know how I have tags next to the image? Click here!

In the above example, you can see me selecting colors on images to get a list of e621 defined colors that are closest. This system is not perfect, and will require some manual training, but it isn't terrible either.

To "train" it you just need to click on the actual color name like you saw in the video, this will add it in as the color you selected and will very heavily weigh the output to that color.

When you click on the image, the color selector color won't update further. To force it to update, press shift while moving your mouse over the image (you do not need to hold shift). Clicking will also update it and the scores.

Scoring is done by converting rgb to L*a*b*, then calculating the distance using deltaE94 of all the colors in the group. The lowest 5 scores (distances) are taken. If a score is greater than 0, it is squared to heavily apply penalty.

If distance is < 1.3, it's treated as the same color and given a score of -999, essentially guaranteeing it to be first.

This should hopefully help anyone who second guessed themselves when adding color tags.

Limitations

Translucent overlays such as disembodied things and ghost things blend the color behind them, messing up the overall color of the pixel. This is unavoidable, and you'll just have to use your best judgement. I do not recommend adding any color data when you clicked on a translucent object.

This also applies to other color blends, such as blush, which can blend with the body color itself, although to a lesser degree. It may be able to properly extract them with good enough data, but I wouldn't recommend adding them.

Download

If you have tampermonkey installed, click here to download the script.

// ==UserScript==
// @name e621 Color Tag Helper
// @version 0.5
// @description Provies a image color picker to grab the closest e621 defined color.
// @author DefinitelyNotAFurry4
// @match https://e621.net/uploads/new
// @match https://e621.net/posts/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=e621.net
// @connect corsproxy.io
// @grant GM_addElement
// @grant GM.setValue
// @grant GM.getValue
// @grant GM.deleteValue
// @grant GM.xmlHttpRequest
// @run-at document-end
// ==/UserScript==
// E621 defines only a few colors. This defines a list of groups of colors for e6's definitions
let DEFAULT_COLORS={black:[{color:[0,0,0],name:"Black"},{color:[28.393278215566617,-3.2477358819143767,-7.961408528185398],name:"Charcoal"},{color:[16.656078457224062,-19.889460233051242,6.059090622787955],name:"Dark Green"},{color:[13.056024364589309,16.958522700721986,-13.110592004708167],name:"Dark Purple"},{color:[21.704275932542863,.001709856396275855,-.003383043631877136],name:"Jet Black"},{color:[6.4070204448988015,4.2322610477334575,1.4890852286509881],name:"Licorice"},{color:[16.221073805727286,.7446306566379624,-1.9657247611443496],name:"Matte Black"},{color:[15.859552026439893,31.719983723835,-49.578331561673906],name:"Midnight Blue"},{color:[23.472686810542278,-2.631488926496617,1.9026820867292682],name:"Onyx"}],blue:[{color:[91.11652110946342,-48.079618466228766,-14.138127754846131],name:"Aqua"},{color:[98.93278063011066,-4.8751827020712675,-1.6983367236276026],name:"Azure"},{color:[79.74753841069568,-13.546546797912063,-23.1307912031697],name:"Baby Blue"},{color:[32.302586667249486,79.19666178930935,-107.8636810449517],name:"Blue"},{color:[59.67760367203813,-3.123977861988536,-20.302064096444504],name:"Blue Gray"},{color:[53.685515154400946,-30.88647767234043,-9.101796451821542],name:"Blue Green"},{color:[60.81047102296134,5.358444010527263,-61.11867368302324],name:"Bright Blue"},{color:[61.15461539950293,-19.675161471170156,-7.426657720333263],name:"Cadet Blue"},{color:[32.803046040979005,22.526286167447008,-58.44809274395356],name:"Cobalt Blue"},{color:[61.92818670495679,9.342771843650732,-49.30613443535423],name:"Cornflower Blue"},{color:[91.11652110946342,-48.079618466228766,-14.138127754846131],name:"Cyan"},{color:[14.757156815274186,50.42926919587942,-68.6832814032651],name:"Dark Blue"},{color:[58.15037520602837,-3.076426486734951,-20.38447100145966],name:"Denim"},{color:[27.5318832083612,33.45166005045397,-62.867731019225026],name:"Egyptian Blue"},{color:[91.38400100862438,-33.03304956368552,-13.532925740774093],name:"Electric Blue"},{color:[53.84558827422694,2.407524197505062,-31.10067047833638],name:"Glaucous"},{color:[59.229936690692796,-49.321918802196606,18.695978666032985],name:"Jade"},{color:[34.55275219968334,79.989679359187,-104.04837069440612],name:"Indigo"},{color:[38.87307475422114,50.87336069614212,-71.80084054905251],name:"Iris"},{color:[83.81410256512628,-10.88622359814928,-11.485313939631814],name:"Light Blue"},{color:[15.859552026439893,31.719983723835,-49.578331561673906],name:"Midnight Blue"},{color:[12.975311577716514,47.50776531013767,-64.70427324580545],name:"Navy Blue"},{color:[43.35420476837701,49.08579651739486,-89.481987059153],name:"Neon Blue"},{color:[78.94431821284569,-3.5178785102842336,-19.374048089883722],name:"Pastel Blue"},{color:[83.57012223117405,10.303455437196241,-24.920516101721457],name:"Periwinkle"},{color:[82.13505304909086,-4.893163286411928,-11.804102084916313],name:"Powder Blue"},{color:[83.61572300611053,-25.193029044671576,-.779928140724917],name:"Robin Egg Blue"},{color:[47.83284750656463,26.274040223758842,-65.27058223311909],name:"Royal Blue"},{color:[37.26428596398349,21.78222972927324,-60.04779104133877],name:"Sapphire Blue"},{color:[84.75366154417995,-28.252595492876065,10.425997160635724],name:"Seafoam Green"},{color:[79.2089745909287,-14.83218374644707,-21.28463802417102],name:"Sky Blue"},{color:[52.4674724151205,-4.070162109182929,-32.198159806414516],name:"Steel Blue"},{color:[48.25607381337551,-28.841559463342048,-8.481050086288388],name:"Teal"},{color:[81.26705459794431,-44.07625420413397,-4.034478714864265],name:"Turquoise"},{color:[36.30765021068322,58.67651051018527,-93.86425771692527],name:"Ultramarine"},{color:[67.39305590342252,-34.12623685898619,-5.553978380098945],name:"Verdigris"},{color:[22.059820300738217,50.35711484615024,-74.36169868201041],name:"Zaffre"}],brown:[{color:[72.2094063135405,33.482964258020274,27.89103369417767],name:"Pink Orange"},{color:[88.6712007941762,1.3273793629463015,10.911669720691798],name:"Almond"},{color:[79.19841246606565,1.0392823026848519,45.66504402591469],name:"Brass"},{color:[60.23781656606222,24.019966026792126,52.32962262891097],name:"Bronze"},{color:[37.52182974403433,49.69978287900395,30.540267189480907],name:"Brown"},{color:[70.28170116393787,15.60099534643805,34.92261190768473],name:"Buff"},{color:[62.00509964608041,42.58805217686235,40.0203302511987],name:"Burnt Sienna"},{color:[66.14396786846372,8.369210596896604,30.14844295160646],name:"Camel"},{color:[33.49065204051319,22.294354142186084,43.800337082825216],name:"Chocolate"},{color:[67.8630488940901,32.16002602858797,65.02208734234416],name:"Cadmium Orange"},{color:[54.752445665678394,21.656171266954736,45.39523426596843],name:"Copper"},{color:[36.183996450213854,10.871618872692862,19.094335268349884],name:"Coffee"},{color:[36.13522792921352,25.866245290467717,22.0254286829895],name:"Cognac"},{color:[35.65368377531781,27.472710632178348,12.621474014104638],name:"Cordovan"},{color:[29.86489074091959,10.326899711176646,12.789851596530044],name:"Dark Brown"},{color:[47.825385996198875,10.980295837677179,48.34627046290759],name:"Golden Brown"},{color:[69.43577439067086,7.07659204753619,21.000640591510724],name:"Light Brown"},{color:[53.144513517547495,8.79481310004998,13.030484849606783],name:"Mocha"},{color:[58.17585957500238,27.339902706880526,56.82401407673046],name:"Ochre"},{color:[37.52182974403433,49.69978287900395,30.540267189480907],name:"Red Brown"},{color:[36.11841483806724,37.16280672456854,23.72325888527872],name:"Red Ochre"},{color:[36.077783103877394,21.312235709354393,35.4116557942873],name:"Russet"},{color:[37.46692024400533,26.446533617811074,40.985396453474344],name:"Saddle Brown"},{color:[72.8053122317831,-1.7477082434694258,27.67094617697987],name:"Sand"},{color:[43.796139581025685,29.32685456919376,35.636473441076156],name:"Sienna"}],green:[{color:[92.03615371984776,-45.52073061551781,9.711681469210287],name:"Aquamarine"},{color:[30.343126195176033,-10.330604946639399,27.173313862299075],name:"Army Green"},{color:[53.685515154400946,-30.88647767234043,-9.101796451821542],name:"Blue Green"},{color:[91.71448748204823,-54.46480538668458,88.00661894759972],name:"Bright Green"},{color:[61.15461539950293,-19.675161471170156,-7.426657720333263],name:"Cadet Blue"},{color:[45.29366259175446,-32.157010604987654,.7770922382111412],name:"Cadmium Green"},{color:[85.02677469859022,-25.62616499823228,19.320671307857285],name:"Celadon"},{color:[94.82644191370333,-34.508998837706585,91.73634275405178],name:"Chartreuse"},{color:[82.7150070563268,-9.837683641048201,82.10548516345543],name:"Citrine"},{color:[91.11652110946342,-48.079618466228766,-14.138127754846131],name:"Cyan"},{color:[16.656078457224062,-19.889460233051242,6.059090622787955],name:"Dark Green"},{color:[72.47517570451704,-51.24956261121655,30.251909270553345],name:"Emerald Green"},{color:[52.389319306775576,-16.88886689065866,4.365516329930275],name:"Eucalyptus"},{color:[46.618718854967454,-25.91289125167215,25.58605776491727],name:"Fern Green"},{color:[50.59443111773345,-49.586362838919925,45.01596496396723],name:"Forest Green"},{color:[88.87798766318886,-67.8590267408063,84.9548216436359],name:"Grass Green"},{color:[46.22881784262658,-51.69964732808236,49.89795230983843],name:"Green"},{color:[36.134151374057865,-22.791511163547135,15.687047102832574],name:"Hunter Green"},{color:[59.229936690692796,-49.321918802196606,18.695978666032985],name:"Jade"},{color:[62.57230230675344,-41.69046806482945,6.799741711054952],name:"Jungle Green"},{color:[67.38119091455572,-57.58458423333601,64.11115086830124],name:"Kelly Green"},{color:[86.54957590580997,-46.327623815602124,36.94493467106663],name:"Light Green"},{color:[72.60854102811315,-67.1269060980072,61.43743050358847],name:"Lime Green"},{color:[51.86388913144074,-24.417184091669764,1.7069537636182464],name:"Lincoln Green"},{color:[76.56258140862863,-71.53661652935827,53.64650853936408],name:"Malachite"},{color:[90.75103714758299,-48.29645958674339,38.52339728413101],name:"Mint Green"},{color:[61.01901168990152,-16.277838648838248,31.162946197905917],name:"Moss Green"},{color:[88.0651263300202,-82.14687467468413,66.58446710028969],name:"Neon Green"},{color:[97.84120746375069,-12.262392561439906,14.637637973344141],name:"Nyanza"},{color:[51.86833136334822,-12.930760098733007,56.677284661941485],name:"Olive Green"},{color:[86.52293138422849,-16.491101426773014,12.167033106942181],name:"Pastel Green"},{color:[79.59225536526272,-17.836318672849348,66.20718650951007],name:"Pear"},{color:[75.64410668581183,-23.85120673140262,70.44369656631727],name:"Peridot"},{color:[74.41337981760837,-31.207249923621283,36.40816784257843],name:"Pistachio"},{color:[83.61572300611053,-25.193029044671576,-.779928140724917],name:"Robin Egg Blue"},{color:[61.01901168990152,-16.277838648838248,31.162946197905917],name:"Sage Green"},{color:[51.53535112854968,-39.714256583856525,20.04946707204722],name:"Sea Green"},{color:[84.75366154417995,-28.252595492876065,10.425997160635724],name:"Seafoam Green"},{color:[57.36486743825634,-50.060261899549765,22.754796819950364],name:"Shamrock Green"},{color:[88.47265520282772,-76.90097301637367,47.0252935988744],name:"Spring Green"},{color:[48.25607381337551,-28.841559463342048,-8.481050086288388],name:"Teal"},{color:[81.26705459794431,-44.07625420413397,-4.034478714864265],name:"Turquoise"},{color:[72.90398978126815,-6.381220350049121,50.144206800405414],name:"Vegas Gold"},{color:[67.39305590342252,-34.12623685898619,-5.553978380098945],name:"Verdigris"},{color:[49.688849202463615,-26.47236214284604,4.941955382562946],name:"Viridian"}],grey:[{name:"Silver",color:[77.70436358995272,.004249412075496561,-.008407692302303538]},{name:"Antique Silver",color:[59.213475856856064,.726756490597058,1.4475588569291542]},{name:"Brilliant Silver",color:[71.40605878313164,-1.6636555242319218,-2.9002819341465758]},{name:"Pirate Silver",color:[56.42266696947644,-3.1253369522898367,-.4838373982304134]},{name:"Roman Silver",color:[56.996046320025,.558511246821658,-7.680759681809546]},{name:"Royal Silver",color:[88.34299729417145,1.0211148119871893,.3502297178841207]},{name:"Silver Birch",color:[83.079489974086,-.8947622095228369,5.817143435356442]},{name:"Silver Blue",color:[62.37874545730827,-5.664161995772298,-1.942562979843876]},{name:"Silver Blueberry",color:[46.319512382910546,-2.426150157983531,-14.078410752709857]},{name:"Silver Fox",color:[76.53995074146818,1.8571940694164235,-3.909922248470954]},{name:"Silver Polish",color:[79.88121630968037,.004348130468956324,-.008603011998808974]},{name:"Silver Sand",color:[76.50893131707686,-.9155242239168304,3.647383556728978]},{name:"Silver Springs",color:[76.34342033248566,-.7192447800417057,-4.251731631153]},{name:"Silver Star",color:[65.9643042860318,2.237219320908923,-13.347468924211526]},{name:"Silver Storm",color:[62.165237247600686,-3.7045607424487925,-10.20414842504147]},{name:"Tarnished Silver",color:[51.59823754453852,.28469182502005586,-2.9883117483497923]},{name:"Dark Silver",color:[57.16957820703061,1.5674716712743564,-9.138489538493367]},{name:"Silver Chalice",color:[70.35369546800982,.003916065615616748,-.007748148248887254]},{name:"Unicorn Silver",color:[91.99590036984212,.004897520943070166,-.009690010853669051]},{name:"Blue Silver",color:[87.3504090306423,-2.28587486941606,-10.234676554506471]},{color:[58.065643460712906,8.573737908069479,7.985176877693112],name:"Velvety Chesnut"},{name:"Old Silver",color:[55.092693252505214,-.3896142291815452,1.0705956951766904]},{name:"Silver Filigree",color:[52.41156117097658,2.133067136872502,-2.319513854610822]},{name:"Sonic Silver",color:[49.23898744619521,.0029585318167546504,-.0058536156860578]},{color:[26.273174147287776,3.4218627459424997,8.13115687690189],name:"Taupe"},{color:[75.84041291712849,-5.837049587504084,3.107222956402955],name:"Ash Gray"},{color:[59.67760367203813,-3.123977861988536,-20.302064096444504],name:"Blue Gray"},{color:[28.393278215566617,-3.2477358819143767,-7.961408528185398],name:"Charcoal"},{color:[69.23779560557699,.0038654605192256497,-.007648023320649955],name:"Dark Gray"},{color:[53.84558827422694,2.407524197505062,-31.10067047833638],name:"Glaucous"},{color:[53.58501345216902,.003155620347972121,-.006243566036268078],name:"Gray"},{color:[55.32720845100627,-.653894411211553,-2.6681118324645814],name:"Gunmetal Gray"},{color:[84.5561167363605,.004560133171516156,-.009022470846042907],name:"Light Gray"},{color:[60.603011581963784,-2.902515087524482,-3.997764576277585],name:"Pewter"},{color:[90.61345316592949,-.013567573197537097,1.0822435970740285],name:"Platinum"},{color:[61.01901168990152,-16.277838648838248,31.162946197905917],name:"Sage Green"},{color:[77.70436358995272,.004249412075496561,-.008407692302303538],name:"Silver"},{color:[52.836257962718875,-2.1385958505868996,-10.577401414767461],name:"Slate Gray"},{color:[56.26736117840676,-2.2637934410966176,1.6235224792028546],name:"Smoke"},{color:[50.32467518851614,-1.9044219640711457,-3.763932259911207],name:"Steel Gray"}],orange:[{color:[67.80028061887693,33.75233965199198,49.05097931616946],name:"Poppy Glow"},{color:[55.437969112940465,40.280645423938225,41.64709688824296],name:"Koi"},{color:[69.05297009564448,35.31143545965343,48.691354077122185],name:"Blaze"},{color:[56.49166631976327,39.97724704139749,42.426398113943954],name:"Fresh Acorn"},{color:[69.84360782880076,34.27259439605162,48.62829435660417],name:"Umezome Pink"},{color:[64.01140135314333,37.72140480286279,37.57963143827465],name:"Tangerine Flake"},{color:[37.03570308555692,48.39063484373035,48.10236259147144],name:"Venetian Red"},{color:[39.4163544831277,32.32585043511366,25.520607399714635],name:"Chestnut"},{color:[81.02792148118404,10.386126365583504,83.035714705514],name:"Amber"},{color:[76.58738314901281,20.586632429960396,76.03684645384854],name:"Bright Orange"},{color:[51.076128147956155,44.16578531193965,60.78002015986711],name:"Burnt Orange"},{color:[68.38122803284683,21.47200280633682,56.17116362417976],name:"Butterscotch"},{color:[87.30449636796071,6.277160781358204,28.542236179228286],name:"Desert"},{color:[69.44898432370616,17.895331339600418,71.82145517950575],name:"Gamboge"},{color:[87.19610235129659,4.411275162793604,47.236752280866654],name:"Light Orange"},{color:[45.46011545511821,49.223630622430406,56.68964944835234],name:"Mahogany"},{color:[79.1512149749217,9.335950659322801,65.15960718492207],name:"Mango"},{color:[61.25819444134433,58.35419107727174,63.565044303441375],name:"Neon Orange"},{color:[74.93219484533533,23.936049070113153,78.95630717524573],name:"Orange"},{color:[56.8920916243855,54.4164611541717,66.76876863229697],name:"Persimmon"},{color:[65.00107210283021,48.382016175279205,68.42786601292978],name:"Pumpkin Orange"},{color:[57.68729391902137,68.89236726839148,51.9436989569275],name:"Red Orange"},{color:[61.219135025954685,58.201829267411355,66.61253078787266],name:"Safety Orange"},{color:[60.92634852527286,58.569284469404955,37.16068442328552],name:"Sunset Orange"},{color:[64.9336751945702,36.92203397325772,71.67211779171978],name:"Tangerine"},{color:[76.22151704834478,22.188882844699442,69.16551976678451],name:"Yellow Orange"}],pink:[{color:[82.65794749188875,26.577387352158254,-12.62910804838333],name:"Pretty In Pink"},{color:[37.01348318998531,56.14488153790661,-34.09999985145934],name:"Acai Juice"},{color:[38.01802668525498,52.479618401237715,-8.086441910487663],name:"Amaranth"},{color:[86.32773350730388,7.9789088144235905,14.520343890114829],name:"Bisque"},{color:[50.24801411452434,67.5467044937037,14.159328594387599],name:"Cerise"},{color:[27.722093664420733,46.32376898449767,12.275801270712062],name:"Claret"},{color:[67.7021458472602,43.59124858610463,25.738986808505327],name:"Coral Pink"},{color:[47.02980511087303,70.93577651695682,33.59489365485293],name:"Crimson"},{color:[41.143407888923086,52.875363900051234,-4.470910097054659],name:"Dark Pink"},{color:[60.319933664076004,98.25421868616108,-60.84298422386232],name:"Fuchsia"},{color:[65.48186958181394,64.25072356291078,-10.659820587587543],name:"Hot Pink"},{color:[81.05253594361857,27.968883126962552,5.025499401878597],name:"Light Pink"},{color:[60.319933664076004,98.25421868616108,-60.84298422386232],name:"Magenta"},{color:[85.88507173072215,11.226843553556854,9.145291408822986],name:"Millennial Pink"},{color:[24.79548922454603,46.63672205831326,3.780860236068362],name:"Mulberry"},{color:[59.81807139926414,95.2228541526618,-53.300396682571915],name:"Neon Pink"},{color:[62.8009876658991,55.293737808598145,-34.41750911448498],name:"Orchid"},{color:[85.2164558895689,20.11395175862424,-3.4609987624009575],name:"Pastel Pink"},{color:[74.82724422671473,33.42939411513812,14.020420563786118],name:"Pastel Red"},{color:[83.5847988577587,24.149661012571322,3.315387151150828],name:"Pink"},{color:[28.207952323768076,27.000087764486896,-2.410890579569258],name:"Plum"},{color:[48.37171048997175,32.698320743408225,7.236391918780716],name:"Puce"},{color:[29.78210009209807,58.939837319042034,-36.497929962823875],name:"Purple"},{color:[48.689272454139626,75.16096714297437,16.463339417898293],name:"Raspberry"},{color:[37.041423322278256,42.94185933078579,3.6053465323094946],name:"Red Purple"},{color:[55.19717084121976,71.14233253985292,17.360135272296006],name:"Rose"},{color:[42.86817802854805,63.9991953516042,11.137747286124444],name:"Rose Red"},{color:[48.3536616264939,74.05816676536664,14.056974887457063],name:"Ruby Red"},{color:[97.12111642889012,2.1670284447041777,4.544048646620058],name:"Seashell"},{color:[61.85307212428975,44.980165891938206,11.599446135347913],name:"Watermelon Pink"}],purple:[{color:[39.6267265195025,34.263277712354764,-42.93130287451372],name:"Studio"},{color:[33.463967443452276,30.446975852184977,-38.98160207508088],name:"Daisy Bush"},{color:[75.9015577210255,30.706344660726526,-28.492240517213176],name:"Petal Plush"},{color:[61.240735914820704,36.310859724293984,-40.01281718359544],name:"Lavender Blossom"},{color:[24.13570219397709,39.94156805553181,-46.04986873436599],name:"Spanish Violet"},{color:[38.01802668525498,52.479618401237715,-8.086441910487663],name:"Amaranth"},{color:[50.102674112075604,65.51109280093348,-41.49125217341425],name:"Bright Purple"},{color:[25.843012314771876,48.90480428407526,21.29358216148206],name:"Burgundy"},{color:[29.238915195527866,38.880806163989035,-19.040297722845057],name:"Byzantium"},{color:[41.143407888923086,52.875363900051234,-4.470910097054659],name:"Dark Pink"},{color:[13.056024364589309,16.958522700721986,-13.110592004708167],name:"Dark Purple"},{color:[24.08628804719347,14.346249285556222,-9.706263250856917],name:"Eggplant"},{color:[38.87307475422114,50.87336069614212,-71.80084054905251],name:"Iris"},{color:[91.82769059829123,3.7138573364229877,-9.671676095098736],name:"Lavender"},{color:[80.33277348073428,8.89236450389591,-14.882396035230716],name:"Light Purple"},{color:[73.07697786381154,35.66326876590625,-41.07557283047554],name:"Light Violet"},{color:[64.85693907501036,9.749129548733581,-6.445201411374835],name:"Lilac"},{color:[78.53046607544945,31.505965756539965,-32.494788365955586],name:"Mauve"},{color:[46.05358176390693,22.44825415169399,.47699437785069243],name:"Mauve Taupe"},{color:[24.79548922454603,46.63672205831326,3.780860236068362],name:"Mulberry"},{color:[62.8009876658991,55.293737808598145,-34.41750911448498],name:"Orchid"},{color:[75.12832071013943,15.667772492801824,-21.72997070565712],name:"Pastel Purple"},{color:[83.57012223117405,10.303455437196241,-24.920516101721457],name:"Periwinkle"},{color:[28.207952323768076,27.000087764486896,-2.410890579569258],name:"Plum"},{color:[48.37171048997175,32.698320743408225,7.236391918780716],name:"Puce"},{color:[29.78210009209807,58.939837319042034,-36.497929962823875],name:"Purple"},{color:[29.649481972742876,9.728133347524647,-5.8241147578644075],name:"Quartz"},{color:[37.041423322278256,42.94185933078579,3.6053465323094946],name:"Red Purple"},{color:[19.766121918465302,41.68007241553073,.8522724285617622],name:"Tyrian Purple"},{color:[40.78700884794503,83.10852255459103,-93.50954337949518],name:"Violet"},{color:[29.123709862851634,30.365877798119666,9.718102707508136],name:"Wine"},{color:[75.24597895418702,9.030934424582139,-15.075368446150673],name:"Wisteria"}],red:[{color:[25.843012314771876,48.90480428407526,21.29358216148206],name:"Burgundy"},{color:[27.913992375717086,48.9719780226113,37.61577298085309],name:"Blood Red"},{color:[44.03287030482687,38.97799341197239,23.05602842424248],name:"Brick Red"},{color:[55.46539946970229,60.98567464571286,52.63794539333635],name:"Bright Red"},{color:[37.52182974403433,49.69978287900395,30.540267189480907],name:"Brown"},{color:[25.95992093121759,30.726112355542597,31.17906311728222],name:"Burnt Umber"},{color:[62.00509964608041,42.58805217686235,40.0203302511987],name:"Burnt Sienna"},{color:[29.238915195527866,38.880806163989035,-19.040297722845057],name:"Byzantium"},{color:[46.45034959514537,63.027261454750075,42.15408368447857],name:"Cadmium Red"},{color:[42.71770214921033,62.90497654022026,28.48101705617787],name:"Cardinal Red"},{color:[45.3828542172459,71.83122443383749,28.952097327553204],name:"Carmine"},{color:[50.24801411452434,67.5467044937037,14.159328594387599],name:"Cerise"},{color:[44.20126778272621,69.58240698466966,38.70962904154288],name:"Cherry"},{color:[27.722093664420733,46.32376898449767,12.275801270712062],name:"Claret"},{color:[67.7021458472602,43.59124858610463,25.738986808505327],name:"Coral Pink"},{color:[35.65368377531781,27.472710632178348,12.621474014104638],name:"Cordovan"},{color:[47.02980511087303,70.93577651695682,33.59489365485293],name:"Crimson"},{color:[28.084732284208997,51.01040680379737,41.2946561989777],name:"Dark Red"},{color:[26.534886007866127,41.648929101052005,26.93938080799186],name:"Falu Red"},{color:[35.38660101666753,46.11458089632414,27.524712148185472],name:"Garnet"},{color:[25.530784572416174,48.05523604548825,38.05963258349509],name:"Maroon"},{color:[48.977140757628874,19.28054373578175,7.794125632070803],name:"Marsala"},{color:[24.79548922454603,46.63672205831326,3.780860236068362],name:"Mulberry"},{color:[55.764329274875365,74.18829731370113,51.097654140481005],name:"Neon Red"},{color:[12.931442907210965,31.343536942796305,18.547578615810483],name:"Oxblood"},{color:[74.82724422671473,33.42939411513812,14.020420563786118],name:"Pastel Red"},{color:[56.8920916243855,54.4164611541717,66.76876863229697],name:"Persimmon"},{color:[54.83924794785247,54.44962599069198,46.464991251869826],name:"Poppy"},{color:[48.37171048997175,32.698320743408225,7.236391918780716],name:"Puce"},{color:[48.689272454139626,75.16096714297437,16.463339417898293],name:"Raspberry"},{color:[53.23288178584245,80.10930952982204,67.22006831026425],name:"Red"},{color:[37.52182974403433,49.69978287900395,30.540267189480907],name:"Red Brown"},{color:[36.11841483806724,37.16280672456854,23.72325888527872],name:"Red Ochre"},{color:[57.68729391902137,68.89236726839148,51.9436989569275],name:"Red Orange"},{color:[37.041423322278256,42.94185933078579,3.6053465323094946],name:"Red Purple"},{color:[42.86817802854805,63.9991953516042,11.137747286124444],name:"Rose Red"},{color:[48.3536616264939,74.05816676536664,14.056974887457063],name:"Ruby Red"},{color:[36.077783103877394,21.312235709354393,35.4116557942873],name:"Russet"},{color:[67.25995258561211,45.2340494509989,29.08670452970452],name:"Salmon"},{color:[54.57627244687694,76.23926723544355,67.70719251095299],name:"Scarlet"},{color:[60.92634852527286,58.569284469404955,37.16068442328552],name:"Sunset Orange"},{color:[61.13348589604291,41.6898609746138,31.647789987461582],name:"Terra Cotta"},{color:[30.907703005576195,33.08571205031177,16.978239283297082],name:"Tuscan Red"},{color:[19.766121918465302,41.68007241553073,.8522724285617622],name:"Tyrian Purple"},{color:[52.37034486858461,61.09238608164025,44.41743162254439],name:"Vermillion"},{color:[29.123709862851634,30.365877798119666,9.718102707508136],name:"Wine"}],tan:[{name:"Pink Silver",color:[72.90835017949205,7.749214054235232,3.403882556745552]},{color:[83.5847988577587,24.149661012571322,3.315387151150828],name:"Pink"},{color:[89.35068099788126,1.514403426330302,23.99998118436706],name:"Wheat"},{color:[74.97454643298407,5.023785176497098,24.421485241390606],name:"Tan"},{color:[86.32773350730388,7.9789088144235905,14.520343890114829],name:"Nude"},{color:[56.24268845678195,.628222106339893,26.895309862534578],name:"Dark Tan"},{color:[72.8053122317831,-1.7477082434694258,27.67094617697987],name:"Ecru"},{color:[66.14396786846372,8.369210596896604,30.14844295160646],name:"Fallow"},{color:[73.91858760722978,15.001649499236603,38.200211978258444],name:"Fawn"},{color:[60.38983927859377,27.00634810744318,54.83477327660478],name:"Cinnamon"},{color:[72.2094063135405,33.482964258020274,27.89103369417767],name:"Pink Orange"},{color:[85.91945261117658,11.775107461686197,20.392568073817287],name:"Apricot"},{name:"Linen",color:[95.31120096478845,1.6820338439236249,6.012338786257043]},{name:"Almond",color:[89.39348739189694,3.061714391510151,10.423734275566687]},{name:"Hampton",color:[87.24305585071004,-3.353773532779547,24.023510468366393]},{name:"Wild Rice",color:[87.91025015835365,-4.497424404230066,34.78792541764477]},{name:"Sand",color:[72.8053122317831,-1.7477082434694258,27.67094617697987]},{name:"Khaki",color:[73.38127833356914,-8.787208024487015,39.287611414138766]},{name:"Tacha",color:[75.38988323123782,.088369172941416,50.59638167058842]},{name:"Yuma",color:[76.01469238578473,-1.957216526051464,24.627542417005156]},{name:"Pancho",color:[82.0751302012567,5.674466968261516,25.364531474346386]},{name:"Marigold Yellow",color:[89.19390519831236,-4.8383533378938415,54.31221591703477]},{name:"Roti",color:[70.25441065039936,.47673773862833,48.61128068480032]},{name:"New Orleans",color:[97.23209971720574,.005134978067589113,-.01015983265555409]},{name:"Tumbleweed",color:[74.20631467187683,12.823480736451899,23.001514703807203]},{name:"Marzipan",color:[90.37544165641484,-1.4138393242780767,37.23074338955472]},{name:"Wise Shopping",color:[74.79060367787915,13.234118310381515,28.70414364663356]},{name:"Tough Dad",color:[76.09739439288505,.1622437778591168,47.11666216283237]},{name:"Ashamed",color:[92.34862188654134,-6.603163358716135,31.128748136858686]},{name:"Chalky",color:[82.9865553416281,5.837283280460348,33.48412785236701]},{name:"Rob Roy",color:[80.11972722950443,5.47861898586871,40.453035372968586]},{name:"Sapling",color:[85.17696284945795,-6.8067576699772925,27.828331897951774]},{name:"Harvest Gold",color:[77.01334305712761,8.024993115502422,37.93330199458258]},{name:"Calico",color:[81.36731531840009,-1.5249143145024124,34.17380493677271]},{name:"Golden Glow",color:[92.23651574017721,-4.8373818102817046,44.66383835094663]},{name:"Equator",color:[80.29362789910769,-.9588831938031617,51.380642893047]},{name:"Solar panel",color:[76.95651910289607,8.125874923451404,33.141864936695086]},{name:"Cameo",color:[87.1344033705693,3.3410785501499785,17.707336628197435]},{name:"Husk",color:[68.401691598771,-.6448750671840253,40.26352184893926]},{name:"Rational Poetry",color:[79.00913570656424,-.9944777122858905,38.24884674732773]},{name:"Laser",color:[70.81888648438972,7.4196812321079,30.569365274625703]},{name:"Wedding Singer",color:[76.32089913606994,5.540738505654897,31.13256612242008]},{name:"Sweet Corn",color:[91.53869312101635,-4.813476246407767,44.72865026792454]},{name:"Fall Green",color:[91.25640109559734,-6.085153398915022,23.405583797059993]},{name:"Santa Fe",color:[56.067482596358815,18.982711739135848,26.678052418479925]},{name:"Muddy Waters",color:[61.557280630009004,16.168287382540893,27.95935503567968]},{name:"Teak",color:[64.29637743019217,7.136825476673659,28.127601049868247]},{name:"Escape Plan",color:[59.868790939669395,12.59882504067683,28.30826809395535]},{color:[83.91343987796901,11.533690601172653,30.747180832524236],name:"Pastel Orange"},{color:[91.95068405324936,1.8060328822012695,27.17778627189602],name:"Peach"}],teal:[{color:[48.25607381337551,-28.841559463342048,-8.481050086288388],name:"Teal"},{color:[92.03615371984776,-45.52073061551781,9.711681469210287],name:"Aquamarine"},{color:[87.88912510291723,-60.7704688691017,10.744356812892608],name:"Bright Teal"},{color:[61.15461539950293,-19.675161471170156,-7.426657720333263],name:"Cadet Blue"},{color:[73.2105238010994,-54.45968935769302,13.650710188436221],name:"Caribbean Green"},{color:[54.4041573721902,-30.932068050584903,-10.338162393391626],name:"Common Teal"},{color:[38.514076905125044,-14.943253530476126,-20.909238536937636],name:"Crystal Teal"},{color:[29.067403689356652,-19.738333774116825,-6.504316133489596],name:"Dark Teal"},{color:[28.149493920336873,-20.558597571603997,-4.649496295919864],name:"Deep Jungle Green"},{color:[36.00477522400677,-23.342522005891848,-6.864021986185542],name:"Deep Teal"},{color:[46.95008576407282,-15.379081181660315,-4.899251131146309],name:"Dull Teal"},{color:[55.25364753357945,-24.383511750199204,-.842417016047392],name:"Dusty Teal"},{color:[52.596656574052915,-30.453882709083558,-9.580399822956709],name:"Egyptian Teal"},{color:[36.39325951333859,-24.10529159953745,-3.1590662654986112],name:"Empress Teal"},{color:[59.57790518132917,-23.85633405042331,2.7006692446619907],name:"Gray Teal"},{color:[47.174255780491926,-19.816643413482883,2.546502694429109],name:"Hooker Green"},{color:[62.79906020032328,-42.998670976145014,8.789638876248462],name:"Jungle Green"},{color:[44.3029109274507,-20.78498445034563,-11.4038530952568],name:"Largo Teal"},{color:[65.78768757989991,-37.508659705508705,-6.33612044723717],name:"Light Sea Green"},{color:[49.37281870947915,-29.00273341224291,-9.161250287977495],name:"Marine Teal"},{color:[76.8834686242291,-37.35439643481242,-8.361003975747261],name:"Medium Turquoise"},{color:[48.10808422357533,-23.287453739487653,-15.767182369851373],name:"Metallic Seaweed"},{color:[27.81714234436572,-15.766495007682513,-11.626219495136692],name:"Midnight Green"},{color:[67.82067118887639,-46.43063750660487,11.521417072725493],name:"Mountain Meadow"},{color:[53.23288178584245,80.10930952982204,67.22006831026425],name:"Navy Teal"},{color:[76.47992807736672,-28.35666586238439,5.286019705403144],name:"Pale Teal"},{color:[61.11468572058894,-40.53733582223562,-.39981120623675537],name:"Persian Green"},{color:[45.39894586543132,-30.83885830332253,-2.649220340646097],name:"Pine Green"},{color:[23.793246228452887,-17.861335267241817,-5.252243007248037],name:"Rich Black"},{color:[43.8747671231825,-26.874994904801717,-7.902768854994369],name:"Skobeloff"},{color:[54.526287489209835,-14.393583964799728,-5.268233299400316],name:"Steel Teal"},{color:[61.70082164735237,-23.246955676395675,-6.653260910643399],name:"Teal Bayou"},{color:[46.021319774666885,-14.245606961966306,-16.49574095762729],name:"Teal Blue"},{color:[48.88095477705687,-30.13348290131762,-6.9592081303769815],name:"Teal Green"},{color:[51.22807970627467,-25.659611375125902,-15.712453850837305],name:"Tropical Teal"},{color:[49.793167258473446,-13.012569104787486,-2.373741323224854],name:"Trumpet Teal"},{color:[81.26705459794431,-44.07625420413397,-4.034478714864265],name:"Turquoise"},{color:[49.688849202463615,-26.47236214284604,4.941955382562946],name:"Viridian"}],white:[{color:[92.62959912046603,-1.04970121148934,6.168127351514019],name:"Alabaster"},{color:[95.9488798865349,-4.189085125627601,12.039919825248301],name:"Beige"},{color:[96.91192369586484,-.3725480533223191,4.183762022333104],name:"Bone White"},{color:[97.45526614880224,-2.2139150314787748,14.284340428869946],name:"Cornsilk"},{color:[98.45791256096271,-6.489839960689414,21.823916301204992],name:"Cream"},{color:[92.67448928156459,-1.317700617416262,10.422696921408559],name:"Eggshell"},{color:[99.63977381109994,-2.5469225879482527,7.152814753830183],name:"Ivory"},{color:[88.31739012774452,1.3299301437041944,10.921311222576024],name:"Linen"},{color:[90.10007935356519,4.512981096042368,28.26448480810635],name:"Navajo White"},{color:[97.92505462450467,-.18671601916919744,1.5423490807618734],name:"Off White"},{color:[96.68008748343041,-.33002024968453725,8.518898501124683],name:"Parchment"},{color:[91.95068405324936,1.8060328822012695,27.17778627189602],name:"Peach"},{color:[88.73178650520033,-1.2238953048784862,6.716384423812327],name:"Pearl"},{color:[97.12111642889012,2.1670284447041777,4.544048646620058],name:"Seashell"},{color:[90.79522618837457,-3.8310479670478625,30.058406066721723],name:"Vanilla"},{color:[100,.00526049995830391,-.010408184525267927],name:"White"}],yellow:[{color:[86.9285847161576,-1.9242149651028106,87.1371576065337],name:"Gold"},{color:[72.84764248615139,1.3808416693148473,62.91423672805956],name:"Metallic gold"},{color:[88.939189421875,-5.950300196582326,88.5617283249729],name:"Golden yellow"},{color:[73.9517774574382,-3.751221593291998,62.31176237932981],name:"Old gold"},{color:[47.14955389587915,14.540983413133922,49.296681247915075],name:"Golden brown"},{color:[79.99964115366976,6.130616491867857,81.54379298679176],name:"Golden"},{color:[82.00876896629343,8.400946959471245,82.66337335924757],name:"Honey Gold"},{color:[88.3721872765391,-2.6163720174396388,65.13813429293253],name:"Light Gold"},{color:[81.02792148118404,10.386126365583504,83.035714705514],name:"Amber"},{color:[78.45271560663113,14.935017254223249,78.67783739622458],name:"California Gold"},{color:[81.44472346551441,7.551082179752145,83.17499941667327],name:"Golden poppy"},{color:[70.81571317667877,8.524971687770721,68.76466736413397],name:"Goldenrod"},{color:[65.8701144373001,18.780432309661478,70.85724470337856],name:"Harvest gold"},{color:[79.31974739006817,7.39038606800041,31.619225303355257],name:"Pale Gold"},{color:[68.34606724842544,4.833712026917791,59.00301270012898],name:"Satin sheen gold"},{color:[84.32102298289159,4.523032351779421,76.35298628384616],name:"Sunglow"},{color:[72.76997575421686,-5.122320116033974,48.11629763304859],name:"Vegas gold"},{color:[72.74987739709933,.9474224997422787,62.78611913158303],name:"American Gold"},{color:[61.23220835555114,2.6229872628853457,47.35515765622205],name:"Antique Gold"},{color:[82.81864729180526,1.2968384661520282,70.98181362650003],name:"Arabian Gold"},{color:[87.11198236839782,1.6250600460451792,61.216994454763366],name:"Aspen Gold"},{color:[82.80409597973508,7.285958233436752,78.3763369506301],name:"ASU Gold"},{color:[61.746912895376894,7.524387983596171,61.86327411306274],name:"Autumn Gold"},{color:[92.04797664895175,-.949139405740429,26.728350710936954],name:"Banana Mania"},{color:[57.21600040882032,4.8076742453943,28.896452227353663],name:"Banner Gold"},{color:[11.177265155567454,2.4703752399473364,15.880217279095564],name:"Black Gold"},{color:[94.46686034552852,-4.303638265640286,25.42849615161229],name:"Blond"},{color:[67.6426974229908,-6.7250649226883175,52.161431292906904],name:"Brass"},{color:[75.6445512893036,-2.8807838476009873,35.75112314507574],name:"Brushed Gold"},{color:[87.64187809199774,-4.960104555228773,46.51434935237908],name:"Buff"},{color:[56.85799580043677,10.906273656581533,37.32224317596299],name:"Bungalow Gold"},{color:[93.17548027543947,-10.16823300446551,66.17392882412719],name:"Caduceus Gold"},{color:[64.07589584768704,9.004410737195878,67.13484583155545],name:"Cal Poly Pomona Gold"},{color:[86.5563152938054,-5.271752669663066,85.13707859813181],name:"Candlelight"},{color:[79.49086072734822,-3.3743474797165995,13.413163623468428],name:"Celadon Gold"},{color:[94.15958144675751,-1.907478591469003,19.8728849297656],name:"Champagne Gold"},{color:[70.13781977552162,-1.0832470936645855,72.22754286466278],name:"Christmas Gold"},{color:[82.7150070563268,-9.837683641048201,82.10548516345543],name:"Citrine"},{color:[82.6791437183172,.8043134204913649,67.82697878522916],name:"Crayola's Maize"},{color:[78.4938464307975,-.8960618743012461,52.007730028598665],name:"Cream Gold"},{color:[85.93065289470253,.10505883727629506,86.4348021523995],name:"Cyber Yellow"},{color:[88.25137182628998,-12.501980685942716,80.09813181578141],name:"Dandelion"},{color:[72.8053122317831,-1.7477082434694258,27.67094617697987],name:"Dark Champagne"},{color:[62.542209629720645,.9001633491342864,64.20941487284173],name:"Dark Gold"},{color:[59.2185428516686,9.865752940643402,62.73421565950203],name:"Dark Goldenrod"},{color:[56.40980018544437,-3.96731941485734,59.08642110053282],name:"Dark Yellow"},{color:[69.4810441188819,36.83088798640538,75.49475690652437],name:"darkorange"},{color:[87.54994475400268,5.761013685243399,28.873402540366435],name:"Deep Champagne"},{color:[48.56106393243796,5.272986271057212,25.68494596248315],name:"Dull Gold"},{color:[73.02976489809465,12.491755297316054,45.67956649422904],name:"Earth Yellow"},{color:[72.8053122317831,-1.7477082434694258,27.67094617697987],name:"Ecru"},{color:[62.542209629720645,.9001633491342864,64.20941487284173],name:"Faint Gold"},{color:[73.91858760722978,15.001649499236603,38.200211978258444],name:"Fawn"},{color:[91.68709434260252,-7.576402737196009,45.82749013171541],name:"Flavescent"},{color:[87.47298118621529,-5.754182104846017,46.26746352933411],name:"Flax"},{color:[69.44898432370616,17.895331339600418,71.82145517950575],name:"Gamboge"},{color:[79.31974739006817,7.39038606800041,31.619225303355257],name:"Gold (Crayola)"},{color:[72.84764248615139,1.3808416693148473,62.91423672805956],name:"Gold (Metallic)"},{color:[87.77835981527812,.24028420381011495,53.18770967400373],name:"Gold Coin"},{color:[82.20534799385905,-7.827440168655109,59.8497937549713],name:"Gold Deposit"},{color:[57.15781400775829,37.27716232627864,50.53284265351953],name:"Gold Drop"},{color:[55.77580496511365,6.326834487659361,39.93494702198917],name:"Gold Dust"},{color:[49.8089718414341,.29659646910923376,23.789749811130314],name:"Gold Fusion"},{color:[72.94751225828855,-2.3348664805540875,45.01034708192995],name:"Gold Lustre"},{color:[79.98093974706296,.9829718542669341,50.58313481065626],name:"Gold Shimmer"},{color:[74.92323154295698,5.293348887620453,70.61188026422427],name:"Gold Tips"},{color:[74.6537613194908,.6762183633544638,75.58456382744235],name:"Gold Tooth"},{color:[87.57192033127315,7.427424358176338,12.078085327897202],name:"Golden Apricot"},{color:[83.36540195586,4.576809208588828,53.52471052538947],name:"Golden Crest"},{color:[87.54103953993413,-8.76543861218132,75.3923946648623],name:"Golden Kiwi"},{color:[88.16186419904788,-.01327539755041629,59.71484531842872],name:"Golden Nectar"},{color:[66.38533445879193,16.777031508896755,60.28474395186394],name:"Golden Orange"},{color:[78.32056522089572,5.329227603328435,78.484971773484],name:"Goldfinger"},{color:[68.00202333259197,-11.678861680874453,39.37557943520298],name:"Green Gold"},{color:[85.23980774382127,-6.73567605068931,54.47594283733248],name:"Hansa Yellow"},{color:[56.74824828738021,18.75654240377117,50.72939003165927],name:"Inca Gold"},{color:[87.61842075934568,-2.7164374201131825,63.390705944858695],name:"Jonquil"},{color:[97.6476983766357,-5.423835002735022,22.225440133492636],name:"Lemon Chiffon"},{color:[68.07047363400495,4.979662531337303,66.68968609373071],name:"Lemon Curry"},{color:[96.9846538858103,-22.37556922166295,94.30066556892267],name:"Lemon Glacier"},{color:[91.32375244347713,-11.627741713118922,88.88275150915173],name:"Lemon Gold"},{color:[95.09812173981939,-32.913910148087645,92.06013059256215],name:"Lemon Lime"},{color:[92.64374380395499,-2.742409508760313,22.867671939537736],name:"Lemon Meringue"},{color:[97.36879732328357,-6.477957388611344,19.22869012687929],name:"Light Goldenrod Yellow"},{color:[76.58244529195477,4.661890438233063,65.59947296435801],name:"Meat Brown"},{color:[88.78304880169912,-3.1513043740321045,50.014848552135675],name:"Mellow Yellow"},{color:[53.780776563123084,4.493397595706772,40.94993550210763],name:"Metallic Sunburst"},{color:[82.2530011490912,7.892520315653573,82.73643582773909],name:"Mikado Yellow"},{color:[77.97597624964725,8.764957301515608,72.07766635165734],name:"MU Gold"},{color:[88.2698109915024,-1.5186582994773934,66.75415939478033],name:"Mustard"},{color:[74.14070832794413,-.7321800643428356,53.732094855230805],name:"Muted Gold"},{color:[63.28441981954062,-2.051328546554043,48.6352131301841],name:"Mystic Gold"},{color:[83.80276527111332,-5.556932894515199,64.3601592559569],name:"New Gold"},{color:[51.86833136334822,-12.930760098733007,56.677284661941485],name:"Olive"},{color:[74.93219484533533,23.936049070113153,78.95630717524573],name:"orange"},{color:[91.14038954621267,-7.347233923247709,30.964442634340152],name:"Pale Goldenrod"},{color:[89.38075097302972,-.52699913350851,12.967918064131556],name:"Pearl"},{color:[61.751663684265665,21.398558365867515,47.916570468789146],name:"Peru"},{color:[82.57625947231577,15.131574903868017,11.866368208254174],name:"Pink Gold"},{color:[76.65668489053486,2.933008287901606,77.60932945903205],name:"Pure Gold"},{color:[78.8537635718569,2.804681177145385,79.91847161106797],name:"Rich Gold"},{color:[81.25109694490546,3.8904245723107023,74.14567317380674],name:"Saffron"},{color:[84.88996912444657,-7.598909039800206,71.99527303836702],name:"Sandstorm"},{color:[49.9252566654166,6.321548478211092,50.861272755219],name:"Sandy Taupe"},{color:[87.1788633161671,-2.4298959943792053,87.31380966685407],name:"School Bus Yellow"},{color:[88.62775569663803,-3.550180146274784,75.10884282862517],name:"Shiny Gold"},{color:[43.796139581025685,29.32685456919376,35.636473441076156],name:"Sienna"},{color:[85.63879470255584,-9.951283731701677,52.971442732389676],name:"Straw"},{color:[82.02087156885398,8.322712483791738,50.53462598515781],name:"Sunset Gold"},{color:[83.9781540772946,10.775023499948578,45.23443203802697],name:"Topaz"},{color:[78.88991864708721,6.960985381593455,59.251954737312374],name:"Traditional Gold"},{color:[85.43366636227017,1.1234853281921198,86.08624754747561],name:"UCLA Gold"},{color:[59.472421413725485,9.578426041446875,55.17515298365224],name:"University Of California Gold"},{color:[73.54845259704052,7.343613961117046,71.04798523939937],name:"Urobilin"},{color:[84.19730517203195,3.679911068486641,85.22284819051875],name:"USC Gold"},{color:[90.79522618837457,-3.8310479670478625,30.058406066721723],name:"Vanilla"},{color:[89.35068099788126,1.514403426330302,23.99998118436706],name:"Wheat"},{color:[99.73322637422017,-1.8807554998647724,5.238916028698926],name:"White Gold"},{color:[81.26920457801361,9.867685521169289,83.20080148584339],name:"Yellow Gold"},{color:[78.18523017676915,-3.3391270708427734,73.52836380149704],name:"Young Gold"},{color:[45.85759791475258,1.3609408386204835,42.49277745266337],name:"Yukon Gold"},{color:[87.34353147858644,3.223787248172849,51.30218541870541],name:"Yuma Gold"},{color:[88.6712007941762,1.3273793629463015,10.911669720691798],name:"Almond"},{color:[81.02792148118404,10.386126365583504,83.035714705514],name:"Amber"},{color:[85.91945261117658,11.775107461686197,20.392568073817287],name:"Apricot"},{color:[95.9488798865349,-4.189085125627601,12.039919825248301],name:"Beige"},{color:[79.19841246606565,1.0392823026848519,45.66504402591469],name:"Brass"},{color:[91.73223810216246,-11.40900552691998,90.55995315118817],name:"Bright Yellow"},{color:[87.51148613243024,-4.186087033246578,86.3605884097418],name:"Cadmium Yellow"},{color:[97.93867978017772,-15.209358573512743,53.256391165139625],name:"Canary Yellow"},{color:[94.82644191370333,-34.508998837706585,91.73634275405178],name:"Chartreuse"},{color:[82.7150070563268,-9.837683641048201,82.10548516345543],name:"Citrine"},{color:[97.45526614880224,-2.2139150314787748,14.284340428869946],name:"Cornsilk"},{color:[98.45791256096271,-6.489839960689414,21.823916301204992],name:"Cream"},{color:[52.869848562809494,-7.7845561855111605,57.859468867353534],name:"Dark Yellow"},{color:[87.30449636796071,6.277160781358204,28.542236179228286],name:"Desert"},{color:[72.8053122317831,-1.7477082434694258,27.67094617697987],name:"Ecru"},{color:[87.47298118621529,-5.754182104846017,46.26746352933411],name:"Flax"},{color:[69.44898432370616,17.895331339600418,71.82145517950575],name:"Gamboge"},{color:[86.9285847161576,-1.9242149651028106,87.1371576065337],name:"Gold"},{color:[81.26920457801361,9.867685521169289,83.20080148584339],name:"Golden Yellow"},{color:[70.81571317667877,8.524971687770721,68.76466736413397],name:"Goldenrod"},{color:[94.66460305574972,-15.246487988791024,70.59519207854743],name:"Icterine"},{color:[99.63977381109994,-2.5469225879482527,7.152814753830183],name:"Ivory"},{color:[88.78304880169912,-3.1513043740321045,50.014848552135675],name:"Jasmine"},{color:[90.32729582034386,-9.009040601133389,44.974148443850545],name:"Khaki"},{color:[95.55292511966141,-20.42684134440398,85.94894397331485],name:"Lemon Yellow"},{color:[92.26078266031232,-11.365697231189353,68.82847284605664],name:"Maize"},{color:[79.1512149749217,9.335950659322801,65.15960718492207],name:"Mango"},{color:[88.2698109915024,-1.5186582994773934,66.75415939478033],name:"Mustard Yellow"},{color:[87.61842075934568,-2.7164374201131825,63.390705944858695],name:"Naples Yellow"},{color:[90.10007935356519,4.512981096042368,28.26448480810635],name:"Navajo White"},{color:[97.84120746375069,-12.262392561439906,14.637637973344141],name:"Nyanza"},{color:[96.88945773099503,-11.049377134639993,43.76759182401819],name:"Pastel Yellow"},{color:[91.95068405324936,1.8060328822012695,27.17778627189602],name:"Peach"},{color:[79.59225536526272,-17.836318672849348,66.20718650951007],name:"Pear"},{color:[75.64410668581183,-23.85120673140262,70.44369656631727],name:"Peridot"},{color:[74.41337981760837,-31.207249923621283,36.40816784257843],name:"Pistachio"},{color:[81.25109694490546,3.8904245723107023,74.14567317380674],name:"Saffron"},{color:[90.79522618837457,-3.8310479670478625,30.058406066721723],name:"Vanilla"},{color:[72.90398978126815,-6.381220350049121,50.144206800405414],name:"Vegas Gold"},{color:[89.35068099788126,1.514403426330302,23.99998118436706],name:"Wheat"},{color:[97.13824698129729,-21.555908334832285,94.48248544644461],name:"Yellow"},{color:[76.22151704834478,22.188882844699442,69.16551976678451],name:"Yellow Orange"}]};
let DEFINED_COLORS = null
let calculating = false
function getImageBlob(url) {
return new Promise(resolve => {
GM.xmlHttpRequest({
method: "GET",
url: "https://corsproxy.io/?" + encodeURIComponent(url),
responseType: "blob",
onload: function (response) {
resolve(response.response)
}
})
})
}
function blobToBase64(blob) {
return new Promise(resolve => {
const reader = new FileReader()
reader.onloadend = () => resolve(reader.result)
reader.readAsDataURL(blob)
})
}
// The rgb to lab code was lifted from https://github.com/antimatter15/rgb-lab/blob/master/color.js MIT License
// Thank you brave soldier
// the following functions are based off of the pseudocode
// found on www.easyrgb.com
function lab2rgb(lab) {
let y = (lab[0] + 16) / 116,
x = lab[1] / 500 + y,
z = y - lab[2] / 200,
r, g, b
x = 0.95047 * ((x * x * x > 0.008856) ? x * x * x : (x - 16 / 116) / 7.787)
y = 1.00000 * ((y * y * y > 0.008856) ? y * y * y : (y - 16 / 116) / 7.787)
z = 1.08883 * ((z * z * z > 0.008856) ? z * z * z : (z - 16 / 116) / 7.787)
r = x * 3.2406 + y * -1.5372 + z * -0.4986
g = x * -0.9689 + y * 1.8758 + z * 0.0415
b = x * 0.0557 + y * -0.2040 + z * 1.0570
r = (r > 0.0031308) ? (1.055 * Math.pow(r, 1 / 2.4) - 0.055) : 12.92 * r
g = (g > 0.0031308) ? (1.055 * Math.pow(g, 1 / 2.4) - 0.055) : 12.92 * g
b = (b > 0.0031308) ? (1.055 * Math.pow(b, 1 / 2.4) - 0.055) : 12.92 * b
return [Math.max(0, Math.min(1, r)) * 255,
Math.max(0, Math.min(1, g)) * 255,
Math.max(0, Math.min(1, b)) * 255
]
}
function rgb2lab(rgb) {
let r = rgb[0] / 255,
g = rgb[1] / 255,
b = rgb[2] / 255,
x, y, z
r = (r > 0.04045) ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92
g = (g > 0.04045) ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92
b = (b > 0.04045) ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92
x = (r * 0.4124 + g * 0.3576 + b * 0.1805) / 0.95047
y = (r * 0.2126 + g * 0.7152 + b * 0.0722) / 1.00000
z = (r * 0.0193 + g * 0.1192 + b * 0.9505) / 1.08883
x = (x > 0.008856) ? Math.pow(x, 1 / 3) : (7.787 * x) + 16 / 116
y = (y > 0.008856) ? Math.pow(y, 1 / 3) : (7.787 * y) + 16 / 116
z = (z > 0.008856) ? Math.pow(z, 1 / 3) : (7.787 * z) + 16 / 116
return [(116 * y) - 16, 500 * (x - y), 200 * (y - z)]
}
// calculate the perceptual distance between colors in CIELAB
// https://github.com/THEjoezack/ColorMine/blob/master/ColorMine/ColorSpaces/Comparisons/Cie94Comparison.cs
function deltaE(labA, labB) {
let deltaL = labA[0] - labB[0]
let deltaA = labA[1] - labB[1]
let deltaB = labA[2] - labB[2]
let c1 = Math.sqrt(labA[1] * labA[1] + labA[2] * labA[2])
let c2 = Math.sqrt(labB[1] * labB[1] + labB[2] * labB[2])
let deltaC = c1 - c2
let deltaH = deltaA * deltaA + deltaB * deltaB - deltaC * deltaC
deltaH = deltaH < 0 ? 0 : Math.sqrt(deltaH)
let sc = 1.0 + 0.045 * c1
let sh = 1.0 + 0.015 * c1
let deltaLKlsl = deltaL / (1.0)
let deltaCkcsc = deltaC / (sc)
let deltaHkhsh = deltaH / (sh)
let i = deltaLKlsl * deltaLKlsl + deltaCkcsc * deltaCkcsc + deltaHkhsh * deltaHkhsh
return i < 0 ? 0 : Math.sqrt(i)
}
function findPosition(oElement) {
if (oElement.offsetParent != undefined) {
for (var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent) {
posX += oElement.offsetLeft
posY += oElement.offsetTop
}
return [posX, posY]
} else {
return [oElement.x, oElement.y]
}
}
function getCoordinates(element, e) {
let posX = 0
let posY = 0
let imgPos = findPosition(element)
if (e.pageX || e.pageY) {
posX = e.pageX
posY = e.pageY
} else if (e.clientX || e.clientY) {
posX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft
posY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop
}
return [posX - imgPos[0], posY - imgPos[1]]
}
function getColorDistances(rgb) {
let colors = []
let asLab = rgb2lab(rgb)
for (let [colorName, defined] of Object.entries(DEFINED_COLORS)) {
let distances = defined.map(c => {
let dist = deltaE(c.color, asLab)
if (dist < 1.3) dist = -999
else dist = dist ** 2 // Applies a heavy penalty to colors, a distance of 2 is only +4 score, but a distance of 4 is +16 score. Lower score is better.
return {
name: c.name || "N/A", distance: dist
}
})
distances.sort((a, b) => a.distance - b.distance)
let distanceAvg = distances.slice(0, 5).reduce((a, b) => a + b.distance, 0) / 5
colors.push({
colorName,
distances,
score: distanceAvg
})
}
colors.sort((a, b) => a.score - b.score)
return colors
}
function calculateMidPoint(points) {
let x = 0
let y = 0
for (let point of points) {
x += point[0]
y += point[1]
}
return [x / points.length, y / points.length]
}
function updateVisibleSelection(ctx, points) {
if (points.length <= 1) {
return
}
ctx.setLineDash([5, 3])
ctx.strokeStyle = 'black'
ctx.fillStyle = 'rgba(0,0,0,0.3)'
ctx.lineWidth = 1
ctx.beginPath()
for (let index = 0; index < points.length; index++) {
let point = points[index]
if (index == 0) {
ctx.moveTo(point[0], point[1])
} else {
ctx.lineTo(point[0], point[1])
}
}
ctx.lineTo(points[0][0], points[0][1])
ctx.fill()
ctx.stroke()
ctx.closePath()
}
function updateSelectionCanvas(originCtx, points, secondaryCtx, colorSpan, drawAverage = false) {
let xSorted = points.toSorted((a, b) => a[0] - b[0])
let ySorted = points.toSorted((a, b) => a[1] - b[1])
let midPoint = calculateMidPoint(points)
let invisible = document.createElement("canvas")
invisible.width = originCtx.canvas.width
invisible.height = originCtx.canvas.height
let ctx = invisible.getContext("2d", { willReadFrequently: true })
ctx.drawImage(originCtx.canvas, 0, 0)
let biggestDiffX = xSorted[xSorted.length - 1][0] - xSorted[0][0]
let biggestDiffY = ySorted[ySorted.length - 1][1] - ySorted[0][1]
secondaryCtx.canvas.width = biggestDiffX + 60 > ctx.canvas.width ? ctx.canvas.width : biggestDiffX + 60
secondaryCtx.canvas.height = biggestDiffY + 60 > ctx.canvas.height ? ctx.canvas.height : biggestDiffY + 60
updateVisibleSelection(ctx, points)
secondaryCtx.drawImage(ctx.canvas, midPoint[0] - secondaryCtx.canvas.width / 2, midPoint[1] - secondaryCtx.canvas.height / 2, secondaryCtx.canvas.width,
secondaryCtx.canvas.height, 0, 0, secondaryCtx.canvas.width, secondaryCtx.canvas.height)
let rgb = []
if (drawAverage) {
let path = new Path2D()
path.moveTo(points[0][0], points[0][1])
for (let i = 1; i < points.length; i++) {
path.lineTo(points[i][0], points[i][1])
}
ctx.clearRect(0, 0, invisible.width, invisible.height)
ctx.clip(path)
ctx.drawImage(originCtx.canvas, 0, 0)
averageLab = getAverageColorLab(ctx, midPoint, secondaryCtx.canvas.width - 50, secondaryCtx.canvas.height - 50)
rgb = lab2rgb(averageLab)
secondaryCtx.fillStyle = `rgb(${rgb[0]}, ${rgb[1]}, ${rgb[2]})`
secondaryCtx.fillRect(secondaryCtx.canvas.width - 30, secondaryCtx.canvas.height - 30, 30, 30)
colorSpan.innerText = `rgb(${Math.floor(rgb[0] * 100) / 100}, ${Math.floor(rgb[1] * 100) / 100}, ${Math.floor(rgb[2] * 100) / 100})`
}
invisible.remove()
return rgb
}
function updateSolidColor(ctx, r, g, b) {
ctx.canvas.width = 30
ctx.canvas.height = 30
ctx.fillStyle = `rgb(${r}, ${g}, ${b})`
ctx.fillRect(0, 0, 30, 30)
}
function positionInSelection(pos, points) {
if (points.length <= 1) {
return false
}
let intersectionCount = 0
for (let i = 1; i < points.length; i++) {
let start = points[i - 1]
let end = points[i]
let ray = { start: pos, end: [99999, 0] }
let segment = { start, end }
let rayDistance = [ray.end[0] - ray.start[0], ray.end[1] - ray.start[1]]
let segmentDistance = [segment.end[0] - segment.start[0], segment.end[1] - segment.start[1]]
let T2 = (rayDistance[0] * (segment.start[0] - ray.start[1]) + rayDistance[1] * (ray.start[0] - segment.start[0])) / (segmentDistance[0] * rayDistance[1] - segmentDistance[1] * rayDistance[0])
let T1 = (segment.start[0] + segmentDistance[0] * T2 - ray.start[0]) / rayDistance[0]
if (T1 < 0) {
continue
}
if (T2 < 0 || T2 > 1) {
continue
}
if (isNaN(T1)) {
continue
}
intersectionCount++
}
if (intersectionCount == 0) {
return false
}
if (intersectionCount & 1) {
return true
} else {
return false
}
}
function getDataInSelection(ctx, points, midPoint, width, height) {
let datas = []
let startX = Math.floor(midPoint[0] - width / 2)
let startY = Math.floor(midPoint[1] - height / 2)
let endX = Math.floor(midPoint[0] + width / 2)
let endY = Math.floor(midPoint[1] + height / 2)
for (let x = startX; x < endX / 2; x++) {
for (let y = startY; y < endY; y++) {
if (positionInSelection([x, y], points)) {
datas.push(ctx.getImageData(x, y, 1, 1).data)
}
}
}
return datas
}
function getAverageColorLab(ctx, midPoint, width, height) {
let datas = []
let startX = Math.floor(midPoint[0] - width / 2)
let startY = Math.floor(midPoint[1] - height / 2)
let endX = Math.floor(midPoint[0] + width / 2)
let endY = Math.floor(midPoint[1] + height / 2)
for (let x = startX; x < endX; x++) {
for (let y = startY; y < endY; y++) {
let [r, g, b, a] = ctx.getImageData(x, y, 1, 1).data
if (a != 0) {
datas.push([r, g, b])
}
}
}
let l = 0
let a = 0
let b = 0
for (let data of datas) {
let [r, g, bl] = data
let asLab = rgb2lab([r, g, bl])
l += asLab[0]
a += asLab[1]
b += asLab[2]
}
return [l / datas.length, a / datas.length, b / datas.length]
}
function createColorPicker(img, ctx) {
let secondaryCanvas = document.createElement("canvas")
let secondaryCtx = secondaryCanvas.getContext("2d")
secondaryCanvas.width = 30
secondaryCanvas.height = 30
secondaryCanvas.style.maxWidth = img.clientWidth
secondaryCanvas.style.maxHeight = img.clientHeight
img.after(secondaryCanvas)
let colorSpan = document.createElement("span")
secondaryCanvas.after(colorSpan)
let colorContainer = document.createElement("div")
colorSpan.after(colorContainer)
let updateSelection = true
let mouseDown = false
let mouseMoved = false
let points = []
let updateScores = (r, g, b) => {
let colors = getColorDistances([r, g, b])
while (colorContainer.hasChildNodes()) {
colorContainer.removeChild(colorContainer.firstChild)
}
for (let color of colors) {
let span = document.createElement("span")
let a = document.createElement("a")
a.innerText = `${color.colorName} (${Math.floor(color.score * 100) / 100}) `
a.addEventListener("click", async (e) => {
e.preventDefault()
let asLab = rgb2lab([r, g, b])
let index = DEFINED_COLORS[color.colorName].findIndex(c => c.color[0] == asLab[0] && c.color[1] == asLab[1] && c.color[2] == asLab[2])
if (index != -1) {
DEFINED_COLORS[color.colorName].splice(index, 1)
} else {
DEFINED_COLORS[color.colorName].push({ color: asLab, name: "N/A" })
}
console.log("Saving defined colors")
await GM.setValue("defined_colors", JSON.stringify(DEFINED_COLORS))
updateScores(r, g, b)
})
span.appendChild(a)
colorContainer.appendChild(span)
}
// Debug stuff
console.log(colors)
}
img.addEventListener("mouseup", (e) => {
e.preventDefault()
if (calculating) return
calculating = true
mouseDown = false
updateSelection = false
if (!mouseMoved) {
let pos = getCoordinates(img, e)
let [r, g, b] = ctx.getImageData(pos[0], pos[1], 1, 1).data
colorSpan.innerText = `rgb(${Math.floor(r * 100) / 100}, ${Math.floor(g * 100) / 100}, ${Math.floor(b * 100) / 100})`
updateSolidColor(secondaryCtx, r, g, b)
updateScores(r, g, b)
} else {
points.push(points[0])
let [r, g, b] = updateSelectionCanvas(ctx, points, secondaryCtx, colorSpan, true)
updateScores(r, g, b)
}
mouseMoved = false
points.length = 0
calculating = false
})
img.addEventListener("mousedown", (e) => {
e.preventDefault()
if (calculating) return
let pos = getCoordinates(img, e)
points.push(pos)
mouseDown = true
})
img.addEventListener("mousemove", (e) => {
e.preventDefault()
if (calculating) return
if (e.shiftKey) updateSelection = true
let pos = getCoordinates(img, e)
if (mouseDown) {
points.push(pos)
if (!updateSelection) return
mouseMoved = true
updateSelectionCanvas(ctx, points, secondaryCtx, colorSpan)
} else {
if (!updateSelection) return
let [r, g, b] = ctx.getImageData(pos[0], pos[1], 1, 1).data
colorSpan.innerText = `rgb(${Math.floor(r * 100) / 100}, ${Math.floor(g * 100) / 100}, ${Math.floor(b * 100) / 100})`
updateSolidColor(secondaryCtx, r, g, b)
}
})
}
(async function () {
'use strict'
let defColors = await GM.getValue("defined_colors")
if (defColors) {
try {
DEFINED_COLORS = JSON.parse(defColors)
console.log("Loaded defined colors")
let anyAdded = false
for (let [colorName, colorGroup] of Object.entries(DEFAULT_COLORS)) {
if (!DEFINED_COLORS[colorName]) {
anyAdded = true
DEFINED_COLORS[colorName] = colorGroup
} else {
let missing = []
for (let colorData of colorGroup) {
if (!DEFINED_COLORS[colorName].some(c => c.name == colorData.name)) {
missing.push(colorData)
}
}
if (missing.length > 0) {
anyAdded = true
DEFINED_COLORS[colorName].push(...missing)
}
}
}
if (anyAdded) await GM.setValue("defined_colors", JSON.stringify(DEFAULT_COLORS))
} catch (e) {
DEFINED_COLORS = DEFAULT_COLORS
await GM.setValue("defined_colors", JSON.stringify(DEFAULT_COLORS))
}
} else {
DEFINED_COLORS = DEFAULT_COLORS
await GM.setValue("defined_colors", JSON.stringify(DEFAULT_COLORS))
}
if (window.location.pathname == "/uploads/new") {
let img = document.querySelector(".upload_preview_container.in-sidebar .upload_preview_img")
let canvas = document.createElement("canvas")
let ctx = canvas.getContext("2d", { willReadFrequently: true })
img.addEventListener("load", (e) => {
canvas.width = img.clientWidth
canvas.height = img.clientHeight
ctx.drawImage(img, 0, 0, img.clientWidth, img.clientHeight)
})
createColorPicker(img, ctx)
} else {
let editButton = document.getElementById("post-edit-link")
let sideEditButton = document.getElementById("side-edit-link")
let create = () => {
let img = document.querySelector("#image")
if (img.src.endsWith(".webm") || img.src.endsWith(".swf")) return
let canvas = document.createElement("canvas")
let ctx = canvas.getContext("2d", { willReadFrequently: true })
setTimeout(async () => {
let blob = await getImageBlob(img.src)
let base64 = await blobToBase64(blob)
canvas.width = img.clientWidth
canvas.height = img.clientHeight
let image = document.createElement("img")
image.addEventListener("load", () => {
ctx.drawImage(image, 0, 0, img.clientWidth, img.clientHeight)
createColorPicker(img, ctx)
})
image.src = base64
}, 100)
}
editButton.addEventListener("click", create)
sideEditButton.addEventListener("click", create)
}
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment