ColorController is a Pythonic interface for managing colors by english-language name and various color values.

Overview

ColorController.py

Table of Contents

  1. Encode color data in various formats.
  2. Modify a color using simple, convenient methods.
  3. Invert a color
  4. Access a rich set of color values and color names

Welcome to the ColorController Python library!

My name is Tal Zaken, and I wrote this library for use in a natural language processing project that aims to take in free-form text, and spit out color data which somehow relates to the text's content.

Enough about that. Here are some things that you can do with ColorController:

1. Encode color data in various formats.

Example 1.1: Create a ColorController object using a familiar, english-language color name, and print out its properties.

You can set a color using a very large library of color names. See the colornames.txt document contained herein, with enormous thanks to Martin Krzywinski.

The following code:

from ColorController import ColorController

color = ColorController(name='hazel')

print(f"Name: {color.name}",
      f"Hex Code: {color.hex_code}",
      f"RGB: {color.rgb}",
      f"HSV: {color.hsv}",
      sep='\n')

outputs:

Name: hazel
Hex Code: ['#8E7618']
RGB: [(142, 118, 24)]
HSV: [(0.133, 0.831, 142)]

Further, you can change all the ColorController's properties by changing any one of them.

By example:

color.name = 'blue'

print(f"Name: {color.name}", 
      f"Hex Code: {color.hex_code}", 
      f"RGB: {color.rgb}", 
      f"HSV: {color.hsv}", 
      sep='\n')

You will see that all properties have updated:

Name: blue
Hex Code: ['#00008B', '#0000CD', '#0000EE', '#0000FF', '#0018A8', '#0087BD', '#0093AF', '#0247FE', '#0343DF', '#1F75FE', '#2242C7', '#333399']
RGB: [(0, 0, 139), (0, 0, 205), (0, 0, 238), (0, 0, 255), (0, 24, 168), (0, 135, 189), (0, 147, 175), (2, 71, 254), (3, 67, 223), (31, 117, 254), (34, 66, 199), (51, 51, 153)]
HSV: [(0.667, 1.0, 139), (0.667, 1.0, 205), (0.667, 1.0, 238), (0.667, 1.0, 255), (0.643, 1.0, 168), (0.548, 1.0, 189), (0.527, 1.0, 175), (0.621, 0.992, 254), (0.618, 0.987, 223), (0.602, 0.878, 254), (0.634, 0.829, 199), (0.667, 0.667, 153)]

Notably, the colornames.txt file has numerous entries that all share the name "blue." This is true of many colors. Because color is thought to be a culturally relative phenomenon, I have chosen to return all hex codes that match a given name. You will notice a similar phenomenon occurs for color names when you set a color using hex code, RGB, or HSV. This is because there are sometimes many names that all describe the same color.

Example 1.2: Show a color.

We've had a lot of talk about colors so far, but we haven't even seen any colors yet! Let's solve that now, and do away with these lengthy print statements:

color.hex_code ='#ffbff9'

color.show_color()

Shows:

pale_orchid

That said, the ColorController object is biased toward whatever you, the user, set it to be. If you explicitly set a name, then that will be the singular name of your object. Similarly, if you explicitly set a hex code, then that will be the value of your hex code. If you leave a leading # off of your hex code, then everything will still work, but that will be the hex code value. For example...

Example 1.3: Create a ColorController object using a hex code.

color = ColorController(hex_code='#990000')

color.show_color()

Shows:

['crimson_red', 'stizza', 'ou_crimson_red', 'usc_cardinal']

While:

color.hex_code = '990000'

color.show_color()

Shows very similar results:

['crimson_red', 'stizza', 'ou_crimson_red', 'usc_cardinal']

Example 1.4: Create a ColorController object using an RGB triplet.

You can also pass a 3-tuple whose values are each contained in range(0,256) to the rgb property. For example:

color = ColorController(rgb=(10, 255, 230))

color.show_color()

Shows:

[bright_aqua]

Example 1.5: Create a ColorController object using an HSV triplet, and print out its properties.

Lastly, you can also pass a 3-tuple whose first two values are a floating point number between 0 and 1 inclusive, and whose third value falls in range(0, 256):

