;; ASCII zones effect - region-based ASCII rendering ;; Usage: python3 plan.py effects/ascii_zones.sexp -p char_size=10 | python3 execute.py - -d . -o output.mp4 ;; ;; Parameters: ;; char_size: character cell size in pixels (4 to 20, default: 10) (recipe "ascii_zones" :version "1.0" :encoding (:codec "libx264" :crf 20 :preset "medium" :audio-codec "aac" :fps 30) (effect ascii_zones :path "sexp_effects/effects/ascii_zones.sexp") (analyzer energy :path "../artdag-analyzers/energy/analyzer.py") ;; Default parameter (overridden by -p char_size=N) (def char_size 10) (def video (source :path "monday.webm")) (def clip (-> video (segment :start 0 :duration 10))) (def audio (source :path "dizzy.mp3")) (def audio-clip (-> audio (segment :start 60 :duration 10))) ;; Analyze just the audio clip - times are 0-10s relative to clip (def energy-data (-> audio-clip (analyze energy))) ;; char_size bound to energy - no offset needed since analysis is on clip (def result (-> clip (effect ascii_zones :char_size (bind energy-data values :range [2 32])))) (mux result audio-clip))