Celeste Colorgrade Generator

Add steps:




Error: browser does not support canvas element

To save the colorgrade, right click and select 'Save image as...' (or equivalent)

Import/Export Steps

Save the steps for later editing


How to use

Add effects, set their parameters, and then a colorgrade will be generated by sequentially applying each effect. The buttons on each effect can be used to reorder and remove them. Each effect is applied pixel-by-pixel. The input to the first layer is the original color that would appear without a colorgrade, and the output from the last layer is the resulting color with the color grade.

Effects

Simple recolor. Rescales the RGB color cube so that black and white are the specified color.

8-value recolor. This rescales the color cube so that each of the corners are the specified colors. The colors are interpolated linearly between each corner.

Recenter colors. This rescales the colors in the input colorgrade so that the R, G, and B values each occupy the full range of [0, 1].

Adjust RGB, Adjust HSV, Brightness/Contrast. Each of these three effects shifts the relevant quantity, with positive increasing and negative decreasing. With the exception of hue, all of the parameters are in rather arbitrary units; the current method is kind of janky and I'm not sure I like it very much, so it might get changed in the future. 10.0 or -10.0 will produce a rather large effect. Large negative values have the potential to cause overflow errors in particular. For the hue shift, the value is in degrees around the color wheel.

Custom RGB map. The three inputs to this effect are mathematical expressions that will be evaluated to get the RGB channels of the output. The RGB channels of the input can be accessed as the variables r, g, b. Values for each RGB channel will be between 0 and 1.

Condition. This effect accepts a mathematical expression that needs to evaluate to either True or False that determines which colorgrade to take the result color from for each pixel. The colorgrade from Condition source is used to evaluate the condition. For each pixel, if the condition is true, then the output pixel will be from the Source if true colorgrade; otherwise, it will be from the Source if false colorgrade. For details on what consitutes a valid expression, see below. Values for each RGB channel will be between 0 and 1.

Fill. Creates a colorgrade filled with the specified color.

Palettize. Reduces the number of colors in the colorgrade. The input is a list of colors, separated by semicolons. Each color in the colorgrade is turned into the closest color in the list.

Reduce Colors. Reduces the number of colors in the colorgrade (chosen randomly from the input colorgrade); similar to Palettize. Each input color is mapped into the output color closest in color.

Field types

Colors. Most fields expect a color. The two supported formats for colors are either a hex code (e.g. "ffa037"; this is not case-sensitive) or comma-separated values between 0 and 1 (e.g. "1.0, 0.5, 0.3"; this does not care about spacing).

Source steps. This field indicates which of the previous steps to use as the input to this step. Index 0 is always the initial, default colorgrade. Negative indices are relative to the current step; the default of -1, for instance, uses the output of the previous step as input.

Expressions. Some fields expect an expression, which will be evaluated using Python syntax. Each one has the variables r, g, b, holding the values of each color channel of the input, available to use. These color channels are represented as decimal values between 0 and 1. This supports usual mathematical operations +, -, *, /; exponentiation using **; comparison operators <, <=, >, >=, ==; logical operators &, |, ~, ^; use of parentheses (, ), a handful of functions (min, max, abs, clip, sin, cos, tan, sqrt, exp, log, log2, log10), the constant pi, and probably some other things I'm forgetting to mention.