diff options
author | Przemysław R. Pietraszczyk <przem@prymula.ct8.pl> | 2025-07-11 14:46:26 +0200 |
---|---|---|
committer | Przemysław R. Pietraszczyk <przem@prymula.ct8.pl> | 2025-07-11 14:46:26 +0200 |
commit | d3d2e0a76fcbff7c921202758d2ff881a5befffb (patch) | |
tree | 6d0319e4a0dd311834d1178a334d790cf81299e2 | |
parent | e8d42b19bc5892de59924d108687bb09069a251a (diff) |
Added przem-prussian-blue-effect-v3
-rwxr-xr-x | python-fu/3.0/przem-waved-cubism/przem-waved-cubism.py | 244 | ||||
-rw-r--r-- | script-fu/3.0/przem-apply-sepia-v3.scm | 2 | ||||
-rw-r--r-- | script-fu/3.0/przem-prussian-blue-effect-v3.scm | 71 | ||||
-rw-r--r-- | script-fu/changelog.md | 264 |
4 files changed, 451 insertions, 130 deletions
diff --git a/python-fu/3.0/przem-waved-cubism/przem-waved-cubism.py b/python-fu/3.0/przem-waved-cubism/przem-waved-cubism.py new file mode 100755 index 0000000..4a3070f --- /dev/null +++ b/python-fu/3.0/przem-waved-cubism/przem-waved-cubism.py @@ -0,0 +1,244 @@ +#!/usr/bin/env python3 +# przem-waved-cubism - filtr dodający efekt falowania obrazu +# 2025-03-04 © Przemysław R. Pietraszczyk +# licencja: Public Domain +# edytor: Geany +# ver. 2.250306-0~beta + +import gi +gi.require_version('Gimp', '3.0') +from gi.repository import Gimp +gi.require_version('GimpUi', '3.0') +from gi.repository import GimpUi +gi.require_version('Gegl', '0.4') +from gi.repository import Gegl +from gi.repository import GObject +from gi.repository import GLib +from gi.repository import Gio +import time +import sys +import math + +def N_(message): return message +def _(message): return GLib.dgettext(None, message) + +def sincos_func( data, sincos): + + h = True + angle1 = 0.1 + angle2 = 0.1 + width = len(data[0]) + height = len(data) + for y in range(0, height): + + for x in range(0, width): + mod1 = x % 25 + if mod1 == 0: + angle1 *= -1 + mod2 = x % 25 + if mod2 == 0: + if h == True: + angle1 = 0.1 + h = False + else: + angle1 = -0.1 + h = True + + if h == True: + angle1 += -0.1 + else: + angle1 += 0.1 + + + + + lineX = int(10*math.sin(angle1) + x) + lineY = int(10*math.sin(angle1) + y) + + print ("lineX: " + str(lineX) + " lineY: " + str(lineY)) + if lineX >= width: + continue + if lineY >= height: + continue + if lineX < 0: + continue + if lineY < 0: + continue + + #if x >= width: + # continue + #if y >= height: + # continue + ##else: + # print ("ZA: "+ str(x) + " " + str(y)) + #sincos[lineY][lineX] = (data[y][x][0], data[y][x][1], data[y][x][2]) + sincos[y][x] = (data[lineY][lineX][0], data[lineY][lineX][1], data[lineY][lineX][2]) +""" +def get_pixel_color(pixbuf, x, y): + # Pobierz szerokość i wysokość obrazu + width = pixbuf.get_width() + height = pixbuf.get_height() + + # Sprawdź, czy współrzędne są w granicach obrazu + if x < 0 or x >= width or y < 0 or y >= height: + raise ValueError("Współrzędne poza zakresem obrazu") + + # Pobierz dane pikseli + pixels = pixbuf.get_pixels() + rowstride = pixbuf.get_rowstride() + n_channels = pixbuf.get_n_channels() + + # Oblicz pozycję piksela w danych + offset = y * rowstride + x * n_channels + + + # Pobierz wartości kanałów koloru (R, G, B, A) + red = pixels[offset] + green = pixels[offset + 1] + blue = pixels[offset + 2] + alpha = pixels[offset + 3] if n_channels == 4 else 255 + + #return (red, green, blue, alpha) + return (red, green, blue) +""" + +def create_pixbuf_from_rgb_tuples(drawable, colors, width, height): + # Sprawdź, czy liczba kolorów odpowiada wymiarom obrazu + #if len(colors) != width * height: + # raise ValueError("Liczba kolorów musi być równa width * height") + + # Przekształć krotki RGB na dane pikseli + pixels = bytearray() + x = 0 + y = 0 + for row in colors: + for color in row: + r, g, b = color # Rozpakuj krotkę (R, G, B) + pixels.extend([r, g, b]) + + + # Ustawienie koloru pierwszego planu (np. czerwony) + #pdb.gimp_context_set_foreground((r, g, b)) + Gimp.context_set_foreground((r, g, b)) + + # Wybór pędzla (np. "Circle (11)") + #pdb.gimp_context_set_brush("Circle (01)") + Gimp.context_set_brush("Circle (01)") + + # Rysowanie linii od punktu (50, 50) do punktu (450, 450) + #pdb.gimp_paintbrush_default(drawable, 2, [x, y, x, y]) + Gimp.paintbrush_default(drawable, 2, [x, y, x, y]) + + x += 1 + x = 0 + y += 1 + + + + + + #return pixbuf + +def plugin_func(procedure, run_mode, image, drawable, config, data): + + width = image.width + height = image.height + #duplicate_image = pdb.gimp_image_duplicate(image) + #duplicate_drawable = pdb.gimp-image-get-active-drawable(duplicate_image) + + if run_mode == Gimp.RunMode.INTERACTIVE: + GimpUi.init('przem-waved-cubism') + + dialog = GimpUi.ProcedureDialog(procedure=procedure, config=config) + dialog.fill(None) + if not dialog.run(): + dialog.destroy() + return procedure.new_return_values(Gimp.PDBStatusType.CANCEL, GLib.Error()) + else: + dialog.destroy() + + color = config.get_property('color') + + + + # Dodaj skopiowany obraz do listy obrazów w GIMPie + #gimp.Display(duplicate_image) + + Gimp.context_push() + image.undo_group_start() + + #pdb.gimp-selection-none(duplicate_image) + #pdb.gimp-context-push() + #pdb.gimp-context-set-defaults() + grid = [] + for y in range (0, height): + pix_width = [] + for x in range (0, width): + #pix_width.append(get_pixel_color(duplicate_drawable, x, y)) + pix_width.append(drawable.get_pixel(x, y)) + grid.append(pix_width) + + sincos = [] + for y in range (0, height): + pix_width = [] + for x in range (0, width): + pix_width.append((0, 0, 0)) + sincos.append(pix_width) + + sincos_func(grid, sincos) + create_pixbuf_from_rgb_tuples(drawable, sincos, width, height) + + Gimp.displays_flush() + + image.undo_group_end() + Gimp.context_pop() + + + return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS, GLib.Error()) + + + +class WavedCubism (Gimp.PlugIn): + ## GimpPlugIn virtual methods ## + def do_set_i18n(self, procname): + return True, 'gimp30-python', None + + def do_query_procedures(self): + return ['przem-waved-cubism'] + + def do_create_procedure(self, name): + Gegl.init(None) + + _color = Gegl.Color.new("black") + _color.set_rgba(0.94, 0.71, 0.27, 1.0) + + procedure = Gimp.Procedure.new(self, name, + Gimp.PDBProcType.PLUGIN, + plugin_func, None) + + if procedure is not None: + + procedure.set_image_types("RGB*, GRAY*") + + + procedure.set_menu_label(_("Make waved cubism on image")) + procedure.set_documentation ('Make waved cubism on image', + 'Make waved cubism on image', + name) + + procedure.set_attribution("Przemysław R. Pietraszczyk", + "Public Domain", "2025-03-04") + + + #procedure.add_string_argument ("name", _("Layer _name"), _("Layer name"), + # _("Clouds"), GObject.ParamFlags.READWRITE) + + procedure.add_color_argument ("color", _("_BG color"), _("BG color"), + True, _color, GObject.ParamFlags.READWRITE) + + procedure.add_menu_path ("<Image>/Filters/PIETRASZCZYK") + + return procedure + +Gimp.main(WavedCubism.__gtype__, sys.argv) + diff --git a/script-fu/3.0/przem-apply-sepia-v3.scm b/script-fu/3.0/przem-apply-sepia-v3.scm index aa495b7..e820200 100644 --- a/script-fu/3.0/przem-apply-sepia-v3.scm +++ b/script-fu/3.0/przem-apply-sepia-v3.scm @@ -132,7 +132,7 @@ (gimp-displays-flush) ) ) -(script-fu-register-filter "przem-apply-sepia-v3" +(script-fu-register-filterscript-fu-register-filter "przem-apply-sepia-v3" _"_Apply a sepia effect to the image" _"Tworzy obraz sepii" "Przemyslaw R. Pietraszczyk" diff --git a/script-fu/3.0/przem-prussian-blue-effect-v3.scm b/script-fu/3.0/przem-prussian-blue-effect-v3.scm new file mode 100644 index 0000000..720e83b --- /dev/null +++ b/script-fu/3.0/przem-prussian-blue-effect-v3.scm @@ -0,0 +1,71 @@ +; 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.250711-0~beta + +(define (przem-prussian-blue-effect-v3 img drawable black value-blue brightness contrast) + + (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-image-undo-group-start img) + (gimp-context-push) + (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)) + ;(if (= mode 0) (gimp-layer-set-mode gradient-layer OVERLAY-MODE)) + ;(if (= mode 1) (gimp-layer-set-mode gradient-layer SCREEN-MODE)) + + (gimp-drawable-brightness-contrast gradient-layer brightness contrast) + + + ;(plug-in-colors-channel-mixer TRUE img gradient-layer TRUE 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0) + (gimp-image-insert-channel img mask -1 0) + + ;(gimp-edit-blend gradient-layer FG-BG-RGB-MODE NORMAL-MODE GRADIENT-LINEAR 100 0 REPEAT-NONE FALSE FALSE 0 0 TRUE 0 0 0 0) + + (gimp-drawable-edit-gradient-fill gradient-layer + GRADIENT-LINEAR 0 + 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-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) + +) + +(script-fu-menu-register "przem-prussian-blue-effect-v3" + "<Image>/Filters/PIETRASZCZYK/") diff --git a/script-fu/changelog.md b/script-fu/changelog.md index bca2d9e..1135ae7 100644 --- a/script-fu/changelog.md +++ b/script-fu/changelog.md @@ -1,129 +1,135 @@ -# [2.250622-0] przem-prossian-blue-effect.scm
-* Dodane filtra imitującego "pruski błękit"
-
-# [2.250619-3] przem-soft-focus-noninteractive-v3.scm
-* Dodanie filtra wywolywanego z linii poleceń - nie uruchamia się
-
-# [2.250618-0] przem-cyanotype-gum-effect.scm
-* Dodanie efektu zastosowania cyjanotypi wraz z gumą dwuchromianową\
-
-# [2.250616-0] przem-soft-focus-noninteractive.scm
-* Dodanie filtra wywolywanego z linii poleceń
-
-# [2.250615-0] przem-soft-focus.scm
-* Dodanie filtra "miękkiego focusa' - w nawiązaniu do piktorializmu
-
-# [2.250610-4] przem-expired-negative.scm
-* Konwersja z RGB na colorspace Gray
-
-# [2.250610-3] przem-expired-negative.scm
-* Dzielnik mgły, zwiększony do 0.50
-
-# [2.250610-2] przem-expired-negative.scm
-* Dodanie suwaka density
-
-# [2.250610-1] przem-expired-negative.scm
-* Przy odwolywaniu się do wspólnej funkcji gradientu - filtr dzialą nieprawidlowo
-* Możliwa zmiana odcieniu gradientu (background)
-
-# [2.250608-3] przem-expired-negative.scm
-* Dodaje efekt prawidłowo, zarówno na dole jak i na górze
-
-# [2.250608-2] przem-expired-negative.scm
-* Dodaje efekt expire ORWO do poziomego zdjęcia, jednak nie równomiernie
-
-# [2.250525-1] przem-expired-negative.scm
-* Rozróżnia rodzaj obrazu. Jednak prawidłowo przetwarza jedynie póki co portrety
-
-# [2.250522-4] przem-expired-negative.scm
-* Mgła jest prawidłowo rozmieszczana po przegach
-
-# [2.250522-0] przem-expired-negative.scm
-* Filtr imitujący przetermonowany negatyw ORWO - Inicjacja
-
-# [2.250225-2] przem-apply-waves-effect.scm
-* Filtr, działać, działa. Jednak wynik, trudno uzanć za falowanie.
-
-# [2.250225-1] przem-apply-waves-effect.scm
-* Pierwszy mały sukces
-
-# [2.250225-0] przem-apply-waves-effect.scm
-* Próba skopiowania barwy pixela
-
-# [2.250224-0] przem-apply-waves-effect.scm
-* Nowa propozycja z sincosinus
-
-# [2.250223-3] przem-apply-cents-effect.scm
-* Drobne literówki
-
-# [2.250223-2] przem-apply-cents-effect.scm
-* Dodanie nowego filtra - centkowanie
-
-# [2.250223-0] przem-apply-waves-effect.scm
-* Dodanie nowego filtra
-
-# [2.250222-0] przem-apply-sepia-v3.scm
-* Korekta w SF_OPTION
-
-# [2.250221-0] przem-apply-sepia-v3.scm
-* Dodanie potrójnego pola wyboru dla rodzaju gradientu.
-
-# [2.25021=20-0] przem-apply-sepia-v3.scm
-* Przeniesienie 'gimp-layer-new' do wewnątrz skryptu - desaturate dalej zwraca błąd przy zdjęciach monochromatycznych
-
-# [2.250219-1] przem-apply-sepia-v3.scm
-* Dodanie 'gimp-image-flatten', bez efektu
-
-# [2.250219-0] przem-apply-sepia-v3.scm
-* Dodanie suwaka z shadow-sepia użytego jako argument 'gimp-drawable-edit-gradient-fill'
-
-# [2.250217-0] przem-traditional-photo.scm && przem-traditional-photo-v3.scm
-* Zmniejszyłem skrajne parametry do -100 i 100 dla skali kontrastu i balansu koloru
-
-# [2.250216-3] przem-traditional-photo-v3.scm
-* Dodanie krosowania. Jednak można odnieść wrażenie że zmiana balans koloru nie daje żądnego efektu
-
-# [2.250216-2] przem-traditional-photo-v3.scm
-* Rezygnacja ze suwaka kontrastu na rzecz zmiennej ( -0.15625 )- możliwe że wersja dla 2.10 wykrzącza się przez zbyt wysoki argument dla kontrastu
-
-# [2.250216-1] przem-traditional-photo.scm
-* Kosmetyka danych suwaka
-
-# [2.250216-0] przem-traditional-photo.scm
-* Dodanie suwaka ze zmianą kontrastu oraz suwaka z balansem koloru
-
-# [2.250215-2] przem-traditional-photo.scm
-* dodanie nowego skryptu korsującego zdjęcie
-
-# [2.250215-1] przem-apply-sepia.scm - przem-add-background-under-text.scm
-* Oba skrypty pracują nieprawidłowo z obrazem w odcieniach szarości
-
-# [2.250215-0] przem-apply-sepia.scm
-* BUG ? Nie potrafi przekonwertować obrazka GRAY na RGB - w przypadku szarego obrazu nakłąda jedynie gradient, bez sepii
-
-# [1.250214-0] przem-apply-sepia.scm
-* Częściowe dostosowanie wtyczki do nowego API z RC2 - póki co przetwarza jedynie kolorowe obrazy
-
-# [1.250213-0] przem-apply-sepia.scm
-* Dodałem lepszy gradient, revers gradientu oraz kształt okręgu
-
-# [1.250212-0] przem-apply-sepia.scm
-* Opruje już jedynie na dwóch odcieniach sepii
-
-# [1.250212-0] przem-add-background-under-text.scm
-* Możliwość zmiany koloru tła i czcionki wewnątrz wtyczki, nie można zmienić czcionki. Potrafi się wykrzaczyć
-
-# [1.250910-0~alpha]
-* Wersja alpha 'przem-add-background-under-text.scm', pokazuje samo tło i w dodatku w złym miejscu
-
-# [1.250910-2]
-* Wersja stabilna 'przem-apply-sepia.scm' dla 3.0
-
-# [1.250209-1]
-* Wersja stabilna 'przem-add-background-under-text.scm' dla 2.10
-
-# [0.250207-0]
-* Incjacja skryptu 'przem-apply-sepia.scm'
-
-# [0.250206-0]
-* Incjacja skryptu 'przem-add-background-under-text.scm'
+# [2.250711-0] przem-prossian-blue-effect-v3.scm +* Dodałem łączenie warstw, więc można już dodać na przykład ramkę + +# [2.250710-0] przem-prossian-blue-effect-v3.scm +* Port filtra dla Gimpa 3.0 + +# [2.250622-0] przem-prossian-blue-effect.scm +* Dodane filtra imitującego "pruski błękit" + +# [2.250619-3] przem-soft-focus-noninteractive-v3.scm +* Dodanie filtra wywolywanego z linii poleceń - nie uruchamia się + +# [2.250618-0] przem-cyanotype-gum-effect.scm +* Dodanie efektu zastosowania cyjanotypi wraz z gumą dwuchromianową\ + +# [2.250616-0] przem-soft-focus-noninteractive.scm +* Dodanie filtra wywolywanego z linii poleceń + +# [2.250615-0] przem-soft-focus.scm +* Dodanie filtra "miękkiego focusa' - w nawiązaniu do piktorializmu + +# [2.250610-4] przem-expired-negative.scm +* Konwersja z RGB na colorspace Gray + +# [2.250610-3] przem-expired-negative.scm +* Dzielnik mgły, zwiększony do 0.50 + +# [2.250610-2] przem-expired-negative.scm +* Dodanie suwaka density + +# [2.250610-1] przem-expired-negative.scm +* Przy odwolywaniu się do wspólnej funkcji gradientu - filtr dzialą nieprawidlowo +* Możliwa zmiana odcieniu gradientu (background) + +# [2.250608-3] przem-expired-negative.scm +* Dodaje efekt prawidłowo, zarówno na dole jak i na górze + +# [2.250608-2] przem-expired-negative.scm +* Dodaje efekt expire ORWO do poziomego zdjęcia, jednak nie równomiernie + +# [2.250525-1] przem-expired-negative.scm +* Rozróżnia rodzaj obrazu. Jednak prawidłowo przetwarza jedynie póki co portrety + +# [2.250522-4] przem-expired-negative.scm +* Mgła jest prawidłowo rozmieszczana po przegach + +# [2.250522-0] przem-expired-negative.scm +* Filtr imitujący przetermonowany negatyw ORWO - Inicjacja + +# [2.250225-2] przem-apply-waves-effect.scm +* Filtr, działać, działa. Jednak wynik, trudno uzanć za falowanie. + +# [2.250225-1] przem-apply-waves-effect.scm +* Pierwszy mały sukces + +# [2.250225-0] przem-apply-waves-effect.scm +* Próba skopiowania barwy pixela + +# [2.250224-0] przem-apply-waves-effect.scm +* Nowa propozycja z sincosinus + +# [2.250223-3] przem-apply-cents-effect.scm +* Drobne literówki + +# [2.250223-2] przem-apply-cents-effect.scm +* Dodanie nowego filtra - centkowanie + +# [2.250223-0] przem-apply-waves-effect.scm +* Dodanie nowego filtra + +# [2.250222-0] przem-apply-sepia-v3.scm +* Korekta w SF_OPTION + +# [2.250221-0] przem-apply-sepia-v3.scm +* Dodanie potrójnego pola wyboru dla rodzaju gradientu. + +# [2.25021=20-0] przem-apply-sepia-v3.scm +* Przeniesienie 'gimp-layer-new' do wewnątrz skryptu - desaturate dalej zwraca błąd przy zdjęciach monochromatycznych + +# [2.250219-1] przem-apply-sepia-v3.scm +* Dodanie 'gimp-image-flatten', bez efektu + +# [2.250219-0] przem-apply-sepia-v3.scm +* Dodanie suwaka z shadow-sepia użytego jako argument 'gimp-drawable-edit-gradient-fill' + +# [2.250217-0] przem-traditional-photo.scm && przem-traditional-photo-v3.scm +* Zmniejszyłem skrajne parametry do -100 i 100 dla skali kontrastu i balansu koloru + +# [2.250216-3] przem-traditional-photo-v3.scm +* Dodanie krosowania. Jednak można odnieść wrażenie że zmiana balans koloru nie daje żądnego efektu + +# [2.250216-2] przem-traditional-photo-v3.scm +* Rezygnacja ze suwaka kontrastu na rzecz zmiennej ( -0.15625 )- możliwe że wersja dla 2.10 wykrzącza się przez zbyt wysoki argument dla kontrastu + +# [2.250216-1] przem-traditional-photo.scm +* Kosmetyka danych suwaka + +# [2.250216-0] przem-traditional-photo.scm +* Dodanie suwaka ze zmianą kontrastu oraz suwaka z balansem koloru + +# [2.250215-2] przem-traditional-photo.scm +* dodanie nowego skryptu korsującego zdjęcie + +# [2.250215-1] przem-apply-sepia.scm - przem-add-background-under-text.scm +* Oba skrypty pracują nieprawidłowo z obrazem w odcieniach szarości + +# [2.250215-0] przem-apply-sepia.scm +* BUG ? Nie potrafi przekonwertować obrazka GRAY na RGB - w przypadku szarego obrazu nakłąda jedynie gradient, bez sepii + +# [1.250214-0] przem-apply-sepia.scm +* Częściowe dostosowanie wtyczki do nowego API z RC2 - póki co przetwarza jedynie kolorowe obrazy + +# [1.250213-0] przem-apply-sepia.scm +* Dodałem lepszy gradient, revers gradientu oraz kształt okręgu + +# [1.250212-0] przem-apply-sepia.scm +* Opruje już jedynie na dwóch odcieniach sepii + +# [1.250212-0] przem-add-background-under-text.scm +* Możliwość zmiany koloru tła i czcionki wewnątrz wtyczki, nie można zmienić czcionki. Potrafi się wykrzaczyć + +# [1.250910-0~alpha] +* Wersja alpha 'przem-add-background-under-text.scm', pokazuje samo tło i w dodatku w złym miejscu + +# [1.250910-2] +* Wersja stabilna 'przem-apply-sepia.scm' dla 3.0 + +# [1.250209-1] +* Wersja stabilna 'przem-add-background-under-text.scm' dla 2.10 + +# [0.250207-0] +* Incjacja skryptu 'przem-apply-sepia.scm' + +# [0.250206-0] +* Incjacja skryptu 'przem-add-background-under-text.scm' |