Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save nooptr/19071be7a98ab0e6d0d3241ffede5c9e to your computer and use it in GitHub Desktop.

Select an option

Save nooptr/19071be7a98ab0e6d0d3241ffede5c9e to your computer and use it in GitHub Desktop.
macOS Quick Action that adds a random gradient background + drop shadow to images. Supports batch processing — just select multiple files in Finder, right-click, and go. Requires ImageMagick.
#!/bin/zsh
# Add Random Gradient Background + Drop Shadow - macOS Quick Action Script
# Requires: ImageMagick (brew install imagemagick)
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
for INPUT_FILE in "$@"; do
FILENAME=$(basename "$INPUT_FILE")
DIRNAME=$(dirname "$INPUT_FILE")
EXTENSION="${FILENAME##*.}"
BASENAME="${FILENAME%.*}"
OUTPUT_FILE="${DIRNAME}/${BASENAME}_gradient.${EXTENSION}"
# Get image dimensions
WIDTH=$(magick identify -format "%w" "$INPUT_FILE")
HEIGHT=$(magick identify -format "%h" "$INPUT_FILE")
# Generate random colors (hex), avoid near-white (brightness < 200)
MAX_BRIGHTNESS=200
while true; do
R1=$((RANDOM % 256)); G1=$((RANDOM % 256)); B1=$((RANDOM % 256))
BRIGHTNESS1=$(( (R1 + G1 + B1) / 3 ))
[[ $BRIGHTNESS1 -lt $MAX_BRIGHTNESS ]] && break
done
while true; do
R2=$((RANDOM % 256)); G2=$((RANDOM % 256)); B2=$((RANDOM % 256))
BRIGHTNESS2=$(( (R2 + G2 + B2) / 3 ))
[[ $BRIGHTNESS2 -lt $MAX_BRIGHTNESS ]] && break
done
COLOR1=$(printf '#%02X%02X%02X' $R1 $G1 $B1)
COLOR2=$(printf '#%02X%02X%02X' $R2 $G2 $B2)
# Random gradient direction
DIRECTIONS=("0" "45" "90" "135" "180" "225" "270" "315")
ANGLE=${DIRECTIONS[$((RANDOM % ${#DIRECTIONS[@]}))]}
# Settings
PADDING=80 # space around image
SHADOW_OFFSET=12 # shadow offset in px
SHADOW_BLUR=18 # shadow softness
SHADOW_OPACITY=70 # shadow darkness (0-100)
CANVAS_W=$((WIDTH + PADDING * 2))
CANVAS_H=$((HEIGHT + PADDING * 2))
# Create gradient → add shadow to image → composite on gradient
magick \
-size "${CANVAS_W}x${CANVAS_H}" \
"gradient:${COLOR1}-${COLOR2}" \
-define gradient:angle="${ANGLE}" \
\( "$INPUT_FILE" \
\( +clone \
-background "rgba(0,0,0,${SHADOW_OPACITY})" \
-shadow "${SHADOW_OPACITY}x${SHADOW_BLUR}+${SHADOW_OFFSET}+${SHADOW_OFFSET}" \
\) \
+swap \
-background none \
-layers merge \
\) \
-gravity center \
-composite \
"$OUTPUT_FILE"
echo "✅ Saved: $OUTPUT_FILE"
echo " Gradient: $COLOR1 → $COLOR2 | Angle: ${ANGLE}° | Shadow: offset=${SHADOW_OFFSET}px blur=${SHADOW_BLUR}px"
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment