Create Palette extension

This commit is contained in:
Ricardo Matias
2019-11-18 10:11:26 +01:00
parent ca3d95087b
commit 9b691e04c4
8 changed files with 2366 additions and 1 deletions

106
orx-palette/README.md Normal file
View File

@@ -0,0 +1,106 @@
# orx-palette
An extension that helps managing a palette of colors. Includes 300 palettes organized in 3 collections gathered from different sources.
## Usage
```kotlin
import org.openrndr.extra.palette.PaletteStudio
val paletteStudio = PaletteStudio(
loadDefault = true, // Loads the first collection of palettes. [default -> true]
sortBy = PaletteStudio.SortBy.DARKEST, // Sorts the colors by luminance. [default -> PaletteStudio.SortBy.NO_SORTING]
collection = PaletteStudio.Collections.TWO, // Chooses which collection to load [default -> Collections.ONE]
colorCountConstraint = 3 // Constraints the number of colors in the palette [default -> 0]
)
// The choice of the background and foreground colors is based on contrast ratios
drawer.background(paletteStudio.background)
drawer.stroke = paletteStudio.foreground
val randomPaletteColor = Random.pick(paletteStudio.colors!!)
val randomColorExcludingBackground = Random.pick(paletteStudio.colors2!!)
// grabs a random palette from the collection
paletteStudio.randomPalette()
// randomizes the order of the colors in the palette
paletteStudio.randomize()
// changes the collection of palettes
paletteStudio.changeCollection(PaletteStudio.Collections.TWO)
// load your own from a JSON file with a structure of Array<Array<String>>
paletteStudio.loadExternal("data/palette-autumn.json")
```
### Keybindings
Keybindings for getting a random palette (`l`) and randomizing (`k`) one can be set easily by declaring inside the `program`:
```kotlin
val paletteStudio = PaletteStudio()
extend(paletteStudio)
```
## Example
```kotlin
fun main() = application {
configure {
title = "Palette"
width = 720
height = 720
}
program {
val colors = mutableListOf<ColorRGBa>()
fun fillColors() {
for (n in 0..36) {
when(n) {
12 -> paletteStudio.changeCollection(PaletteStudio.Collections.TWO)
24 -> paletteStudio.changeCollection(PaletteStudio.Collections.THREE)
}
val color = Random.pick(paletteStudio.colors!!)
colors.add(color)
}
}
keyboard.keyDown.listen {
if (it.name == "c") {
colors.clear()
fillColors()
}
}
fillColors()
extend() {
drawer.background(paletteStudio.background)
val size = 120.0
val radius = size / 2.0
for (x in 0 until 6) {
for (y in 0 until 6) {
val index = x + y * 6
val color = colors[index]
val x = size * x
val y = size * y
drawer.fill = color
drawer.stroke = color
if (index <= 11 || index > 23) {
drawer.circle(x + radius, y + radius, radius)
} else {
drawer.rectangle(x, y, size, size)
}
}
}
}
}
}
```

5
orx-palette/build.gradle Normal file
View File

@@ -0,0 +1,5 @@
dependencies {
compile "com.google.code.gson:gson:2.8.6"
implementation project(":orx-noise")
}

View File

@@ -0,0 +1,34 @@
package org.openrndr.extra.palette
import org.openrndr.color.ColorRGBa
import org.openrndr.color.Linearity
// https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
internal fun getLuminance(color: ColorRGBa): Double = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b
// see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef
internal fun getContrast(colorA: ColorRGBa, colorB: ColorRGBa): Double {
val l1 = getLuminance(colorA)
val l2 = getLuminance(colorB)
return if (l1 > l2) (l1 + 0.05) / (l2 + 0.05) else (l2 + 0.05) / (l1 + 0.05);
}
// TODO(ricardomatias) Remove this when 0.3.36 is released
internal fun fromHex(hex: String): ColorRGBa {
val parsedHex = hex.replace("#", "")
val len = parsedHex.length
val mult = len / 3
val colors = (0..2).map { idx ->
var c = parsedHex.substring(idx * mult, (idx + 1) * mult)
c = if (len == 3) c + c else c
Integer.valueOf(c, 16)
}
val (r, g, b) = colors
return ColorRGBa(r / 255.0, g / 255.0, b / 255.0, 1.0, Linearity.SRGB)
}

View File