color = ColorController(hsv=(0.25, 1, 255))

color.show_color()

Shows:

[chartreuse]

NOTE: While this is the HSV value format that comes included with the colorsys python standard library, it doesn't seem to be a very common format elsewhere. To match formats used in other locations, see the following functions:

def colorsys_hsv_to_hsv360(colorsys_hsv=tuple):
    """Takes an HSV triplet as provided by colorsys, and converts it to match the
    notation used in colornames.txt"""

def hsv360_to_hsvdistance(hsv360=tuple):
    """Takes an HSV triplet as provided by colorsys_hsv_to_hsv360(), and converts it to match the
    notation used in the function for calculating distance between colors."""  

2. Modify a color using simple, convenient methods.

Example 2.1: Darken a color.

You can darken a color using the darken_color() method. For example:

from ColorController import ColorController

color = ColorController(name='forest')

color.show_color()

color.darken_color()

color.show_color()

Will show the following in series:

[forest] [hunter_green]

You can also pass in a darkening_value between zero and one, to set the percent darker you'd like to go. For instance:

color = ColorController(name='cocoa')

color.show_color()

color.darken_color(.3)

color.show_color()

Shows the following in series:

[cocoa] [nutmeg]

In the above example, note that our color object was first initiated by the name property, meaning that there are lists of associated hex, rgb, and hsv values stored in their respective properties. When we lighten the color, we have to select one index from these lists to operate on. The default behavior is to operate on the first index. See the unlist() function in helpers.py.

Example 2.2: Lighten a color.

You can also pass in a lightening_value between zero and one, to set the percent lighter you'd like to go. For instance:

color = ColorController(hex_code='#6c3461')

color.show_color()

color.lighten_color(.5)

color.show_color()

Shows the following in series:

[grape] [grayish_fuchsia]

Example 2.3: Brighten a color.

3. Invert a color.

Example:

from ColorController.conversions import invert_rgb
from ColorController import ColorController


color = ColorController(hex_code='#9ffeb0')
color.show_color()

r, g, b = color.rgb
color.rgb = invert_rgb(r, g, b)
color.show_color()

Shows the following in series:

[mint] [deep_orchid]

4. Access a rich set of color values and color names (prepared by Martin Krzywinski), conveniently stored in a Pandas DataFrame.

Example:

from ColorController.ColorController import colors_df

print(colors_df.iloc[5000])

Outputs:

