;; ASCII Art FX - converts image to ASCII characters with per-character effects (require-primitives "ascii") (define-effect ascii_art_fx :params ( ;; Basic parameters (char_size :type int :default 8 :range [4 32] :desc "Size of each character cell in pixels") (alphabet :type string :default "standard" :desc "Character set to use") (color_mode :type string :default "color" :choices [color mono invert] :desc "Color mode: color, mono, invert, or any color name/hex") (background_color :type string :default "black" :desc "Background color name or hex value") (invert_colors :type int :default 0 :range [0 1] :desc "Swap foreground and background colors (0/1)") (contrast :type float :default 1.5 :range [1 3] :desc "Character selection contrast") ;; Per-character effects (char_jitter :type float :default 0 :range [0 20] :desc "Position jitter amount in pixels") (char_scale :type float :default 1.0 :range [0.5 2.0] :desc "Character scale factor") (char_rotation :type float :default 0 :range [0 180] :desc "Rotation amount in degrees") (char_hue_shift :type float :default 0 :range [0 360] :desc "Hue shift in degrees") ;; Modulation sources (jitter_source :type string :default "none" :choices [none luminance inv_luminance saturation position_x position_y position_diag random center_dist] :desc "What drives jitter modulation") (scale_source :type string :default "none" :choices [none luminance inv_luminance saturation position_x position_y position_diag random center_dist] :desc "What drives scale modulation") (rotation_source :type string :default "none" :choices [none luminance inv_luminance saturation position_x position_y position_diag random center_dist] :desc "What drives rotation modulation") (hue_source :type string :default "none" :choices [none luminance inv_luminance saturation position_x position_y position_diag random center_dist] :desc "What drives hue shift modulation") ) (let* ((sample (cell-sample frame char_size)) (colors (nth sample 0)) (luminances (nth sample 1)) (chars (luminance-to-chars luminances alphabet contrast))) (render-char-grid-fx frame chars colors luminances char_size color_mode background_color invert_colors char_jitter char_scale char_rotation char_hue_shift jitter_source scale_source rotation_source hue_source)))