;; Threshold effect using xector operations ;; Demonstrates where (conditional select) and β (reduction) for normalization (require-primitives "xector") (define-effect xector_threshold :params ( (threshold :type float :default 0.5 :range [0 1] :desc "Brightness threshold (0-1)") (invert :type bool :default false :desc "Invert the threshold") ) (let* ( ;; Get grayscale luminance as xector (luma (gray frame)) ;; Normalize to 0-1 range (luma-norm (α/ luma 255)) ;; Create boolean mask: pixels above threshold (mask (if invert (α< luma-norm threshold) (α>= luma-norm threshold))) ;; Use where to select: white (255) if above threshold, black (0) if below (out (where mask 255 0))) ;; Output as grayscale (same value for R, G, B) (rgb out out out)))