Album: Download im Profil — zwei ZIPs (DE+EN) mit Cover, ID3-Tags, Liner Notes (v1302)

- Profil-Karte "Ban Yaro — das Album" in settings.js mit Cover-Thumbnail +
  zwei Download-Buttons (Deutsch/English), rein deklarativ (CSP-safe)
- /downloads StaticFiles-Mount in main.py (makedirs-Schutz); ZIPs matchen
  keine SW-Cache-Regel -> fluten den Cache nicht
- backend/static/downloads/ban-yaro-album-{de,en}.zip: je 7 MP3s mit ID3-Tags
  + eingebettetem Cover, cover.jpg, LIESMICH.txt/README.txt (Tracklist + Lizenz)
- Cover aus Fruehling-Playdate-Foto (quadr. Crop + Wortmarke), DE/EN-Variante;
  textfreies album-thumb.jpg fuer die Karte
- Reproduzierbar: make album (tools/album-build/build.sh + Liner-Notes)
- LIVE auf Prod + Staging v1302
This commit is contained in:
rene 2026-06-17 06:25:34 +02:00
parent aea489aa5a
commit 1a03cab5dd
15 changed files with 213 additions and 18 deletions

86
tools/album-build/build.sh Executable file
View file

@ -0,0 +1,86 @@
#!/usr/bin/env bash
# Baut die zwei Album-Downloads (DE + EN) reproduzierbar:
# Cover (Foto quadr. + Wortmarke) → ID3-Tags + eingebettetes Cover → ZIP mit Liner Notes.
# Quelle: die committeten MP3s in backend/static/sounds/ + ein Hi-Res-Foto.
# Ausgabe: backend/static/downloads/ban-yaro-album-{de,en}.zip + img/banyaro/album-thumb.jpg
# Benötigt: ImageMagick (magick), ffmpeg, zip. Aufruf: make album (oder bash tools/album-build/build.sh)
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
SND="$ROOT/backend/static/sounds"
PHOTO="$ROOT/backend/static/img/banyaro/hires/banyaro_fruehling_playdate_hires.jpg"
FONT="/System/Library/Fonts/Supplemental/Arial Bold.ttf"
BUILD="$ROOT/tools/album-build"
DIST="$BUILD/dist"
DL="$ROOT/backend/static/downloads"
IMG="$ROOT/backend/static/img/banyaro"
rm -rf "$DIST"; mkdir -p "$DIST" "$DL" "$IMG"
# --- 1) Cover (quadratischer Crop auf die Hunde + Verlauf unten + Wortmarke) ---
make_cover() { # $1=subtitle $2=outfile
magick "$PHOTO" -auto-orient -crop 2648x2648+551+0 +repage -resize 2000x2000 \
\( -size 2000x950 gradient:none-'rgba(0,0,0,0.80)' \) -gravity south -compose over -composite \
-gravity south -font "$FONT" -kerning 10 \
-fill 'rgba(0,0,0,0.55)' -pointsize 168 -annotate +4+254 "BAN YARO" \
-fill white -pointsize 168 -annotate +0+250 "BAN YARO" \
-kerning 7 -fill 'rgba(255,255,255,0.92)' -pointsize 60 -annotate +0+160 "$1" \
-quality 90 "$2"
}
make_cover "DAS ALBUM · 7 SONGS" "$DIST/cover-de.jpg"
make_cover "THE ALBUM · 7 SONGS" "$DIST/cover-en.jpg"
# Eingebettetes Albumart kleiner halten (sonst blähen sich die MP3s auf)
magick "$DIST/cover-de.jpg" -resize 800x800 -quality 85 "$DIST/art-de.jpg"
magick "$DIST/cover-en.jpg" -resize 800x800 -quality 85 "$DIST/art-en.jpg"
# Neutrales Thumbnail (ohne Text) für die Profil-Karte — der Titel steht dort im HTML
magick "$PHOTO" -auto-orient -crop 2648x2648+551+0 +repage -resize 600x600 -quality 85 "$IMG/album-thumb.jpg"
# --- 2)+3) pro Sprache: taggen + zippen ---
# Zeilenformat: "quelldatei(ohne .mp3)|Titel|Untertitel"
DE_TRACKS=(
"ban-yaro-blues|Ban Yaro Blues|Die Hymne"
"ban-yaro-mobil|Ban Yaro Mobil|Erste Fahrt im Anhänger"
"amy|Amy|Eine Liebesromanze"
"beim-friseur|Beim Friseur|Halbes Fell, Energie pur"
"leckerli-paradies|Leckerli-Paradies|Voller Napf, volles Glück"
"platsch|Platsch!|Ab ins kühle Nass"
"bester-freund|Bester Freund|Du und ich"
)
EN_TRACKS=(
"ban-yaro-blues-en|Ban Yaro Blues|The anthem"
"ban-yaro-mobil-en|Ban Yaro Mobile|First ride in the trailer"
"amy-en|Amy|A love duet"
"at-the-groomers-en|At the Groomer's|Half the fur, all the energy"
"treat-paradise-en|Treat Paradise|Full bowl, full heart"
"splash-en|Splash!|Into the cool water"
"best-friend-en|Best Friend|You and me"
)
zip_album() { # $1=lang $2=AlbumName(ID3, Em-Dash ok) $3=Ordner(ASCII) $4=art $5=liner shift 5; rest=tracks
local lang="$1" album="$2" fname="$3" art="$4" liner="$5"; shift 5
local folder="$DIST/$fname"; rm -rf "$folder"; mkdir -p "$folder"
if [ "$lang" = "de" ]; then cp "$liner" "$folder/LIESMICH.txt"; else cp "$liner" "$folder/README.txt"; fi
cp "$art" "$folder/cover.jpg"
local n=0 line src title sub nn
for line in "$@"; do
n=$((n+1)); nn=$(printf "%02d" "$n")
IFS='|' read -r src title sub <<<"$line"
ffmpeg -y -loglevel error -i "$SND/$src.mp3" -i "$art" \
-map 0:a -map 1:v -c copy -id3v2_version 3 \
-metadata title="$title" -metadata artist="Ban Yaro" \
-metadata album="$album" -metadata album_artist="Ban Yaro" \
-metadata track="$n/7" -metadata date="2026" -metadata genre="Blues" \
-metadata comment="$sub" -disposition:v:0 attached_pic \
"$folder/$nn $title.mp3"
done
( cd "$DIST" && rm -f "$DL/ban-yaro-album-$lang.zip" && zip -r -X -q "$DL/ban-yaro-album-$lang.zip" "$fname" )
echo "$fname → ban-yaro-album-$lang.zip ($(du -h "$DL/ban-yaro-album-$lang.zip" | cut -f1))"
}
# LIESMICH.txt für DE, README.txt für EN
cp "$BUILD/liner-de.txt" "$DIST/_liner-de.txt"
cp "$BUILD/liner-en.txt" "$DIST/_liner-en.txt"
zip_album "de" "Ban Yaro — Das Album" "Ban Yaro - Das Album" "$DIST/art-de.jpg" "$DIST/_liner-de.txt" "${DE_TRACKS[@]}"
zip_album "en" "Ban Yaro — The Album" "Ban Yaro - The Album" "$DIST/art-en.jpg" "$DIST/_liner-en.txt" "${EN_TRACKS[@]}"
echo "Fertig. Downloads in backend/static/downloads/, Thumbnail in img/banyaro/album-thumb.jpg"