@@ -0,0 +1,220 @@
package org.openrndr.extra.palette
import mu.KotlinLogging
import com.google.gson.GsonBuilder
import org.openrndr.Extension
import org.openrndr.Keyboard
import org.openrndr.Program
import org.openrndr.extra.noise.Random
import org.openrndr.color.ColorRGBa
import org.openrndr.color.ColorRGBa.Companion.BLACK
import org.openrndr.color.ColorRGBa.Companion.GREEN
import org.openrndr.color.ColorRGBa.Companion.PINK
import org.openrndr.color.ColorRGBa.Companion.RED
import org.openrndr.color.ColorRGBa.Companion.WHITE
import org.openrndr.color.ColorRGBa.Companion.YELLOW
import org.openrndr.resourceUrl
import java.io.File
import java.net.URL
import kotlin.math.max
import kotlin.math.min
internal val logger = KotlinLogging.logger {}
internal typealias Colors = List<ColorRGBa>
data class Palette(
val background: ColorRGBa,
val foreground: ColorRGBa,
val colors: Colors,
val colors2: Colors
)
internal val defaultPalette: Palette = Palette(
BLACK,
PINK,
listOf(BLACK, PINK, YELLOW, RED, GREEN),
listOf(PINK, YELLOW, RED, GREEN)
)
internal fun getCollPath(n: String) = URL(resourceUrl("/org/openrndr/extra/palette/collections/collection-$n.json"))
class PaletteStudio(
loadDefault: Boolean = true,
val sortBy: SortBy = SortBy.NO_SORTING,
collection: Collections = Collections.ONE,
val colorCountConstraint: Int = 0
) : Extension {
var palettes: MutableList<MutableList<ColorRGBa>> = mutableListOf()
var palette: Palette = defaultPalette
private var paletteIndex: Int = 0
enum class SortBy {
NO_SORTING, DARKEST, BRIGHTEST
}
enum class Collections {
ONE, TWO, THREE
}
private val collectionsResource = mapOf(
Collections.ONE to getCollPath("1"),
Collections.TWO to getCollPath("2"),
Collections.THREE to getCollPath("3")
)
var background: ColorRGBa = defaultPalette.background
get() {
return palette.background
}
var foreground: ColorRGBa = defaultPalette.foreground
get() {
return palette.foreground
}
var colors: Colors = defaultPalette.colors
get() {
return palette.colors
}
var colors2: Colors = defaultPalette.colors2
get() {
return palette.colors2
}
init {
if (loadDefault) {
loadCollection(collection)
}
}
private fun loadCollection(newCollection: Collections) {
val collectionPath: URL = collectionsResource[newCollection]!!
palettes = mutableListOf()
loadFromURL(collectionPath)
val choice = Random.pick(palettes)
palette = createPalette(choice)
paletteIndex = palettes.indexOf(choice)
}
private fun load(contents: String) {
try {
val gson = GsonBuilder().create()
val clipData = gson.fromJson(
contents, Array<Array<String>>::class.java
).toList()
for (p in clipData) {
val palette = mutableListOf<ColorRGBa>()
for (colorStr in p.toList()) {
val colorInt = fromHex(colorStr)
palette.add(colorInt)
}
palettes.add(palette)
}
} catch (ex: Exception) {
logger.error(ex) { "Error: Could not load palettes" }
logger.info { "Only JSON files with Array<Array<String>> structure can be loaded using this method" }
}
}
private fun loadFromURL(url: URL): Unit = load(url.readText())
private fun createPalette(colors: MutableList<ColorRGBa>) : Palette {
when(sortBy) {
SortBy.DARKEST -> {
val darkest = Comparator<ColorRGBa> { c1: ColorRGBa, c2: ColorRGBa -> (getLuminance(c1) - getLuminance(c2)).toInt() }
colors.sortWith(darkest)
}
SortBy.BRIGHTEST -> {
val brightest = Comparator<ColorRGBa> { c1: ColorRGBa, c2: ColorRGBa -> (getLuminance(c2) - getLuminance(c1)).toInt() }
colors.sortWith(brightest)
}
SortBy.NO_SORTING -> {}
}
val background = colors.first()
val foreground = colors
.takeLast(colors.size - 1)
.map { getContrast(background, it) to it }
.maxBy { it.first }!!
.second
var constraint = colors.size
var constraint2 = colors.size
if (colorCountConstraint > 0 && colorCountConstraint < colors.size) {
constraint = colorCountConstraint
constraint2 = colorCountConstraint + 1
}
val colors1 = colors.slice(0 until constraint)
val colors2 = colors.slice(1 until constraint2)
return Palette(background, foreground, colors1, colors2)
}
fun loadExternal(filePath: String) {
palettes = mutableListOf()
load(File(filePath).readText())
val choice = Random.pick(palettes)
palette = createPalette(choice)
paletteIndex = palettes.indexOf(choice)
}
fun select(index: Int = 0) {
paletteIndex = max(min(index, palettes.size - 1), 0)
palette = createPalette(palettes[paletteIndex])
}
fun getIndex(): Int {
return paletteIndex
}
fun randomize() {
palette = createPalette(Random.pick(palette.colors, count = palette.colors.size))
}
fun randomPalette() {
val comparison = palette.colors.toMutableList()
val colors= Random.pick(palettes, comparison) as MutableList<ColorRGBa>
paletteIndex = palettes.indexOf(colors)
palette = createPalette(colors)
}
fun changeCollection(newCollection: Collections) {
loadCollection(newCollection)
}
private fun registerKeybindings(keyboard: Keyboard) {
keyboard.keyDown.listen {
if (it.name == "l") {
randomPalette()
}
if (it.name == "k") {
randomize()
}
}
}
/*
* EXTENSION
*/
override var enabled: Boolean = true
override fun setup(program: Program) {
registerKeybindings(program.keyboard)
}
}

View File

