(define (CleanUpScan filename)
	;(string-append (filename) "-gimp")
  (let* (   
			(img (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
            (nroflayers 0)
            (layers '())
            (height (car (gimp-image-height img)))
			(width (car (gimp-image-width img)))
            (index1 0)
			(y 0)
            (isCurrentLayerVisible #f)

        )
	; get layer names (in an array)
	 (set! layers (cadr (gimp-image-get-layers img)))
    (gimp-context-push)
    ;BEGIN
      (gimp-desaturate-full (aref layers 0) DESATURATE-LUMINOSITY)
	  (gimp-brightness-contrast (aref layers 0) 0 6)
	  ;farbton/helligkeit;sättigung
	  (gimp-hue-saturation (aref layers 0) ALL-HUES 0 5 0)
	  ;get layer names (in an array)
	  (set! layers (cadr (gimp-image-get-layers img)))
	  ;(set! height (gimp-image-height img))
	  ;(set! width (gimp-image-width img))
	  ;dupe layer
		(let* 
				(
				  (bl-layer (car (gimp-layer-copy (aref layers 0) TRUE)))
				)
				 
				(gimp-image-insert-layer img bl-layer 0 0)
				;(gimp-item-set-name bl-layer bl-layer-name)
				(gimp-item-set-visible bl-layer TRUE)
				(gimp-layer-set-lock-alpha bl-layer TRUE)
				(gimp-layer-add-alpha bl-layer)
			  )
		
	  ; get layer names (in an array)
	  (set! layers (cadr (gimp-image-get-layers img)))
	  ;threshold
	  (gimp-threshold (aref layers 0) 64 211)
	  ;invert content of drawable
	  (gimp-invert (aref layers 0))
	  ;color to alpha
	  (plug-in-colortoalpha RUN-NONINTERACTIVE img (aref layers 0) '(0 0 0))
	  ;farbton/helligkeit/sättigung
	  (gimp-hue-saturation (aref layers 1) ALL-HUES 0 -35 100)
	  (gimp-desaturate-full (aref layers 0) DESATURATE-LIGHTNESS)
	  ;despeckle/flecken entfernen 4th variable: 1=ADAPTIVE
	  (plug-in-despeckle RUN-NONINTERACTIVE img (aref layers 1) 15 1 33 250)
	  ;sharpen
	  (plug-in-sharpen RUN-NONINTERACTIVE img (aref layers 1) 54)
	  (gimp-desaturate-full (aref layers 1) DESATURATE-AVERAGE)
	  ;merge layers
	  (gimp-image-merge-down img (aref layers 0) CLIP-TO-IMAGE)
	  ;end of primary operations
	  ;_________________________________________
	  ;begin of advanced cleanup operations
	  ;_________________________________________
	  ;get layer names (in an array)
	  (set! layers (cadr (gimp-image-get-layers img)))
	  ;duplicate layer
	  (let* 
				(
				  (bl-layer (car (gimp-layer-copy (aref layers 0) TRUE)))
				)
				 
				(gimp-image-insert-layer img bl-layer 0 0)
				;(gimp-item-set-name bl-layer bl-layer-name)
				(gimp-item-set-visible bl-layer TRUE)
				(gimp-layer-set-lock-alpha bl-layer TRUE)
				(gimp-layer-add-alpha bl-layer)
			  )
	  ;threshold
	  (gimp-threshold (aref layers 0) 87 249)
	  ;invert
	  (gimp-invert (aref layers 0))
	  ;new white layer: 0/1=RGB/RGBA 100=opacity 0=normal mode ) 0=postion
	  (let* 
				(
				  (bl-layer (car (gimp-layer-copy (car (gimp-layer-new img width height 0 "whitelayer2" 100 0)) TRUE)))
				)
				(gimp-image-insert-layer img bl-layer 0 0)
				;;(gimp-item-set-name bl-layer bl-layer-name)
				(gimp-item-set-visible bl-layer TRUE)
				(gimp-layer-set-lock-alpha bl-layer TRUE)
				(gimp-layer-add-alpha bl-layer)
			  )
		  ;color layer white
			;get layer names (in an array)
			(set! layers (cadr (gimp-image-get-layers img)))
		  (gimp-bucket-fill (aref layers 0) 1 0 100 0 FALSE 1 1)
		;dupe whilte layer
		(let* 
				(
				  (bl-layer (car (gimp-layer-copy (aref layers 0) TRUE)))
				)
				 
				(gimp-image-insert-layer img bl-layer 0 0)
				;(gimp-item-set-name bl-layer bl-layer-name)
				(gimp-item-set-visible bl-layer TRUE)
				(gimp-layer-set-lock-alpha bl-layer TRUE)
				(gimp-layer-add-alpha bl-layer)
			  )
		;get layer names (in an array)
		(set! layers (cadr (gimp-image-get-layers img)))
		;move second layer to bottom
		(gimp-image-lower-item-to-bottom img (aref layers 0))
		;get layer names (in an array)
		(set! layers (cadr (gimp-image-get-layers img)))
		;TRANSPARENCY
		;color to alpha
	  (plug-in-colortoalpha RUN-NONINTERACTIVE img (aref layers 2) '(255 255 255))
	  ;add transparancy to selection: 0=OP-ADD
	  (gimp-image-select-item img 0 (aref layers 2))
	  ;shrink selecktion by 1 px for 300 dpi |2px for 600dpi
	  (gimp-selection-shrink img 2)
	  ;grow selection by 50 px | 45 px more agressive
	  (gimp-selection-grow img 50)
	  ;sharpen selection x2
	  (gimp-selection-sharpen img)
	  (gimp-selection-sharpen img)
	  ;clear selected area of drawable x5
	  (set! y 0)
	  (while (< y 5)
	  (gimp-edit-clear (aref layers 0))
	  (set! y (+ y 1)))
	  ;select all
	  (gimp-selection-all img)
	  ;[increase contrast]reduce opacity of gray color layer to let black high contrast shine trough
	  (gimp-layer-set-opacity (aref layers 1) 53.6)
	  ;merge visible layers 0=EXPAND-AS-NECESSARY
	  (gimp-image-merge-visible-layers img 0)
	  ;get layer names (in an array)
	  (set! layers (cadr (gimp-image-get-layers img)))
	  ;sharpen 41 | 1=RUN-NONINTERACTIVE
	  (plug-in-sharpen 1 img (aref layers 0) 41)
	  ;_________________________________________
	  ;Anti-Aliasing Filter
	  ;_________________________________________
	    ;duplicate layer
	    (let* 
				(
				  (bl-layer (car (gimp-layer-copy (aref layers 0) TRUE)))
				)
				 
				(gimp-image-insert-layer img bl-layer 0 0)
				;(gimp-item-set-name bl-layer bl-layer-name)
				(gimp-item-set-visible bl-layer TRUE)
				(gimp-layer-set-lock-alpha bl-layer TRUE)
				(gimp-layer-add-alpha bl-layer)
			  )
	  ;get layer names (in an array)
	  (set! layers (cadr (gimp-image-get-layers img)))
	  ;AA x3 front layer
	  (set! y 0)
	  (while (< y 3)
	  (plug-in-antialias 1 img (aref layers 0))
	  (set! y (+ y 1)))
	  ;AA x1 back layer
	  ;(plug-in-antialias 1 img (aref layers 1))
	  ;50% opacity front layer
	  (gimp-layer-set-opacity (aref layers 0) 50)
	  ;merge layers
	  (gimp-image-merge-visible-layers img 0)
	  ;save image -> export as png
		;get layer names (in an array)
	    (set! layers (cadr (gimp-image-get-layers img)))
	  (file-png-save2 0 img (aref layers 0) filename filename 0 9 1 0 0 1 0 0 1)
    ;END
	  

    ; refresh display
    (gimp-displays-flush)

    (gimp-context-pop)))

(script-fu-register "CleanUpScan"
                    _"_CleanUpScan..."
                    "Improve 600dpi scans -> 300 dpi"
                    "ango"
                    "ango"
                    "2017"
                    ""
                    SF-IMAGE        "Image"                 0
                    )


(script-fu-menu-register "CleanUpScan"
			 _"<Toolbox>/Xtns/ango")
