Files
mono/test/run-effect.sh
2026-02-24 23:10:04 +00:00

123 lines
5.3 KiB
Bash

#!/bin/bash
# Run a single effect by number (0-42)
# Usage: ./run-effect.sh <effect-number>
#
# Note: For effects with simple numeric params, you can also use native params:
# python3 plan.py recipe-parametric.sexp -p strength=5 -p amount=30 | python3 execute.py - -d . -o output.mp4
EFFECT_NUM=${1:-0}
# Effect definitions array
EFFECTS=(
"(effect invert)"
"(effect grayscale)"
"(effect sepia)"
"(effect brightness :amount 30)"
"(effect contrast :amount 1.5)"
"(effect saturation :amount 2.0)"
"(effect hue_shift :degrees 90)"
"(effect color_cycle :speed 2)"
"(effect threshold :level 128)"
"(effect posterize :levels 6)"
"(effect blur :radius 10)"
"(effect sharpen :amount 2)"
"(effect bloom :intensity 0.6 :radius 20)"
"(effect color-adjust :brightness 20 :contrast 1.2)"
"(effect swirl :strength 3)"
"(effect fisheye :strength 0.5)"
"(effect wave :amplitude 30 :wavelength 60)"
"(effect ripple :amplitude 20 :frequency 6)"
"(effect kaleidoscope :segments 6 :rotation_speed 30)"
"(effect zoom :factor 1.2)"
"(effect rotate :angle 15)"
"(effect mirror :direction \"horizontal\")"
"(effect pixelate :block_size 16)"
"(effect ascii_art :char_size 8 :color_mode \"color\")"
"(effect ascii_zones :char_size 10)"
"(effect edge_detect :low 50 :high 150)"
"(effect emboss :strength 1.5)"
"(effect outline :thickness 2)"
"(effect neon_glow :glow_radius 20 :glow_intensity 2)"
"(effect crt :line_spacing 3 :vignette_amount 0.3)"
"(effect scanlines :spacing 3 :intensity 0.4)"
"(effect film_grain :intensity 0.25)"
"(effect vignette :strength 0.6)"
"(effect noise :amount 40)"
"(effect rgb_split :offset_x 20)"
"(effect echo :num_echoes 4 :decay 0.5)"
"(effect trails :persistence 0.7)"
"(effect strobe :frequency 4)"
"(effect flip :direction \"horizontal\")"
"(effect tile_grid :rows 2 :cols 2)"
"(effect pixelsort :threshold_low 30 :threshold_high 220)"
"(effect datamosh :corruption 0.5 :block_size 24)"
)
if [ "$EFFECT_NUM" -lt 0 ] || [ "$EFFECT_NUM" -ge ${#EFFECTS[@]} ]; then
echo "Effect number must be 0-$((${#EFFECTS[@]}-1))"
exit 1
fi
EFFECT="${EFFECTS[$EFFECT_NUM]}"
echo "Running effect $EFFECT_NUM: $EFFECT"
# Create temp recipe with selected effect
cat > /tmp/recipe-temp.sexp << EOF
(recipe "effect-test"
:version "1.0"
:encoding (:codec "libx264" :crf 20 :preset "medium" :audio-codec "aac" :fps 30)
(effect ascii_art :path "sexp_effects/effects/ascii_art.sexp")
(effect ascii_zones :path "sexp_effects/effects/ascii_zones.sexp")
(effect bloom :path "sexp_effects/effects/bloom.sexp")
(effect blur :path "sexp_effects/effects/blur.sexp")
(effect brightness :path "sexp_effects/effects/brightness.sexp")
(effect color-adjust :path "sexp_effects/effects/color-adjust.sexp")
(effect color_cycle :path "sexp_effects/effects/color_cycle.sexp")
(effect contrast :path "sexp_effects/effects/contrast.sexp")
(effect crt :path "sexp_effects/effects/crt.sexp")
(effect datamosh :path "sexp_effects/effects/datamosh.sexp")
(effect echo :path "sexp_effects/effects/echo.sexp")
(effect edge_detect :path "sexp_effects/effects/edge_detect.sexp")
(effect emboss :path "sexp_effects/effects/emboss.sexp")
(effect film_grain :path "sexp_effects/effects/film_grain.sexp")
(effect fisheye :path "sexp_effects/effects/fisheye.sexp")
(effect flip :path "sexp_effects/effects/flip.sexp")
(effect grayscale :path "sexp_effects/effects/grayscale.sexp")
(effect hue_shift :path "sexp_effects/effects/hue_shift.sexp")
(effect invert :path "sexp_effects/effects/invert.sexp")
(effect kaleidoscope :path "sexp_effects/effects/kaleidoscope.sexp")
(effect mirror :path "sexp_effects/effects/mirror.sexp")
(effect neon_glow :path "sexp_effects/effects/neon_glow.sexp")
(effect noise :path "sexp_effects/effects/noise.sexp")
(effect outline :path "sexp_effects/effects/outline.sexp")
(effect pixelate :path "sexp_effects/effects/pixelate.sexp")
(effect pixelsort :path "sexp_effects/effects/pixelsort.sexp")
(effect posterize :path "sexp_effects/effects/posterize.sexp")
(effect rgb_split :path "sexp_effects/effects/rgb_split.sexp")
(effect ripple :path "sexp_effects/effects/ripple.sexp")
(effect rotate :path "sexp_effects/effects/rotate.sexp")
(effect saturation :path "sexp_effects/effects/saturation.sexp")
(effect scanlines :path "sexp_effects/effects/scanlines.sexp")
(effect sepia :path "sexp_effects/effects/sepia.sexp")
(effect sharpen :path "sexp_effects/effects/sharpen.sexp")
(effect strobe :path "sexp_effects/effects/strobe.sexp")
(effect swirl :path "sexp_effects/effects/swirl.sexp")
(effect threshold :path "sexp_effects/effects/threshold.sexp")
(effect tile_grid :path "sexp_effects/effects/tile_grid.sexp")
(effect trails :path "sexp_effects/effects/trails.sexp")
(effect vignette :path "sexp_effects/effects/vignette.sexp")
(effect wave :path "sexp_effects/effects/wave.sexp")
(effect zoom :path "sexp_effects/effects/zoom.sexp")
(def video (source :path "monday.webm"))
(def audio (source :path "dizzy.mp3"))
(def clip (-> video (segment :start 0 :duration 10)))
(def audio-clip (-> audio (segment :start 0 :duration 10)))
(def result (-> clip $EFFECT))
(mux result audio-clip))
EOF
python3 plan.py /tmp/recipe-temp.sexp | python3 execute.py - -d . -o "effect-${EFFECT_NUM}.mp4"
echo "Output: effect-${EFFECT_NUM}.mp4"