;; Trails effect - persistent motion trails
(require-primitives "image" "blending")

(define-effect trails
  :params (
    (persistence :type float :default 0.8 :range [0 0.99])
  )
  (let* ((buffer (state-get "buffer" nil))
         (current frame))
    (if (= buffer nil)
        (begin
          (state-set "buffer" (copy frame))
          frame)
        (let* ((faded (blending:blend-images buffer
                                    (make-image (image:width frame) (image:height frame) (list 0 0 0))
                                    (- 1 persistence)))
               (result (blending:blend-mode faded current "lighten")))
          (begin
            (state-set "buffer" result)
            result)))))
