Spaces:
Running
Running
| 可选:如果不想在网页右上角“API 设置”里填写,可以在这里配置默认值。 | |
| 使用时复制本文件为 .env.local,再填写真实内容。 | |
| OpenAI 或 OpenAI 兼容接口 Key | |
| OPENAI_API_KEY= | |
| 可选:OpenAI 兼容接口根地址,通常以 /v1 结尾。 | |
| 默认要求 https;本机 loopback HTTP 可直接用于本地 fixture。 | |
| 远程 HTTP 必须加入 OPENAI_ALLOWED_PLAIN_HTTP_API_BASE_URLS。 | |
| 示例:https://api.openai.com/v1 | |
| OPENAI_API_BASE_URL= | |
| 可选:服务端到图片上游的全局 HTTP(S) 代理。仅影响服务端出站请求,不影响浏览器访问本服务。 | |
| 仅支持无认证、无路径、无查询参数和无片段的 http:// 或 https:// 根代理地址;不支持 SOCKS。 | |
| OPENAI_UPSTREAM_PROXY_URL=http://proxy.internal:8080 | |
| 可选:服务端多渠道多 key 配置。配置任意 OPENAI_CHANNEL_N_* 后,会优先于 OPENAI_API_KEY。 | |
| 页面右上角“API 设置”里手动填写的 API Key/API URL 仍然拥有最高优先级。 | |
| # 路由策略: | |
| - sticky:默认值。按请求来源稳定映射到同一个渠道 key,适合减少同一用户跳渠道。 | |
| - round_robin:按请求顺序轮询所有渠道 key,适合简单均摊流量。 | |
| - random:每次随机选择一个渠道 key,适合轻量分散请求。 | |
| OPENAI_ROUTING_STRATEGY=sticky | |
| OPENAI_UPSTREAM_REQUEST_MODES=images-non-stream,images-sse,responses-non-stream,responses-sse | |
| OPENAI_UPSTREAM_REQUEST_MODE_PRIORITY=images-non-stream,images-sse,responses-non-stream,responses-sse | |
| # 渠道配置规则: | |
| - N 从 1 开始递增,例如 OPENAI_CHANNEL_1_*、OPENAI_CHANNEL_2_*。 | |
| - ID 只用于日志排查,不会暴露 API Key。 | |
| - BASE_URL 是 OpenAI 兼容接口根地址,通常以 /v1 结尾。 | |
| - BASE_URL 默认要求 https;本机 loopback HTTP 可直接用于本地 fixture。 | |
| - 远程 HTTP 必须加入 OPENAI_ALLOWED_PLAIN_HTTP_API_BASE_URLS。 | |
| - API_KEYS 支持一个或多个 key,多个 key 用英文逗号分隔。 | |
| - REQUEST_MODES 可选,用于声明该渠道经真实 smoke 验证可用的服务端请求方式。 | |
| 单 key 旧配置可用 OPENAI_UPSTREAM_REQUEST_MODES 声明全局可用方式。 | |
| 该白名单只供服务端路由和诊断使用;Agent 客户端仍只提交业务意图。 | |
| 这些变量在服务启动时读取;修改后需要重启 Next.js、Docker 或 Space 服务才会生效。 | |
| stream_mode=auto 默认由服务端按白名单和优先级选择;未配置优先级时按低费用非流式优先。 | |
| stream_mode=stream 或显式页面 SSE 不会静默降级。 | |
| 可选值:images-non-stream、images-sse、responses-non-stream、responses-sse。 | |
| 旧后端名别名仅用于兼容输入,建议新配置始终使用上面四个规范值。 | |
| 未配置时默认只允许 images-non-stream;配置后服务端只会把匹配方式的请求路由到该渠道。 | |
| - REQUEST_MODE_PRIORITY 可选,用于声明该渠道在已允许请求方式内的服务端排序。 | |
| 单渠道配置优先于 OPENAI_UPSTREAM_REQUEST_MODE_PRIORITY,且不会扩大 REQUEST_MODES 白名单。 | |
| 未配置时默认顺序:images-non-stream、images-sse、responses-non-stream、responses-sse。 | |
| - FAILURE_COOLDOWN_MS 可选,覆盖该渠道失败后的冷却时间。 | |
| - PROXY_URL 可选,覆盖 OPENAI_UPSTREAM_PROXY_URL,仅用于该渠道的服务端上游请求。 | |
| - API Key 本身不要包含逗号。 | |
| # 示例: | |
| OPENAI_CHANNEL_1_ID=official | |
| OPENAI_CHANNEL_1_BASE_URL=https://api.openai.com/v1 | |
| OPENAI_CHANNEL_1_API_KEYS=sk-key-1,sk-key-2 | |
| OPENAI_CHANNEL_1_REQUEST_MODES=images-non-stream,images-sse | |
| OPENAI_CHANNEL_1_REQUEST_MODE_PRIORITY=images-non-stream,images-sse | |
| OPENAI_CHANNEL_1_FAILURE_COOLDOWN_MS=30000 | |
| OPENAI_CHANNEL_1_PROXY_URL=http://channel-proxy.internal:8080 | |
| OPENAI_CHANNEL_1_USER_AGENT=visual-journal/customer | |
| OPENAI_CHANNEL_1_UPSTREAM_HEADERS_JSON={"X-Custom-Client":"customer"} | |
| # OPENAI_CHANNEL_2_ID=backup | |
| OPENAI_CHANNEL_2_BASE_URL=https://your-compatible-api.example.com/v1 | |
| OPENAI_CHANNEL_2_API_KEYS=sk-backup-1 | |
| # OPENAI_CHANNEL_3_ID=matsca | |
| OPENAI_CHANNEL_3_BASE_URL=https://img.matsca.com/v1 | |
| OPENAI_CHANNEL_3_API_KEYS=sk-matsca-1 | |
| OPENAI_CHANNEL_3_UPSTREAM_PROFILE=matsca | |
| 可选:Matsca App 模式需要同时配置 App ID 和 App Secret;直连模式不要设置。 | |
| OPENAI_CHANNEL_3_MATSCA_APP_ID= | |
| OPENAI_CHANNEL_3_MATSCA_APP_SECRET= | |
| # 可选:远程明文 HTTP 兼容接口 allowlist。默认只允许 HTTPS 和本机 loopback HTTP。 | |
| 多个完整 base URL 用英文逗号分隔,仅在确认网络边界安全时启用。 | |
| OPENAI_ALLOWED_PLAIN_HTTP_API_BASE_URLS=http://your-internal-compatible-api.example.com/v1 | |
| 可选:统一上游请求头。默认 User-Agent 为 visual-journal/<package-version>。 | |
| 全局 UA 可用 OPENAI_UPSTREAM_USER_AGENT 或 UPSTREAM_USER_AGENT 覆盖; | |
| 单渠道 UA 用 OPENAI_CHANNEL_N_USER_AGENT 覆盖,安全 extra header 用 | |
| OPENAI_CHANNEL_N_UPSTREAM_HEADERS_JSON 配置。 | |
| Authorization、Accept、Content-Type、Content-Length、Host 等协议头不能由 extra headers 覆盖。 | |
| OPENAI_UPSTREAM_USER_AGENT=visual-journal/customer | |
| 可选:并发流式批处理容量。 | |
| 页面提供显式“并发批量”开关;开启后,流式模式下 n>1 会拆成多个 n=1 的独立流式任务,并按服务端 key 容量并发执行。 | |
| 默认 sticky 路由按单个 credential 容量推荐并发;round_robin/random 才会使用完整 credential 池。 | |
| 渠道失败冷却默认关闭。显式启用后,key 出现鉴权、额度或限流类错误会短暂冷却; | |
| 渠道出现 5xx、CDN 超时或连接错误后会冷却整个渠道。 | |
| 如果失败能关联到本次服务端 request mode,只冷却对应 request mode,不误伤同渠道其他可用方式。 | |
| OPENAI_MAX_STREAMS_PER_CREDENTIAL=1 | |
| OPENAI_CHANNEL_QUEUE_ENABLED=true | |
| OPENAI_CHANNEL_QUEUE_MAX_WAIT_MS=420000 | |
| OPENAI_CHANNEL_QUEUE_MAX_SIZE=50 | |
| 设为 true 可启用渠道/凭证失败冷却;默认 false,失败仍会记录但不会临时移出路由池。 | |
| OPENAI_CHANNEL_FAILURE_COOLDOWN_ENABLED=false | |
| OPENAI_CHANNEL_FAILURE_COOLDOWN_MS=30000 | |
| # 可选:服务端渠道恢复探测。存在服务端凭证时默认开启,并要求冷却到期的 | |
| credential/channel/request mode 先通过后台 GET /models 探测,成功后才重新进入用户生图流量。 | |
| 探测不调用 /images/generations,不触发生图费用;它只确认 host、鉴权和 models 端点恢复, | |
| 不能替代 Images/Responses/SSE 的真实 smoke;MAX_PER_TICK 用于限制探测流量。 | |
| OPENAI_CHANNEL_RECOVERY_PROBE_ENABLED=true | |
| 如果设为 true,OPENAI_CHANNEL_RECOVERY_PROBE_ENABLED 也必须启用。 | |
| OPENAI_CHANNEL_REQUIRE_PROBE_FOR_RECOVERY=true | |
| OPENAI_CHANNEL_RECOVERY_PROBE_INTERVAL_MS=60000 | |
| OPENAI_CHANNEL_RECOVERY_PROBE_TIMEOUT_MS=5000 | |
| OPENAI_CHANNEL_RECOVERY_PROBE_MAX_PER_TICK=1 | |
| 可选:多上游图片兼容层默认策略。默认保持 Images API JSON 基线。 | |
| IMAGE_GENERATION_BACKEND=images-api | |
| IMAGE_STREAMING_STRATEGY=auto | |
| # 可选:图片上游传输策略。默认给长耗时生图保留 900 秒,并关闭 OpenAI SDK 自动重试,避免超时后重复触发计费请求。 | |
| IMAGE_UPSTREAM_TIMEOUT_MS 必须是正整数;IMAGE_STREAM_DATA_INTERVAL_TIMEOUT_MS 可设为 0 以禁用已建立流的空闲计时器。 | |
| IMAGE_UPSTREAM_TIMEOUT_MS=900000 | |
| IMAGE_STREAM_DATA_INTERVAL_TIMEOUT_MS=900000 | |
| IMAGE_UPSTREAM_MAX_RETRIES=0 | |
| 可选:实验 Responses API 图片后端。默认关闭,且默认请求仍走 Images API。 | |
| 要使用 Responses 后端,需要请求显式传入 image_backend=responses-image-generation, | |
| 或把 IMAGE_GENERATION_BACKEND 设为 responses-image-generation / responses; | |
| 两种方式都需要单独配置 /responses 顶层模型。 | |
| OPENAI_RESPONSES_API_MODEL 是服务端默认顶层模型,页面请求可用 responsesModel、 | |
| responses_model、gptModel 或 gpt_model 覆盖单次请求。 | |
| 该配置只影响本项目的 responses-image-generation 路径,不改变兼容上游自身 | |
| /v1/images/generations 桥接层内部选择的模型。 | |
| 表单 model 只作为 image_generation 工具模型,不会复用为 /responses 顶层模型。 | |
| ENABLE_RESPONSES_IMAGE_BACKEND=true | |
| OPENAI_RESPONSES_API_MODEL=gpt-5.4 | |
| 可选:独立真实上游 smoke 目标。默认不触发计费请求,必须显式运行 --allow-billable。 | |
| 每组至少提供 BASE_URL 和 API_KEY;MODEL、SIZE、QUALITY、RESPONSES_MODEL 可按上游覆盖。 | |
| IMAGE_REAL_SMOKE_ORIGINAL_BASE_URL=https://original-new-api.example.com/v1 | |
| IMAGE_REAL_SMOKE_ORIGINAL_API_KEY= | |
| IMAGE_REAL_SMOKE_GAOREN_BASE_URL=https://gaoren-new-api.example.com/v1 | |
| IMAGE_REAL_SMOKE_GAOREN_API_KEY= | |
| IMAGE_REAL_SMOKE_SUB2API_BASE_URL=https://sub2api.example.com/v1 | |
| IMAGE_REAL_SMOKE_SUB2API_API_KEY= | |
| IMAGE_REAL_SMOKE_SUB2API_RESPONSES_BASE_URL=https://sub2api.example.com/v1 | |
| IMAGE_REAL_SMOKE_SUB2API_RESPONSES_API_KEY= | |
| IMAGE_REAL_SMOKE_GPT2IMAGE_BASE_URL=https://gpt2image.superapi.buzz/v1 | |
| IMAGE_REAL_SMOKE_GPT2IMAGE_API_KEY= | |
| IMAGE_REAL_SMOKE_GPT2IMAGE_RESPONSES_MODEL=gpt-5.4 | |
| IMAGE_REAL_SMOKE_MATSCA_BASE_URL=https://img.matsca.com/v1 | |
| IMAGE_REAL_SMOKE_MATSCA_API_KEY= | |
| 独立真实 smoke 目标使用页面外部凭证路径,只验证 Matsca direct 模式。 | |
| App 模式请通过 OPENAI_CHANNEL_N_UPSTREAM_PROFILE=matsca 和 OPENAI_CHANNEL_N_MATSCA_APP_* 配置后运行 server-channel smoke。 | |
| IMAGE_REAL_SMOKE_TIMEOUT_MS=240000 | |
| 可选:给网页加一个访问码。公网部署时建议一定要设置。 | |
| APP_PASSWORD= | |
| Compose 默认只发布到 127.0.0.1:4783。需要局域网或公网访问时,在 shell 或 Compose 的 .env | |
| 文件显式设置非回环地址,并同时在 .env.local 设置上面的 APP_PASSWORD;未设置访问码时容器会拒绝启动。 | |
| GIP_BIND_HOST=0.0.0.0 | |
| GIP_PORT=4783 | |
| 可选:给 /api/agent/* 使用的 Bearer token。公网或内网共享部署时建议设置。 | |
| AGENT_API_TOKEN= | |
| 可选:Agent 状态后端。memory 适合临时演示,sqlite 适合单实例本地部署,postgres 适合状态并发;多实例还需共享 generated-images。 | |
| AGENT_STATE_BACKEND=sqlite | |
| AGENT_SQLITE_PATH=generated-images/.agent-state/agent.sqlite | |
| AGENT_DATABASE_URL=postgres://gpt_image:<database-password>@localhost:5432/gpt_image_playground | |
| docker-compose.postgres.yml 从 shell 或 Compose 的 .env 读取此 Secret,不要把真实值写进 .env.local 或仓库文件。 | |
| GPT_IMAGE_POSTGRES_PASSWORD= | |
| AGENT_REQUEST_LEASE_MS=600000 | |
| AGENT_REQUEST_TTL_SECONDS=86400 | |
| 可选:自动清理 WebUI 文件系统图片。默认关闭;启用后默认保留 30 天。 | |
| 启用且使用 fs 存储时,可在“最近生成”中批量标记图片永久排除自动清理;无需额外环境变量,手动删除仍会删除图片和标记。 | |
| WEBUI_IMAGE_AUTO_CLEANUP_ENABLED=false | |
| WEBUI_IMAGE_RETENTION_DAYS=30 | |
| 可选:服务端日志等级。可选 debug、info、warn、error。生产环境默认 warn,其他环境默认 info。 | |
| APP_LOG_LEVEL=warn | |
| 可选:服务端本地应用日志保留条数,默认 300。扩大后可提升 Agent 诊断可回溯窗口。 | |
| APP_LOG_MAX_ENTRIES=300 | |
| 本地运行一般不用设置;部署到 Vercel 时建议使用 indexeddb。 | |
| NEXT_PUBLIC_IMAGE_STORAGE_MODE=indexeddb | |