
<h1 align=center><img src="./src/assets/icon.png" height=64><br>Pigment</h1>

<p align=center>Use Godot's GLSL dialect for color grading and more.</p>

![screenshot](./screenshot.png)


## Table of Contents

- [Supported Platforms](#supported-platforms)
- [Usage](#usage)
- [Shaderlib](#shaderlib)
- [Commandline interface](#commandline-interface)
- [Known Issues](#known-issues)


## Supported Platforms

- Linux
- Windows

You can find the latest release ...

- [here (remotebranch.eu)](https://remotebranch.eu/ChaoticByte/Pigment/releases/latest)
- [and here (github.com)](https://github.com/ChaoticByte/Pigment/releases/latest)


## Supported Image Formats

| Format | Import | Export | Notes |
| ------ | :----: | :----: | ----- |
| PNG    | ✔      | ✔      | exports to 8-bit RGBA |
| JPEG   | ✔      |        |       |
| WEBP   | ✔      |        |       |


## Usage

With Pigment, you process images by writing Shader code using Godot's GLSL dialect: GDShader.  
If you want to learn GDShader, take a look at the [Godot docs](https://docs.godotengine.org/en/stable/tutorials/shaders/).

To get started, use the project template (see the Releases section of this repo) and open it in Godot. The template includes examples that you can use as a starting-point to write your own stuff.

After opening the project in Godot, start Pigment and open a `.gdshader` file & an image. Edit the shader using Godots `Shader Editor`, and hit `Apply` in Pigment.


## Shaderlib

This repo comes with a (still small) shader library including pre-written functions and more.  
Have a look at the `shaderlib` folder.

Here is an example:

```glsl
shader_type canvas_item;

#include "./shaderlib/oklab.gdshaderinc"

void fragment() {
	vec4 oklab = rgb2oklab(COLOR);
	vec4 oklch = oklab2oklch(oklab);
	oklch.z -= 2.0;
	COLOR = oklab2rgb(oklch2oklab(oklch));
}
```


## Commandline interface

You can run Pigment from the commandline or scripts.

> Note: Headless mode is not supported. Using the commandline interface still opens a window.


### Usage

```
~ Pigment CLI ~
-=============-

Usage:

./Pigment <command> <args...>

Commands:

 help

  | Shows this help text.

 apply --shader PATH --input PATH --output PATH

  | Applies a shader file.

	--shader PATH  The path to the shader
	--input  PATH  The path to the image
				   Passing a folder activates batch mode
	--output PATH  Where to write the resulting image to
				   In batch mode, this must be a folder

```


### Batch Mode

You can pass a directory to `--input` and `--output`. This will process all images in the input directory and write the output to the output directory.

> Note: This is not very fast, so using it on maaany images may take some time.


#### Examples

```
./Pigment apply --shader ./examples/oklab.gdshader --input ~/Pictures/test.png --output ./output.png
```


## Known Issues

- On some systems, screen scaling could lead to an either blurry UI, or no scaling at all
- CLI: Godot's `--headless` option is not supported