IDX                                                                  5000
NAME                                                    light_apple_green
rgb                                                                   rgb
R                                                                     220
G                                                                     231
B                                                                     139
hex                                                                   hex
HEX                                                               #DCE78B
hsv                                                                   hsv
h                                                                      67
s                                                                      40
v                                                                      91
xyz                                                                   xyz
X                                                                    0.63
Y                                                                    0.74
Z                                                                    0.35
lab                                                                   lab
L                                                                      89
A                                                                     -17
B                                                                      44
lch                                                                   lch
L                                                                      89
C                                                                      47
H                                                                     112
cmyk                                                                 cmyk
C                                                                       4
M                                                                       0
Y                                                                      36
K                                                                       9
NEIGHBOUR_STR           PMS586[775][226,229,132](3.6):hypnotic[4592][2...
NUM_NEIGHBOURS_MAXDE                                                    4
WORD_TAGS               [light, PMS586, hypnotic, jonquil, green, lime...
Name: 5000, dtype: object

Known Bugs:

  • I don't know of any right now, but I'm sure they exist!

Ideas

  • tint and shade methods instead of or in addition to lighten/darken?
  • more unit tests
  • module to mix colors
    • this will require converting to LAB or another subtractive space, so more getter/setter methods

Resources:

Owner
Tal Zaken
Tal Zaken
one_click_kag_server is a program which tries to fully automate the creation of a King Arthur's Gold server.

one_click_kag_server is a program which tries to fully automate the creation of a King Arthur's Gold server.

Benjamin Gorman 4 Jan 05, 2022
A toolkit for writing and executing automation scripts for Final Fantasy XIV

XIV Scripter This is a tool for scripting out series of actions in FFXIV. It allows for custom actions to be defined in config.yaml as well as custom

Jacob Beel 1 Dec 09, 2021
Patch the pclntable from Go binaries

Pretrain and Fine-tune a T5 model with Flax on GCP This tutorial details how pretrain and fine-tune a FlaxT5 model from HuggingFace using a TPU VM ava

6 Oct 05, 2022
Script to autocompound 3commas BO:SO based on user provided risk factor

3commas_compounder Script to autocompound 3commas BO:SO based on user provided risk factor Setup Step 1 git clone this repo into your working director

0 Feb 24, 2022
Python code to divide big numbers

divide-big-num Python code to divide big numbers

VuMinhNgoc 1 Oct 15, 2021
A collection of custom scripts for working with Quake assets.

Custom Quake Tools A collection of custom scripts for working with Quake assets. Features Script to list all BSP files in a Quake mod

Jason Brownlee 3 Jul 05, 2022
Creating low-level foundations and abstractions for asynchronous programming in Python.

DIY Async I/O Creating low-level foundations and abstractions for asynchronous programming in Python (i.e., implementing concurrency without using thr

Doc Jones 4 Dec 11, 2021
Fcpy: A Python package for high performance, fast convergence and high precision numerical fractional calculus computing.

Fcpy: A Python package for high performance, fast convergence and high precision numerical fractional calculus computing.

SciFracX 1 Mar 23, 2022
Python Libraries with functions and constants related to electrical engineering.

ElectricPy Electrical-Engineering-for-Python Python Libraries with functions and constants related to electrical engineering. The functions and consta

Joe Stanley 39 Dec 23, 2022
A Python utility belt containing simple tools, a stdlib like feel, and extra batteries. Hashing, Caching, Timing, Progress, and more made easy!

Ubelt is a small library of robust, tested, documented, and simple functions that extend the Python standard library. It has a flat API that all behav

Jon Crall 638 Dec 13, 2022
Just some scripts to export vector tiles to geojson.

Vector tiles to GeoJSON Nowadays modern web maps are usually based on vector tiles. The great thing about vector tiles is, that they are not just imag

Lilith Wittmann 77 Jul 26, 2022
An awesome tool to save articles from RSS feed to Pocket automatically.

RSS2Pocket An awesome tool to save articles from RSS feed to Pocket automatically. About the Project I used to use IFTTT to save articles from RSS fee

Hank Liao 10 Nov 12, 2022
A simple Python app that generates semi-random chord progressions.

chords-generator A simple Python app that generates semi-random chord progressions.

53 Sep 07, 2022
Numbers-parser - Python module for parsing Apple Numbers .numbers files

numbers-parser numbers-parser is a Python module for parsing Apple Numbers .numbers files. It supports Numbers files generated by Numbers version 10.3

Jon Connell 154 Jan 05, 2023
A tiny Python library for generating public IDs from integers

pids Create short public identifiers based on integer IDs. Installation pip install pids Usage from pids import pid public_id = pid.from_int(1234) #

Simon Willison 7 Nov 11, 2021
'ToolBurnt' A Set Of Tools In One Place =}

'ToolBurnt' A Set Of Tools In One Place =}

MasterBurnt 5 Sep 10, 2022
Automatically Generate Rulesets for IIS for Intelligent HTTP/S C2 Redirection

Automatically Generate Rulesets for IIS for Intelligent HTTP/S C2 Redirection This project converts a Cobalt Strike profile to a functional web.config

Jesse 99 Dec 13, 2022
A python tool give n number of inputs and parallelly you will get a output by separetely

http-status-finder Hello Everyone!! This is kavisurya, In this tool you can give n number of inputs and parallelly you will get a output by separetely

KAVISURYA V 3 Dec 05, 2021
A Python script that transcript Arcaea chart file (.aff file) into AutoJS touchscreen script which automatically plays the Arcaea chart

ArcaeaAutoplay (AutoJS Version) A Python script that transcript Arcaea chart file (.aff file) into AutoJS touchscreen script which automatically plays

7 Dec 03, 2021
The git for the Python Story Utility Package library.

SUP The git for the Python Story Utility Package library. Installation: Install SUP by simply running pip install psup in your terminal. Check out our

Enoki 6 Nov 27, 2022