feat(image): add gpt-image-2 single and multi-image workflows

This commit is contained in:
zhangheng
2026-05-15 19:30:07 +08:00
commit 1e61d7c806
12 changed files with 1716 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
if [[ ! -f .env ]]; then
echo ".env not found" >&2
exit 1
fi
while IFS= read -r line; do
[[ -n "$line" ]] && export "$line"
done < <(
awk '
$0 == "# https://api.aoixx.com" { in_block = 1; next }
in_block && /^#/ { exit }
in_block && /^OPENAI_API_KEY=/ { print; next }
' .env
)
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
if [[ -z "${OPENAI_API_KEY:-}" ]]; then
echo "aoixx OPENAI_API_KEY not found in .env" >&2
exit 1
fi
export OPENAI_BASE_URL="https://api.aoixx.com"
export IMAGE_REQUEST_STYLE="${IMAGE_REQUEST_STYLE:-apicodex}"
export IMAGE_SIZE="${IMAGE_SIZE:-3840x2160}"
export IMAGE_MODEL="${IMAGE_MODEL:-gpt-image-2}"
export IMAGE_REQUEST_TIMEOUT="${IMAGE_REQUEST_TIMEOUT:-900}"
export IMAGE_MAX_POLL_WAIT="${IMAGE_MAX_POLL_WAIT:-1800}"
export IMAGE_INITIAL_POLL_DELAY="${IMAGE_INITIAL_POLL_DELAY:-10}"
export IMAGE_POLL_INTERVAL="${IMAGE_POLL_INTERVAL:-5}"
python3 gpt_image2_generate.py "$@"

View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
declare -A PRESERVED_ENV=()
for name in \
OPENAI_API_KEY \
OPENAI_BASE_URL \
IMAGE_REQUEST_STYLE \
IMAGE_SIZE \
IMAGE_RESOLUTION \
IMAGE_PROMPT \
IMAGE_MODEL \
IMAGE_QUALITY \
IMAGE_N \
OUTPUT_FILE \
REFERENCE_IMAGE \
REFERENCE_IMAGE_FILE \
REFERENCE_IMAGE_URL \
REFERENCE_IMAGE_DATA_URL \
MASK_IMAGE \
MASK_IMAGE_FILE \
MASK_IMAGE_URL \
MASK_IMAGE_DATA_URL \
IMAGE_REQUEST_TIMEOUT \
IMAGE_MAX_POLL_WAIT \
IMAGE_INITIAL_POLL_DELAY \
IMAGE_POLL_INTERVAL
do
if [[ -v "$name" ]]; then
PRESERVED_ENV["$name"]="${!name}"
fi
done
if [[ -f .env ]]; then
set -a
source .env
set +a
fi
for name in "${!PRESERVED_ENV[@]}"; do
export "$name=${PRESERVED_ENV[$name]}"
done
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
export IMAGE_REQUEST_STYLE="${IMAGE_REQUEST_STYLE:-apicodex}"
export IMAGE_SIZE="${IMAGE_SIZE:-3840x2160}"
export IMAGE_REQUEST_TIMEOUT="${IMAGE_REQUEST_TIMEOUT:-900}"
export IMAGE_MAX_POLL_WAIT="${IMAGE_MAX_POLL_WAIT:-1800}"
export IMAGE_INITIAL_POLL_DELAY="${IMAGE_INITIAL_POLL_DELAY:-10}"
export IMAGE_POLL_INTERVAL="${IMAGE_POLL_INTERVAL:-5}"
export IMAGE_PROMPT="${IMAGE_PROMPT:-A realistic Figma design board screenshot for a digital transformation system, with a left layers panel, center canvas of nested frames and components, and right properties panel. Enterprise product design, Chinese labels, visible grid, alignment guides, annotations, components, variants, spacing notes, dashboard cards, workflow timeline, and system modules. Clean blue-gray palette, crisp typography, premium product design presentation, highly organized layered structure, realistic Figma workspace aesthetic.}"
python3 gpt_image2_generate.py "$@"

View File

