;; Wave effect - sine wave displacement distortion (require-primitives "geometry" "image") (define-effect wave :params ( (amplitude :type int :default 10 :range [0 100]) (wavelength :type int :default 50 :range [10 500]) (speed :type int :default 1 :range [0 10]) (direction :type string :default "horizontal") ) (let* ((w (image:width frame)) (h (image:height frame)) ;; Use _time for animation phase (phase (* (or _time 0) speed 2 pi)) ;; Calculate frequency: waves per dimension (freq (/ (if (= direction "vertical") w h) wavelength)) (axis (cond ((= direction "horizontal") "x") ((= direction "vertical") "y") (else "both"))) (coords (geometry:wave-coords w h axis freq amplitude phase))) (geometry:remap frame (geometry:coords-x coords) (geometry:coords-y coords))))