summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrzemysław <przem@prymula.ct8.pl>2026-04-21 20:09:30 +0200
committerPrzemysław <przem@prymula.ct8.pl>2026-04-21 20:09:30 +0200
commitb369b5f48969d8f61fb361e53d284752ab41a232 (patch)
treeec6789008434f6f23f37378a91ef79372039bde7
parentf10610bbccb7ad1d664eec0a1e9001dc786c87f3 (diff)
version 3.2 init
-rw-r--r--script-fu/3.2/przem-add-background-under-text-v32.scm92
-rw-r--r--script-fu/3.2/przem-apply-sepia-v32.scm148
-rw-r--r--script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm58
-rw-r--r--script-fu/3.2/przem-ilford-expired-v32.scm144
-rw-r--r--script-fu/3.2/przem-kodachrome-v32.scm159
-rw-r--r--script-fu/3.2/przem-oldschool-photography-v32.scm75
-rw-r--r--script-fu/3.2/przem-prussian-blue-effect-v32.scm93
-rw-r--r--script-fu/3.2/przem-soft-focus-noninteractive-v32.scm54
-rw-r--r--script-fu/3.2/przem-sunset-effect-v32.scm103
-rw-r--r--script-fu/3.2/przem-teal-portrait-look-v32.scm166
-rw-r--r--script-fu/3.2/przem-traditional-photo-v32.scm69
-rw-r--r--script-fu/3.2/przem-true-cyjanotype-v32.scm99
-rw-r--r--script-fu/3.2/przem-wet-collodion-v32.scm151
-rw-r--r--script-fu/changelog.md3
14 files changed, 1414 insertions, 0 deletions
diff --git a/script-fu/3.2/przem-add-background-under-text-v32.scm b/script-fu/3.2/przem-add-background-under-text-v32.scm
new file mode 100644
index 0000000..7ea23da
--- /dev/null
+++ b/script-fu/3.2/przem-add-background-under-text-v32.scm
@@ -0,0 +1,92 @@
+; przem-add-background-under-text-v3 - Script-fu dodający podpis z tłem
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 06-02-2025
+; ver. 2.260116-1~beta for Gimp 3.0
+
+(define (przem-add-background-under-text-v3 image drawable text font font-size fg-color bg-color background-transparency opacity)
+
+ (let* (
+ (type-layer (vector-ref drawable 0))
+ (type (car (gimp-drawable-type type-layer)))
+ (image-width (car (gimp-image-get-width image)))
+ (image-height (car (gimp-image-get-height image)))
+ (text-extents (gimp-text-get-extents-font text font-size font))
+ (text-width (car text-extents))
+ (text-height (cadr text-extents))
+ (pos-x (- (- image-width text-width) 40))
+ (pos-y (- image-height text-height))
+ (bg-x-left (- pos-x 10))
+ (bg-x-right (+ text-width 10))
+ (text-layer 0)
+ (bg-layer 0)
+ )
+
+ (gimp-context-push)
+ (gimp-image-undo-group-start image)
+
+ (if (> (car (gimp-drawable-type type-layer)) 1)
+ (gimp-image-convert-rgb image)
+ )
+
+ ; Ustawienie koloru tła
+ (gimp-context-set-background bg-color)
+ (gimp-context-set-foreground fg-color)
+
+ (set! bg-layer (car (gimp-layer-new image "Background" bg-x-right text-height RGB-IMAGE 100 LAYER-MODE-NORMAL)))
+
+ (gimp-drawable-fill bg-layer FILL-BACKGROUND)
+ (gimp-layer-set-opacity bg-layer opacity)
+
+ ; Dodanie warstwy tła pod tekstem
+ (gimp-image-insert-layer image bg-layer 0 -1)
+
+ ;(gimp-layer-translate bg-layer bg-x-left pos-y)
+ ;(gimp-selection-translate image bg-layer bg-x-left pos-y)
+ (gimp-layer-set-offsets bg-layer bg-x-left pos-y)
+ (if (= background-transparency TRUE)
+ (begin
+ (gimp-drawable-fill bg-layer FILL-TRANSPARENT)
+ )
+ (begin ; else
+ )
+ )
+ (set! text-layer (car(gimp-text-font image -1 0 0 text 0 TRUE font-size font)))
+
+ ; Ustawienie pozycji tekstu
+ (gimp-layer-set-offsets text-layer pos-x pos-y)
+
+ ; Przesuń warstwę tekstową na górę stosu warstw
+ (gimp-image-raise-item-to-top image text-layer)
+
+ ; Scalanie warstw
+ (gimp-image-merge-down image text-layer CLIP-TO-IMAGE)
+
+ (gimp-image-undo-group-end image) ; Zakończ grupę operacji undo
+
+ ; Aktualizacja widoku
+ (gimp-displays-flush)
+ (gimp-context-pop)
+
+ )
+)
+
+(script-fu-register-filter "przem-add-background-under-text-v3"
+ _"Add Background Under Text"
+ _"Dodaje kolorowe tło pod tekstem z możliwością wyboru czcionki i rozmiaru."
+ "Przemysław R. Pietraszczyk"
+ "Public Domain"
+ "2025-02-06"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-STRING "Text" "Doda Elektroda"
+ SF-FONT "Font" "Monospace"
+ SF-ADJUSTMENT "Font Size" (list 50 1 1000 1 10 0 1)
+ SF-COLOR "Foreground Color" (list 100 100 100)
+ SF-COLOR "Background Color" (list 255 215 0)
+ SF-TOGGLE "Background Transparency" FALSE
+ SF-ADJUSTMENT "Transparency Value" (list 100 1 100 1 10 0 1)
+)
+
+(script-fu-menu-register "przem-add-background-under-text-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-apply-sepia-v32.scm b/script-fu/3.2/przem-apply-sepia-v32.scm
new file mode 100644
index 0000000..9ba52b4
--- /dev/null
+++ b/script-fu/3.2/przem-apply-sepia-v32.scm
@@ -0,0 +1,148 @@
+; przem-apply-sepia-v3 - Script-fu dodający prawdziwą sepie do zdjęcia
+; author: PRP
+; licencja: GPL v3
+; Gdańsk - 07-02-2025
+; ver. 2.260116-1~beta for GIMP 3
+;
+; This program is free software: you can redistribute it and/or modify
+; it under the terms of the GNU General Public License as published by
+; the Free Software Foundation; either version 3 of the License, or
+; (at your option) any later version.
+;
+; This program is distributed in the hope that it will be useful,
+; but WITHOUT ANY WARRANTY; without even the implied warranty of
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+; GNU General Public License for more details.
+;
+; You should have received a copy of the GNU General Public License
+; along with this program. If not, see <https://www.gnu.org/licenses/>.
+;
+
+(define (przem-apply-sepia-v3 image drawable value-slider-sepia shadow-sepia gradient-reverse in-sepia gradient-shape)
+ (let* (
+ (image-width (car (gimp-image-get-width image)))
+ (image-height (car (gimp-image-get-height image)))
+ (layer (vector-ref drawable 0))
+ (type (car (gimp-drawable-type layer)))
+ (center-x (/ image-width 2))
+ (center-y (/ image-height 2))
+ (radius (sqrt (+ (* center-x center-x) (* center-y center-y))))
+ (the-layer 0)
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start image)
+
+
+ (if (> (car (gimp-drawable-type layer)) 1)
+ (gimp-image-convert-rgb image)
+ )
+
+ (if (= type RGB-IMAGE)
+ (gimp-drawable-desaturate layer DESATURATE-LIGHTNESS)
+ )
+
+ (gimp-selection-all image)
+ (set! the-layer (car (gimp-image-flatten image)))
+
+ (if (= in-sepia TRUE)
+ (begin (gimp-drawable-desaturate the-layer DESATURATE-LIGHTNESS)
+ (gimp-drawable-brightness-contrast the-layer -0.078125 -0.15625)
+ (gimp-drawable-color-balance the-layer TRANSFER-SHADOWS TRUE 30 0 -30)
+ )
+ )
+
+ (let (
+ (sepia-layer (car (gimp-layer-new image "Sepia" image-width image-height RGB-IMAGE 100 LAYER-MODE-NORMAL)))
+ )
+
+ (gimp-context-set-foreground '(112 66 20)) ; sepia ciemniejszy
+ (gimp-context-set-background '(233 213 186)) ; sepia jasniejszy
+ ;(gimp-context-set-background '(210 180 140)) ; sepia jasniejsza
+
+ ; Dodanie koloru sepii
+ (gimp-image-insert-layer image sepia-layer 0 -1)
+
+ (gimp-context-push)
+
+ ;(plug-in-checkerboard #:run-mode RUN-NONINTERACTIVE
+ ; #:image image
+ ; #:drawables (vector drawable)
+ ; #:psychobilly 0
+ ; #:check-size 8)
+ (plug-in-checkerboard RUN-NONINTERACTIVE image (vector sepia-layer) 0 8)
+
+ (gimp-context-pop)
+
+ (gimp-context-push)
+
+ ;(gimp-selection-all image)
+ ; tak było w v. 2.10
+ ;(gimp-edit-blend sepia-layer FG-BG-RGB-MODE NORMAL-MODE GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE TRUE 3 0 TRUE 0 0 image-width image-height)
+ (gimp-context-set-gradient-fg-bg-rgb)
+ (if (= gradient-shape 1)
+ (begin
+ (gimp-context-set-gradient-reverse gradient-reverse)
+ (gimp-drawable-edit-gradient-fill sepia-layer
+ GRADIENT-LINEAR (- 100 shadow-sepia)
+ FALSE 1 0
+ TRUE
+ 0 0 image-width image-height)
+ ) )
+ (if (= gradient-shape 2)
+ (begin
+ (gimp-context-set-gradient-reverse gradient-reverse)
+ (gimp-drawable-edit-gradient-fill sepia-layer
+ GRADIENT-SHAPEBURST-DIMPLED (- 100 shadow-sepia)
+ FALSE 1 0
+ TRUE
+ 0 0 center-x center-y)
+ )
+ )
+ (if (= gradient-shape 0)
+ (begin
+ (gimp-context-set-gradient-reverse gradient-reverse)
+ (gimp-drawable-edit-gradient-fill sepia-layer
+ GRADIENT-BILINEAR (- 100 shadow-sepia)
+ FALSE 1 0
+ TRUE
+ (/ (+ (* 2 center-x) center-y -1) 2) 0
+ 0 0)
+ )
+ )
+
+ ; Zmiana krycia warstwy
+ (gimp-layer-set-opacity sepia-layer value-slider-sepia)
+
+ (gimp-image-merge-down image sepia-layer CLIP-TO-IMAGE)
+ ) ; let
+ (gimp-selection-none image)
+
+
+ (gimp-image-undo-group-end image)
+ ;(gimp-image-undo-enable image)
+
+ (gimp-displays-flush)
+ (gimp-context-pop)
+
+) )
+
+(script-fu-register-filter "przem-apply-sepia-v3"
+ _"_Apply a sepia effect to the image"
+ _"Tworzy obraz sepii"
+ "Przemyslaw R. Pietraszczyk"
+ "GPL v3"
+ "2025-02-07"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT _"Sepia intensity" '(50 0 100 1 10 0 0) ; Suwak poziomy
+ SF-ADJUSTMENT _"Shadow Sepia" '(30 0 100 1 10 0 0) ; Suwak poziomy
+ SF-TOGGLE _"Gradient reverse" FALSE
+ SF-TOGGLE _"Sepia" TRUE
+ SF-OPTION _"Shape" '("Bilinear" "Linear" "Shapeburst")
+
+
+
+)
+
+(script-fu-menu-register "przem-apply-sepia-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm b/script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm
new file mode 100644
index 0000000..199bdfc
--- /dev/null
+++ b/script-fu/3.2/przem-cyanotype-color-effect-multi-v32.scm
@@ -0,0 +1,58 @@
+; przem-cyanotype-color-effect-multi-v3 - Efekty cyjanotypi na kolor
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 24-08-2025
+; ver. 2.250824-2
+
+(define (przem-cyanotype-color-effect-multi-v3 img drawable black blue)
+
+ (gimp-context-push)
+ (gimp-image-undo-group-start img)
+
+ ; Cyjanotypia (zostaw tylko niebieski kanał)
+ (let* (
+ (layer (vector-ref drawable 0))
+ ;(type (car (gimp-drawable-type-with-alpha cyan-layer)))
+ (type (car (gimp-drawable-type-with-alpha (car (gimp-layer-copy (vector-ref drawable 0))))))
+
+ ;(cyan-layer (car (gimp-layer-copy drawable TRUE)))
+ (mask (car (gimp-channel-new img "Engraving Mask" (car (gimp-image-get-width img)) (car (gimp-image-get-height img)) black '(0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0))))
+ )
+ (if (> (car (gimp-drawable-type layer)) 1)
+ (gimp-image-convert-rgb img))
+
+ ;; Desaturacja
+ ;(if (= type RGBA-IMAGE)
+ ;(gimp-drawable-desaturate layer DESATURATE-LIGHTNESS))
+
+ (let* (
+ (cyan-layer (car (gimp-layer-copy (vector-ref drawable 0))))
+ )
+ (gimp-context-set-foreground '(0 51 102)) ; Kolor błękitu pruskiego
+ (gimp-image-insert-layer img cyan-layer 0 -1)
+ (gimp-item-set-name cyan-layer "Cyanotype")
+ (gimp-layer-set-mode cyan-layer LAYER-MODE-SCREEN) ; Tryb mieszania: Screen
+ )
+ ;(gimp-hue-saturation cyan-layer 0 blue 50 0)
+ (gimp-image-insert-channel img mask -1 0)
+ )
+
+ (gimp-image-undo-group-end img)
+ (gimp-displays-flush)
+ (gimp-context-pop))
+
+
+(script-fu-register-filter "przem-cyanotype-color-effect-multi-v3"
+ _"Add Cyanotype Color Multi..."
+ _"Efekty cyjanotypii na kolor"
+ "PRP"
+ "Public Domain"
+ "2025-08-24"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT "Black" '(5 0 100 1 10 0 0)
+ SF-ADJUSTMENT "Pastel blue" '(40 30 70 1 10 1 0))
+
+(script-fu-menu-register "przem-cyanotype-color-effect-multi-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
+
diff --git a/script-fu/3.2/przem-ilford-expired-v32.scm b/script-fu/3.2/przem-ilford-expired-v32.scm
new file mode 100644
index 0000000..f89ebdd
--- /dev/null
+++ b/script-fu/3.2/przem-ilford-expired-v32.scm
@@ -0,0 +1,144 @@
+; przem-ilford-expired-v3 - Fotografia imitująca przeterminowany film Ilforda
+; 2025-10-05 - Przemysław R. Pietraszczyk
+; licence: Public Domain
+; ver. 2.251006-0
+; Ten script-fu wykorzystuje funkcje ze skryptu 'chrome-it.scm'
+; Autorstwa Spencer Kimball
+
+(define (shadows val)
+ (/ (* 0.96 val) 2.55))
+
+(define (midtones val)
+ (/ val 2.55))
+
+(define (highlights val)
+ ; The result is used as "gimp-drawable-color-balance" color parameter
+ ; and thus must be restricted to -100.0 <= highlights <= 100.0.
+ (min (/ (* 1.108 val) 2.55) 100.0))
+
+(define (rval col)
+ (car col))
+
+(define (gval col)
+ (cadr col))
+
+(define (bval col)
+ (caddr col))
+
+
+
+(define (apply-quick-tint img layer1 layer2 width height saturation lightness hc cc)
+
+ (gimp-drawable-color-balance layer1 TRANSFER-SHADOWS 1
+ (shadows (rval hc))
+ (shadows (gval hc))
+ (shadows (bval hc)))
+ (gimp-drawable-color-balance layer1 TRANSFER-MIDTONES 1
+ (midtones (rval hc))
+ (midtones (gval hc))
+ (midtones (bval hc)))
+ (gimp-drawable-color-balance layer1 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval hc))
+ (highlights (gval hc))
+ (highlights (bval hc)))
+
+ (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1
+ (shadows (rval cc))
+ (shadows (gval cc))
+ (shadows (bval cc)))
+ (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
+ (midtones (rval cc))
+ (midtones (gval cc))
+ (midtones (bval cc)))
+ (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval cc))
+ (highlights (gval cc))
+ (highlights (bval cc)))
+
+ (gimp-drawable-hue-saturation layer2 HUE-RANGE-ALL
+ 0.0
+ lightness
+ saturation
+ 0.0))
+
+
+
+(define (przem-ilford-expired-v3 image drawable temperature strength apply brightness contrast saturation lightness hc cc)
+
+ ; use v3 binding of return args from PDB
+ ;(script-fu-use-v3)
+
+ (let* (
+ (temperature-factor (/ (- temperature 6500) 1000))
+ (red-adjust (* temperature-factor (- strength)))
+ (blue-adjust (* temperature-factor strength))
+ (brightness-value (/ brightness 100))
+ (contrast-value (/ contrast 100))
+ (layer (vector-ref drawable 0))
+ (work-layer (car (gimp-layer-copy layer TRUE)))
+ (work-layer-second (car (gimp-layer-copy layer TRUE)))
+ (work-layer-brightness-contrast (car (gimp-layer-copy layer TRUE)))
+ (image-width (car (gimp-image-get-width image)))
+ (image-height (car (gimp-image-get-height image)))
+ )
+
+ (gimp-image-undo-group-start image)
+ (gimp-context-push)
+
+ (gimp-image-insert-layer image work-layer 0 -1)
+ (gimp-image-insert-layer image work-layer-second 0 -1)
+
+ (if (= apply TRUE)
+ (gimp-image-insert-layer image work-layer-brightness-contrast 0 -1))
+
+ ; Balans kolorów na podstawie temp. barwowej z kontrolą siły efektu
+ ; (gimp-message (string-append "Choice "))
+ (gimp-drawable-color-balance work-layer TRANSFER-SHADOWS TRUE red-adjust 0 blue-adjust)
+ (gimp-drawable-color-balance work-layer TRANSFER-MIDTONES TRUE red-adjust 0 blue-adjust)
+ (gimp-drawable-color-balance work-layer TRANSFER-HIGHLIGHTS TRUE red-adjust 0 blue-adjust)
+ (if (= apply TRUE)
+ (gimp-drawable-brightness-contrast work-layer-brightness-contrast brightness-value contrast-value)
+ (gimp-layer-set-opacity work-layer-brightness-contrast 40))
+
+ (apply-quick-tint image work-layer work-layer-second image-width image-height saturation lightness hc cc)
+ (gimp-layer-set-opacity work-layer 40)
+
+ (let* ((finish-layer (car (gimp-layer-copy work-layer-brightness-contrast TRUE)))
+ (gimp-drawable-curves-spline finish-layer HISTOGRAM-VALUE 8 #(0 0 24 22 129 138 255 255))
+ (gimp-layer-set-opacity finish-layer 40)
+
+ ))
+ (let* ((merged-layer (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE))))
+ ;(gimp-image-merge-visible-layers image CLIP-TO-IMAGE)
+ (gimp-item-set-visible merged-layer TRUE))
+
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-ilford-expired-v3"
+ _"Ilford film expired"
+ _"Fotografia imitująca przeterminowany film Ilforda"
+ "Przemysław R. Pietraszczyk"
+ "Public Domain"
+ "2025-10-05"
+ "RGB*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT "Temperatura (K)" '(5550 1000 10000 100 1000 0 1)
+ SF-ADJUSTMENT "Siła efektu" '(1.0 0.1 3.0 0.1 0.5 1 0)
+ SF-TOGGLE _"Apply Brightness and Contrast" FALSE
+ SF-ADJUSTMENT _"Brightness" '(1 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Contrast" '(5 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Saturation" '(5 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Lightness" '(-35 -100 100 1 10 0 0)
+ SF-COLOR _"Highlight balance" '(211 95 0)
+ SF-COLOR _"Chrome balance" "black"
+
+)
+
+(script-fu-menu-register "przem-ilford-expired-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
+
diff --git a/script-fu/3.2/przem-kodachrome-v32.scm b/script-fu/3.2/przem-kodachrome-v32.scm
new file mode 100644
index 0000000..534d482
--- /dev/null
+++ b/script-fu/3.2/przem-kodachrome-v32.scm
@@ -0,0 +1,159 @@
+; przem-kodachrome-v3 - Fotografia z okresu 20-sto lecia między wojennego
+; 2025-09-25 - Przemysław R. Pietraszczyk
+; licence: Public Domain
+; ver. 2.250929-0
+; Ten script-fu wykorzystuje funkcje ze skryptu 'chrome-it.scm'
+; Autorstwa Spencer Kimball
+
+(define (shadows val)
+ (/ (* 0.96 val) 2.55))
+
+(define (midtones val)
+ (/ val 2.55))
+
+(define (highlights val)
+ ; The result is used as "gimp-drawable-color-balance" color parameter
+ ; and thus must be restricted to -100.0 <= highlights <= 100.0.
+ (min (/ (* 1.108 val) 2.55) 100.0))
+
+(define (rval col)
+ (car col))
+
+(define (gval col)
+ (cadr col))
+
+(define (bval col)
+ (caddr col))
+
+
+
+(define (apply-quick-tint img layer1 layer2 width height saturation lightness hc cc)
+
+ (gimp-drawable-color-balance layer1 TRANSFER-SHADOWS 1
+ (shadows (rval hc))
+ (shadows (gval hc))
+ (shadows (bval hc)))
+ (gimp-drawable-color-balance layer1 TRANSFER-MIDTONES 1
+ (midtones (rval hc))
+ (midtones (gval hc))
+ (midtones (bval hc)))
+ (gimp-drawable-color-balance layer1 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval hc))
+ (highlights (gval hc))
+ (highlights (bval hc)))
+
+ (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1
+ (shadows (rval cc))
+ (shadows (gval cc))
+ (shadows (bval cc)))
+ (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
+ (midtones (rval cc))
+ (midtones (gval cc))
+ (midtones (bval cc)))
+ (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval cc))
+ (highlights (gval cc))
+ (highlights (bval cc)))
+
+ (gimp-drawable-hue-saturation layer2 HUE-RANGE-ALL
+ 0.0
+ lightness
+ saturation
+ 0.0))
+
+(define (create-highlights-curve adjustment)
+ (let ((curve-data (make-vector 256 'byte)))
+ (do ((i 0 (+ i 1)))
+ ((= i 256))
+ (if (> i 128)
+ ; Światła - zastosuj regulację
+ (aset curve-data i (min 255 (max 0 (+ i (* (- i 128) adjustment)))))
+ ; Cienie - bez zmian
+ (aset curve-data i i)
+ )
+ )
+ curve-data
+ )
+)
+
+(define (create-shadows-curve adjustment)
+ (let ((curve-data (make-vector 256 'byte)))
+ (do ((i 0 (+ i 1)))
+ ((= i 256))
+ (if (< i 128)
+ ; Cienie - zastosuj regulację
+ (aset curve-data i (min 255 (max 0 (+ i (* i adjustment)))))
+ ; Światła - bez zmian
+ (aset curve-data i i)
+ )
+ )
+ curve-data
+ )
+)
+
+;(define (przem-oldschool-photogrphy-v3 image drawable temperature strength tint-use
+; brightness contrast highlights shadows whites blacks saturation lightness hc cc)
+(define (przem-kodachrome-v3 image drawable highlights shadows saturation lightness hc cc)
+
+ ; use v3 binding of return args from PDB
+ ;(script-fu-use-v3)
+
+ (let* (
+ ;(temperature-factor (/ (- temperature 6500) 1000))
+ ;(red-adjust (* temperature-factor (- strength)))
+ ;(blue-adjust (* temperature-factor strength))
+ ;(brightness-value (/ brightness 100))
+ ;(contrast-value (/ contrast 100))
+ (adjust-value-highlights (/ highlights 100))
+ (adjust-value-shadow (/ shadows 100))
+ (width (car (gimp-image-get-width image)))
+ (height (car (gimp-image-get-height image)))
+ (layer (vector-ref drawable 0))
+ (work-layer (car (gimp-layer-copy layer TRUE)))
+ (work-layer-second (car (gimp-layer-copy layer TRUE)))
+ ;(work-layer-levels (car (gimp-layer-copy layer TRUE)))
+ ;(work-layer-brightness-contrast (car (gimp-layer-copy layer TRUE)))
+ (curves-layer (gimp-layer-new image "Cross" width height RGB-IMAGE 100 LAYER-MODE-NORMAL))
+ (blacks 1)
+ (whites 0)
+ )
+ (gimp-image-undo-group-start image)
+ (gimp-context-push)
+
+ (gimp-image-insert-layer image work-layer 0 -1)
+ (gimp-image-insert-layer image work-layer-second 0 -1)
+
+ (apply-quick-tint image work-layer work-layer-second width height saturation lightness hc cc)
+
+ ; Regulacja przez poziomy
+ ; low imput - high input - gamma - output range
+ (gimp-drawable-levels work-layer 0
+ blacks
+ whites
+ 1.0 1.0 1.0 0 0)
+
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-kodachrome-v3"
+ _"Kodachrome"
+ _"Imitacja Kodachrome"
+ "PRP"
+ "Public Domain"
+ "2025-09-25"
+ "RGB*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT _"Highlights" '(-80 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Shadow" '(30 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Saturation" '(-80 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Lightness" '(24 -100 100 1 10 0 0)
+ SF-COLOR _"Highlight balance" '(211 95 0)
+ SF-COLOR _"Chrome balance" "black"
+)
+
+(script-fu-menu-register "przem-kodachrome-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-oldschool-photography-v32.scm b/script-fu/3.2/przem-oldschool-photography-v32.scm
new file mode 100644
index 0000000..36c3459
--- /dev/null
+++ b/script-fu/3.2/przem-oldschool-photography-v32.scm
@@ -0,0 +1,75 @@
+; przem-oldschool-photography-v3 - Fotografia z okresu 20-sto lecia między wojennego
+; 2025-10-01 - Przemysław R. Pietraszczyk
+; licence: Public Domain
+; ver. 2.251001-0
+
+
+
+(define (curves image width height)
+ ;(gimp-drawable-curves-spline layer1 HISTOGRAM-VALUE (spline-chrome-it))
+ (let* ((layer (gimp-layer-new image "Curves" width height RGB-IMAGE 100 LAYER-MODE-NORMAL))
+ (set! layer (gimp-image-merge-visible-layers image CLIP-TO-IMAGE))
+ (gimp-drawable-curves-spline layer HISTOGRAM-VALUE 12 #(0 0 51 45 102 95 153 158 204 209 255 255))
+ ))
+)
+
+
+(define (przem-oldschool-photography-v3 image drawable temperature strength apply brightness contrast)
+
+ ; use v3 binding of return args from PDB
+ ;(script-fu-use-v3)
+
+ (let* (
+ (temperature-factor (/ (- temperature 6500) 1000))
+ (red-adjust (* temperature-factor (- strength)))
+ (blue-adjust (* temperature-factor strength))
+ (brightness-value (/ brightness 100))
+ (contrast-value (/ contrast 100))
+ (layer (vector-ref drawable 0))
+ (work-layer (car (gimp-layer-copy layer TRUE)))
+ (work-layer-brightness-contrast (car (gimp-layer-copy layer TRUE)))
+ (image-width (car (gimp-image-get-width image)))
+ (image-height (car (gimp-image-get-height image)))
+ )
+
+ (gimp-image-undo-group-start image)
+ (gimp-context-push)
+
+ (gimp-image-insert-layer image work-layer 0 -1)
+ (if (= apply TRUE)
+ (gimp-image-insert-layer image work-layer-brightness-contrast 0 -1))
+
+ ; Balans kolorów na podstawie temp. barwowej z kontrolą siły efektu
+ ; (gimp-message (string-append "Choice "))
+ (gimp-drawable-color-balance work-layer TRANSFER-SHADOWS TRUE red-adjust 0 blue-adjust)
+ (gimp-drawable-color-balance work-layer TRANSFER-MIDTONES TRUE red-adjust 0 blue-adjust)
+ (gimp-drawable-color-balance work-layer TRANSFER-HIGHLIGHTS TRUE red-adjust 0 blue-adjust)
+ (if (= apply TRUE)
+ (gimp-drawable-brightness-contrast work-layer-brightness-contrast brightness-value contrast-value))
+
+ (curves image image-width image-height)
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-oldschool-photography-v3"
+ _"Oldschool Photography"
+ _"Nawiązanie do fotografii 20-sto lecia międzywojennego"
+ "PRP"
+ "Public Domain"
+ "2025-10-01"
+ "RGB*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT "Temperatura (K)" '(5150 1000 10000 100 1000 0 1)
+ SF-ADJUSTMENT "Siła efektu" '(1.0 0.1 3.0 0.1 0.5 1 0)
+ SF-TOGGLE _"Apply Brightness and Contrast" FALSE
+ SF-ADJUSTMENT _"Brightness" '(0 -100 100 1 10 0 0)
+ SF-ADJUSTMENT _"Contrast" '(-30 -100 100 1 10 0 0)
+
+)
+
+(script-fu-menu-register "przem-oldschool-photography-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-prussian-blue-effect-v32.scm b/script-fu/3.2/przem-prussian-blue-effect-v32.scm
new file mode 100644
index 0000000..c439013
--- /dev/null
+++ b/script-fu/3.2/przem-prussian-blue-effect-v32.scm
@@ -0,0 +1,93 @@
+; przem-prussian-blue-effect-v3 - nieudalna próba nawiązania do efektu cyjanotypii
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 22-6-2025
+; ver. 2.250712-0~beta
+
+(define (przem-prussian-blue-effect-v3 img drawable mode black value-blue brightness contrast invert)
+
+ ;(script-fu-use-v3)
+
+ (let* ((gradient-layer 0)
+ (in-layer (vector-ref drawable 0))
+ (mask (car (gimp-channel-new img "Engraving Mask" (car (gimp-image-get-width img)) (car (gimp-image-get-height img)) black '(0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0))))
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start img)
+ (gimp-context-set-defaults)
+
+ (if (> (car (gimp-drawable-type in-layer)) 1)
+ (gimp-image-convert-rgb img))
+ ; dla obrazów przestrzeni RGB i Gray, utworzenie nowej warstwy, dopiero po kowersji na rgb
+ (set! gradient-layer (car (gimp-layer-new img "Prussian Blue" (car (gimp-image-get-width img)) (car (gimp-image-get-height img)) RGBA-IMAGE 100 LAYER-MODE-NORMAL)))
+
+ (gimp-image-insert-layer img gradient-layer 0 -1)
+ (gimp-context-set-foreground '(0 51 102)) ; Kolor błękitu pruskiego
+ (gimp-context-set-background '(0 0 0))
+
+ (gimp-drawable-brightness-contrast gradient-layer brightness contrast)
+
+ (gimp-image-insert-channel img mask -1 0)
+
+ (if (= mode 0) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-NORMAL)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 1
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)))
+ (if (= mode 1) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-SUBTRACT)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 1
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)))
+ (if (= mode 2) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-ADDITION)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 1
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)))
+ (if (= mode 3) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-DARKEN-ONLY)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 1
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)))
+ (if (= mode 3) (begin (gimp-layer-set-mode gradient-layer LAYER-MODE-DIFFERENCE)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 1
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)))
+
+ ;(if (= invert TRUE) (gimp-invert gradient-layer))
+
+ (gimp-layer-set-opacity gradient-layer value-blue)
+
+ (let* ((merged-layer (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE))))
+ (gimp-item-set-visible merged-layer TRUE))
+
+ (gimp-image-undo-group-end img)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-prussian-blue-effect-v3"
+ _"Apply prussian blue effect"
+ _"Nakłada efekt błękitu pruskiego na zdjęcie."
+ "PRP"
+ "Public Domain"
+ "2025-06-22"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-OPTION "Mode" '("NORMAL" "SUBTRACT" "ADDITION" "DARKEN-ONLY" "DIFFERENCE")
+ SF-ADJUSTMENT "Black" '(5 0 100 1 10 0 0)
+ SF-ADJUSTMENT "Blue intensity" '(60 0 100 1 10 0 0)
+ SF-ADJUSTMENT "Brightness" '(0 -1 1 0.0001 0.0001 2 0)
+ SF-ADJUSTMENT "Contrast" '(0 -1 1 0.0001 0.0001 2 0)
+ SF-TOGGLE "Invert" FALSE
+)
+
+(script-fu-menu-register "przem-prussian-blue-effect-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-soft-focus-noninteractive-v32.scm b/script-fu/3.2/przem-soft-focus-noninteractive-v32.scm
new file mode 100644
index 0000000..98d5ed0
--- /dev/null
+++ b/script-fu/3.2/przem-soft-focus-noninteractive-v32.scm
@@ -0,0 +1,54 @@
+; przem-soft-focus-noninteractive-v3.sh - Filtr dodający miękki focus
+; 2025-06-19 - PRP
+; Public Domain
+; ver. 2025-06-19
+
+;(define (przem-soft-focus-noninteractive-v3 basout savename)
+(define (przem-soft-focus-noninteractive-v3 ask-fileglob)
+
+ (let* (
+ (thefiles (cadr (file-glob ask-fileglob 0)))
+ (baseout (car thefiles))
+ (savename (cad thefiles))
+ (image (car (gimp-file-load RUN-NONINTERACTIVE baseout savename)))
+ (selected-layers-array (car (gimp-image-get-selected-layers image)))
+ (num-selected-layers vector-length selected-layers-array)
+ ;(width (car (gimp-image-get-width image)))
+ ;(height (car (gimp-image-get-height image)))
+ (active-layer 0)
+ (blur-radius 100)
+ (opacity 100)
+ )
+
+ ;(gimp-message (string-append \"baseout: \" (number->string baseout)))
+ ;(gimp-message (string-append \"savename: \" (number->string savename)))
+
+ (set! active-layer (vector-ref selected-layers-array (- num-selected-layers 1)))
+
+
+ ; Rozmycie Gaussa
+ ;(plug-in-gauss RUN-NONINTERACTIVE image active-layer blur-radius blur-radius 0)
+
+ (gimp-drawable-merge-new-filter active-layer "gegl:gaussian-blur" RUN-NONINTERACTIVE LAYER-MODE-REPLACE 1.0 "std-dev-x" blur-radius "std-dev-y" 0.0 "filter" "auto")
+
+ ; Zmień tryb mieszania na Overlay lub Screen
+ (gimp-layer-set-mode active-layer OVERLAY-MODE)
+
+ ; Dostosuj przezroczystość
+ (gimp-layer-set-opacity active-layer opacity)
+ ;(gimp-image-merge-down image active-layer CLIP-TO-IMAGE)
+
+ ;(let* (
+ ;(merged-layer (car (gimp-image-merge-visible-layers image EXPAND-AS-NECESSARY)))
+ ;(merged-layer (car (gimp-image-merge-down image active-layer CLIP-TO-IMAGE)))
+ ;)
+ ;(file-tiff-save RUN-NONINTERACTIVE image active-layer savename baseout 1) ; 1 - lZW
+ (gimp-file-save RUN-NONINTERACTIVE image active-layer savename baseout)
+
+ (gimp-image-undo-enable image)
+ ;)
+
+
+ (gimp-image-delete image)
+
+))
diff --git a/script-fu/3.2/przem-sunset-effect-v32.scm b/script-fu/3.2/przem-sunset-effect-v32.scm
new file mode 100644
index 0000000..0dbc201
--- /dev/null
+++ b/script-fu/3.2/przem-sunset-effect-v32.scm
@@ -0,0 +1,103 @@
+; przem-sunset-effect-v3 - imituje efekt zachodzącego słońca
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 01-09-2025
+; ver. 2.250901-0~beta
+
+(define (shadows val)
+ (/ (* 0.96 val) 2.55))
+
+(define (midtones val)
+ (/ val 2.55))
+
+(define (highlights val)
+ ; The result is used as "gimp-drawable-color-balance" color parameter
+ ; and thus must be restricted to -100.0 <= highlights <= 100.0.
+ (min (/ (* 1.108 val) 2.55) 100.0))
+
+(define (rval col)
+ (car col))
+
+(define (gval col)
+ (cadr col))
+
+(define (bval col)
+ (caddr col))
+
+
+(define (przem-sunset-effect-v3 img drawable)
+ (gimp-image-undo-group-start img)
+
+ ; Tworzenie warstw dla różnych efektów
+ (let* (
+ (layer (vector-ref drawable 0))
+ (sunset-layer (car (gimp-layer-copy layer TRUE)))
+ ;(original-visible (car (gimp-drawable-get-visible drawable)))
+ (original-visible (car (gimp-layer-copy layer TRUE)))
+ (width (car (gimp-image-get-width img)))
+ (height (car (gimp-image-get-height img)))
+ )
+
+ ; Dodawanie warstwy do obrazu
+ (gimp-image-insert-layer img sunset-layer 0 -1)
+ (gimp-layer-set-mode sunset-layer LAYER-MODE-MULTIPLY)
+ (gimp-item-set-name sunset-layer _"Sunset Effect")
+
+
+ ; Nakładanie gradientu ciepłych kolorów
+ (gimp-context-set-foreground '(255 100 0)) ; pomarańczowy
+ (gimp-context-set-background '(150 0 50)) ; różowo-czerwony
+
+ ; Tworzenie gradientu
+ (gimp-layer-set-mode sunset-layer LAYER-MODE-SUBTRACT) ;
+ (gimp-drawable-edit-gradient-fill sunset-layer
+ GRADIENT-LINEAR 1 FALSE 1 0 TRUE
+ 0 0 width height)
+
+
+ ; cieplejsze cienie
+ (gimp-drawable-color-balance sunset-layer TRANSFER-SHADOWS 1
+ (shadows (rval '(30 0 -20)))
+ (shadows (gval '(30 0 -20)))
+ (shadows (bval '(30 0 -20))))
+
+ ; cieplejsze średnie tony
+ (gimp-drawable-color-balance sunset-layer TRANSFER-MIDTONES 1
+ (midtones (rval '(40 0 -10)))
+ (midtones (gval '(40 0 -10)))
+ (midtones (bval '(40 0 -10))))
+
+ ; cieplejsze światła
+ (gimp-drawable-color-balance sunset-layer TRANSFER-HIGHLIGHTS 1
+ (highlights (rval '(20 0 -5)))
+ (highlights (gval '(20 0 -5)))
+ (highlights (bval '(20 0 -5))))
+
+
+ ; Zwiększenie kontrastu
+ ;(gimp-levels sunset-layer 0 20 230 1.0 0 255)
+ (gimp-drawable-levels sunset-layer 0
+ 0 0.20 0 TRUE
+ 1.0
+ 0.0 1.0 TRUE)
+
+ ; Dodanie lekkiego rozmycia dla miękkiego efektu
+ ;(plug-in-gauss-iir 1 img sunset-layer 5 TRUE TRUE)
+ (gimp-drawable-merge-new-filter sunset-layer "gegl:gaussian-blur" 1 LAYER-MODE-REPLACE 1.0 "std-dev-x" 5 "std-dev-y" 5 "filter" "auto")
+
+ (gimp-image-undo-group-end img)
+ (gimp-displays-flush)
+ )
+)
+
+(script-fu-register-filter "przem-sunset-effect-v3"
+ _"Sunset Effect"
+ _"Imitacja kolorystyki zachodu słońca"
+ "P.R.P."
+ "Public Domain"
+ "2025-09-01"
+ "*"
+ SF-ONE-OR-MORE-DRAWABLE)
+
+(script-fu-menu-register "przem-sunset-effect-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-teal-portrait-look-v32.scm b/script-fu/3.2/przem-teal-portrait-look-v32.scm
new file mode 100644
index 0000000..1e45612
--- /dev/null
+++ b/script-fu/3.2/przem-teal-portrait-look-v32.scm
@@ -0,0 +1,166 @@
+; przem-teal-portrait-look-v3 - Fotografia portretowa na sterydach
+; 2026-04-06 - Przemysław R. Pietraszczyk
+; licence: GPL v3
+; ver. 2.260409-0
+; Ten script-fu wykorzystuje funkcje ze skryptu 'chrome-it.scm'
+; Autorstwa Spencer Kimball
+
+(define (shadows val)
+ (/ (* 0.96 val) 2.55))
+
+(define (midtones val)
+ (/ val 2.55))
+
+(define (highlights val)
+ ; The result is used as "gimp-drawable-color-balance" color parameter
+ ; and thus must be restricted to -100.0 <= highlights <= 100.0.
+ (min (/ (* 1.108 val) 2.55) 100.0))
+
+(define (rval col)
+ (car col))
+
+(define (gval col)
+ (cadr col))
+
+(define (bval col)
+ (caddr col))
+
+(define (saturation layer1)
+ ; drawable, HUE-Range ( Red, Yellow, Green, Cyan, Blue, Magenta, or All),
+ ; Hue Offset (-180 180), lightness (-100 100), saturation (-100 100) overlap (0 100)
+ ; Lekko przygaszona saturacja globalnie
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-ALL
+ 0.0
+ 0.0
+ -30
+ 0.0)
+
+ ;Podbicie cyjanów / zieleni (turkus szalika, chłodniejsze tło)
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-CYAN
+ 5
+ 2
+ 15
+ 0.0)
+
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-GREEN
+ 3
+ 2
+ 10
+ 0.0)
+
+ ;Delikatne ocieplenie tonów skóry (czerwienie/żółcie)
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-RED
+ -3
+ 2
+ 8
+ 0.0)
+
+ (gimp-drawable-hue-saturation layer1 HUE-RANGE-YELLOW
+ -2
+ 1
+ 6
+ 0.0))
+
+(define (teal layer2)
+ (let* (
+ ;cyan-red -5, magenta-green 0, yellow-blue +5
+ (c1 '(-5 0 5))
+ (c2 '(-3 0 3))
+ (c3 '(5 0 -3))
+ )
+ (gimp-drawable-color-balance layer2 TRANSFER-SHADOWS 1
+ (shadows (rval c1))
+ (shadows (gval c1))
+ (shadows (bval c1)))
+ (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
+ (midtones (rval c2))
+ (midtones (gval c2))
+ (midtones (bval c2)))
+ (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval c3))
+ (highlights (gval c3))
+ (highlights (bval c3)))
+ ))
+
+(define (sand layer2)
+ (let* (
+ ;cyan-red (+) 30
+ ;magenta-green (+) 10
+ ;yellow-blue (+) 35
+ (c2 '(30 10 35))
+ (c3 '(20 5 25))
+ )
+ (gimp-drawable-color-balance layer2 TRANSFER-MIDTONES 1
+ (midtones (rval c2))
+ (midtones (gval c2))
+ (midtones (bval c2)))
+ (gimp-drawable-color-balance layer2 TRANSFER-HIGHLIGHTS 1
+ (highlights (rval c3))
+ (highlights (gval c3))
+ (highlights (bval c3)))
+ ))
+
+(define (przem-teal-portrait-look-v3 img drawable mode noise)
+
+ (let* (
+ (ref-layer (vector-ref drawable 0))
+ (work-layer (car (gimp-layer-copy ref-layer TRUE)))
+ (color-layer (car (gimp-layer-copy ref-layer TRUE)))
+ (the-layer 0)
+ (width (car (gimp-image-get-width img)))
+ (height (car (gimp-image-get-height img)))
+ (noise-layer (car (gimp-layer-new img "Noise" width height RGB-IMAGE 100 LAYER-MODE-NORMAL)))
+ (fg-color '(203 182 138))
+ ;(fg-color '(217 199 161))
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start img)
+
+ (if (= noise TRUE) (begin
+ (gimp-image-insert-layer img noise-layer 0 -1)
+ (gimp-context-set-foreground fg-color)
+ (gimp-drawable-fill noise-layer FILL-TRANSPARENT)
+ (gimp-layer-set-mode noise-layer LAYER-MODE-MULTIPLY)))
+
+ ;(gimp-selection-all img)
+ (set! the-layer (car (gimp-image-flatten img)))
+ (gimp-layer-set-opacity the-layer 100)
+
+ (gimp-image-insert-layer img color-layer 0 -1)
+ (if (= mode 0) (begin
+ ;; Delikatne przyciemnienie i zwiększenie kontrastu
+ ;; brightness: -5, contrast: 15
+ (gimp-drawable-brightness-contrast the-layer -0.5 0.15)
+ (teal color-layer)))
+ (if (= mode 1) (begin
+ (gimp-drawable-brightness-contrast the-layer 0.10 0.5)
+ (sand color-layer)))
+ (gimp-layer-set-opacity color-layer 5)
+
+ (gimp-image-insert-layer img work-layer 0 -1)
+ (saturation work-layer)
+ (gimp-layer-set-opacity work-layer 40)
+
+ ;(let* ((merged-layer (car (gimp-image-merge-visible-layers img CLIP-TO-IMAGE))))
+ ; (gimp-item-set-visible merged-layer TRUE))
+ ;(gimp-selection-none img)
+
+ (gimp-image-undo-group-end img)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ ))
+
+(script-fu-register-filter "przem-teal-portrait-look-v3"
+ _"_Teal portrait look"
+ _"Nadaje zdjęciu miękki portretowy look: lekko przygaszone kolory, podbity turkus, ocieplona skóra, umiarkowany kontrast."
+ "Przemysław R. Pietraszczyk"
+ "GPL v3"
+ "2026-04-06"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-OPTION _"Colors Balance" '("TEAL" "SAND")
+ SF-TOGGLE _"Sand Noise" FALSE
+)
+
+(script-fu-menu-register "przem-teal-portrait-look-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-traditional-photo-v32.scm b/script-fu/3.2/przem-traditional-photo-v32.scm
new file mode 100644
index 0000000..ee9b727
--- /dev/null
+++ b/script-fu/3.2/przem-traditional-photo-v32.scm
@@ -0,0 +1,69 @@
+; przem-traditional-photo-v3 - luźne nawiązanie do chemii tradycyjnej fototgrafii
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 15-02-2025
+; ver. 2.250217-0~beta for GIMP 3
+
+
+(define (przem-traditional-photo-v3 image drawable crossing contrast-colors balance-color)
+ (let (
+ ;(the-image (car (gimp-image-duplicate image)) image)
+ (the-layer 0)
+ (image-width (car (gimp-image-get-width image)))
+ (image-height (car (gimp-image-get-height image)))
+ )
+ (gimp-image-undo-group-start image)
+
+ ;(gimp-selection-all the-image)
+
+ (set! the-layer (car (gimp-image-flatten image)))
+
+ (if (= crossing TRUE)
+ (cross image image-width image-height))
+ ;(if (= grain TRUE)
+ ; (gimp-noise-hurl drawable 1 0.02))
+ (if (= contrast-colors TRUE)
+ ; Zmniejsz kontrast i dodaj kolor
+ (gimp-drawable-brightness-contrast the-layer -0.078125 -0.15625)
+ (gimp-drawable-color-balance the-layer TRANSFER-SHADOWS TRUE balance-color 0 -30))
+
+ ;(gimp-selection-none the-tmage)
+
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+) )
+
+(define (cross image width height)
+ ; crossing photo
+ ;(gimp-drawable-curves-spline layer1 HISTOGRAM-VALUE (spline-chrome-it))
+ (let* ((layer (gimp-layer-new image "Cross" width height RGB-IMAGE 100 LAYER-MODE-NORMAL))
+
+ (set! layer (gimp-image-merge-visible-layers image CLIP-TO-IMAGE))
+
+ (gimp-drawable-curves-spline layer HISTOGRAM-VALUE 10 #(0 0 64 90 128 160 192 230 255 255))
+ (gimp-drawable-curves-spline layer HISTOGRAM-RED 10 #(0 0 64 50 128 180 192 230 255 255))
+ (gimp-drawable-curves-spline layer HISTOGRAM-GREEN 10 #(0 0 64 80 128 120 192 200 255 255))
+ (gimp-drawable-curves-spline layer HISTOGRAM-BLUE 10 #(0 0 64 30 128 150 192 220 255 255))
+ ; lub
+ ;(define value #(0 0 64 90 128 160 192 230 255 255))
+ ;(gimp-drawable-curves-spline drawable HISTOGRAM-VALUE 10 value)
+ ))
+)
+
+(script-fu-register-filter "przem-traditional-photo-v3"
+ _"_Convert photographs to neotraditional"
+ _"Konwertuje na neotradycyjną fotografię"
+ "Przemyslaw R. Pietraszczyk"
+ "Public Domain"
+ "2025-02-15"
+ "RGB*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-TOGGLE _"Crossing" FALSE
+ SF-TOGGLE _"Contrast and Color corection" TRUE
+ ;SF-ADJUSTMENT _"Contrast" (list -0.15625 -1 1 0.00010 0.00100 0 0) ; źle działa dodanie jako parametru
+ SF-ADJUSTMENT _"Balance Color" (list -30 -100 100 1 1 0 0)
+)
+
+(script-fu-menu-register "przem-traditional-photo-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-true-cyjanotype-v32.scm b/script-fu/3.2/przem-true-cyjanotype-v32.scm
new file mode 100644
index 0000000..c67476f
--- /dev/null
+++ b/script-fu/3.2/przem-true-cyjanotype-v32.scm
@@ -0,0 +1,99 @@
+; przem-true-cyjantype-v3 - imituje efekt prawdziwej cyjanotypii
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 14-10-2025
+; ver. 2.251104-1
+
+(define (przem-true-cyjantype-v3 image drawable black normalize value-blue invert replace tone-curve)
+ (let* ((gradient-layer 0)
+ (type-layer (vector-ref drawable 0))
+ (mask (car (gimp-channel-new image "Engraving Mask" (car (gimp-image-get-width image)) (car (gimp-image-get-height image)) black '(0.4 0.4 0.2 0.0 0.0 0.0 0.0 0.0 0.0))))
+ (layer (vector-ref drawable 0))
+ (type (car (gimp-drawable-type layer)))
+ (gradient-reverse FALSE)
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start image)
+
+ ;; jeśli obraz jest szary to konwertuje go na RGB - tak na sztukę
+ (if (> (car (gimp-drawable-type type-layer)) 1)
+ (gimp-image-convert-rgb image))
+
+ ; Konwersja obrazu do skali szarości
+ (if (= type RGB-IMAGE)
+ (gimp-drawable-desaturate type-layer DESATURATE-LIGHTNESS)
+ )
+
+
+ ; dla obrazów przestrzeni RGB i Gray, utworzenie nowej warstwy, dopiero po kowersji na rgb
+ (set! gradient-layer (car (gimp-layer-new image "Prussian Blue" (car (gimp-image-get-width image)) (car (gimp-image-get-height image)) RGBA-IMAGE 100 LAYER-MODE-NORMAL)))
+
+ (gimp-context-set-foreground '(0 51 102)) ; Kolor błękitu pruskiego
+ (gimp-context-set-background '(0 0 0))
+
+ (gimp-image-insert-channel image mask -1 0)
+
+
+ (gimp-image-insert-layer image gradient-layer 0 -1)
+
+ (gimp-context-set-gradient-reverse gradient-reverse)
+ (gimp-drawable-edit-gradient-fill gradient-layer
+ GRADIENT-LINEAR 0
+ FALSE 1 0
+ TRUE
+ 0 0 0 0)
+ (gimp-layer-set-opacity gradient-layer value-blue)
+
+ ; w przeciwieństwie do wer. 2.10 krzywe tonalne działają inaczej
+ (if (= tone-curve TRUE)
+ (let* ((curves-layer (car (gimp-layer-copy gradient-layer TRUE)))
+ ;(gimp-drawable-curves-spline curves-layer HISTOGRAM-VALUE 10 #(0 0 32 40 128 140 220 230 255 255))
+ ; nie trzeba już deklarować długości vektora
+ (gimp-drawable-curves-spline curves-layer HISTOGRAM-VALUE #(0 0 (/ 32 255) (/ 40 255) (/ 128 255) (/ 140 255) (/ 220 255) (/ 230 255) (/ 255 255) (/ 255 255)))
+ )
+ (gimp-image-insert-layer image curves-layer 0 -1)
+ (gimp-item-set-visible curves-layer TRUE)
+ ))
+
+ (if (= invert TRUE)
+ (gimp-drawable-invert type-layer FALSE))
+
+ ;(if (= replace TRUE)
+ ; ; Wybierz tylko czarne piksele
+ ; (gimp-image-select-color image CHANNEL-OP-REPLACE drawable '(0 0 0))
+
+ ; ; Wypełnij wybrane obszary kolorem granatowym
+ ; (gimp-context-set-foreground '(0 0 128)) ; RGB dla granatowego
+ ; (gimp-edit-bucket-fill drawable BUCKET-FILL-FG LAYER-MODE-NORMAL 100 0 FALSE 0 0)
+ ; ; Odznacz selekcję
+ ; (gimp-selection-none image))
+
+ (let* ((merged-layer (car (gimp-image-merge-visible-layers image CLIP-TO-IMAGE))))
+ (gimp-item-set-visible merged-layer TRUE))
+
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-true-cyjantype-v3"
+ _"Apply true cyjanotype effect"
+ _"Pseudo-prawdziwa próba imitacji cyjanotypii"
+ "Przemysław R. Pietraszczyk"
+ "Public Domain"
+ "2025-09-21"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-ADJUSTMENT "Black" '(5 0 100 1 10 0 0)
+ SF-TOGGLE "Normalize to 100%" TRUE
+ SF-ADJUSTMENT "Blue intensity" '(50 0 100 1 10 0 0)
+ SF-TOGGLE "Invert colors" FALSE
+ SF-TOGGLE "Replace black" FALSE
+ SF-TOGGLE "Tone Curve" TRUE
+
+)
+
+(script-fu-menu-register "przem-true-cyjantype-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/3.2/przem-wet-collodion-v32.scm b/script-fu/3.2/przem-wet-collodion-v32.scm
new file mode 100644
index 0000000..c757042
--- /dev/null
+++ b/script-fu/3.2/przem-wet-collodion-v32.scm
@@ -0,0 +1,151 @@
+; przem-wet-collodion-v3 - imituje efekt mokrego kolodionu
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 24-08-2025
+; ver. 2.250824-1~beta
+
+(define (add-hsv-noise img drawable intensity-h intensity-s intensity-v grain)
+ (let* (
+ (width (car (gimp-image-get-width img)))
+ (height (car (gimp-image-get-height img)))
+ (noise-layer (car (gimp-layer-new img "Noise" width height RGB-IMAGE 100 LAYER-MODE-NORMAL)))
+ )
+
+ ; Konwertuj do HSV jeśli to konieczne
+ ;(if (not (= (car (gimp-drawable-is-rgb drawable)) 1))
+ ; (gimp-image-convert-rgb img))
+
+ (gimp-image-insert-layer img noise-layer 0 -1)
+ (gimp-drawable-fill noise-layer FILL-TRANSPARENT)
+
+ ; Generuj szum
+ ;(plug-in-solid-noise RUN-NONINTERACTIVE img noise-layer 0 0 (random 1000) 0 4 4)
+ (let* ((noise-width (cadddr (gimp-drawable-mask-intersect noise-layer)))
+ (noise-height (caddr (cddr (gimp-drawable-mask-intersect noise-layer)))))
+
+ (gimp-drawable-merge-new-filter noise-layer "gegl:noise-solid" 0 LAYER-MODE-REPLACE 1.0 "tileable" FALSE "turbulent" FALSE "seed" 0
+ "detail" 1 "x-size" 4.0 "y-size" 4.0
+ "width" noise-width "height"noise-height))
+
+
+
+ ; Ustaw odpowiednie intensywności dla każdego kanału HSV
+ (let* (
+ (h-channel (car (gimp-layer-new img "H Channel" width height RGB-IMAGE 100 LAYER-MODE-HSV-HUE)))
+ (s-channel (car (gimp-layer-new img "S Channel" width height RGB-IMAGE 100 LAYER-MODE-HSV-SATURATION)))
+ (v-channel (car (gimp-layer-new img "V Channel" width height RGB-IMAGE 100 LAYER-MODE-HSV-VALUE))))
+
+ ; Dodaj kanały
+ (gimp-image-insert-layer img h-channel 0 -1)
+ (gimp-image-insert-layer img s-channel 0 -1)
+ (gimp-image-insert-layer img v-channel 0 -1)
+
+ ; Skopiuj szum do każdego kanału
+ (gimp-edit-copy (vector noise-layer))
+ ; czy to potrzebne ?
+ (gimp-edit-copy (vector drawable))
+ (let* (
+ (pasted (car (gimp-edit-paste h-channel TRUE)))
+ (num-pasted (vector-length pasted))
+ (floating-sel (vector-ref pasted (- num-pasted 1)))
+ )
+ (gimp-layer-set-offsets floating-sel 0 0)
+ (gimp-floating-sel-anchor floating-sel))
+
+ (gimp-edit-copy (vector drawable))
+ (let* (
+ (pasted (car (gimp-edit-paste s-channel TRUE)))
+ (num-pasted (vector-length pasted))
+ (floating-sel (vector-ref pasted (- num-pasted 1)))
+ )
+ (gimp-layer-set-offsets floating-sel 0 0)
+ (gimp-floating-sel-anchor floating-sel))
+
+
+ (gimp-edit-copy (vector drawable))
+ (let* (
+ (pasted (car (gimp-edit-paste v-channel TRUE)))
+ (num-pasted (vector-length pasted))
+ (floating-sel (vector-ref pasted (- num-pasted 1)))
+ )
+ (gimp-layer-set-offsets floating-sel 0 0)
+ (gimp-floating-sel-anchor floating-sel))
+
+ (gimp-layer-set-opacity noise-layer 0)
+
+ ; Ustaw przezroczystość dla każdego kanału
+ (gimp-layer-set-opacity h-channel intensity-h)
+ (gimp-layer-set-opacity s-channel intensity-s)
+ (gimp-layer-set-opacity v-channel intensity-v)
+
+ ; Połącz kanały z oryginalnym obrazem
+ (gimp-image-merge-down img h-channel EXPAND-AS-NECESSARY)
+ (gimp-image-merge-down img s-channel EXPAND-AS-NECESSARY)
+ (gimp-image-merge-down img v-channel EXPAND-AS-NECESSARY)
+
+
+ )
+ ;(gimp-image-remove-layer img noise-layer)
+ )
+)
+
+
+
+
+(define (przem-wet-collodion-v3 image drawable mode intensity-h intensity-s intensity-v grain blur)
+ (let* (
+ (layer (vector-ref drawable 0))
+ (type (car (gimp-drawable-type-with-alpha layer)))
+ (width (car (gimp-image-get-width image)))
+ (height (car (gimp-image-get-height image)))
+ (mode-blur 0)
+ )
+ (gimp-context-push)
+ (gimp-image-undo-group-start image)
+
+ ;; Desaturacja
+ (if (= type RGBA-IMAGE)
+ (gimp-drawable-desaturate layer DESATURATE-LIGHTNESS))
+
+ ;; Dodanie winiety
+ (let* ((w-layer (car (gimp-layer-copy layer TRUE))))
+ (gimp-image-insert-layer image w-layer 0 -1)
+ (gimp-drawable-merge-new-filter w-layer "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 1.0 "std-dev-x" 200 "std-dev-y" 200 "filter" "auto")
+ (gimp-layer-set-mode w-layer LAYER-MODE-MULTIPLY)
+ (gimp-layer-set-opacity w-layer 60)
+ )
+
+ ;; Dodanie szumu
+ (add-hsv-noise image layer intensity-h intensity-s intensity-v grain)
+ ;;(plug-in-noisify RUN-NONINTERACTIVE image layer FALSE grain grain grain 0)
+
+ ;; Dodanie lekkiego rozmycia
+ (if (= mode 0) (begin (set! mode-blur "auto")))
+ (if (= mode 1) (begin (set! mode-blur "iir")))
+ (if (= mode 2) (begin (set! mode-blur "fir")))
+ (gimp-drawable-merge-new-filter layer "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 1.0 "std-dev-x" blur "std-dev-y" blur "filter" mode-blur)
+
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ (gimp-context-pop)
+ )
+)
+
+(script-fu-register-filter "przem-wet-collodion-v3"
+ _"Wet Collodion"
+ _"Imituje efekt mokrego kolodionu"
+ "PRP"
+ "Public Domain"
+ "2025-07-15"
+ "RGB* GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+ SF-OPTION "Mode" '("AUTO" "IIR" "FIR")
+ SF-ADJUSTMENT "Hue Noise Intensity" '(30 0 100 1 10 0 0)
+ SF-ADJUSTMENT "Saturation Noise Intensity" '(20 0 100 1 10 0 0)
+ SF-ADJUSTMENT "Value Noise Intensity" '(15 0 100 1 10 0 0)
+ SF-ADJUSTMENT "Grain" '(0.2 0 1 0.1 0.1 2 0)
+ SF-ADJUSTMENT "Blur" '(2 0 100 1 10 0 0)
+)
+
+(script-fu-menu-register "przem-wet-collodion-v3"
+ "<Image>/Filters/PIETRASZCZYK/")
diff --git a/script-fu/changelog.md b/script-fu/changelog.md
index 2f4a0d7..f15ef41 100644
--- a/script-fu/changelog.md
+++ b/script-fu/changelog.md
@@ -1,3 +1,6 @@
+# [2.260421-0] REpzytorium dla 3.2
+* Init
+
# [2.260409-0] przem-teal-portrait-look-v3
* Nakłada samą warstwę MULTIPLE bez gegl:noise