xiwal

Generate terminal color schemes
git clone https://git.ce9e.org/xiwal.git

commit
5a568136591570a7f6f869a38ac4c1a186106bfc
parent
96a204aedf54cde3e9772c04032c63d7a3f9aefb
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2021-03-30 10:20
Merge branch 'oklab'

Diffstat

M preview/preview.svg 358 ++++++++++++++++++++++++++++++------------------------------
M xiwal/lch.py 64 ++++++++++++++++++++++++++++++-------------------------------
M xiwal/scheme.py 8 ++++----

3 files changed, 214 insertions, 216 deletions


diff --git a/preview/preview.svg b/preview/preview.svg

@@ -2,209 +2,209 @@
    2     2 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048">
    3     3 	<style>
    4     4 		@keyframes cycle1 {
    5    -1 			0.0%  {fill: #b12938}
    6    -1 			6.7%  {fill: #b11f5c}
    7    -1 			13.3% {fill: #8e4e00}
    8    -1 			20.0% {fill: #ae2f27}
    9    -1 			26.7% {fill: #a8371e}
   10    -1 			33.3% {fill: #7e43a3}
   11    -1 			40.0% {fill: #9c4303}
   12    -1 			46.7% {fill: #476700}
   13    -1 			53.3% {fill: #7b5800}
   14    -1 			60.0% {fill: #a23e11}
   15    -1 			66.7% {fill: #ae2e2f}
   16    -1 			73.3% {fill: #b3214a}
   17    -1 			80.0% {fill: #b8006a}
   18    -1 			86.7% {fill: #ad3100}
   19    -1 			93.3% {fill: #ad2f2c}
   -1     5 			0.0%  {fill: #aa3139}
   -1     6 			6.7%  {fill: #aa295b}
   -1     7 			13.3% {fill: #9d4700}
   -1     8 			20.0% {fill: #a43e00}
   -1     9 			26.7% {fill: #a63919}
   -1    10 			33.3% {fill: #80439e}
   -1    11 			40.0% {fill: #a24100}
   -1    12 			46.7% {fill: #536f00}
   -1    13 			53.3% {fill: #8e5400}
   -1    14 			60.0% {fill: #a53d00}
   -1    15 			66.7% {fill: #a73630}
   -1    16 			73.3% {fill: #a6334c}
   -1    17 			80.0% {fill: #d00069}
   -1    18 			86.7% {fill: #a43f00}
   -1    19 			93.3% {fill: #a7362e}
   20    20 		}
   21    21 		@keyframes cycle2 {
   22    -1 			0.0%  {fill: #7b8b0e}
   23    -1 			6.7%  {fill: #559300}
   24    -1 			13.3% {fill: #798c10}
   25    -1 			20.0% {fill: #54922c}
   26    -1 			26.7% {fill: #7b8b0e}
   27    -1 			33.3% {fill: #2184ea}
   28    -1 			40.0% {fill: #66901f}
   29    -1 			46.7% {fill: #678f1e}
   30    -1 			53.3% {fill: #009759}
   31    -1 			60.0% {fill: #d06435}
   32    -1 			66.7% {fill: #d75d43}
   33    -1 			73.3% {fill: #00938a}
   34    -1 			80.0% {fill: #00982f}
   35    -1 			86.7% {fill: #708e17}
   36    -1 			93.3% {fill: #3c953a}
   -1    22 			0.0%  {fill: #818800}
   -1    23 			6.7%  {fill: #539500}
   -1    24 			13.3% {fill: #7f8800}
   -1    25 			20.0% {fill: #5f911e}
   -1    26 			26.7% {fill: #868600}
   -1    27 			33.3% {fill: #557ad9}
   -1    28 			40.0% {fill: #748c00}
   -1    29 			46.7% {fill: #659015}
   -1    30 			53.3% {fill: #009958}
   -1    31 			60.0% {fill: #c65c29}
   -1    32 			66.7% {fill: #c9583d}
   -1    33 			73.3% {fill: #009b8f}
   -1    34 			80.0% {fill: #009e03}
   -1    35 			86.7% {fill: #768b00}
   -1    36 			93.3% {fill: #469538}
   37    37 		}
   38    38 		@keyframes cycle3 {
   39    -1 			0.0%  {fill: #a57d17}
   40    -1 			6.7%  {fill: #918500}
   41    -1 			13.3% {fill: #967f6a}
   42    -1 			20.0% {fill: #9a8043}
   43    -1 			26.7% {fill: #9b7d6f}
   44    -1 			33.3% {fill: #d15897}
   45    -1 			40.0% {fill: #9e7d60}
   46    -1 			46.7% {fill: #708d3b}
   47    -1 			53.3% {fill: #95814f}
   48    -1 			60.0% {fill: #cf6345}
   49    -1 			66.7% {fill: #b57171}
   50    -1 			73.3% {fill: #778780}
   51    -1 			80.0% {fill: #9f8000}
   52    -1 			86.7% {fill: #b17728}
   53    -1 			93.3% {fill: #988143}
   -1    39 			0.0%  {fill: #a67600}
   -1    40 			6.7%  {fill: #977f00}
   -1    41 			13.3% {fill: #927b66}
   -1    42 			20.0% {fill: #987b3c}
   -1    43 			26.7% {fill: #96786b}
   -1    44 			33.3% {fill: #c54d8d}
   -1    45 			40.0% {fill: #9a785b}
   -1    46 			46.7% {fill: #728b35}
   -1    47 			53.3% {fill: #937d49}
   -1    48 			60.0% {fill: #c85a39}
   -1    49 			66.7% {fill: #ae6a6b}
   -1    50 			73.3% {fill: #74847d}
   -1    51 			80.0% {fill: #ac7500}
   -1    52 			86.7% {fill: #af700e}
   -1    53 			93.3% {fill: #967c3b}
   54    54 		}
   55    55 		@keyframes cycle4 {
   56    -1 			0.0%  {fill: #446e8e}
   57    -1 			6.7%  {fill: #40717c}
   58    -1 			13.3% {fill: #716771}
   59    -1 			20.0% {fill: #596e6f}
   60    -1 			26.7% {fill: #656b70}
   61    -1 			33.3% {fill: #53699b}
   62    -1 			40.0% {fill: #447270}
   63    -1 			46.7% {fill: #5f6e58}
   64    -1 			53.3% {fill: #626d60}
   65    -1 			60.0% {fill: #8a55a0}
   66    -1 			66.7% {fill: #7b646a}
   67    -1 			73.3% {fill: #646b74}
   68    -1 			80.0% {fill: #006eb5}
   69    -1 			86.7% {fill: #007775}
   70    -1 			93.3% {fill: #6e696a}
   -1    56 			0.0%  {fill: #4f7595}
   -1    57 			6.7%  {fill: #4a7a84}
   -1    58 			13.3% {fill: #776d77}
   -1    59 			20.0% {fill: #607677}
   -1    60 			26.7% {fill: #6c7277}
   -1    61 			33.3% {fill: #5e6fa1}
   -1    62 			40.0% {fill: #4c7b79}
   -1    63 			46.7% {fill: #68765f}
   -1    64 			53.3% {fill: #6a7568}
   -1    65 			60.0% {fill: #8e57a2}
   -1    66 			66.7% {fill: #816a70}
   -1    67 			73.3% {fill: #6b727b}
   -1    68 			80.0% {fill: #1675be}
   -1    69 			86.7% {fill: #008280}
   -1    70 			93.3% {fill: #756f70}
   71    71 		}
   72    72 		@keyframes cycle5 {
   73    -1 			0.0%  {fill: #7f5e8a}
   74    -1 			6.7%  {fill: #cd0e70}
   75    -1 			13.3% {fill: #796563}
   76    -1 			20.0% {fill: #856253}
   77    -1 			26.7% {fill: #a44f62}
   78    -1 			33.3% {fill: #805aa1}
   79    -1 			40.0% {fill: #756859}
   80    -1 			46.7% {fill: #5b6e6a}
   81    -1 			53.3% {fill: #9b5b14}
   82    -1 			60.0% {fill: #cc2821}
   83    -1 			66.7% {fill: #995759}
   84    -1 			73.3% {fill: #925a69}
   85    -1 			80.0% {fill: #c7009b}
   86    -1 			86.7% {fill: #a2552e}
   87    -1 			93.3% {fill: #8d5c6f}
   -1    73 			0.0%  {fill: #84628f}
   -1    74 			6.7%  {fill: #ca0e6e}
   -1    75 			13.3% {fill: #806c69}
   -1    76 			20.0% {fill: #bf3e31}
   -1    77 			26.7% {fill: #a85264}
   -1    78 			33.3% {fill: #855da4}
   -1    79 			40.0% {fill: #7d6e5f}
   -1    80 			46.7% {fill: #637672}
   -1    81 			53.3% {fill: #a35e08}
   -1    82 			60.0% {fill: #ce2310}
   -1    83 			66.7% {fill: #9e5b5d}
   -1    84 			73.3% {fill: #965e6d}
   -1    85 			80.0% {fill: #c6009a}
   -1    86 			86.7% {fill: #c23e00}
   -1    87 			93.3% {fill: #926074}
   88    88 		}
   89    89 		@keyframes cycle6 {
   90    -1 			0.0%  {fill: #42817a}
   91    -1 			6.7%  {fill: #328190}
   92    -1 			13.3% {fill: #7c747f}
   93    -1 			20.0% {fill: #7e7755}
   94    -1 			26.7% {fill: #747774}
   95    -1 			33.3% {fill: #6b7697}
   96    -1 			40.0% {fill: #008582}
   97    -1 			46.7% {fill: #687d53}
   98    -1 			53.3% {fill: #747966}
   99    -1 			60.0% {fill: #897169}
  100    -1 			66.7% {fill: #6e768e}
  101    -1 			73.3% {fill: #008488}
  102    -1 			80.0% {fill: #008390}
  103    -1 			86.7% {fill: #3d8277}
  104    -1 			93.3% {fill: #77738e}
   -1    90 			0.0%  {fill: #4e8d85}
   -1    91 			6.7%  {fill: #428c9b}
   -1    92 			13.3% {fill: #857c87}
   -1    93 			20.0% {fill: #88805d}
   -1    94 			26.7% {fill: #7d817d}
   -1    95 			33.3% {fill: #757ea0}
   -1    96 			40.0% {fill: #20918f}
   -1    97 			46.7% {fill: #728b35}
   -1    98 			53.3% {fill: #7e8270}
   -1    99 			60.0% {fill: #927a71}
   -1   100 			66.7% {fill: #777f97}
   -1   101 			73.3% {fill: #00949a}
   -1   102 			80.0% {fill: #0095aa}
   -1   103 			86.7% {fill: #498e83}
   -1   104 			93.3% {fill: #7f7c97}
  105   105 		}
  106   106 
  107   107 		@keyframes cycle9 {
  108    -1 			0.0%  {fill: #df545a}
  109    -1 			6.7%  {fill: #df4f81}
  110    -1 			13.3% {fill: #be711e}
  111    -1 			20.0% {fill: #dc5949}
  112    -1 			26.7% {fill: #d65f40}
  113    -1 			33.3% {fill: #a769cd}
  114    -1 			40.0% {fill: #ca692c}
  115    -1 			46.7% {fill: #6a8f1c}
  116    -1 			53.3% {fill: #aa7b09}
  117    -1 			60.0% {fill: #d06435}
  118    -1 			66.7% {fill: #dc5851}
  119    -1 			73.3% {fill: #e1506e}
  120    -1 			80.0% {fill: #fc0094}
  121    -1 			86.7% {fill: #dd5a28}
  122    -1 			93.3% {fill: #db594e}
   -1   108 			0.0%  {fill: #dd6163}
   -1   109 			6.7%  {fill: #de5b86}
   -1   110 			13.3% {fill: #cf7504}
   -1   111 			20.0% {fill: #d76c38}
   -1   112 			26.7% {fill: #da6849}
   -1   113 			33.3% {fill: #ae70cf}
   -1   114 			40.0% {fill: #d56f2a}
   -1   115 			46.7% {fill: #7e9c1c}
   -1   116 			53.3% {fill: #be8100}
   -1   117 			60.0% {fill: #d86c3a}
   -1   118 			66.7% {fill: #db655b}
   -1   119 			73.3% {fill: #d96277}
   -1   120 			80.0% {fill: #fe0096}
   -1   121 			86.7% {fill: #d66d32}
   -1   122 			93.3% {fill: #db6559}
  123   123 		}
  124   124 		@keyframes cycle10 {
  125    -1 			0.0%  {fill: #b3c14a}
  126    -1 			6.7%  {fill: #80cc26}
  127    -1 			13.3% {fill: #b0c14b}
  128    -1 			20.0% {fill: #8ac95f}
  129    -1 			26.7% {fill: #b3c14a}
  130    -1 			33.3% {fill: #97b8fe}
  131    -1 			40.0% {fill: #9cc655}
  132    -1 			46.7% {fill: #9ec554}
  133    -1 			53.3% {fill: #43d086}
  134    -1 			60.0% {fill: #ffa179}
  135    -1 			66.7% {fill: #fea088}
  136    -1 			73.3% {fill: #00cec1}
  137    -1 			80.0% {fill: #31d350}
  138    -1 			86.7% {fill: #a7c34f}
  139    -1 			93.3% {fill: #74cc6c}
   -1   125 			0.0%  {fill: #aeb733}
   -1   126 			6.7%  {fill: #80c500}
   -1   127 			13.3% {fill: #acb734}
   -1   128 			20.0% {fill: #8cc054}
   -1   129 			26.7% {fill: #b4b52d}
   -1   130 			33.3% {fill: #81a9fe}
   -1   131 			40.0% {fill: #a1bb40}
   -1   132 			46.7% {fill: #91bf4f}
   -1   133 			53.3% {fill: #4ac985}
   -1   134 			60.0% {fill: #fa8b5a}
   -1   135 			66.7% {fill: #fd876a}
   -1   136 			73.3% {fill: #00cbbd}
   -1   137 			80.0% {fill: #2acf4a}
   -1   138 			86.7% {fill: #a3ba3e}
   -1   139 			93.3% {fill: #75c467}
  140   140 		}
  141   141 		@keyframes cycle11 {
  142    -1 			0.0%  {fill: #eebf5b}
  143    -1 			6.7%  {fill: #d9c842}
  144    -1 			13.3% {fill: #dbc2ab}
  145    -1 			20.0% {fill: #e1c282}
  146    -1 			26.7% {fill: #e0bfb1}
  147    -1 			33.3% {fill: #ffafd3}
  148    -1 			40.0% {fill: #e4bfa0}
  149    -1 			46.7% {fill: #b4d07a}
  150    -1 			53.3% {fill: #dbc48e}
  151    -1 			60.0% {fill: #feb49e}
  152    -1 			66.7% {fill: #feb3b3}
  153    -1 			73.3% {fill: #b9cac2}
  154    -1 			80.0% {fill: #eec100}
  155    -1 			86.7% {fill: #fcb968}
  156    -1 			93.3% {fill: #dec381}
   -1   142 			0.0%  {fill: #f8c55d}
   -1   143 			6.7%  {fill: #e6ce3e}
   -1   144 			13.3% {fill: #e1c8b1}
   -1   145 			20.0% {fill: #e8c988}
   -1   146 			26.7% {fill: #e6c5b6}
   -1   147 			33.3% {fill: #fe9ddc}
   -1   148 			40.0% {fill: #eac5a6}
   -1   149 			46.7% {fill: #beda83}
   -1   150 			53.3% {fill: #e2cb95}
   -1   151 			60.0% {fill: #fea985}
   -1   152 			66.7% {fill: #feb7b7}
   -1   153 			73.3% {fill: #c1d2cb}
   -1   154 			80.0% {fill: #fec600}
   -1   155 			86.7% {fill: #febe6c}
   -1   156 			93.3% {fill: #e6ca88}
  157   157 		}
  158   158 		@keyframes cycle12 {
  159    -1 			0.0%  {fill: #6b95b6}
   -1   159 			0.0%  {fill: #6c94b5}
  160   160 			6.7%  {fill: #6798a3}
  161    -1 			13.3% {fill: #988d98}
  162    -1 			20.0% {fill: #7e9496}
  163    -1 			26.7% {fill: #8b9197}
  164    -1 			33.3% {fill: #7a8fc4}
  165    -1 			40.0% {fill: #699996}
  166    -1 			46.7% {fill: #85957d}
  167    -1 			53.3% {fill: #889386}
  168    -1 			60.0% {fill: #b37bc9}
  169    -1 			66.7% {fill: #a38a90}
  170    -1 			73.3% {fill: #8a919b}
  171    -1 			80.0% {fill: #4a94e0}
  172    -1 			86.7% {fill: #329f9d}
  173    -1 			93.3% {fill: #958f90}
   -1   161 			13.3% {fill: #958b95}
   -1   162 			20.0% {fill: #7e9495}
   -1   163 			26.7% {fill: #898f95}
   -1   164 			33.3% {fill: #7a8dc1}
   -1   165 			40.0% {fill: #6a9997}
   -1   166 			46.7% {fill: #85947c}
   -1   167 			53.3% {fill: #879385}
   -1   168 			60.0% {fill: #ad75c3}
   -1   169 			66.7% {fill: #a0878d}
   -1   170 			73.3% {fill: #888f99}
   -1   171 			80.0% {fill: #3d94df}
   -1   172 			86.7% {fill: #35a19f}
   -1   173 			93.3% {fill: #938d8e}
  174   174 		}
  175   175 		@keyframes cycle13 {
  176    -1 			0.0%  {fill: #a784b2}
  177    -1 			6.7%  {fill: #fb4c96}
  178    -1 			13.3% {fill: #a18b89}
  179    -1 			20.0% {fill: #ad8878}
  180    -1 			26.7% {fill: #cf7587}
  181    -1 			33.3% {fill: #a880ca}
  182    -1 			40.0% {fill: #9c8e7e}
  183    -1 			46.7% {fill: #819490}
  184    -1 			53.3% {fill: #c7803b}
  185    -1 			60.0% {fill: #fc5743}
  186    -1 			66.7% {fill: #c37d7e}
  187    -1 			73.3% {fill: #bb808f}
  188    -1 			80.0% {fill: #f842c6}
  189    -1 			86.7% {fill: #ce7b51}
  190    -1 			93.3% {fill: #b68196}
   -1   176 			0.0%  {fill: #a380ae}
   -1   177 			6.7%  {fill: #ef408c}
   -1   178 			13.3% {fill: #9e8987}
   -1   179 			20.0% {fill: #e25f4f}
   -1   180 			26.7% {fill: #c97082}
   -1   181 			33.3% {fill: #a37ac4}
   -1   182 			40.0% {fill: #9b8c7c}
   -1   183 			46.7% {fill: #80948f}
   -1   184 			53.3% {fill: #c37c34}
   -1   185 			60.0% {fill: #f34c37}
   -1   186 			66.7% {fill: #be7979}
   -1   187 			73.3% {fill: #b67b8a}
   -1   188 			80.0% {fill: #ea31ba}
   -1   189 			86.7% {fill: #e55f2a}
   -1   190 			93.3% {fill: #b17d91}
  191   191 		}
  192   192 		@keyframes cycle14 {
  193    -1 			0.0%  {fill: #84c4bc}
  194    -1 			6.7%  {fill: #79c3d4}
  195    -1 			13.3% {fill: #bfb5c1}
  196    -1 			20.0% {fill: #c1b894}
  197    -1 			26.7% {fill: #b6b9b6}
  198    -1 			33.3% {fill: #adb7dc}
  199    -1 			40.0% {fill: #62c8c5}
  200    -1 			46.7% {fill: #aabf92}
  201    -1 			53.3% {fill: #b6baa7}
  202    -1 			60.0% {fill: #cdb3aa}
  203    -1 			66.7% {fill: #afb8d1}
  204    -1 			73.3% {fill: #39cbd0}
  205    -1 			80.0% {fill: #00cbdf}
  206    -1 			86.7% {fill: #80c5b8}
  207    -1 			93.3% {fill: #b9b5d2}
   -1   193 			0.0%  {fill: #8bccc3}
   -1   194 			6.7%  {fill: #81cadb}
   -1   195 			13.3% {fill: #c3b9c5}
   -1   196 			20.0% {fill: #c7be99}
   -1   197 			26.7% {fill: #bbbebb}
   -1   198 			33.3% {fill: #b2bce0}
   -1   199 			40.0% {fill: #6bd1cd}
   -1   200 			46.7% {fill: #aeca73}
   -1   201 			53.3% {fill: #bbc0ac}
   -1   202 			60.0% {fill: #d1b7ae}
   -1   203 			66.7% {fill: #b4bdd6}
   -1   204 			73.3% {fill: #46d4d9}
   -1   205 			80.0% {fill: #00d5eb}
   -1   206 			86.7% {fill: #88cdc0}
   -1   207 			93.3% {fill: #bdb9d6}
  208   208 		}
  209   209 
  210   210 		text {

diff --git a/xiwal/lch.py b/xiwal/lch.py

@@ -1,6 +1,9 @@
    1    -1 import math
   -1     1 """Oklab color model.
   -1     2 
   -1     3 https://bottosson.github.io/posts/oklab/
   -1     4 """
    2     5 
    3    -1 WHITE = (95.05, 100, 108.9)
   -1     6 import math
    4     7 
    5     8 
    6     9 def _srgb2rgb(c):
@@ -9,11 +12,10 @@ def _srgb2rgb(c):
    9    12 		c = c / 12.92
   10    13 	else:
   11    14 		c = ((c + 0.055) / 1.055) ** 2.4
   12    -1 	return c * 100
   -1    15 	return c
   13    16 
   14    17 
   15    18 def _rgb2srgb(c):
   16    -1 	c = c / 100.0
   17    19 	if c <= 0.0031308:
   18    20 		c = c * 12.92
   19    21 	else:
@@ -21,46 +23,42 @@ def _rgb2srgb(c):
   21    23 	return c * 255
   22    24 
   23    25 
   24    -1 def _xyz2lab(t):
   25    -1 	if t > 216.0 / 24389:
   26    -1 		return t ** (1.0 / 3)
   27    -1 	else:
   28    -1 		return 841.0 / 108 * t + 4.0 / 29
   29    -1 
   30    -1 
   31    -1 def _lab2xyz(t):
   32    -1 	if t > 6.0 / 29:
   33    -1 		return t ** 3
   34    -1 	else:
   35    -1 		return 108.0 / 841 * (t - 4.0 / 29)
   36    -1 
   37    -1 
   38    26 def rgb2lab(rgb):
   39    27 	r, g, b = map(_srgb2rgb, rgb)
   40    28 
   41    -1 	x = _xyz2lab((0.4124 * r + 0.3576 * g + 0.1805 * b) / WHITE[0])
   42    -1 	y = _xyz2lab((0.2126 * r + 0.7152 * g + 0.0722 * b) / WHITE[1])
   43    -1 	z = _xyz2lab((0.0193 * r + 0.1192 * g + 0.9505 * b) / WHITE[2])
   -1    29 	l = 0.4121656120 * r + 0.5362752080 * g + 0.0514575653 * b
   -1    30 	m = 0.2118591070 * r + 0.6807189584 * g + 0.1074065790 * b
   -1    31 	s = 0.0883097947 * r + 0.2818474174 * g + 0.6302613616 * b
   44    32 
   45    -1 	l = 116 * y - 16
   46    -1 	a = 500 * (x - y)
   47    -1 	b = 200 * (y - z)
   -1    33 	l_ = l ** (1 / 3)
   -1    34 	m_ = m ** (1 / 3)
   -1    35 	s_ = s ** (1 / 3)
   48    36 
   49    -1 	return l, a, b
   -1    37 	L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_
   -1    38 	a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_
   -1    39 	b = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_
   -1    40 
   -1    41 	return L, a, b
   50    42 
   51    43 
   52    44 def lab2rgb(lab):
   53    -1 	l, a, b = lab
   -1    45 	L, a, b = lab
   -1    46 
   -1    47 	l_ = L + 0.3963377774 * a + 0.2158037573 * b
   -1    48 	m_ = L - 0.1055613458 * a - 0.0638541728 * b
   -1    49 	s_ = L - 0.0894841775 * a - 1.2914855480 * b
   54    50 
   55    -1 	l = (l + 16) / 116.0
   -1    51 	l = l_ ** 3
   -1    52 	m = m_ ** 3
   -1    53 	s = s_ ** 3
   56    54 
   57    -1 	x = WHITE[0] * _lab2xyz(l + a / 500)
   58    -1 	y = WHITE[1] * _lab2xyz(l)
   59    -1 	z = WHITE[2] * _lab2xyz(l - b / 200)
   -1    55 	r = +4.0767245293 * l - 3.3072168827 * m + 0.2307590544 * s
   -1    56 	g = -1.2681437731 * l + 2.6093323231 * m - 0.3411344290 * s
   -1    57 	b = -0.0041119885 * l - 0.7034763098 * m + 1.7068625689 * s
   60    58 
   61    -1 	r =  3.2406 * x - 1.5372 * y - 0.4986 * z
   62    -1 	g = -0.9689 * x + 1.8758 * y + 0.0415 * z
   63    -1 	b =  0.0557 * x - 0.2040 * y + 1.0570 * z
   -1    59 	r = max(0, min(1, r))
   -1    60 	g = max(0, min(1, g))
   -1    61 	b = max(0, min(1, b))
   64    62 
   65    63 	return tuple(map(_rgb2srgb, (r, g, b)))
   66    64 

diff --git a/xiwal/scheme.py b/xiwal/scheme.py

@@ -4,10 +4,10 @@ import functools
    4     4 from . import lch
    5     5 
    6     6 # Minimum chroma for red/green (signal colors)
    7    -1 C_RG = 60
   -1     7 C_RG = 0.15
    8     8 
    9     9 # MAXIMUM chroma for greys
   10    -1 C_GREY = 8
   -1    10 C_GREY = 0.02
   11    11 
   12    12 C_FACTOR = 1.2
   13    13 
@@ -16,8 +16,8 @@ C_FACTOR = 1.2
   16    16 # - dark colors should have sufficient contrast to both black and white
   17    17 # - light colors should have different levels of lightness so they can
   18    18 #   easily be distinguished
   19    -1 L_DARK = 2, 40, 55, 55, 45, 45, 50, 85
   20    -1 L_LIGHT = 20, 55, 75, 80, 60, 60, 75, 100
   -1    19 L_DARK = 0.15, 0.50, 0.60, 0.60, 0.55, 0.55, 0.60, 0.90
   -1    20 L_LIGHT = 0.30, 0.65, 0.75, 0.85, 0.65, 0.65, 0.80, 1.00
   21    21 
   22    22 # hue for red reference color
   23    23 OFFSET = math.pi * 2 / 14