Done. Replace your current script with the code below. Let me know if you come across any other problems. Thanks for the help everyone and sorry for the difficulties. Maybe I should leave GIMP alone.
Code:
; GIMP - The GNU Image Manipulation Program
; Copyright (C) 1995 Spencer Kimball and Peter Mattis
;
; 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 2 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, write to the Free Software
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;
;
;
; Create an animation like "lava or guts" with a kaleidoscope option.
;
; The script can be found on an open image in GIMP 2.4 under: Filters > Animation > Flowing Lava and Guts...
; Under GIMP 2.2, it can be found under: Filters > Animation > Animators > Flowing Lava and Guts...
; The animation may be saved with the gif-plug-in.
;
; The script lets you choose the image dimensions, number of frames in the animation
; the speed of the animation, the blend mode of the upper layer, whether or not
; you add the noise interactively (creates the lava) or let the script automatically do it
; for you and the lava color.
; Define the Function
(define (script-fu-flowing-lava-and-guts-anim img
drawable
inWidth
inHeight
counter
inSpeed
upperBlendOpt
middleBlendOpt
interactive
color
colorBlendOpt
wax
radius
veins
veinAmount
veinColor
veinThickness
kaleidoscope
)
; Declare the Variables
(let* (
(newImage nil)
(width (+ 10 inWidth))
(height (+ 10 inHeight))
(bottomLavaLayer nil)
(bottomLavaLayerCopy nil)
(middleLavaLayer nil)
(middleLavaLayerCopy nil)
(topLavaLayer nil)
(topLavaLayerCopy nil)
(upperBlendMode
(cond
(( equal? upperBlendOpt 0 ) ADDITION-MODE)
(( equal? upperBlendOpt 1 ) DIVIDE-MODE)
(( equal? upperBlendOpt 2 ) SCREEN-MODE)
(( equal? upperBlendOpt 3 ) OVERLAY-MODE)
(( equal? upperBlendOpt 4 ) DODGE-MODE)
(( equal? upperBlendOpt 5 ) BURN-MODE)
(( equal? upperBlendOpt 6 ) MULTIPLY-MODE)
(( equal? upperBlendOpt 7 ) SOFTLIGHT-MODE)
(( equal? upperBlendOpt 8 ) GRAIN-EXTRACT-MODE)
(( equal? upperBlendOpt 9 ) GRAIN-MERGE-MODE)
(( equal? upperBlendOpt 10 ) DIFFERENCE-MODE)
(( equal? upperBlendOpt 11 ) HARDLIGHT-MODE)
(( equal? upperBlendOpt 12 ) SUBTRACT-MODE)
(( equal? upperBlendOpt 13 ) DARKEN-ONLY-MODE)
(( equal? upperBlendOpt 14 ) LIGHTEN-ONLY-MODE)
)
)
(middleBlendMode
(cond
(( equal? middleBlendOpt 0 ) SOFTLIGHT-MODE)
(( equal? middleBlendOpt 1 ) DIVIDE-MODE)
(( equal? middleBlendOpt 2 ) SCREEN-MODE)
(( equal? middleBlendOpt 3 ) OVERLAY-MODE)
(( equal? middleBlendOpt 4 ) DODGE-MODE)
(( equal? middleBlendOpt 5 ) BURN-MODE)
(( equal? middleBlendOpt 6 ) HARDLIGHT-MODE)
(( equal? middleBlendOpt 7 ) MULTIPLY-MODE)
(( equal? middleBlendOpt 8 ) GRAIN-EXTRACT-MODE)
(( equal? middleBlendOpt 9 ) GRAIN-MERGE-MODE)
(( equal? middleBlendOpt 10 ) DIFFERENCE-MODE)
(( equal? middleBlendOpt 11 ) ADDITION-MODE)
(( equal? middleBlendOpt 12 ) SUBTRACT-MODE)
(( equal? middleBlendOpt 13 ) DARKEN-ONLY-MODE)
(( equal? middleBlendOpt 14 ) LIGHTEN-ONLY-MODE)
)
)
(colorBlend
(cond
(( equal? colorBlendOpt 0 ) OVERLAY-MODE)
(( equal? colorBlendOpt 1 ) DIVIDE-MODE)
(( equal? colorBlendOpt 2 ) SCREEN-MODE)
(( equal? colorBlendOpt 3 ) DODGE-MODE)
(( equal? colorBlendOpt 4 ) BURN-MODE)
(( equal? colorBlendOpt 5 ) MULTIPLY-MODE)
(( equal? colorBlendOpt 6 ) HARDLIGHT-MODE)
(( equal? colorBlendOpt 7 ) SOFTLIGHT-MODE)
(( equal? colorBlendOpt 8 ) GRAIN-EXTRACT-MODE)
(( equal? colorBlendOpt 9 ) GRAIN-MERGE-MODE)
(( equal? colorBlendOpt 10 ) DIFFERENCE-MODE)
(( equal? colorBlendOpt 11 ) ADDITION-MODE)
(( equal? colorBlendOpt 12 ) SUBTRACT-MODE)
(( equal? colorBlendOpt 13 ) DARKEN-ONLY-MODE)
(( equal? colorBlendOpt 14 ) LIGHTEN-ONLY-MODE)
(( equal? colorBlendOpt 15 ) COLOR-MODE)
)
)
(layerName nil)
(runMode nil)
(offset 0)
(offsetBottom 0)
(step nil)
(stepBottom)
(frameNum 1)
(colorLayer nil)
(activeLayer)
(waxLayer1 nil)
(waxLayer2 nil)
(copyLayer nil)
(veinLayer nil)
(copyVeinLayer nil)
(numLayers nil)
(allLayersRef nil)
)
(gimp-context-push)
(set! newImage (car (gimp-image-new width height RGB)))
(gimp-image-undo-disable newImage)
(gimp-context-set-gradient "FG to BG (RGB)")
(set! bottomLavaLayer (car (gimp-layer-new newImage width height RGBA-IMAGE "Bottom Lava Layer" 100 NORMAL-MODE)))
(gimp-image-add-layer newImage bottomLavaLayer -1)
(if (= interactive TRUE)
(set! runMode RUN-INTERACTIVE)
(set! runMode RUN-NONINTERACTIVE)
)
(if (= veins TRUE)
(begin
(set! veinLayer (car (gimp-layer-new newImage width height RGBA-IMAGE "Lava Layer" 100 NORMAL-MODE)))
(gimp-image-add-layer newImage veinLayer -1)
(gimp-edit-clear veinLayer)
(gimp-context-set-foreground '(255 255 255))
(gimp-context-set-background veinColor)
(plug-in-solid-noise RUN-NONINTERACTIVE newImage veinLayer FALSE TRUE 10 2 2.0 2.0)
(plug-in-cubism RUN-NONINTERACTIVE newImage veinLayer veinAmount 2.5 0)
(plug-in-oilify RUN-NONINTERACTIVE newImage veinLayer 7 0)
(plug-in-edge RUN-NONINTERACTIVE newImage veinLayer 2 0 0)
(plug-in-gauss-rle RUN-NONINTERACTIVE newImage veinLayer 2 TRUE TRUE)
(plug-in-gradmap RUN-NONINTERACTIVE newImage veinLayer)
(plug-in-gauss-rle RUN-NONINTERACTIVE newImage veinLayer 5 TRUE TRUE)
(plug-in-colortoalpha RUN-NONINTERACTIVE newImage veinLayer '(255 255 255))
(set! copyVeinLayer (car (gimp-layer-copy veinLayer TRUE)))
(gimp-image-add-layer newImage copyVeinLayer -1)
(set! copyVeinLayer (car (gimp-layer-copy veinLayer TRUE)))
(gimp-image-add-layer newImage copyVeinLayer -1)
(gimp-image-merge-down newImage copyVeinLayer EXPAND-AS-NECESSARY)
(set! copyVeinLayer (car (gimp-image-get-active-layer newImage)))
(set! veinLayer (car (gimp-image-merge-down newImage copyVeinLayer EXPAND-AS-NECESSARY)))
(plug-in-bump-map RUN-NONINTERACTIVE newImage veinLayer veinLayer 135 45 veinThickness 0 0 0 0 TRUE FALSE 1)
(set! copyVeinLayer (car (gimp-layer-copy veinLayer TRUE)))
)
)
(plug-in-solid-noise runMode newImage bottomLavaLayer 1 1 (rand) 1 2.0 2.0)
(set! middleLavaLayer (car (gimp-layer-copy bottomLavaLayer TRUE)))
(gimp-image-add-layer newImage middleLavaLayer -1)
(set! topLavaLayer (car (gimp-layer-copy bottomLavaLayer TRUE)))
(gimp-image-add-layer newImage topLavaLayer -1)
(gimp-image-set-active-layer newImage bottomLavaLayer)
(set! bottomLavaLayerCopy (car (gimp-layer-copy bottomLavaLayer TRUE)))
(gimp-image-add-layer newImage bottomLavaLayerCopy -1)
(gimp-layer-resize bottomLavaLayerCopy (* 2 width) height width 0)
(gimp-drawable-offset bottomLavaLayerCopy TRUE 0 (- width) 0)
(gimp-image-merge-down newImage bottomLavaLayerCopy EXPAND-AS-NECESSARY)
(set! bottomLavaLayer (car (gimp-image-get-active-layer newImage)))
(gimp-image-set-active-layer newImage middleLavaLayer)
(gimp-drawable-set-name middleLavaLayer "Middle Lava Layer")
(plug-in-solid-noise runMode newImage middleLavaLayer 1 1 (rand) 1 2.0 2.0)
(set! middleLavaLayerCopy (car (gimp-layer-copy middleLavaLayer TRUE)))
(gimp-image-add-layer newImage middleLavaLayerCopy -1)
(gimp-layer-resize middleLavaLayerCopy width (* 2 height) 0 0)
(gimp-drawable-offset middleLavaLayerCopy TRUE 0 0 (- height))
(gimp-image-merge-down newImage middleLavaLayerCopy EXPAND-AS-NECESSARY)
(set! middleLavaLayer (car (gimp-image-get-active-layer newImage)))
(gimp-image-set-active-layer newImage topLavaLayer)
(gimp-drawable-set-name topLavaLayer "Top Lava Layer")
(plug-in-solid-noise runMode newImage topLavaLayer 1 1 (rand) 1 2.0 2.0)
(set! topLavaLayerCopy (car (gimp-layer-copy topLavaLayer TRUE)))
(gimp-image-add-layer newImage topLavaLayerCopy -1)
(gimp-layer-resize topLavaLayerCopy width (* 2 height) 0 height)
(gimp-drawable-offset topLavaLayerCopy TRUE 0 0 height)
(gimp-image-merge-down newImage topLavaLayerCopy EXPAND-AS-NECESSARY)
(set! topLavaLayer (car (gimp-image-get-active-layer newImage)))
(set! step (* -1 (/ height counter)))
(set! stepBottom (/ width counter))
(while (> counter 0)
(set! bottomLavaLayerCopy (car (gimp-layer-copy bottomLavaLayer TRUE)))
(gimp-image-add-layer newImage bottomLavaLayerCopy -1)
(set! layerName (string-append "Frame " (number->string frameNum) " (" (number->string inSpeed) "ms)" " (replace)"))
(gimp-drawable-set-name bottomLavaLayerCopy layerName)
(gimp-drawable-offset bottomLavaLayerCopy TRUE OFFSET-BACKGROUND offsetBottom 0.0)
(set! middleLavaLayerCopy (car (gimp-layer-copy middleLavaLayer TRUE)))
(gimp-image-add-layer newImage middleLavaLayerCopy -1)
(gimp-drawable-offset middleLavaLayerCopy TRUE OFFSET-BACKGROUND 0.0 (* -1 offset))
(gimp-layer-set-mode middleLavaLayerCopy middleBlendMode)
(gimp-image-merge-down newImage middleLavaLayerCopy CLIP-TO-IMAGE)
(set! topLavaLayerCopy (car (gimp-layer-copy topLavaLayer TRUE)))
(gimp-image-add-layer newImage topLavaLayerCopy -1)
(gimp-drawable-offset topLavaLayerCopy TRUE OFFSET-BACKGROUND 0.0 offset)
(gimp-layer-set-mode topLavaLayerCopy upperBlendMode)
(gimp-image-merge-down newImage topLavaLayerCopy CLIP-TO-IMAGE)
(set! colorLayer (car (gimp-layer-copy bottomLavaLayer TRUE)))
(gimp-image-add-layer newImage colorLayer -1)
(gimp-context-set-foreground color)
(gimp-edit-fill colorLayer FOREGROUND-FILL)
(gimp-layer-set-mode colorLayer colorBlend)
(gimp-image-merge-down newImage colorLayer CLIP-TO-IMAGE)
(set! activeLayer (car (gimp-image-get-active-layer newImage)))
(if (= veins TRUE)
(begin
(gimp-image-add-layer newImage copyVeinLayer -1)
(plug-in-displace RUN-NONINTERACTIVE newImage copyVeinLayer 5.0 5.0 TRUE TRUE activeLayer activeLayer 0)
(gimp-image-merge-down newImage copyVeinLayer CLIP-TO-BOTTOM-LAYER)
(set! copyVeinLayer (car (gimp-layer-copy veinLayer TRUE)))
(set! activeLayer (car (gimp-image-get-active-layer newImage)))
)
)
(if (= wax TRUE)
(begin
(set! waxLayer1 (car (gimp-layer-copy activeLayer TRUE)))
(set! waxLayer2 (car (gimp-layer-copy activeLayer TRUE)))
(gimp-image-add-layer newImage waxLayer1 -1)
(gimp-image-add-layer newImage waxLayer2 -1)
(gimp-desaturate waxLayer1)
(gimp-desaturate waxLayer2)
(gimp-invert waxLayer2)
(plug-in-neon RUN-NONINTERACTIVE newImage waxLayer1 radius 0)
(plug-in-neon RUN-NONINTERACTIVE newImage waxLayer2 radius 0)
(gimp-layer-set-mode waxLayer2 SCREEN-MODE)
(gimp-image-merge-down newImage waxLayer2 CLIP-TO-BOTTOM-LAYER)
(set! activeLayer (car (gimp-image-get-active-layer newImage)))
(set! copyLayer (car (gimp-layer-copy activeLayer TRUE)))
(gimp-image-add-layer newImage copyLayer -1)
(gimp-layer-set-mode copyLayer DIVIDE-MODE)
(gimp-image-merge-down newImage copyLayer CLIP-TO-BOTTOM-LAYER)
(set! activeLayer (car (gimp-image-get-active-layer newImage)))
(gimp-invert activeLayer)
(gimp-layer-set-mode activeLayer SCREEN-MODE)
(gimp-image-merge-down newImage activeLayer CLIP-TO-BOTTOM-LAYER)
(set! activeLayer (car (gimp-image-get-active-layer newImage)))
)
)
;(if (= kaleidoscope TRUE)
; (if (= frameNum 1)
; (plug-in-kaleidoscope RUN-INTERACTIVE newImage activeLayer 0 0 0 0)
; (plug-in-kaleidoscope RUN-WITH-LAST-VALS newImage activeLayer 0 0 0 0)
; )
;)
(set! offset (- offset step))
(set! offsetBottom (+ offsetBottom stepBottom))
(set! frameNum (+ frameNum 1))
(set! counter (- counter 1))
) ; goes with while
; Removes the original layer from the stack because it's no longer needed
(gimp-image-remove-layer newImage bottomLavaLayer)
(gimp-image-remove-layer newImage middleLavaLayer)
(gimp-image-remove-layer newImage topLavaLayer)
(if (= veins TRUE)
(gimp-image-remove-layer newImage veinLayer)
)
(gimp-image-crop newImage inWidth inHeight 5 5)
(if (= kaleidoscope TRUE)
(begin
(set! counter (car (gimp-image-get-layers newImage)))
(set! numLayers (car (gimp-image-get-layers newImage)))
(set! allLayersRef (cadr (gimp-image-get-layers newImage)))
(while (> numLayers 0)
(set! activeLayer (car (gimp-image-set-active-layer newImage (aref allLayersRef (- numLayers 1)))))
(set! activeLayer (car (gimp-image-get-active-layer newImage)))
(if (= counter numLayers)
(plug-in-kaleidoscope RUN-INTERACTIVE newImage activeLayer 0 0 0 0)
(plug-in-kaleidoscope RUN-WITH-LAST-VALS newImage activeLayer 0 0 0 0)
)
(set! numLayers (- numLayers 1))
)
)
)
(gimp-image-undo-enable newImage)
(gimp-context-pop)
(gimp-displays-flush)
; Displays the final animation
(gimp-display-new newImage)
)
)
(script-fu-register "script-fu-flowing-lava-and-guts-anim"
"<Image>/Filters/Animation/Animators/Flowing Lava and Guts..."
"Create an animated lava effect"
"Art Wade"
"Art Wade"
"2008"
"RGB*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Image Width" '(200 100 2000 1 10 0 1)
SF-ADJUSTMENT "Image Height" '(200 100 2000 1 10 0 1)
SF-ADJUSTMENT "Number of frames" '(30 1 2000 1 10 0 1)
SF-ADJUSTMENT "Animation Speed (in ms)" '(150 10 500 1 1 0 1)
SF-OPTION "Upper Lava Layer Blend Mode" '("SCREEN"
"DIVIDE"
"ADDITION"
"OVERLAY"
"DODGE"
"BURN"
"MULTIPLY"
"SOFTLIGHT"
"GRAIN EXTRACT"
"GRAIN MERGE"
"DIFFERENCE"
"HARDLIGHT"
"SUBTRACT"
"DARKEN ONLY"
"LIGHTEN ONLY")
SF-OPTION "Middle Lava Layer Blend Mode" '("MULTIPLY"
"DIVIDE"
"SCREEN"
"OVERLAY"
"DODGE"
"BURN"
"HARDLIGHT"
"SOFTLIGHT"
"GRAIN EXTRACT"
"GRAIN MERGE"
"DIFFERENCE"
"ADDITION"
"SUBTRACT"
"DARKEN ONLY"
"LIGHTEN ONLY")
SF-TOGGLE "Add Noise Interactively?" FALSE
SF-COLOR "Main Color" '(47 155 63)
SF-OPTION "Blend Mode of Color Layer" '("OVERLAY"
"DIVIDE"
"SCREEN"
"DODGE"
"BURN"
"MULTIPLY"
"HARDLIGHT"
"SOFTLIGHT"
"GRAIN EXTRACT"
"GRAIN MERGE"
"DIFFERENCE"
"ADDITION"
"SUBTRACT"
"DARKEN ONLY"
"LIGHTEN ONLY"
"COLOR")
SF-TOGGLE "Add Wax? (Wax or Plastic Appearance)" TRUE
SF-ADJUSTMENT "Wax Amount" '(7 1 100 1 2 0 1)
SF-TOGGLE "Add Veins?" TRUE
SF-ADJUSTMENT "Amount of Veins (Less is More)" '(10 1 100 1 2 0 1)
SF-COLOR "Vein Color" '(155 26 26)
SF-ADJUSTMENT "Vein Thickness" '(10 0 65 1 2 0 1)
SF-TOGGLE "Make a Kaleidoscope? (Requires Kaleidoscope Plugin)" FALSE
)