@@ -0,0 +1,602 @@
[
[
"#222831",
"#393e46",
"#00adb5",
"#eeeeee"
],
[
"#f9ed69",
"#f08a5d",
"#b83b5e",
"#6a2c70"
],
[
"#f38181",
"#fce38a",
"#eaffd0",
"#95e1d3"
],
[
"#08d9d6",
"#252a34",
"#ff2e63",
"#eaeaea"
],
[
"#364f6b",
"#3fc1c9",
"#f5f5f5",
"#fc5185"
],
[
"#a8d8ea",
"#aa96da",
"#fcbad3",
"#ffffd2"
],
[
"#e3fdfd",
"#cbf1f5",
"#a6e3e9",
"#71c9ce"
],
[
"#e4f9f5",
"#30e3ca",
"#11999e",
"#40514e"
],
[
"#ffc7c7",
"#ffe2e2",
"#f6f6f6",
"#8785a2"
],
[
"#48466d",
"#3d84a8",
"#46cdcf",
"#abedd8"
],
[
"#f9f7f7",
"#dbe2ef",
"#3f72af",
"#112d4e"
],
[
"#00b8a9",
"#f8f3d4",
"#f6416c",
"#ffde7d"
],
[
"#2b2e4a",
"#e84545",
"#903749",
"#53354a"
],
[
"#e23e57",
"#88304e",
"#522546",
"#311d3f"
],
[
"#212121",
"#323232",
"#0d7377",
"#14ffec"
],
[
"#ffcfdf",
"#fefdca",
"#e0f9b5",
"#a5dee5"
],
[
"#ffb6b9",
"#fae3d9",
"#bbded6",
"#61c0bf"
],
[
"#a8e6cf",
"#dcedc1",
"#ffd3b6",
"#ffaaa5"
],
[
"#defcf9",
"#cadefc",
"#c3bef0",
"#cca8e9"
],
[
"#ffc8c8",
"#ff9999",
"#444f5a",
"#3e4149"
],
[
"#3ec1d3",
"#f6f7d7",
"#ff9a00",
"#ff165d"
],
[
"#6fe7dd",
"#3490de",
"#6639a6",
"#521262"
],
[
"#f67280",
"#c06c84",
"#6c5b7b",
"#355c7d"
],
[
"#2d4059",
"#ea5455",
"#f07b3f",
"#ffd460"
],
[
"#8ef6e4",
"#9896f1",
"#d59bf6",
"#edb1f1"
],
[
"#bad7df",
"#ffe2e2",
"#f6f6f6",
"#99ddcc"
],
[
"#384259",
"#f73859",
"#7ac7c4",
"#c4edde"
],
[
"#a1eafb",
"#fdfdfd",
"#ffcef3",
"#cabbe9"
],
[
"#dcedc2",
"#ffd3b5",
"#ffaaa6",
"#ff8c94"
],
[
"#303841",
"#00adb5",
"#eeeeee",
"#ff5722"
],
[
"#2a363b",
"#e84a5f",
"#ff847c",
"#fecea8"
],
[
"#f85f73",
"#fbe8d3",
"#928a97",
"#283c63"
],
[
"#f0f5f9",
"#c9d6df",
"#52616b",
"#1e2022"
],
[
"#07689f",
"#a2d5f2",
"#fafafa",
"#ff7e67"
],
[
"#00e0ff",
"#74f9ff",
"#a6fff2",
"#e8ffe8"
],
[
"#cefff1",
"#ace7ef",
"#a6acec",
"#a56cc1"
],
[
"#7effdb",
"#b693fe",
"#8c82fc",
"#ff9de2"
],
[
"#a9eee6",
"#fefaec",
"#f9a1bc",
"#625772"
],
[
"#15b7b9",
"#10ddc2",
"#f5f5f5",
"#f57170"
],
[
"#dff4f3",
"#dde7f2",
"#b9bbdf",
"#878ecd"
],
[
"#ebfffa",
"#c6fce5",
"#6ef3d6",
"#0dceda"
],
[
"#0c056d",
"#590d82",
"#b61aae",
"#f25d9c"
],
[
"#f7fbfc",
"#d6e6f2",
"#b9d7ea",
"#769fcd"
],
[
"#a8e6cf",
"#fdffab",
"#ffd3b6",
"#ffaaa5"
],
[
"#1fab89",
"#62d2a2",
"#9df3c4",
"#d7fbe8"
],
[
"#303a52",
"#574b90",
"#9e579d",
"#fc85ae"
],
[
"#99e1e5",
"#f3e8cb",
"#f2c6b4",
"#fbafaf"
],
[
"#d4a5a5",
"#ffecda",
"#f9ffea",
"#a6d0e4"
],
[
"#303841",
"#3a4750",
"#d72323",
"#eeeeee"
],
[
"#fcefee",
"#fccde2",
"#fc5c9c",
"#c5e3f6"
],
[
"#fef0ff",
"#d6c8ff",
"#c79ecf",
"#7e6bc4"
],
[
"#393232",
"#4d4545",
"#8d6262",
"#ed8d8d"
],
[
"#fffcca",
"#55e9bc",
"#11d3bc",
"#537780"
],
[
"#283149",
"#404b69",
"#f73859",
"#dbedf3"
],
[
"#11cbd7",
"#c6f1e7",
"#f0fff3",
"#fa4659"
],
[
"#27296d",
"#5e63b6",
"#a393eb",
"#f5c7f7"
],
[
"#fafafa",
"#e8f1f5",
"#005691",
"#004a7c"
],
[
"#155263",
"#ff6f3c",
"#ff9a3c",
"#ffc93c"
],
[
"#ff6464",
"#ff8264",
"#ffaa64",
"#fff5a5"
],
[
"#e0fcff",
"#90f2ff",
"#6eb6ff",
"#7098da"
],
[
"#c7f5fe",
"#fcc8f8",
"#eab4f8",
"#f3f798"
],
[
"#233142",
"#455d7a",
"#f95959",
"#e3e3e3"
],
[
"#ffa5a5",
"#ffffc2",
"#c8e7ed",
"#bfcfff"
],
[
"#4d606e",
"#3fbac2",
"#d3d4d8",
"#f5f5f5"
],
[
"#a9eee6",
"#fefaec",
"#f38181",
"#625772"
],
[
"#3a0088",
"#930077",
"#e61c5d",
"#ffbd39"
],
[
"#adf7d1",
"#95e8d7",
"#7dace4",
"#8971d0"
],
[
"#9ddcdc",
"#fff4e1",
"#ffebb7",
"#e67a7a"
],
[
"#66bfbf",
"#eaf6f6",
"#fcfefe",
"#f76b8a"
],
[
"#c7f3ff",
"#fdc7ff",
"#ffdcf5",
"#f2f4c3"
],
[
"#00204a",
"#005792",
"#00bbf0",
"#d9faff"
],
[
"#c8f4de",
"#a4e5d9",
"#66c6ba",
"#649dad"
],
[
"#253b6e",
"#1f5f8b",
"#1891ac",
"#d2ecf9"
],
[
"#a7efe9",
"#7fdfd4",
"#fbe1b6",
"#fbac91"
],
[
"#2a363b",
"#e84a5f",
"#ff847b",
"#fecea8"
],
[
"#f5eee6",
"#f3d7ca",
"#e6a4b4",
"#c86b85"
],
[
"#f8b595",
"#f67280",
"#c06c84",
"#6c5b7c"
],
[
"#ffd9e8",
"#de95ba",
"#7f4a88",
"#4a266a"
],
[
"#700961",
"#b80d57",
"#e03e36",
"#ff7c38"
],
[
"#dff5f2",
"#87dfd6",
"#46b7b9",
"#2f9296"
],
[
"#f69d9d",
"#ffeab6",
"#fdffba",
"#c0ffc2"
],
[
"#35477d",
"#6c5b7b",
"#c06c84",
"#f67280"
],
[
"#fbf0f0",
"#dfd3d3",
"#b8b0b0",
"#7c7575"
],
[
"#f6f6f6",
"#d6e4f0",
"#1e56a0",
"#163172"
],
[
"#fb929e",
"#ffdfdf",
"#fff6f6",
"#aedefc"
],
[
"#e4fffe",
"#a4f6f9",
"#ff99fe",
"#ba52ed"
],
[
"#071a52",
"#086972",
"#17b978",
"#a7ff83"
],
[
"#a1d9ff",
"#ca82f8",
"#ed93cb",
"#f2bbbb"
],
[
"#7a08fa",
"#a82ffc",
"#c264fe",
"#f8ecfd"
],
[
"#e7e6e1",
"#f7f6e7",
"#c1c0b9",
"#537791"
],
[
"#222831",
"#393e46",
"#00adb5",
"#00fff5"
],
[
"#f06868",
"#fab57a",
"#edf798",
"#80d6ff"
],
[
"#f4f7f7",
"#aacfd0",
"#79a8a9",
"#1f4e5f"
],
[
"#a6e4e7",
"#f9f9f9",
"#ebcbae",
"#8f8787"
],
[
"#fa4659",
"#feffe4",
"#a3de83",
"#2eb872"
],
[
"#f47c7c",
"#f7f48b",
"#a1de93",
"#70a1d7"
],
[
"#ffffc1",
"#ffd2a5",
"#ffa8b8",
"#d988bc"
],
[
"#f8b195",
"#f67280",
"#c06c84",
"#355c7d"
],
[
"#f4f7f7",
"#aacfd0",
"#5da0a2",
"#34495e"
],
[
"#29c6cd",
"#f6e4c4",
"#fea386",
"#f19584"
]
]

