Save Gemini JSON in parent in-dir as YYYYMMDD-name.json (avoid affecting job fingerprint)

This commit is contained in:
hbrain 2026-05-29 14:57:43 +02:00
parent b3cf019a24
commit 3de0d498ce

View file

@ -1,11 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
IN_DIR="${1:?Usage: $0 <input-dir> [\"Title\"] [\"Location\"] [max_frames] [no-append]}" IN_DIR="${1:?Usage: $0 <input-dir> [\"Title\"] [\"Location\"] [max_frames]}"
TITLE="${2:-}" TITLE="${2:-}"
LOCATION="${3:-}" LOCATION="${3:-}"
MAX_FRAMES="${4:-12}" MAX_FRAMES="${4:-12}"
NO_APPEND="${5:-}"
# Source system-wide Gemini API key if present so the webserver can run this as www-data. # Source system-wide Gemini API key if present so the webserver can run this as www-data.
if [ -f /etc/mvlog/gemini.env ]; then if [ -f /etc/mvlog/gemini.env ]; then
@ -13,7 +12,7 @@ if [ -f /etc/mvlog/gemini.env ]; then
. /etc/mvlog/gemini.env . /etc/mvlog/gemini.env
fi fi
: "${GEMINI_API_KEY:?Set GEMINI_API_KEY first in the environment}" : "${GEMINI_API_KEY:?Set GEMINI_API_KEY first in the environment}"
MODEL="${GEMINI_MODEL:-gemini-2.5-flash}" MODEL="${GEMINI_MODEL:-gemini-2.5-flash}"
TMPDIR="${TMPDIR:-$(mktemp -d)}" TMPDIR="${TMPDIR:-$(mktemp -d)}"
@ -196,9 +195,27 @@ if [ -z "$TEXT" ]; then
exit 1 exit 1
fi fi
# Save raw Gemini JSON for reference # Save raw Gemini JSON for reference in parent in-dir with YYYYMMDD-name.json
OUT_JSON="$IN_DIR/gemini_generated.json" OUT_PARENT="$(dirname "$IN_DIR")"
JOBNAME="$(basename "$IN_DIR")"
if [[ "$JOBNAME" =~ ^([0-9]{8})[_-](.+)$ ]]; then
DATE_PART="${BASH_REMATCH[1]}"
NAME_PART="${BASH_REMATCH[2]}"
else
firstfile="$(find "$IN_DIR" -maxdepth 1 -type f \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.webp' -o -iname '*.gif' -o -iname '*.mp4' -o -iname '*.mov' -o -iname '*.m4v' -o -iname '*.webm' -o -iname '*.mkv' \) -printf '%p\n' | sort | head -n1)"
if [ -n "$firstfile" ]; then
DATE_PART="$(date -r "$firstfile" +%Y%m%d 2>/dev/null || date +%Y%m%d)"
else
DATE_PART="$(date +%Y%m%d)"
fi
NAME_PART="$JOBNAME"
fi
# sanitize
SAFE_NAME="$(echo "$NAME_PART" | tr ' /' '__' | tr -c '[:alnum:]_.-' '_')"
OUT_JSON="$OUT_PARENT/${DATE_PART}-${SAFE_NAME}.json"
echo "$TEXT" | jq . > "$OUT_JSON" echo "$TEXT" | jq . > "$OUT_JSON"
chown www-data:www-data "$OUT_JSON" 2>/dev/null || true
chmod 664 "$OUT_JSON" 2>/dev/null || true
# Extract fields from Gemini JSON # Extract fields from Gemini JSON
DESCRIPTION=$(echo "$TEXT" | jq -r '.description // empty') DESCRIPTION=$(echo "$TEXT" | jq -r '.description // empty')