View file

@ -0,0 +1,34 @@
==================================================
BAN YARO — DAS ALBUM
7 Songs
==================================================
Sieben Lieder über einen Hund namens Ban Yaro:
übers Gassigehen bei jedem Wetter, die erste Fahrt
im Anhänger, die große Liebe, den Friseur, den
vollen Napf, das kühle Wasser — und den besten
Freund, den ein Mensch haben kann.
Selbst gemacht, mit viel Herz. Aus der Ban-Yaro-App.
--------------------------------------------------
TRACKLIST
--------------------------------------------------
1. Ban Yaro Blues Die Hymne
2. Ban Yaro Mobil Erste Fahrt im Anhänger
3. Amy Eine Liebesromanze
4. Beim Friseur Halbes Fell, Energie pur
5. Leckerli-Paradies Voller Napf, volles Glück
6. Platsch! Ab ins kühle Nass
7. Bester Freund Du und ich
--------------------------------------------------
Ein Ban-Yaro-Original · banyaro.app
(c) 2026 Ban Yaro
Diese Aufnahmen sind ein kleines Geschenk:
behalten und teilen ausdrucklich erwunscht —
nur bitte nicht kommerziell verwenden.
Viel Freude beim Horen und einen schonen
Gassi-Gang! Wuff. 🐾

View file

@ -0,0 +1,34 @@
==================================================
BAN YARO — THE ALBUM
7 Songs
==================================================
Seven songs about a dog named Ban Yaro:
about walks in every kind of weather, the first
ride in the trailer, falling in love, the groomer,
a full bowl, cool water — and the best friend a
human could ever ask for.
Homemade, with all our heart. From the Ban Yaro app.
--------------------------------------------------
TRACKLIST
--------------------------------------------------
1. Ban Yaro Blues The anthem
2. Ban Yaro Mobile First ride in the trailer
3. Amy A love duet
4. At the Groomer's Half the fur, all the energy
5. Treat Paradise Full bowl, full heart
6. Splash! Into the cool water
7. Best Friend You and me
--------------------------------------------------
A Ban Yaro original · banyaro.app
(c) 2026 Ban Yaro
These recordings are a little gift:
keep them and share them freely —
just please don't use them commercially.
Enjoy the music, and have a wonderful walk!
Woof. 🐾