#!/usr/bin/env bash # Batch Trellis generation — one at a time, gently. # Usage: ./tooling/trellis-batch.sh set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" cd "$PROJECT_ROOT" INPUT_DIR=".tmp/image-gen/characters/bodies" OUTPUT_DIR=".tmp/glb-gen/characters/bodies" COOLDOWN=15 # seconds between jobs MAX_RETRIES=3 RETRY_DELAY=60 # seconds before retry mkdir -p "$OUTPUT_DIR" TYPES=( slim_m slim_f average_m average_f stocky_m stocky_f tall_lean_m tall_lean_f short_stout_m short_stout_f athletic_m athletic_f heavyset_m heavyset_f petite_m petite_f ) TOTAL=${#TYPES[@]} SUCCESS=0 FAILED=0 echo "=== Trellis Batch: $TOTAL bodies ===" echo " Cooldown: ${COOLDOWN}s between jobs" echo " Retries: $MAX_RETRIES with ${RETRY_DELAY}s delay" echo "" for i in "${!TYPES[@]}"; do TYPE="${TYPES[$i]}" NUM=$((i + 1)) INPUT="$INPUT_DIR/${TYPE}.png" OUTPUT="$OUTPUT_DIR/${TYPE}.glb" # Skip if already generated if [ -f "$OUTPUT" ]; then echo "[$NUM/$TOTAL] $TYPE — already exists, skipping" SUCCESS=$((SUCCESS + 1)) continue fi if [ ! -f "$INPUT" ]; then echo "[$NUM/$TOTAL] $TYPE — input not found: $INPUT" FAILED=$((FAILED + 1)) continue fi ATTEMPT=0 DONE=false while [ "$ATTEMPT" -lt "$MAX_RETRIES" ] && [ "$DONE" = "false" ]; do ATTEMPT=$((ATTEMPT + 1)) echo "[$NUM/$TOTAL] $TYPE (attempt $ATTEMPT/$MAX_RETRIES)..." if python3 tooling/db/trellis_connector.py generate \ "$INPUT" \ --output "$OUTPUT" \ --simplify 0.95 \ --texture-size 1024 \ 2>&1 | tee /dev/stderr | grep -q '"ok": true'; then echo " OK" SUCCESS=$((SUCCESS + 1)) DONE=true else echo " FAILED" if [ "$ATTEMPT" -lt "$MAX_RETRIES" ]; then echo " Waiting ${RETRY_DELAY}s before retry..." sleep "$RETRY_DELAY" else echo " Giving up on $TYPE after $MAX_RETRIES attempts" FAILED=$((FAILED + 1)) fi fi done # Cooldown between successful jobs if [ "$DONE" = "true" ] && [ "$NUM" -lt "$TOTAL" ]; then echo " Cooling down ${COOLDOWN}s..." sleep "$COOLDOWN" fi done echo "" echo "=== Results: $SUCCESS/$TOTAL succeeded, $FAILED failed ===" ls -la "$OUTPUT_DIR"/*.glb 2>/dev/null || echo "No GLB files generated"