#!/bin/bash # Build sunfish bootanimation.tar from two GIFs (loading + loaded finale). # Lineage Android.mk prepends "W H FPS" and appends branding/bootanimation/desc.txt. # # Sequence (desc.txt): # part0 loading — play once # part1 loaded — play once (finale before bootanim waits on part2) # part2 hold — loop last loaded frame until boot completes # # Output: vendor/sunfish-a16/branding/bootanimation/bootanimation.tar set -euo pipefail ROOT=$(cd "$(dirname "$0")/.." && pwd) LOADING=${1:-/home/aventura/Downloads/AXP_OS_Resurrection_loading.gif} LOADED=${2:-/home/aventura/Downloads/AXP_OS_Resurrection_loaded.gif} OUT="$ROOT/artifacts/bootanimation-resurrection" WORK="$OUT/work" W=1080 H=2340 FPS=30 # Fill frame (no letterbox band); AXP_BOOTANIMATION_FULLSCREEN in branding.mk. VF="scale=${W}:${H}:force_original_aspect_ratio=increase,crop=${W}:${H},format=rgb24" rm -rf "$WORK" mkdir -p "$WORK/part0" "$WORK/part1" "$WORK/part2" ffmpeg -y -i "$LOADING" -vf "$VF" "$WORK/part0/%05d.png" ffmpeg -y -i "$LOADED" -vf "$VF" "$WORK/part1/%05d.png" LAST_LOADED=$(ls -1 "$WORK/part1"/*.png | sort | tail -1) cp "$LAST_LOADED" "$WORK/part2/00001.png" cat >"$ROOT/vendor/sunfish-a16/branding/bootanimation/desc.txt" <<'EOF' c 1 0 part0 c 1 0 part1 c 0 0 part2 EOF cp "$ROOT/vendor/sunfish-a16/branding/bootanimation/desc.txt" "$WORK/desc.txt" rm -f "$OUT/bootanimation.zip" (cd "$WORK" && zip -0 -q "$OUT/bootanimation.zip" desc.txt && zip -0 -q -r "$OUT/bootanimation.zip" part0 part1 part2) unzip -t "$OUT/bootanimation.zip" >/dev/null TAR="$ROOT/vendor/sunfish-a16/branding/bootanimation/bootanimation.tar" (cd "$WORK" && tar cf "$TAR" part0 part1 part2) n0=$(ls -1 "$WORK/part0" | wc -l) n1=$(ls -1 "$WORK/part1" | wc -l) identify "$WORK/part0/00001.png" "$WORK/part2/00001.png" ls -lh "$OUT/bootanimation.zip" "$TAR" echo "OK: rebacon (or mka bootanimation.zip) — sync branding to host first"