@@ -0,0 +1,57 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
declare -A PRESERVED_ENV=()
for name in \
OPENAI_API_KEY \
OPENAI_BASE_URL \
IMAGE_REQUEST_STYLE \
IMAGE_SIZE \
IMAGE_RESOLUTION \
IMAGE_PROMPT \
IMAGE_MODEL \
IMAGE_QUALITY \
IMAGE_N \
OUTPUT_FILE \
REFERENCE_IMAGE \
REFERENCE_IMAGE_FILE \
REFERENCE_IMAGE_URL \
REFERENCE_IMAGE_DATA_URL \
MASK_IMAGE \
MASK_IMAGE_FILE \
MASK_IMAGE_URL \
MASK_IMAGE_DATA_URL \
IMAGE_REQUEST_TIMEOUT \
IMAGE_MAX_POLL_WAIT \
IMAGE_INITIAL_POLL_DELAY \
IMAGE_POLL_INTERVAL
do
if [[ -v "$name" ]]; then
PRESERVED_ENV["$name"]="${!name}"
fi
done
if [[ -f .env ]]; then
set -a
source .env
set +a
fi
for name in "${!PRESERVED_ENV[@]}"; do
export "$name=${PRESERVED_ENV[$name]}"
done
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
export IMAGE_REQUEST_STYLE="${IMAGE_REQUEST_STYLE:-openai}"
export IMAGE_MODEL="${IMAGE_MODEL:-gpt-image-2}"
export IMAGE_SIZE="${IMAGE_SIZE:-1024x1024}"
export IMAGE_REQUEST_TIMEOUT="${IMAGE_REQUEST_TIMEOUT:-900}"
export IMAGE_MAX_POLL_WAIT="${IMAGE_MAX_POLL_WAIT:-1800}"
export IMAGE_INITIAL_POLL_DELAY="${IMAGE_INITIAL_POLL_DELAY:-10}"
export IMAGE_POLL_INTERVAL="${IMAGE_POLL_INTERVAL:-5}"
python3 gpt_image2_generate.py "$@"

View File

@@ -0,0 +1,71 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
declare -A PRESERVED_ENV=()
for name in \
OPENAI_API_KEY \
OPENAI_BASE_URL \
IMAGE_REQUEST_STYLE \
IMAGE_SIZE \
IMAGE_RESOLUTION \
IMAGE_PROMPT \
IMAGE_MODEL \
IMAGE_QUALITY \
IMAGE_N \
IMAGE_OUTPUT_STEM \
IMAGE_RESPONSE_DIR \
IMAGE_BACKGROUND \
IMAGE_INPUT_FIDELITY \
IMAGE_OUTPUT_FORMAT \
REFERENCE_IMAGES \
REFERENCE_IMAGE_LIST \
REFERENCE_IMAGE \
REFERENCE_IMAGE_FILE \
REFERENCE_IMAGE_URL \
REFERENCE_IMAGE_DATA_URL \
MASK_IMAGE \
MASK_IMAGE_FILE \
MASK_IMAGE_URL \
MASK_IMAGE_DATA_URL \
IMAGE_REQUEST_TIMEOUT \
IMAGE_MAX_POLL_WAIT \
IMAGE_INITIAL_POLL_DELAY \
IMAGE_POLL_INTERVAL
do
if [[ -v "$name" ]]; then
PRESERVED_ENV["$name"]="${!name}"
fi
done
for i in $(seq 1 16); do
name="REFERENCE_IMAGE_${i}"
if [[ -v "$name" ]]; then
PRESERVED_ENV["$name"]="${!name}"
fi
done
if [[ -f .env ]]; then
set -a
source .env
set +a
fi
for name in "${!PRESERVED_ENV[@]}"; do
export "$name=${PRESERVED_ENV[$name]}"
done
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
export IMAGE_REQUEST_STYLE="${IMAGE_REQUEST_STYLE:-openai}"
export IMAGE_MODEL="${IMAGE_MODEL:-gpt-image-2}"
export IMAGE_SIZE="${IMAGE_SIZE:-1024x1024}"
export IMAGE_RESPONSE_DIR="${IMAGE_RESPONSE_DIR:-outputs/image-multi-runs}"
export IMAGE_REQUEST_TIMEOUT="${IMAGE_REQUEST_TIMEOUT:-900}"
export IMAGE_MAX_POLL_WAIT="${IMAGE_MAX_POLL_WAIT:-1800}"
export IMAGE_INITIAL_POLL_DELAY="${IMAGE_INITIAL_POLL_DELAY:-10}"
export IMAGE_POLL_INTERVAL="${IMAGE_POLL_INTERVAL:-5}"
python3 gpt_image2_generate_multi.py "$@"