#!/bin/bash set -euo pipefail OPEN=false IMAGE_ARGS=() PROMPT="" while [ $# -gt 0 ]; do case "$1" in --open) OPEN=true shift ;; --image|-i) IMAGE_ARGS+=("$2") shift 2 ;; -h|--help) echo "usage: imggen [--open] [--image ]... " >&2 exit 0 ;; *) PROMPT="$1" shift ;; esac done if [ -z "$PROMPT" ]; then echo "usage: imggen [--open] [--image ]... " >&2 exit 2 fi SCRIPT="$HOME/.config/opencode/tools/codex-imagen/scripts/codex-imagen.mjs" TMP=$(mktemp) trap 'rm -f "$TMP"' EXIT if [ ${#IMAGE_ARGS[@]} -gt 0 ]; then printf 'edit image based on this prompt: "%s"' "$PROMPT" > "$TMP" else printf 'generate image: "%s"' "$PROMPT" > "$TMP" fi CMD=(node "$SCRIPT" --prompt-file "$TMP" --json --quiet --out-dir /tmp --model gpt-5.5) if [ ${#IMAGE_ARGS[@]} -gt 0 ]; then for img in "${IMAGE_ARGS[@]}"; do CMD+=(-i "$img") done fi if [ "${IMGGEN_DEBUG:-}" = "1" ]; then echo "[debug] prompt file: $TMP" >&2 echo "[debug] cmd: ${CMD[*]}" >&2 OUT=$("${CMD[@]}" 2>&1) echo "[debug] raw output:" >&2 echo "$OUT" >&2 else OUT=$("${CMD[@]}" 2>/dev/null) fi if [ -z "$OUT" ]; then echo "error: no output from codex-imagen (set IMGGEN_DEBUG=1 for details)" >&2 exit 1 fi PATH_OUT=$(echo "$OUT" | python3 -c " import sys, json try: d = json.load(sys.stdin) if d.get('images'): print(d['images'][0]['path']) else: sys.stderr.write('error: no images in response\n') sys.stderr.write(json.dumps(d)[:500] + '\n') sys.exit(1) except json.JSONDecodeError as e: sys.stderr.write('error: invalid JSON: ' + str(e) + '\n') sys.stderr.write(sys.stdin.read()[:500] + '\n') sys.exit(1) " 2>&1) if [ $? -ne 0 ]; then echo "error: failed to parse output" >&2 echo "$PATH_OUT" >&2 exit 1 fi if [ -n "$PATH_OUT" ]; then echo "$PATH_OUT" if [ "$OPEN" = true ]; then open "$PATH_OUT" fi fi