summaryrefslogtreecommitdiff
path: root/script-fu
diff options
context:
space:
mode:
authorPrzemysław <przem@prymula.ct8.pl>2026-04-24 22:04:56 +0200
committerPrzemysław <przem@prymula.ct8.pl>2026-04-24 22:04:56 +0200
commit6ea8cfe1644bf6264b10ef4df890be2d037ec3cb (patch)
tree9f2d9dc7d9deb3810d92281d3afe7245e22200a8 /script-fu
parent1cb1f9bafb478de275afefae9d7f94d441650a84 (diff)
2.260424-1:przem-hitchcock-d400-film-effect.scm
Diffstat (limited to 'script-fu')
-rw-r--r--script-fu/3.0/przem-hitchcock-d400-film-effect-v3.scm236
-rw-r--r--script-fu/3.2/przem-wet-collodion-v32.scm8
-rw-r--r--script-fu/changelog.md3
3 files changed, 243 insertions, 4 deletions
diff --git a/script-fu/3.0/przem-hitchcock-d400-film-effect-v3.scm b/script-fu/3.0/przem-hitchcock-d400-film-effect-v3.scm
new file mode 100644
index 0000000..9d4bfe3
--- /dev/null
+++ b/script-fu/3.0/przem-hitchcock-d400-film-effect-v3.scm
@@ -0,0 +1,236 @@
+; Hitchcock D400 Film Effect – imitacja chińskiego filmu Hitchock D400
+; author: PRP
+; licencja: Public Domain
+; Gdańsk - 24-04-2026
+; ver. 2.260424-0
+
+
+(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-context-set-foreground '(128 128 128))
+ (gimp-context-set-background '(0 0 0))
+ (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 drawable)))
+ (noise-height (caddr (cddr (gimp-drawable-mask-intersect drawable)))))
+
+ (gimp-drawable-merge-new-filter noise-layer "gegl:noise-solid" 0 LAYER-MODE-REPLACE 1.0 "tileable" FALSE "turbulent" FALSE "seed" 0
+ "detail" grain "x-size" grain "y-size" grain
+ "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 70)
+
+ ; 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-merge-down img noise-layer EXPAND-AS-NECESSARY)
+
+
+
+ )
+ ;(gimp-image-remove-layer img noise-layer)
+ )
+)
+
+
+
+
+
+(define (przem-hitchcock-d400-film-effect-v3 image drawable)
+ (let* (
+ (film-grain-layer (vector-ref drawable 0))
+ (width (car (gimp-image-get-width image)))
+ (height (car (gimp-image-get-height image)))
+ (vignette-layer)
+ (color-grade-layer)
+ (original-drawable drawable)
+ )
+ ;; Start undo group
+ (gimp-image-undo-group-start image)
+
+ ;; ---------------------------------------------------------
+ ;; 1. WARSTWA ZIARNA KLISZY (Film Grain)
+ ;; ---------------------------------------------------------
+ ;(set! film-grain-layer (car (gimp-layer-new image "Film Grain" width height RGB-IMAGE 50 LAYER-MODE-NORMAL)))
+ ;(gimp-image-insert-layer image film-grain-layer 0 -1)
+ ;(gimp-context-set-foreground '(128 128 128))
+ ;(gimp-context-set-background '(0 0 0))
+ ;(gimp-drawable-fill film-grain-layer FILL-BACKGROUND)
+ ;(plug-in-hsv-noise RUN-NONINTERACTIVE image film-grain-layer 0 0 0 45)
+ (add-hsv-noise image film-grain-layer 35 40 50 0.45)
+
+ ; (plug-in-gauss-iir RUN-NONINTERACTIVE image film-grain-layer 0.8 1 1)
+ (gimp-drawable-merge-new-filter film-grain-layer "gegl:gaussian-blur" 0 LAYER-MODE-REPLACE 0.8 "std-dev-x" 1 "std-dev-y" 1 "filter" "iir")
+
+ (gimp-layer-set-mode film-grain-layer LAYER-MODE-MULTIPLY)
+
+ ;; ---------------------------------------------------------
+ ;; 2. WARSTWA WINIETOWANIA (Vignette)
+ ;; ---------------------------------------------------------
+ ;(set! vignette-layer (car (gimp-layer-new image width height RGBA-IMAGE "Vignette" 100 NORMAL-MODE)))
+ ;(gimp-image-insert-layer image vignette-layer 0 -1)
+ ;(gimp-drawable-fill vignette-layer TRANSPARENT-FILL)
+ ;(let* (
+ ; (selection (car (gimp-selection-ellipse image (/ width 4) (/ height 4) (/ width 2) (/ height 2) 0 0 0)))
+ ; (sel-bounds)
+ ; )
+ ; (gimp-selection-invert image)
+ ; (gimp-context-set-foreground '(0 0 0))
+ ; (gimp-edit-fill vignette-layer FOREGROUND-FILL)
+ ; (gimp-selection-none image)
+ ; (plug-in-gauss-iir RUN-NONINTERACTIVE image vignette-layer 40 1 1)
+ ; )
+ ; (gimp-layer-set-mode vignette-layer MULTIPLY-MODE)
+ ; (gimp-layer-set-opacity vignette-layer 60)
+
+ ;; ---------------------------------------------------------
+ ;; 3. WARSTWA KORYGUJĄCA KOLORY (Color Grading D400)
+ ;; ---------------------------------------------------------
+ ; (set! color-grade-layer (car (gimp-layer-new image width height RGBA-IMAGE "Color Grade D400" 100 NORMAL-MODE)))
+ ; (gimp-image-insert-layer image color-grade-layer 0 -1)
+ ; (gimp-drawable-fill color-grade-layer TRANSPARENT-FILL)
+
+ ;; Cienie – lekko zielonkawe (charakterystyczne dla D400)
+ ; (gimp-context-set-foreground '(40 70 50))
+ ; (gimp-edit-fill color-grade-layer FOREGROUND-FILL)
+ ; (gimp-layer-set-mode color-grade-layer COLOR-MODE)
+ ; (gimp-layer-set-opacity color-grade-layer 35)
+
+ ;; Światła – ciepłe, kremowe
+ ; (let* ((warm-lights (car (gimp-layer-new image width height RGBA-IMAGE "Warm Lights" 100 NORMAL-MODE))))
+ ; (gimp-image-insert-layer image warm-lights 0 -1)
+ ; (gimp-drawable-fill warm-lights TRANSPARENT-FILL)
+ ; (gimp-context-set-foreground '(255 240 220))
+ ; (gimp-edit-fill warm-lights FOREGROUND-FILL)
+ ; (gimp-layer-set-mode warm-lights SOFTLIGHT-MODE)
+ ; (gimp-layer-set-opacity warm-lights 25)
+ ;)
+
+ ;; ---------------------------------------------------------
+ ;; 4. REDUKCJA SATURACJI (Desaturation)
+ ;; ---------------------------------------------------------
+ ; (plug-in-colors-hue-sat RUN-NONINTERACTIVE image drawable 0 0 -20 0)
+
+ ;; ---------------------------------------------------------
+ ;; 5. DELIKATNY SOFT-FOCUS (Symulacja starego obiektywu)
+ ;; ---------------------------------------------------------
+ ; (let* ((soft-copy (car (gimp-layer-copy drawable TRUE))))
+ ; (gimp-image-insert-layer image soft-copy 0 -1)
+ ; (plug-in-gauss-iir RUN-NONINTERACTIVE image soft-copy 1.2 1 1)
+ ; (gimp-layer-set-mode soft-copy SCREEN-MODE)
+ ; (gimp-layer-set-opacity soft-copy 15)
+ ; )
+
+ ;; ---------------------------------------------------------
+ ;; 6. LEKKA WINIETA KOLOROWA (Chromatic Vignette)
+ ;; ---------------------------------------------------------
+ ;(let* ((chrom-vignette (car (gimp-layer-new image width height RGBA-IMAGE "Chromatic Vignette" 100 NORMAL-MODE))))
+ ; (gimp-image-insert-layer image chrom-vignette 0 -1)
+ ; (gimp-drawable-fill chrom-vignette TRANSPARENT-FILL)
+ ; (gimp-context-set-foreground '(0 0 0))
+ ; (gimp-edit-fill chrom-vignette FOREGROUND-FILL)
+ ; (gimp-layer-set-mask chrom-vignette (car (gimp-layer-create-mask chrom-vignette ADD-WHITE-TO-SELECTION)))
+ ; (gimp-layer-set-mode chrom-vignette MULTIPLY-MODE)
+ ; (gimp-layer-set-opacity chrom-vignette 20)
+ ; )
+
+ ;; ---------------------------------------------------------
+ ;; 7. DODATKOWE ZIARNO W CIENIACH (Shadow Grain Boost)
+ ;; ---------------------------------------------------------
+ ; (let* ((shadow-grain (car (gimp-layer-new image width height RGBA-IMAGE "Shadow Grain" 100 NORMAL-MODE))))
+ ; (gimp-image-insert-layer image shadow-grain 0 -1)
+ ; (gimp-drawable-fill shadow-grain TRANSPARENT-FILL)
+ ; (gimp-context-set-foreground '(30 30 30))
+ ; (gimp-edit-fill shadow-grain FOREGROUND-FILL)
+ ; (plug-in-hsv-noise RUN-NONINTERACTIVE image shadow-grain 0 0 0 60)
+ ; (gimp-layer-set-mode shadow-grain MULTIPLY-MODE)
+ ; (gimp-layer-set-opacity shadow-grain 25)
+ ; )
+
+ ;; Flatten image (opcjonalnie – można zostawić warstwy)
+ ;; (gimp-image-flatten image)
+
+ ;; End undo group
+ (gimp-image-undo-group-end image)
+ (gimp-displays-flush)
+ )
+)
+
+;; =============================================================
+;; REJESTRACJA SKRYPTU W MENU GIMP
+;; =============================================================
+
+(script-fu-register-filter "przem-hitchcock-d400-film-effect-v3"
+ "_Hitchcock D400 Film Effect..."
+ "Konwertuje kolorowe zdjęcie na efekt analogowej kliszy HITCHCOCK D400.\n\
+Efekt obejmuje: ziarno filmu, winietowanie, korekcję kolorów (zielone cienie,\n\
+ciepłe światła), redukcję saturacji, soft-focus oraz chromatic vignette."
+ "AI Assistant"
+ "PRP"
+ "2026"
+ "RGB*, GRAY*"
+ SF-ONE-OR-MORE-DRAWABLE
+)
+
+(script-fu-menu-register "przem-hitchcock-d400-film-effect-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
index c757042..1fa2ba3 100644
--- a/script-fu/3.2/przem-wet-collodion-v32.scm
+++ b/script-fu/3.2/przem-wet-collodion-v32.scm
@@ -20,10 +20,10 @@
; 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)))))
+ (let* ((noise-width (cadddr (gimp-drawable-mask-intersect drawable)))
+ (noise-height (caddr (cddr (gimp-drawable-mask-intersect drawable)))))
- (gimp-drawable-merge-new-filter noise-layer "gegl:noise-solid" 0 LAYER-MODE-REPLACE 1.0 "tileable" FALSE "turbulent" FALSE "seed" 0
+ (gimp-drawable-merge-new-filter noise-layer "gegl:noise-solid" 0 LAYER-MODE-REPLACE 1.0 "tileable" FALSE "turbulent" FALSE "seed" (random 100)
"detail" 1 "x-size" 4.0 "y-size" 4.0
"width" noise-width "height"noise-height))
@@ -71,7 +71,7 @@
(gimp-layer-set-offsets floating-sel 0 0)
(gimp-floating-sel-anchor floating-sel))
- (gimp-layer-set-opacity noise-layer 0)
+ (gimp-layer-set-opacity noise-layer 80)
; Ustaw przezroczystość dla każdego kanału
(gimp-layer-set-opacity h-channel intensity-h)
diff --git a/script-fu/changelog.md b/script-fu/changelog.md
index 3f57f14..846f648 100644
--- a/script-fu/changelog.md
+++ b/script-fu/changelog.md
@@ -1,3 +1,6 @@
+# [2.260424-1] przem-hitchcock-d400-film-effect.scm
+* Poprawka w nazwie filtra
+
# [2.260424-0] przem-hitchcock-d400-film-effect.scm
* Nowy filtr imitujący film Hitchcock d400 - alpha