Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Photobooth "look" - python script
#1
Python 
Hello
I asked Gemini GPT about how to replicate a colour chemical photobooth look in GIMP. Gemini explained the photobooth history, different lenses and chemical approaches and eventually wrote me a python script that creates the look.
Of course, the python script looks the part to an neophyte such as myself, but does not work either in python3 or Gimp python or as a filter. It does not show in GEGL either.
(I have yet to get a GPT sourced python script that works off the bat, so dev still have a career in front of them).
The funny thing is, the every time I ask the GPT to correct the script, it finds an "error" to correct, but none of these corrections ever make the code work.
The primary issue is that when I run the script in fu-script, I get loads of indentation error! Python indentation drives me crazy.
Therefore ... Does anyone know if there is a working "photobooth" GIMP script?
Can anyone help me debug this script for GIMP 3 linux  please ?
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
import gi
import datetime

try:
   gi.require_version('Gimp', '3.0')
   gi.require_version('Gegl', '0.4')
   from gi.repository import Gimp, Gegl, GObject, GLib
except ValueError, e:
   sys.exit(1)


def apply_schneider_look(image, drawable):
   """Applies optical and chemical effects."""

   pdb = Gimp.get_pdb()

   # 1. Mirror

   drawable.transform_flip_simple(Gimp.OrientationType.HORIZONTAL,
                                  True, 0)

   # 2. Schneider Optical Effects
   # We use Gimp.ValueArray.new(count) for GIMP 3 compatibility

   dist_args = Gimp.ValueArray.new(3)
   dist_args.insert(0, GObject.Value(Gimp.Drawable, drawable))
   dist_args.insert(1, GObject.Value(GObject.TYPE_STRING,
                    'gegl:lens-distortion'))
   pdb.run_procedure('gimp-drawable-edit-gegl-config', dist_args)

   bloom_args = Gimp.ValueArray.new(3)
   bloom_args.insert(0, GObject.Value(Gimp.Drawable, drawable))
   bloom_args.insert(1, GObject.Value(GObject.TYPE_STRING, 'gegl:bloom'
                     ))
   pdb.run_procedure('gimp-drawable-edit-gegl-config', bloom_args)

   # 3. Chemical Color Shift

   cb_args = Gimp.ValueArray.new(11)
   cb_args.insert(0, GObject.Value(Gimp.Drawable, drawable))
   cb_args.insert(1, GObject.Value(GObject.TYPE_DOUBLE, -0.15))
   cb_args.insert(2, GObject.Value(GObject.TYPE_DOUBLE, 0.0))
   cb_args.insert(3, GObject.Value(GObject.TYPE_DOUBLE, 0.10))
   cb_args.insert(4, GObject.Value(GObject.TYPE_DOUBLE, 0.0))
   cb_args.insert(5, GObject.Value(GObject.TYPE_DOUBLE, 0.0))
   cb_args.insert(6, GObject.Value(GObject.TYPE_DOUBLE, 0.0))
   cb_args.insert(7, GObject.Value(GObject.TYPE_DOUBLE, 0.10))
   cb_args.insert(8, GObject.Value(GObject.TYPE_DOUBLE, 0.0))
   cb_args.insert(9, GObject.Value(GObject.TYPE_DOUBLE, -0.25))
   cb_args.insert(10, GObject.Value(GObject.TYPE_BOOLEAN, True))
   pdb.run_procedure('gimp-drawable-color-balance', cb_args)

   # 4. Silver Halide Grain

   grain_args = Gimp.ValueArray.new(3)
   grain_args.insert(0, GObject.Value(Gimp.Drawable, drawable))
   grain_args.insert(1, GObject.Value(GObject.TYPE_STRING,
                     'gegl:noise-rgb'))
   pdb.run_procedure('gimp-drawable-edit-gegl-config', grain_args)


def photobooth_main_proc(
   procedure,
   run_mode,
   image,
   drawables,
   args,
   data,
   ):
   Gimp.context_push()
   image.undo_group_start()

   # Constants

   (STRIP_W, STRIP_H) = (600, 1800)
   (MARGIN, FRAME_H) = (40, 400)

   new_image = Gimp.Image.new(STRIP_W, STRIP_H, Gimp.ImageBaseType.RGB)

   bg_color = Gimp.RGB()
   bg_color.set_parse('#F9F7F2')
   bg_layer = Gimp.Layer.new(
       new_image,
       'Paper Base',
       STRIP_W,
       STRIP_H,
       Gimp.Precision.U8_GAMMA,
       100,
       Gimp.LayerMode.NORMAL,
       )
   new_image.insert_layer(bg_layer, None, 0)
   Gimp.context_set_background(bg_color)
   bg_layer.fill(Gimp.FillType.BACKGROUND)

   y_offset = MARGIN
   for i in range(min(len(drawables), 4)):
       source_layer = drawables[i]
       new_frame = Gimp.Layer.new_from_drawable(source_layer,
               new_image)
       new_image.insert_layer(new_frame, None, -1)

       apply_schneider_look(new_image, new_frame)

       target_w = STRIP_W - MARGIN * 2
       scale_ratio = target_w / new_frame.get_width()
       new_frame.scale(target_w, int(new_frame.get_height()
                       * scale_ratio), True)
       new_frame.set_offsets(MARGIN, y_offset)
       y_offset += FRAME_H + 15

   # Mechanical Date Stamp

   stamp_color = Gimp.RGB()
   stamp_color.set_parse('#B22222')
   Gimp.context_set_foreground(stamp_color)
   date_str = datetime.datetime.now().strftime('PHOTO-ME - %d %b %Y'
           ).upper()

   # Text Layer logic for GIMP 3

   stamp_layer = Gimp.text_fontname(
       new_image,
       None,
       0,
       0,
       date_str,
       0,
       True,
       18,
       'Sans-Serif',
       )
   if stamp_layer:
       stamp_layer.transform_rotate_simple(Gimp.OrientationType.VERTICAL,
               True, 0, 0)
       stamp_layer.set_offsets(STRIP_W - 35, STRIP_H - 450)
       stamp_layer.set_opacity(70)

   Gimp.Display.new(new_image)
   image.undo_group_end()
   Gimp.context_pop()
   Gimp.displays_flush()

   return procedure.new_return_values(Gimp.PDBStatusType.SUCCESS,
           GLib.Error())


class PhotoboothPro(Gimp.PlugIn):

   def do_query_procedures(self):
       return ['python-fu-photobooth-pro']

   def do_create_procedure(self, name):
       procedure = Gimp.ImageProcedure.new(self, name,
               Gimp.PDBProcType.PLUGIN, photobooth_main_proc, None)
       procedure.set_image_types('RGB*')
       procedure.set_documentation('Schneider Photobooth Pro',
                                   'Full analog strip recreation',
                                   name)
       procedure.set_menu_label('Schneider Photobooth Pro...')
       procedure.add_menu_path('<Image>/Filters/Artistic')
       procedure.set_attribution('Gemini', 'Gemini', '2026')
       return procedure


Gimp.main(PhotoboothPro.__gtype__, sys.argv)
Reply


Messages In This Thread
Photobooth "look" - python script - by chlowden007 - Yesterday, 07:42 AM

Forum Jump: