galgen -- static images gallery generator
That generator is written on zsh and is aimed only to deal with JPEG XL
-and WebP image formats solely. JPEG XL is superior to any other format
-both in lossy and lossless modes. WebP just can not be losslessly
-transcoded to JPEG XL, so it is left for backward compatibility.
+image format solely. JPEG XL is superior to any other format both in
+lossy and lossless modes.
-Just run that script inside the directory with .jxl/.webp files. For
-each file the small preview will be generated in lossy WebP format. Also
+Just run that script inside the directory with .jxl files. For each file
+the small preview will be generated in lossy WebP format. Also
corresponding HTML file is generated too, containing information about
the picture and its metadata.
included on the first page.
Following external utilities are called: djxl, jxlinfo, exiftool,
-pamtopng, pnmscale, pngcrush, advpng, webpinfo, dwebp, cwebp, parallel.
+pamtopng, pnmscale, pngcrush, advpng, cwebp, parallel.
#!/usr/bin/env zsh
# Copyright (C) 2022-2023 Sergey Matveev <stargrave@stargrave.org>
-VERSION=0.4.0
+VERSION=0.5.0
set -e
imgs=()
for img (*.jxl(N)) { [[ -r .info/$img.img ]] || imgs=($imgs $img) }
[[ ${#imgs} == 0 ]] || {
- echo JPEG XL info... >&2
+ echo Infos... >&2
parallel "jxlinfo {} > .info/{}.img" ::: $imgs
}
imgs=()
-for img (*.webp(N)) { [[ -r .info/$img.img ]] || imgs=($imgs $img) }
-[[ ${#imgs} == 0 ]] || {
- echo WebP info... >&2
- parallel "webpinfo {} > .info/{}.img" ::: $imgs
-}
-
-imgs=()
-src=((*.jxl|*.webp))
+src=(*.jxl)
for img ($src) { [[ -r .info/$img.exif ]] || imgs=($imgs $img) }
src=()
[[ ${#imgs} == 0 ]] || {
parallel "exiftool -escapeHTML -htmlFormat -groupHeadings --${=${(j/ --/)exifTagsOmit}} {} > .info/{}.exif" ::: $imgs
}
-imgs=((*.jxl|*.webp)($ordering))
+imgs=((*.jxl)($ordering))
pages=$(( ${#imgs} / $pagesize ))
[[ $(( $pages * $pagesize )) -lt ${#imgs} ]] && pages=$(( $pages + 1 ))
jpgs=()
pngs=()
-pams_jxl=()
-pams_webp=()
+pams=()
for img ($imgs) {
[[ -r .info/$img.img ]]
- if [[ $img:e = jxl ]] ; then
- [[ -r alt/$img.jpg ]] || [[ -r alt/$img.png ]] && : || {
- grep -q "JPEG bitstream reconstruction" .info/$img.img &&
- jpgs=($jpgs $img) || pngs=($pngs $img)
- }
- [[ -r preview/$img.webp ]] || pams_jxl=($pams_jxl $img)
- else
- [[ -r preview/$img.webp ]] || pams_webp=($pams_webp $img)
- fi
+ [[ -r alt/$img.jpg ]] || [[ -r alt/$img.png ]] && : || {
+ grep -q "JPEG bitstream reconstruction" .info/$img.img &&
+ jpgs=($jpgs $img) || pngs=($pngs $img)
+ }
+ [[ -r preview/$img.webp ]] || pams=($pams $img)
}
[[ ${#jpgs} == 0 ]] || {
mkpreview="pnmscale -w 100"
mkpreview="$mkpreview | cwebp -quiet -pass 10 -alpha_filter best -m 6 -o preview/{}.webp -- -"
mkpreview="$mkpreview && touch -r {} preview/{}.webp"
-[[ ${#pams_jxl} == 0 ]] || {
- echo JPEG XL previews... >&2
- parallel "$djxl2pam | $mkpreview" ::: $pams_jxl
-}
-[[ ${#pams_webp} == 0 ]] || {
- echo WebP previews... >&2
- parallel "dwebp {} -ppm -o - | $mkpreview" ::: $pams_webp
+[[ ${#pams} == 0 ]] || {
+ echo Generating previews... >&2
+ parallel "$djxl2pam | $mkpreview" ::: $pams
}
-pams_jxl=()
-pams_webp=()
+pams=()
for (( i=1 ; i <= ${#imgs} ; i++ )) {
local img=${imgs[$i]}