diff --git a/README.md b/README.md
index 0849cf8..29ab37f 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@

-
Use Godot's GLSL dialect for color grading and more.
+Color grading with code.
## Table of Contents
@@ -31,7 +31,56 @@ If you want to learn GDShader, take a look at the [Godot docs](https://docs.godo
**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.
+The template includes many examples. You can use them as a starting-point to write your own stuff.
+
+Besides the regular GDShader stuff, Pigment has so-called directives. Those allow to further control the behaviour of the application. **The most important directive is `//!load` to load an image.**
+
+
+### Load TEXTURE using the `//!load` directive
+
+```glsl
+//!load
+```
+
+The main image file will be read and available as the sampler2D `TEXTURE`.
+
+
+#### Load additional images
+
+```glsl
+//!load+
+
+uniform sampler2D ;
+```
+
+Have a look at the `place_texture.gdshader` example.
+
+
+### Have multiple steps with `//!steps n`
+
+You can apply your shaderfile multiple times. At every additional step, `TEXTURE` is the result of the previous step. This can be used to chain effects that cannot be easily chained otherwise.
+
+To query the current step index, a `STEP` uniform is automatically injected. If `steps` is set to `0`, your shader won't be applied at all.
+
+Example:
+
+```glsl
+//!load ...
+//!steps 5
+
+uniform int STEP;
+uniform int STEPS;
+
+void fragment() {
+ if (STEP == 0) {
+ ...
+ } else if (STEP == 1) {
+ ...
+ } else if (STEP == STEPS-1) {
+ ...
+ }
+}
+```
## Shaderlib
@@ -46,6 +95,8 @@ shader_type canvas_item;
#include "./shaderlib/oklab.gdshaderinc"
+//!load ./images/swamp.jpg
+
void fragment() {
vec4 oklab = rgb2oklab(COLOR);
vec4 oklch = oklab2oklch(oklab);
@@ -66,7 +117,7 @@ You can run Pigment from the commandline or scripts.
```
~ Pigment CLI ~
--=============-
+-================-
Usage:
@@ -82,20 +133,20 @@ Commands:
| 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
+ --shader PATH The path to the shader
+ --input PATH The path to the input 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.
+Since version v8.0, 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.
+> Note: You *can* use this feature for video frames, but it will take a loooong time.
#### Examples
@@ -107,5 +158,5 @@ You can pass a directory to `--input` and `--output`. This will process all imag
## 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
+- screen scaling is unsupported; Using screen scaling could lead to an either blurry UI, or no scaling at all -> see #45
+- commandline interface: `--headless` is not supported
diff --git a/build-template/Containerfile b/build-template/Containerfile
new file mode 100644
index 0000000..93e3a52
--- /dev/null
+++ b/build-template/Containerfile
@@ -0,0 +1,21 @@
+
+MAINTAINER ChaoticByte
+
+# Using Ubuntu 20.04
+FROM docker.io/ubuntu:focal AS os-base
+
+# https://docs.godotengine.org/en/stable/contributing/development/compiling/compiling_for_linuxbsd.html
+
+RUN apt-get update
+RUN DEBIAN_FRONTEND=noninteractive apt-get install -yq python3-pip git build-essential pkg-config libx11-dev libxcursor-dev libxinerama-dev libgl1-mesa-dev libglu1-mesa-dev libasound2-dev libpulse-dev libudev-dev libxi-dev libxrandr-dev libwayland-dev
+RUN pip3 install --system scons
+
+FROM os-base AS clone-src
+
+RUN git clone https://github.com/godotengine/godot.git -b 4.5-stable /godot-src
+
+FROM clone-src
+
+WORKDIR /godot-src
+ENTRYPOINT scons platform=linuxbsd target=template_release lto=full optimize=size disable_3d=yes module_text_server_adv_enabled=no module_text_server_fb_enabled=yes module_basis_universal_enabled=no module_csg_enabled=no module_enet_enabled=no module_gridmap_enabled=no module_jsonrpc_enabled=no module_mbedtls_enabled=no module_meshoptimizer_enabled=no module_minimp3_enabled=no module_mobile_vr_enabled=no module_msdfgen_enabled=no module_multiplayer_enabled=no module_navigation_enabled=no module_ogg_enabled=no module_openxr_enabled=no module_raycast_enabled=no module_squish_enabled=no module_theora_enabled=no module_upnp_enabled=no module_vhacd_enabled=no module_vorbis_enabled=no module_webrtc_enabled=no module_websocket_enabled=no module_webxr_enabled=no arch=x86_64 && strip bin/godot.linuxbsd.template_release.x86_64
+
diff --git a/build-template/build.sh b/build-template/build.sh
new file mode 100755
index 0000000..c31f837
--- /dev/null
+++ b/build-template/build.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+set -e
+
+function log {
+ echo -e "\033[1;36m***** $@\033[0m"
+}
+
+log
+log "Pigment - Godot Build Template Builder"
+log
+
+cd $(dirname $0)
+log Switched to $(pwd)
+
+tmpsuffix=$(date +%s%N)
+image_name=pigment-godot-template-builder
+container_name=${image_name}-${tmpsuffix}
+output_file=godot.linuxbsd.template_release.x86_64
+
+log Building image ${image_name} ...
+buildah build -t ${image_name}
+log Building godot build template with container ${container_name} ...
+podman run --name ${container_name} localhost/${image_name}:latest
+log Copying ${output_file} from container to $(realpath ./${output_file})
+podman cp ${container_name}:/godot-src/bin/${output_file} ./${output_file}
+log Removing container ${container_name}
+podman container rm ${container_name}
+log Done :D
+
diff --git a/src/Main.gd b/src/Main.gd
index 134ecaa..80d85ba 100644
--- a/src/Main.gd
+++ b/src/Main.gd
@@ -13,13 +13,13 @@ func show_help():
"Commands:\n\n",
" help\n\n",
" | Shows this help text.\n\n",
- " apply --shader PATH --input PATH --output PATH\n\n",
+ " apply --shader PATH [--load-image PATH]\n\n",
" | Applies a shader file.\n\n",
" --shader PATH The path to the shader\n",
- " --input PATH The path to the image\n",
- " Passing a folder activates batch mode\n",
- " --output PATH Where to write the resulting image to\n",
- " In batch mode, this must be a folder\n")
+ " --input PATH The path to the image.\n",
+ " Passing a folder activates batch mode.\n",
+ " --output PATH Where to write the resulting image to.\n",
+ " In batch mode, this must be a folder.\n")
func parse_custom_cmdline(args: PackedStringArray):
var kwargs: Dictionary = {"--shader": null, "--output": null, "--input": null}