--- /dev/null
+#!/bin/sh
+
+music=/home/music
+thumbs="$HOME/.fvwm/.thumbs"
+
+if [ ! -d "$thumbs" ]; then
+ mkdir "$thumbs" || exit 1
+fi
+
+size="x128"
+printimg=""
+ismusic=""
+
+while [ "${1#--}" != "$1" -a "$1" != "-" ]; do
+ if [ "$1" = "--small" ]; then
+ size="56"
+ elif [ "$1" = "--size" ]; then
+ size="$2"
+ shift
+ elif [ "$1" = "--music" ]; then
+ ismusic="yes"
+ elif [ "$1" = "--image" ]; then
+ printimg="yes"
+ else
+ echo "unrecognised option: $1" 1>&2
+ exit 1
+ fi
+ shift
+done
+[ "$1" = "-" ] && shift
+
+if ! expr match "$size" '^\([0-9]*\(x[0-9]\+\)\?\)$' &>/dev/null; then
+ echo "invalid size specification: $size" 1>&2
+ exit 1
+fi
+
+if [ -z "$1" ]; then
+ echo "usage: thumbnail.sh [--small|--size <spec>] [--image] [--music] path" 1>&2
+ exit 1
+fi
+
+if [ -n "$ismusic" ]; then
+ path="$music/`dirname "${1#$music}"`/cover.jpg"
+ [ ! -f "$path" ] && path="${path%jpg}png"
+else
+ path="$1"
+fi
+
+[ ! -f "$path" ] && exit 0
+
+image="`readlink -f -- "$path"`"
+[ ! -f "$image" ] && exit 0
+
+thumb="$thumbs/`echo -n $image | md5sum - | cut -d ' ' -f 1`_$size.png"
+if [ -f "$thumb" ]; then
+ mtime_s="`stat -c %Y -- "$image"`"
+ mtime_t="`stat -c %Y -- "$thumb"`"
+ if [ "$mtime_s" -gt "$mtime_t" ]; then
+ convert -scale "$size" "$image" "$thumb"
+ fi
+else
+ convert -scale "$size" "$image" "$thumb"
+fi
+
+echo "$thumb"
+[ -n "$printimg" ] && echo "$image"
+exit 0