;; Vignette effect using xector operations ;; Demonstrates α (element-wise) and β (reduction) patterns (require-primitives "xector") (define-effect xector_vignette :params ( (strength :type float :default 0.5 :range [0 1]) (radius :type float :default 1.0 :range [0.5 2]) ) (let* ( ;; Get normalized distance from center for each pixel (dist (dist-from-center frame)) ;; Calculate max distance (corner distance) (max-dist (* (βmax dist) radius)) ;; Calculate brightness factor per pixel: 1 - (dist/max-dist * strength) ;; Using explicit α operators (factor (α- 1 (α* (α/ dist max-dist) strength))) ;; Clamp factor to [0, 1] (factor (αclamp factor 0 1)) ;; Extract channels as xectors (r (red frame)) (g (green frame)) (b (blue frame)) ;; Apply factor to each channel (implicit element-wise via Xector operators) (r-out (* r factor)) (g-out (* g factor)) (b-out (* b factor))) ;; Combine back to frame (rgb r-out g-out b-out)))