View File

@@ -0,0 +1,695 @@
[
[
"#69d2e7",
"#a7dbd8",
"#e0e4cc",
"#f38630",
"#fa6900"
],
[
"#fe4365",
"#fc9d9a",
"#f9cdad",
"#c8c8a9",
"#83af9b"
],
[
"#ecd078",
"#d95b43",
"#c02942",
"#542437",
"#53777a"
],
[
"#556270",
"#4ecdc4",
"#c7f464",
"#ff6b6b",
"#c44d58"
],
[
"#774f38",
"#e08e79",
"#f1d4af",
"#ece5ce",
"#c5e0dc"
],
[
"#e8ddcb",
"#cdb380",
"#036564",
"#033649",
"#031634"
],
[
"#490a3d",
"#bd1550",
"#e97f02",
"#f8ca00",
"#8a9b0f"
],
[
"#594f4f",
"#547980",
"#45ada8",
"#9de0ad",
"#e5fcc2"
],
[
"#00a0b0",
"#6a4a3c",
"#cc333f",
"#eb6841",
"#edc951"
],
[
"#e94e77",
"#d68189",
"#c6a49a",
"#c6e5d9",
"#f4ead5"
],
[
"#3fb8af",
"#7fc7af",
"#dad8a7",
"#ff9e9d",
"#ff3d7f"
],
[
"#d9ceb2",
"#948c75",
"#d5ded9",
"#7a6a53",
"#99b2b7"
],
[
"#ffffff",
"#cbe86b",
"#f2e9e1",
"#1c140d",
"#cbe86b"
],
[
"#efffcd",
"#dce9be",
"#555152",
"#2e2633",
"#99173c"
],
[
"#343838",
"#005f6b",
"#008c9e",
"#00b4cc",
"#00dffc"
],
[
"#413e4a",
"#73626e",
"#b38184",
"#f0b49e",
"#f7e4be"
],
[
"#ff4e50",
"#fc913a",
"#f9d423",
"#ede574",
"#e1f5c4"
],
[
"#99b898",
"#fecea8",
"#ff847c",
"#e84a5f",
"#2a363b"
],
[
"#655643",
"#80bca3",
"#f6f7bd",
"#e6ac27",
"#bf4d28"
],
[
"#00a8c6",
"#40c0cb",
"#f9f2e7",
"#aee239",
"#8fbe00"
],
[
"#351330",
"#424254",
"#64908a",
"#e8caa4",
"#cc2a41"
],
[
"#554236",
"#f77825",
"#d3ce3d",
"#f1efa5",
"#60b99a"
],
[
"#5d4157",
"#838689",
"#a8caba",
"#cad7b2",
"#ebe3aa"
],
[
"#8c2318",
"#5e8c6a",
"#88a65e",
"#bfb35a",
"#f2c45a"
],
[
"#fad089",
"#ff9c5b",
"#f5634a",
"#ed303c",
"#3b8183"
],
[
"#ff4242",
"#f4fad2",
"#d4ee5e",
"#e1edb9",
"#f0f2eb"
],
[
"#f8b195",
"#f67280",
"#c06c84",
"#6c5b7b",
"#355c7d"
],
[
"#d1e751",
"#ffffff",
"#000000",
"#4dbce9",
"#26ade4"
],
[
"#1b676b",
"#519548",
"#88c425",
"#bef202",
"#eafde6"
],
[
"#5e412f",
"#fcebb6",
"#78c0a8",
"#f07818",
"#f0a830"
],
[
"#bcbdac",
"#cfbe27",
"#f27435",
"#f02475",
"#3b2d38"
],
[
"#452632",
"#91204d",
"#e4844a",
"#e8bf56",
"#e2f7ce"
],
[
"#eee6ab",
"#c5bc8e",
"#696758",
"#45484b",
"#36393b"
],
[
"#f0d8a8",
"#3d1c00",
"#86b8b1",
"#f2d694",
"#fa2a00"
],
[
"#2a044a",
"#0b2e59",
"#0d6759",
"#7ab317",
"#a0c55f"
],
[
"#f04155",
"#ff823a",
"#f2f26f",
"#fff7bd",
"#95cfb7"
],
[
"#b9d7d9",
"#668284",
"#2a2829",
"#493736",
"#7b3b3b"
],
[
"#b3cc57",
"#ecf081",
"#ffbe40",
"#ef746f",
"#ab3e5b"
],
[
"#bbbb88",
"#ccc68d",
"#eedd99",
"#eec290",
"#eeaa88"
],
[
"#a3a948",
"#edb92e",
"#f85931",
"#ce1836",
"#009989"
],
[
"#aab3ab",
"#c4cbb7",
"#ebefc9",
"#eee0b7",
"#e8caaf"
],
[
"#300030",
"#480048",
"#601848",
"#c04848",
"#f07241"
],
[
"#e8d5b7",
"#0e2430",
"#fc3a51",
"#f5b349",
"#e8d5b9"
],
[
"#67917a",
"#170409",
"#b8af03",
"#ccbf82",
"#e33258"
],
[
"#607848",
"#789048",
"#c0d860",
"#f0f0d8",
"#604848"
],
[
"#b6d8c0",
"#c8d9bf",
"#dadabd",
"#ecdbbc",
"#fedcba"
],
[
"#ab526b",
"#bca297",
"#c5ceae",
"#f0e2a4",
"#f4ebc3"
],
[
"#a8e6ce",
"#dcedc2",
"#ffd3b5",
"#ffaaa6",
"#ff8c94"
],
[
"#3e4147",
"#fffedf",
"#dfba69",
"#5a2e2e",
"#2a2c31"
],
[
"#fc354c",
"#29221f",
"#13747d",
"#0abfbc",
"#fcf7c5"
],
[
"#cc0c39",
"#e6781e",
"#c8cf02",
"#f8fcc1",
"#1693a7"
],
[
"#a7c5bd",
"#e5ddcb",
"#eb7b59",
"#cf4647",
"#524656"
],
[
"#1c2130",
"#028f76",
"#b3e099",
"#ffeaad",
"#d14334"
],
[
"#edebe6",
"#d6e1c7",
"#94c7b6",
"#403b33",
"#d3643b"
],
[
"#dad6ca",
"#1bb0ce",
"#4f8699",
"#6a5e72",
"#563444"
],
[
"#5c323e",
"#a82743",
"#e15e32",
"#c0d23e",
"#e5f04c"
],
[
"#fdf1cc",
"#c6d6b8",
"#987f69",
"#e3ad40",
"#fcd036"
],
[
"#230f2b",
"#f21d41",
"#ebebbc",
"#bce3c5",
"#82b3ae"
],
[
"#b9d3b0",
"#81bda4",
"#b28774",
"#f88f79",
"#f6aa93"
],
[
"#3a111c",
"#574951",
"#83988e",
"#bcdea5",
"#e6f9bc"
],
[
"#5e3929",
"#cd8c52",
"#b7d1a3",
"#dee8be",
"#fcf7d3"
],
[
"#1c0113",
"#6b0103",
"#a30006",
"#c21a01",
"#f03c02"
],
[
"#000000",
"#9f111b",
"#b11623",
"#292c37",
"#cccccc"
],
[
"#382f32",
"#ffeaf2",
"#fcd9e5",
"#fbc5d8",
"#f1396d"
],
[
"#e3dfba",
"#c8d6bf",
"#93ccc6",
"#6cbdb5",
"#1a1f1e"
],
[
"#f6f6f6",
"#e8e8e8",
"#333333",
"#990100",
"#b90504"
],
[
"#1b325f",
"#9cc4e4",
"#e9f2f9",
"#3a89c9",
"#f26c4f"
],
[
"#a1dbb2",
"#fee5ad",
"#faca66",
"#f7a541",
"#f45d4c"
],
[
"#951f2b",
"#f5f4d7",
"#e0dfb1",
"#a5a36c",
"#535233"
],
[
"#5e9fa3",
"#dcd1b4",
"#fab87f",
"#f87e7b",
"#b05574"
],
[
"#c1b398",
"#605951",
"#fbeec2",
"#61a6ab",
"#accec0"
],
[
"#8dccad",
"#988864",
"#fea6a2",
"#f9d6ac",
"#ffe9af"
],
[
"#2d2d29",
"#215a6d",
"#3ca2a2",
"#92c7a3",
"#dfece6"
],
[
"#413d3d",
"#040004",
"#c8ff00",
"#fa023c",
"#4b000f"
],
[
"#ffefd3",
"#fffee4",
"#d0ecea",
"#9fd6d2",
"#8b7a5e"
],
[
"#eff3cd",
"#b2d5ba",
"#61ada0",
"#248f8d",
"#605063"
],
[
"#f8edd1",
"#d88a8a",
"#474843",
"#9d9d93",
"#c5cfc6"
],
[
"#cfffdd",
"#b4dec1",
"#5c5863",
"#a85163",
"#ff1f4c"
],
[
"#ff003c",
"#ff8a00",
"#fabe28",
"#88c100",
"#00c176"
],
[
"#9dc9ac",
"#fffec7",
"#f56218",
"#ff9d2e",
"#919167"
],
[
"#046d8b",
"#309292",
"#2fb8ac",
"#93a42a",
"#ecbe13"
],
[
"#a8a7a7",
"#cc527a",
"#e8175d",
"#474747",
"#363636"
],
[
"#4e395d",
"#827085",
"#8ebe94",
"#ccfc8e",
"#dc5b3e"
],
[
"#f38a8a",
"#55443d",
"#a0cab5",
"#cde9ca",
"#f1edd0"
],
[
"#a70267",
"#f10c49",
"#fb6b41",
"#f6d86b",
"#339194"
],
[
"#4d3b3b",
"#de6262",
"#ffb88c",
"#ffd0b3",
"#f5e0d3"
],
[
"#4e4d4a",
"#353432",
"#94ba65",
"#2790b0",
"#2b4e72"
],
[
"#ffedbf",
"#f7803c",
"#f54828",
"#2e0d23",
"#f8e4c1"
],
[
"#0ca5b0",
"#4e3f30",
"#fefeeb",
"#f8f4e4",
"#a5b3aa"
],
[
"#fffbb7",
"#a6f6af",
"#66b6ab",
"#5b7c8d",
"#4f2958"
],
[
"#edf6ee",
"#d1c089",
"#b3204d",
"#412e28",
"#151101"
],
[
"#9d7e79",
"#ccac95",
"#9a947c",
"#748b83",
"#5b756c"
],
[
"#fcfef5",
"#e9ffe1",
"#cdcfb7",
"#d6e6c3",
"#fafbe3"
],
[
"#9cddc8",
"#bfd8ad",
"#ddd9ab",
"#f7af63",
"#633d2e"
],
[
"#aaff00",
"#ffaa00",
"#ff00aa",
"#aa00ff",
"#00aaff"
],
[
"#30261c",
"#403831",
"#36544f",
"#1f5f61",
"#0b8185"
],
[
"#d1313d",
"#e5625c",
"#f9bf76",
"#8eb2c5",
"#615375"
],
[
"#805841",
"#dcf7f3",
"#fffcdd",
"#ffd8d8",
"#f5a2a2"
],
[
"#73c8a9",
"#dee1b6",
"#e1b866",
"#bd5532",
"#373b44"
]
]

