HOST=0.0.0.0 PORT=8080 UPSTREAM_URL=http://127.0.0.1:3000/v1/chat/completions # Optional. If omitted, the incoming Authorization header is forwarded upstream. # UPSTREAM_AUTH_HEADER=Bearer your-upstream-token DEFAULT_PUBLIC_MODEL=gpt-image-2 MODEL_MAP_JSON={"gpt-image-2":"gpt-draw-1024x1024","gpt-image-2-1024x1024":"gpt-draw-1024x1024","gpt-image-2-1024x1536":"gpt-draw-1024x1536","gpt-image-2-1536x1024":"gpt-draw-1536x1024"} SIZE_MAP_JSON={"1024x1024":"gpt-draw-1024x1024","1024x1536":"gpt-draw-1024x1536","1536x1024":"gpt-draw-1536x1024"} ALLOW_UNMAPPED_MODEL_PASSTHROUGH=false PERSIST_IMAGES=true OUTPUT_DIR=./data/generated FILE_URL_PATH=/generated # PUBLIC_BASE_URL=https://api.example.com DEFAULT_RESPONSE_FORMAT=b64_json ALWAYS_INCLUDE_B64_JSON=false ALWAYS_INCLUDE_URL=true FORWARD_USER_FIELD=true # Optional experimental async placeholder mode. Only model names ending with this # suffix return a placeholder URL immediately and finish rendering in the background. # Example: gpt-image-2-async -> async placeholder, gpt-image-2 -> normal sync mode. # ASYNC_PLACEHOLDER_MODEL_SUFFIX=-async # Optional experimental heartbeat mode. Only model names ending with this suffix # use chunked keepalive whitespace while waiting for the final JSON response. # Example: gpt-image-2-hb -> heartbeat mode, gpt-image-2 -> normal sync mode. # HEARTBEAT_MODEL_SUFFIX=-hb # HEARTBEAT_INTERVAL_SECONDS=15 # Optional prompt shaping. # SYSTEM_PROMPT=You are a safe image generation relay. # PROMPT_PREFIX=Generate a polished marketing image: # PROMPT_SUFFIX=Return a single image. # Optional JSON merged into every upstream request. UPSTREAM_EXTRA_BODY_JSON={} # Optional file cleanup. CLEANUP_MAX_AGE_SECONDS=0 CLEANUP_SWEEP_INTERVAL_SECONDS=3600