;; Echo effect - motion trails using frame buffer
(require-primitives "blending")

(define-effect echo
  :params (
    (num_echoes :type int :default 4 :range [1 20])
    (decay :type float :default 0.5 :range [0 1])
  )
  (let* ((buffer (state-get "buffer" (list)))
         (new-buffer (take (cons frame buffer) (+ num_echoes 1))))
    (begin
      (state-set "buffer" new-buffer)
      ;; Blend frames with decay
      (if (< (length new-buffer) 2)
          frame
          (let ((result (copy frame)))
            ;; Simple blend of first two frames for now
            ;; Full version would fold over all frames
            (blending:blend-images frame (nth new-buffer 1) (* decay 0.5)))))))