View File

@@ -0,0 +1,702 @@
[
[
"#247ba0",
"#70c1b3",
"#b2dbbf",
"#f3ffbd",
"#ff1654"
],
[
"#05668d",
"#028090",
"#00a896",
"#02c39a",
"#f0f3bd"
],
[
"#011627",
"#fdfffc",
"#2ec4b6",
"#e71d36",
"#ff9f1c"
],
[
"#e63946",
"#f1faee",
"#a8dadc",
"#457b9d",
"#1d3557"
],
[
"#ffcdb2",
"#ffb4a2",
"#e5989b",
"#b5838d",
"#6d6875"
],
[
"#50514f",
"#f25f5c",
"#ffe066",
"#247ba0",
"#70c1b3"
],
[
"#264653",
"#2a9d8f",
"#e9c46a",
"#f4a261",
"#e76f51"
],
[
"#1a535c",
"#4ecdc4",
"#f7fff7",
"#ff6b6b",
"#ffe66d"
],
[
"#2b2d42",
"#8d99ae",
"#edf2f4",
"#ef233c",
"#d90429"
],
[
"#ffffff",
"#84dcc6",
"#a5ffd6",
"#ffa69e",
"#ff686b"
],
[
"#ffffff",
"#00171f",
"#003459",
"#007ea7",
"#00a8e8"
],
[
"#d8e2dc",
"#ffe5d9",
"#ffcad4",
"#f4acb7",
"#9d8189"
],
[
"#fe938c",
"#e6b89c",
"#ead2ac",
"#9cafb7",
"#4281a4"
],
[
"#5bc0eb",
"#fde74c",
"#9bc53d",
"#e55934",
"#fa7921"
],
[
"#ed6a5a",
"#f4f1bb",
"#9bc1bc",
"#5ca4a9",
"#e6ebe0"
],
[
"#ef476f",
"#ffd166",
"#06d6a0",
"#118ab2",
"#073b4c"
],
[
"#0b132b",
"#1c2541",
"#3a506b",
"#5bc0be",
"#6fffe9"
],
[
"#bce784",
"#5dd39e",
"#348aa7",
"#525174",
"#513b56"
],
[
"#003049",
"#d62828",
"#f77f00",
"#fcbf49",
"#eae2b7"
],
[
"#000000",
"#14213d",
"#fca311",
"#e5e5e5",
"#ffffff"
],
[
"#9c89b8",
"#f0a6ca",
"#efc3e6",
"#f0e6ef",
"#b8bedd"
],
[
"#e8e9f3",
"#cecece",
"#a6a6a8",
"#272635",
"#b1e5f2"
],
[
"#defffc",
"#e2e4f6",
"#e7c8dd",
"#dbafc1",
"#86626e"
],
[
"#a31621",
"#fcf7f8",
"#ced3dc",
"#4e8098",
"#90c2e7"
],
[
"#04080f",
"#507dbc",
"#a1c6ea",
"#bbd1ea",
"#dae3e5"
],
[
"#b8b8d1",
"#5b5f97",
"#ffc145",
"#fffffb",
"#ff6b6c"
],
[
"#2a2b2a",
"#706c61",
"#f8f4e3",
"#e5446d",
"#ff8966"
],
[
"#eae0cc",
"#c9ada1",
"#a0a083",
"#798478",
"#4d6a6d"
],
[
"#092327",
"#0b5351",
"#00a9a5",
"#4e8098",
"#90c2e7"
],
[
"#fcd0a1",
"#b1b695",
"#53917e",
"#63535b",
"#6d1a36"
],
[
"#161925",
"#23395b",
"#406e8e",
"#8ea8c3",
"#cbf7ed"
],
[
"#124e78",
"#f0f0c9",
"#f2bb05",
"#d74e09",
"#6e0e0a"
],
[
"#bbdef0",
"#00a6a6",
"#efca08",
"#f49f0a",
"#f08700"
],
[
"#ef798a",
"#f7a9a8",
"#7d82b8",
"#613f75",
"#e5c3d1"
],
[
"#75dddd",
"#508991",
"#172a3a",
"#004346",
"#09bc8a"
],
[
"#363537",
"#ef2d56",
"#ed7d3a",
"#8cd867",
"#2fbf71"
],
[
"#8c1c13",
"#bf4342",
"#e7d7c1",
"#a78a7f",
"#735751"
],
[
"#fb3640",
"#605f5e",
"#1d3461",
"#1f487e",
"#247ba0"
],
[
"#eac435",
"#345995",
"#e40066",
"#03cea4",
"#fb4d3d"
],
[
"#f1e8b8",
"#f9e784",
"#e58f65",
"#d05353",
"#191919"
],
[
"#1a1423",
"#3d314a",
"#684756",
"#96705b",
"#ab8476"
],
[
"#4c5760",
"#93a8ac",
"#d7ceb2",
"#a59e8c",
"#66635b"
],
[
"#292f36",
"#4ecdc4",
"#f7fff7",
"#ff6b6b",
"#ffe66d"
],
[
"#540d6e",
"#ee4266",
"#ffd23f",
"#3bceac",
"#0ead69"
],
[
"#c9cba3",
"#ffe1a8",
"#e26d5c",
"#723d46",
"#472d30"
],
[
"#ffa69e",
"#faf3dd",
"#b8f2e6",
"#aed9e0",
"#5e6472"
],
[
"#1b998b",
"#2d3047",
"#fffd82",
"#ff9b71",
"#e84855"
],
[
"#1be7ff",
"#6eeb83",
"#e4ff1a",
"#e8aa14",
"#ff5714"
],
[
"#f0b67f",
"#fe5f55",
"#d6d1b1",
"#c7efcf",
"#eef5db"
],
[
"#d3f8e2",
"#e4c1f9",
"#f694c1",
"#ede7b1",
"#a9def9"
],
[
"#fbfbf2",
"#e5e6e4",
"#cfd2cd",
"#a6a2a2",
"#847577"
],
[
"#6699cc",
"#fff275",
"#ff8c42",
"#ff3c38",
"#a23e48"
],
[
"#f8ffe5",
"#06d6a0",
"#1b9aaa",
"#ef476f",
"#ffc43d"
],
[
"#220901",
"#621708",
"#941b0c",
"#bc3908",
"#f6aa1c"
],
[
"#e0fbfc",
"#c2dfe3",
"#9db4c0",
"#5c6b73",
"#253237"
],
[
"#353535",
"#3c6e71",
"#ffffff",
"#d9d9d9",
"#284b63"
],
[
"#2d3142",
"#bfc0c0",
"#ffffff",
"#ef8354",
"#4f5d75"
],
[
"#ff5e5b",
"#d8d8d8",
"#ffffea",
"#00cecb",
"#ffed66"
],
[
"#ffbe0b",
"#fb5607",
"#ff006e",
"#8338ec",
"#3a86ff"
],
[
"#b8d8ba",
"#d9dbbc",
"#fcddbc",
"#ef959d",
"#69585f"
],
[
"#0b132b",
"#1c2541",
"#3a506b",
"#5bc0be",
"#ffffff"
],
[
"#faf3dd",
"#c8d5b9",
"#8fc0a9",
"#68b0ab",
"#4a7c59"
],
[
"#f4f1de",
"#e07a5f",
"#3d405b",
"#81b29a",
"#f2cc8f"
],
[
"#edeec9",
"#dde7c7",
"#bfd8bd",
"#98c9a3",
"#77bfa3"
],
[
"#64a6bd",
"#90a8c3",
"#ada7c9",
"#d7b9d5",
"#f4cae0"
],
[
"#4c5454",
"#ff715b",
"#ffffff",
"#1ea896",
"#523f38"
],
[
"#495867",
"#577399",
"#bdd5ea",
"#f7f7ff",
"#fe5f55"
],
[
"#ff4e00",
"#8ea604",
"#f5bb00",
"#ec9f05",
"#bf3100"
],
[
"#36213e",
"#554971",
"#63768d",
"#8ac6d0",
"#b8f3ff"
],
[
"#a9e5bb",
"#fcf6b1",
"#f7b32b",
"#f72c25",
"#2d1e2f"
],
[
"#bfc3ba",
"#a9aca9",
"#60495a",
"#3f3244",
"#2f2235"
],
[
"#fe5f55",
"#f0b67f",
"#d6d1b1",
"#c7efcf",
"#eef5db"
],
[
"#033f63",
"#28666e",
"#7c9885",
"#b5b682",
"#fedc97"
],
[
"#0d1321",
"#1d2d44",
"#3e5c76",
"#748cab",
"#f0ebd8"
],
[
"#773344",
"#e3b5a4",
"#f5e9e2",
"#0b0014",
"#d44d5c"
],
[
"#52489c",
"#4062bb",
"#59c3c3",
"#ebebeb",
"#f45b69"
],
[
"#283d3b",
"#197278",
"#edddd4",
"#c44536",
"#772e25"
],
[
"#000000",
"#2f4550",
"#586f7c",
"#b8dbd9",
"#f4f4f9"
],
[
"#565264",
"#706677",
"#a6808c",
"#ccb7ae",
"#d6cfcb"
],
[
"#4f000b",
"#720026",
"#ce4257",
"#ff7f51",
"#ff9b54"
],
[
"#fcfcfc",
"#f7567c",
"#fffae3",
"#99e1d9",
"#5d576b"
],
[
"#d7263d",
"#f46036",
"#2e294e",
"#1b998b",
"#c5d86d"
],
[
"#fffcf2",
"#ccc5b9",
"#403d39",
"#252422",
"#eb5e28"
],
[
"#0fa3b1",
"#d9e5d6",
"#eddea4",
"#f7a072",
"#ff9b42"
],
[
"#ff6700",
"#ebebeb",
"#c0c0c0",
"#3a6ea5",
"#004e98"
],
[
"#dd6e42",
"#e8dab2",
"#4f6d7a",
"#c0d6df",
"#eaeaea"
],
[
"#102542",
"#f87060",
"#cdd7d6",
"#b3a394",
"#ffffff"
],
[
"#320a28",
"#511730",
"#8e443d",
"#cb9173",
"#e0d68a"
],
[
"#0a1128",
"#001f54",
"#034078",
"#1282a2",
"#fefcfb"
],
[
"#ffc09f",
"#ffee93",
"#fcf5c7",
"#a0ced9",
"#adf7b6"
],
[
"#086788",
"#07a0c3",
"#f0c808",
"#fff1d0",
"#dd1c1a"
],
[
"#97f9f9",
"#a4def9",
"#c1e0f7",
"#cfbae1",
"#c59fc9"
],
[
"#ffe74c",
"#ff5964",
"#ffffff",
"#38618c",
"#35a7ff"
],
[
"#eca400",
"#eaf8bf",
"#006992",
"#27476e",
"#001d4a"
],
[
"#0d0630",
"#18314f",
"#384e77",
"#8bbeb2",
"#e6f9af"
],
[
"#272727",
"#fed766",
"#009fb7",
"#696773",
"#eff1f3"
],
[
"#533a71",
"#6184d8",
"#50c5b7",
"#9cec5b",
"#f0f465"
],
[
"#3a2e39",
"#1e555c",
"#f4d8cd",
"#edb183",
"#f15152"
],
[
"#ddd8c4",
"#a3c9a8",
"#84b59f",
"#69a297",
"#50808e"
],
[
"#11151c",
"#212d40",
"#364156",
"#7d4e57",
"#d66853"
]
]