;; Vignette effect - darkens corners
(require-primitives "image")

(define-effect vignette
  :params (
    (strength :type float :default 0.5 :range [0 1])
    (radius :type int :default 1 :range [0.5 2])
  )
  (let* ((w (image:width frame))
         (h (image:height frame))
         (cx (/ w 2))
         (cy (/ h 2))
         (max-dist (* (sqrt (+ (* cx cx) (* cy cy))) radius)))
    (map-pixels frame
      (lambda (x y c)
        (let* ((dx (- x cx))
               (dy (- y cy))
               (dist (sqrt (+ (* dx dx) (* dy dy))))
               (factor (- 1 (* (/ dist max-dist) strength)))
               (factor (clamp factor 0 1)))
          (rgb (* (red c) factor)
               (* (green c) factor)
               (* (blue c) factor)))))))
