图片 API 对接文档
创建图片任务,保存 task_id,再查询状态并取得图片 URL。开发者可直接调用接口;Claude Code / Codex 用户可安装 Skill。按你的使用方式选择下方入口。
task_id,不要重复提交;未收到 task_id 时保留 Request ID(如有)与时间,联系支持核查。直接对接 API:鉴权与创建任务
基址 https://aimasker.com。请求头使用 Authorization: Bearer <API Key>。开发者在自己的服务端密钥管理或运行环境中配置 Key;以下示例约定从 AIMASKER_API_KEY 读取。无需安装 Skill,不要把 Key 放在浏览器前端。
/v1/images/generations/asyncJSON · 生成任务/v1/images/edits/async表单 · 编辑任务| 参数 | 要求与建议 |
|---|---|
model | 必填,gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst 或 nano-banana-pro |
prompt | 必填,图片描述或编辑要求 |
size | 仅 gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst;建议显式传入,如 3840x2160;见下方像素尺寸表 |
quality | 仅 gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst;推荐 high,可选 low / medium / high |
aspect_ratio | 仅 nano-banana-pro;画面比例,如 1:1、16:9、9:16 |
output_resolution | 仅 nano-banana-pro;清晰度档位 1K / 2K / 4K |
n | 推荐 1;正整数,最终以服务端限制为准 |
output_format | 仅 gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst;推荐 png,可选 png / jpeg / webp |
image / image[] | 编辑必填,1–16 张文件;一张用 image,多张重复 image[] |
mask | 编辑可选蒙版文件;按接口支持的蒙版格式提供 |
gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst 使用 size + quality;nano-banana-pro 使用 aspect_ratio + output_resolution,不要混用两套参数。编辑的 multipart 边界由库生成,不手工设置 Content-Type。以下是创建片段;自动保存台账、轮询、下载的完整流程请使用下方 Skill 客户端。
if (-not $env:AIMASKER_API_KEY) { throw "请先设置环境变量" }
$headers = @{ Authorization = "Bearer $env:AIMASKER_API_KEY" }
$body = @{
model = "gpt-image-2"; prompt = "<图片描述>"
size = "3840x2160"; quality = "high"; n = 1; output_format = "png"
} | ConvertTo-Json
$reply = Invoke-RestMethod -Method Post -Uri "https://aimasker.com/v1/images/generations/async" -Headers $headers -ContentType "application/json; charset=utf-8" -Body ([Text.Encoding]::UTF8.GetBytes($body)) -TimeoutSec 120
$taskId = $reply.task_id
if (-not $taskId) { throw "未收到 task_id;停止并核查,不要重复提交" }
$taskFile = Join-Path (Get-Location) ("aimasker-task-" + [guid]::NewGuid().ToString("N") + ".txt")
Set-Content -LiteralPath $taskFile -Value $taskId
"task_id=$taskId"if (-not $env:AIMASKER_API_KEY) { throw "请先设置环境变量" }
$headers = @{ Authorization = "Bearer $env:AIMASKER_API_KEY" }
$body = @{
model = "nano-banana-pro"; prompt = "<图片描述>"
aspect_ratio = "16:9"; output_resolution = "4K"; n = 1
} | ConvertTo-Json
$reply = Invoke-RestMethod -Method Post -Uri "https://aimasker.com/v1/images/generations/async" -Headers $headers -ContentType "application/json; charset=utf-8" -Body ([Text.Encoding]::UTF8.GetBytes($body)) -TimeoutSec 120
$taskId = $reply.task_id
if (-not $taskId) { throw "未收到 task_id;停止并核查,不要重复提交" }
$taskFile = Join-Path (Get-Location) ("aimasker-task-" + [guid]::NewGuid().ToString("N") + ".txt")
Set-Content -LiteralPath $taskFile -Value $taskId
"task_id=$taskId"Bash 示例需要 curl 和 jq。响应文件仅保留本地,不上传;命令没有自动重试创建。
: "${AIMASKER_API_KEY:?请先设置环境变量}"
TASK_DIR=$(mktemp -d)
curl --fail-with-body --max-time 120 -sS \
'https://aimasker.com/v1/images/generations/async' \
-H "Authorization: Bearer $AIMASKER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"gpt-image-2","prompt":"<图片描述>","size":"3840x2160","quality":"high","n":1,"output_format":"png"}' \
-D "$TASK_DIR/headers.txt" -o "$TASK_DIR/create.json" &&
jq -er '.task_id' "$TASK_DIR/create.json" > "$TASK_DIR/task_id.txt"
# 任何失败都先停止核查;不要再次执行上面的创建命令。: "${AIMASKER_API_KEY:?请先设置环境变量}"
TASK_DIR=$(mktemp -d)
curl --fail-with-body --max-time 120 -sS \
'https://aimasker.com/v1/images/generations/async' \
-H "Authorization: Bearer $AIMASKER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"nano-banana-pro","prompt":"<图片描述>","aspect_ratio":"16:9","output_resolution":"4K","n":1}' \
-D "$TASK_DIR/headers.txt" -o "$TASK_DIR/create.json" &&
jq -er '.task_id' "$TASK_DIR/create.json" > "$TASK_DIR/task_id.txt"
# 任何失败都先停止核查;不要再次执行上面的创建命令。: "${AIMASKER_API_KEY:?请先设置环境变量}"
TASK_DIR=$(mktemp -d)
curl --fail-with-body --max-time 120 -sS \
'https://aimasker.com/v1/images/edits/async' \
-H "Authorization: Bearer $AIMASKER_API_KEY" \
-F 'model=gpt-image-2' -F 'prompt=<编辑要求>' \
-F 'size=3840x2160' -F 'quality=high' -F 'n=1' -F 'output_format=png' \
-F 'image[]=@reference-1.png' -F 'image[]=@reference-2.png' \
-D "$TASK_DIR/headers.txt" -o "$TASK_DIR/create.json" &&
jq -er '.task_id' "$TASK_DIR/create.json" > "$TASK_DIR/task_id.txt"
# 可选蒙版:在提交前加入 -F 'mask=@mask.png'。nano-banana-pro 编辑使用相同端点和参考图字段;把模型行改为 -F 'model=nano-banana-pro',并用 -F 'aspect_ratio=16:9' -F 'output_resolution=4K' 替换 GPT 的 size、quality 与 output_format 字段。
task_id,再进行下一步。若响应中断,即使未收到 ID,任务也可能已创建。查询状态,取得图片 URL
/v1/images/tasks/{task_id}使用创建任务时的同一 API Key。优先遵守 Retry-After,否则至少间隔 5 秒查询;设置总等待上限。短暂连接异常、429、5xx 可重试查询,不能重发创建请求。
| status | 含义 | 下一步 |
|---|---|---|
processing | 任务仍在处理 | 等待后查询同一 ID |
completed | 任务已完成 | 读取 result.data[].url |
failed | 任务失败 | 检查 error / http_status,保留 ID |
$taskId = (Get-Content -LiteralPath $taskFile -Raw).Trim()
$task = Invoke-RestMethod -Uri "https://aimasker.com/v1/images/tasks/$taskId" -Headers $headers -TimeoutSec 60
$task.status
if ($task.status -eq "completed") { $task.result.data | ForEach-Object { $_.url } }
# processing:至少等 5 秒再查询;failed:检查 error 和 http_status。TASK_ID=$(cat "$TASK_DIR/task_id.txt")
curl --fail-with-body --max-time 60 -sS \
"https://aimasker.com/v1/images/tasks/$TASK_ID" \
-H "Authorization: Bearer $AIMASKER_API_KEY" \
-D "$TASK_DIR/query-headers.txt" -o "$TASK_DIR/task.json" &&
jq '{status, urls: [.result.data[]?.url], error, http_status}' "$TASK_DIR/task.json"任务查询地址
任务查询地址可按固定模板 https://aimasker.com/v1/images/tasks/{task_id} 构造。任务完成后,遍历 result.data[].url 并使用响应中提供的完整 URL;不要追加 API 基址、改写路径或丢弃查询参数。
查询任务携带创建时使用的 API Key;获取结果图片时不携带 API Key。结果 URL 可能到期,应及时保存。
成功后保存全部图片
遍历 result.data[].url,不要只取首张;image_url 是首张图片的快捷字段。下载请求无需 API Key。先检查 HTTP 状态和图片可解码性,再保存为正式文件。
expires_at;这与图片对象是不同期限,不是图片精确删除时间。查询不保证延长保留期。模型比例与尺寸
Flare 与 Sunburst 的生成及编辑沿用下方 GPT 示例,将 model 改为对应的完整模型名即可。
GPT 图片模型像素尺寸
下表仅适用于 gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst。直接对接时,将表格中的像素值填入 size,并按需传 quality;档位名称不表示所有比例长边都为 4096。
| 比例 | 1K | 2K | 4K · 推荐 |
|---|---|---|---|
| 1:1 | 1024x1024 | 2048x2048 | 2880x2880 |
| 5:4 | 1120x896 | 2240x1792 | 3200x2560 |
| 4:3 | 1152x864 | 2304x1728 | 3264x2448 |
| 3:2 | 1248x832 | 2496x1664 | 3504x2336 |
| 16:9 | 1280x720 | 2560x1440 | 3840x2160 |
| 21:9 | 1456x624 | 3024x1296 | 3696x1584 |
| 4:5 | 896x1120 | 1792x2240 | 2560x3200 |
| 3:4 | 864x1152 | 1728x2304 | 2448x3264 |
| 2:3 | 832x1248 | 1664x2496 | 2336x3504 |
| 9:16 | 720x1280 | 1440x2560 | 2160x3840 |
nano-banana-pro 比例与清晰度
不要套用上面的像素尺寸表,也不需要计算 size。直接传 aspect_ratio(1:1、5:4、4:3、3:2、16:9、21:9、4:5、3:4、2:3 或 9:16)和 output_resolution(1K、2K 或 4K);不传 quality。实际像素以完成任务返回的图片为准。
安装 Skill 与配置环境变量
这部分只面向在 Claude Code 或 Codex 中使用图片技能的用户。无需逐条手写上方 API 请求,按下面三步完成设置。
第 1 步 · 选择软件并安装
新装目录按官方约定:Codex 为 ~/.agents/skills,Claude Code 为 ~/.claude/skills。若之前已装在 ~/.codex/skills 或自定义目录,升级时把下面 skillsRoot / SKILLS_ROOT 改成原目录,避免并存两个副本。
客户端负责创建一次、保存台账、查询状态、下载校验,支持 gpt-image-2、gpt-image-2.5-flare、gpt-image-2.5-sunburst 与 nano-banana-pro。支持原 task_id 查询及按台账恢复;默认模型为 GPT、默认 4K/high。
560bda04539ea212150f81d9489b92bf88fdfb48bb9df4461d18c9829fa7c7aaskill-backups,再安装干净副本。不会残留旧入口,也不改其他技能。请保存安装器输出的备份路径。$ErrorActionPreference = "Stop"
$stage = Join-Path $env:TEMP ("aimasker-install-" + [guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory -Path $stage | Out-Null
$zip = Join-Path $stage "aimasker-image-api.zip"
Invoke-WebRequest "https://aimasker.com/image-api-docs/downloads/aimasker-image-api.zip?v=2026.09.10.1" -OutFile $zip
if ((Get-FileHash $zip -Algorithm SHA256).Hash.ToLower() -ne "560bda04539ea212150f81d9489b92bf88fdfb48bb9df4461d18c9829fa7c7aa") { throw "校验失败,请重新获取最新文档与包" }
Expand-Archive -LiteralPath $zip -DestinationPath $stage
$skillsRoot = "$env:USERPROFILE\.agents\skills"
python "$stage\aimasker-image-api\scripts\install_skill.py" $zip --skills-dir $skillsRoot
if ($LASTEXITCODE -ne 0) { throw "安装失败,请保留现场" }
$skill = Join-Path $skillsRoot "aimasker-image-api"
python -m venv "$env:LOCALAPPDATA\aimasker-client-venv"
if ($LASTEXITCODE -ne 0) { throw "创建 Python 环境失败" }
$python = "$env:LOCALAPPDATA\aimasker-client-venv\Scripts\python.exe"
& $python -m pip install -r "$skill\requirements.txt"
if ($LASTEXITCODE -ne 0) { throw "依赖安装失败" }
$client = Join-Path $skill "scripts\aimasker_async_image.py"
& $python $client --help在 Bash 中执行。Linux 需要 Python 的 venv 组件。独立环境避免修改系统 Python。
install_aimasker() {
STAGE=$(mktemp -d) || return
ZIP="$STAGE/aimasker-image-api.zip"
curl -fLsS 'https://aimasker.com/image-api-docs/downloads/aimasker-image-api.zip?v=2026.09.10.1' -o "$ZIP" || return
python3 -c 'import hashlib,sys; assert hashlib.sha256(open(sys.argv[1],"rb").read()).hexdigest()==sys.argv[2], "ZIP checksum mismatch"' "$ZIP" '560bda04539ea212150f81d9489b92bf88fdfb48bb9df4461d18c9829fa7c7aa' || return
python3 -m zipfile -e "$ZIP" "$STAGE" || return
SKILLS_ROOT="$HOME/.agents/skills"
python3 "$STAGE/aimasker-image-api/scripts/install_skill.py" "$ZIP" --skills-dir "$SKILLS_ROOT" || return
SKILL="$SKILLS_ROOT/aimasker-image-api"
python3 -m venv "$HOME/.local/share/aimasker-client-venv" || return
PYTHON="$HOME/.local/share/aimasker-client-venv/bin/python"
"$PYTHON" -m pip install -r "$SKILL/requirements.txt" || return
CLIENT="$SKILL/scripts/aimasker_async_image.py"
"$PYTHON" "$CLIENT" --help
}
install_aimasker配置 Skill 使用的环境变量
在控制台获取 API Key,仅保存到 AIMASKER_API_KEY。下面通过隐藏输入设置,不把真实 Key 写进命令历史、代码或截图。
打开 PowerShell,执行后在隐藏输入框粘贴 Key。当前窗口立即生效。
$secret = Read-Host "AIMasker API Key" -AsSecureString
$env:AIMASKER_API_KEY = [System.Net.NetworkCredential]::new("", $secret).Password
Remove-Variable secret
if ($env:AIMASKER_API_KEY) { "已设置" } else { "未设置" }希望以后打开应用也能读取?
可保存到当前用户环境。执行后完整退出并重新打开应用和终端;若仍未继承,注销再登录。不会显示 Key。
[Environment]::SetEnvironmentVariable("AIMASKER_API_KEY", $env:AIMASKER_API_KEY, "User")macOS 默认终端可能是 zsh。先输入 bash 进入 Bash,再执行:
read -rsp 'AIMasker API Key: ' AIMASKER_API_KEY; printf '\n'
export AIMASKER_API_KEY
test -n "$AIMASKER_API_KEY" && printf '已设置\n' || printf '未设置\n'变量只供当前终端及其启动的程序使用。在这个终端启动技能宿主;已经打开的桌面应用不会自动得到它。
新终端持久生效:Bash / zsh 配置
手动编辑自己的 ~/.bashrc(Bash)或 ~/.zshrc(zsh),加入 export AIMASKER_API_KEY="<你的Key>",再打开对应的新终端。配置文件包含明文凭据,请用 chmod 600 <配置文件> 限制为本人读写,不上传或分享。
终端配置不保证从桌面启动的应用继承变量。桌面启动器需按宿主支持的环境变量方式配置;不建议把 Key 写进公共 profile 或项目文件。
第 3 步 · 检查识别并开始使用
设置变量后,从能够继承该变量的环境重新启动 Claude Code 或 Codex。先请助手“检查 AIMasker Skill 是否可用,只检查环境变量是否存在和 --help,不创建图片任务”。不要为测试安装发送收费请求。
Codex 可使用 $aimasker-image-api;Claude Code 可使用 /aimasker-image-api。告诉助手虚拟环境 Python 路径与输出目录;API Key 由技能读取,无需粘贴到对话。
高级:直接运行 Skill 客户端
先完成上方安装和环境变量设置。以下各行是独立用途,按需执行;创建操作可能计费。
# 创建生成任务:自动查询并下载,保存 manifest 与 task_id
& $python $client generate --prompt "<图片描述>" --ratio 16:9 --resolution 4K --quality high --output-dir ".\images"
# nano-banana-pro:直接发送比例和清晰度档位
& $python $client generate --model nano-banana-pro --prompt "<图片描述>" --ratio 16:9 --resolution 4K --output-dir ".\images"
# 编辑任务(另一项操作,不是上一步的必需步骤)
& $python $client edit --prompt "<编辑要求>" --image ".\reference.png" --output-dir ".\images"
# 已有 ID 时只查询/下载,不创建任务
& $python $client query --task-id "<原task_id>" --output-dir ".\images"
# 已有台账优先恢复,复用已校验的文件
& $python $client resume --manifest ".\images\<台账文件名>.json""$PYTHON" "$CLIENT" generate --prompt '<图片描述>' --ratio 16:9 --resolution 4K --quality high --output-dir ./images
"$PYTHON" "$CLIENT" generate --model nano-banana-pro --prompt '<图片描述>' --ratio 16:9 --resolution 4K --output-dir ./images
"$PYTHON" "$CLIENT" edit --prompt '<编辑要求>' --image ./reference.png --output-dir ./images"$PYTHON" "$CLIENT" query --task-id '<原task_id>' --output-dir ./images"$PYTHON" "$CLIENT" resume --manifest './images/<台账文件名>.json'可选参数:--model gpt-image-2|gpt-image-2.5-flare|gpt-image-2.5-sunburst|nano-banana-pro、--mask、--output-format png|jpeg|webp、--n、--max-wait(默认 1800 秒)。质量和输出格式参数只用于 GPT。重开终端后需重新指定 Python 与客户端路径;安装不会自动修改全局 Python。配置好变量后完整重启技能宿主。
目录依据:Codex 官方技能文档 · Claude Code 官方技能文档。安装位置与 API 鉴权是两件事;选择软件不会改变图片 API 的任务流程。
异常时,保留原任务
创建超时了,要再点一次吗?
不要。已有 task_id 就查询原 ID;没有 ID 就保留创建时间和 Request ID(如有),联系支持。服务器可能已接受请求,重复提交可能再次计费。
查询失败、404 或等了很久怎么办?
401/403 检查原 Key 是否有效;404 可能是 Key 不匹配、ID 错误或记录过期,不代表未计费。429/5xx 与短暂连接异常可等待后重试 GET。达到客户端等待上限时,以原台账恢复;未知状态先停止核查。
任务完成了,但图片没有下载成功?
运行 resume --manifest <原台账>。它只查询原任务并下载缺失图片,不重新生成;已通过 SHA-256 核验的文件复用。未完成的图片从头下载,.part 不算成功结果。客户端使用任务响应中的 HTTPS 结果 URL,不携带 API Key、不跟随重定向;单张最多 100 MiB。
失败记录和台账应该怎样保存?
客户端记录 task_id、Request ID(如有)、创建时间、状态、文件大小和校验值,不记录 Key 或提示词原文。台账和图片只在本地保管,不放进公共仓库。错误信息可能包含业务内容,分享前脱敏;不要从客户端异常推断费用结果。
如何回退已安装的 Skill?
退出宿主,把当前这一项技能移到新的备份位置,再将安装器记录的旧技能备份移回原安装路径。不合并目录、不删除整个 skills、不覆盖其他技能。