Part Two · 核心操作
05
Transparent Cutout · 抠出透明背景

抠出透明背景

内置工具没有一个叫"透明"的开关——因为 gpt-image-2 根本不支持 background=transparent。这一章教你绕过这堵墙:先在纯色幕布前生成主体,再用 remove_chroma_key.py 把幕布抠掉,得到带 alpha 通道、四角干净的 PNG。整套流程默认全在内置模式里完成,不动一行密钥。

"透明背景"是自媒体物料里最常见的硬需求:贴纸、Logo、商品小图、可叠加的角色立绘,都要一张能落在任意底色上的 PNG。但内置工具里找不到一个"透明"按钮——这不是疏漏,而是底层模型的限制。本章给你一条不依赖 API Key 的稳定路线:色度键合成(chroma key)

为什么内置没有"真透明开关"

内置 image_gen 背后的模型是 gpt-image-2,而它不支持 background=transparent 这个参数。真正的"原生透明"——让模型直接吐出带 alpha 通道的图——只有 CLI 回退里的 gpt-image-1.5 能做,而那需要 OPENAI_API_KEY、需要联网、需要花钱。

所以面对绝大多数透明需求,正确的默认动作不是切 CLI,而是换个思路:既然模型不能直接画透明,那就让它在一块"完全平整的纯色幕布"上画主体,事后我们自己把这块幕布抠掉。这正是影视绿幕(chroma key)的逻辑——拍的时候站在绿布前,后期把绿色替换成透明。

关键判断

简单透明 = 内置生成 + 本地色度键移除,全程无需 Key。只有当本地移除校验失败、或主体本身复杂到色度键搞不定(头发、毛羽、玻璃、烟雾、半透明、柔和阴影……)时,才先征求同意再升级到 gpt-image-1.5 的真透明。顺序不能反。

01 02 03 04 纯色幕布生成 内置 image_gen key 色 #00ff00 拷入 workspace move / copy tmp/imagegen/ 脚本抠键色 remove_chroma_key → alpha PNG 校验落地 四角透明 final.png 生成 → 抠图 → 校验 → 落地 · 一条不离开内置的管线
透明背景生产管线:在纯色幕布前生成,拷进工作区,跑脚本抠键色,校验后落地。

默认流程:色度键四步走

把上图拆成可照做的四步。整条流程的"主战场"始终是内置工具,唯一动到命令行的地方是第四步那一行本地脚本——它只是图像后处理,不调用任何远程 API。

  1. 在纯色幕布上生成主体

    用内置 image_gen,提示词里明确要求"完全平整的纯色色度键背景"。这一步决定抠图成败——幕布越干净,后面越省事。

  2. 选对 key 色

    默认 #00ff00(纯绿)。但若主体本身偏绿,改用 #ff00ff(品红);若主体偏蓝,避开 #0000ff。原则:key 色绝不能和主体撞色,否则主体会被一起抠掉。

  3. 把源图拷进工作区或 tmp

    内置默认存到 $CODEX_HOME/generated_images/…。先 move/copy 到工作区或 tmp/imagegen/,再对它跑脚本——别在默认目录里直接操作。

  4. 跑 remove_chroma_key.py 并校验

    脚本输出带 alpha 的 final.png。逐项校验四角透明、无 key 色残边,必要时加 flag 微调(见 第五节)。

key 色速查

普通主体 → #00ff00(绿,默认)。绿色 / 含绿主体 → #ff00ff(品红)。蓝色主体 → 任选绿或品红,但避免 #0000ff。挑色的唯一标准是"和主体最不像的那个"。

写好色度键提示词

抠图脚本再聪明,也救不回一块带阴影、带渐变、有反光的幕布。质量在提示词阶段就锁定了。技能给了五个要点,缺一不可:

提示词 · 色度键透明(中文)内置 image_gen
一个 扁平风格的橙色快递纸箱图标,居中,置于纯 #00ff00 的完全平整纯色背景上以便抠图。背景单一均匀,无阴影、无渐变、无纹理、无反射、无地面、无光照变化。主体与背景完全分离、边缘清晰,四周留足内边距。主体内部不得出现任何 #00ff00无投影、无接触阴影、无反射、无水印、无文字
透明色度键key #00ff00
Prompt · chroma-key style tokens (EN)built-in image_gen
[subject], centered on a perfectly flat solid #00ff00 chroma-key background for clean cutout; background uniform, no shadows, no gradients, no texture, no reflections, no ground plane, no lighting variation; subject fully separated, crisp edges, generous padding; no #00ff00 anywhere inside the subject; no drop shadow, no contact shadow, no reflection, no watermark, no text.
transparentchroma-key
提示:主体偏绿时,把上面两版里的 #00ff00 整体替换为 #ff00ff,并相应把"主体内不得出现 #00ff00"改成"不得出现 #ff00ff"。其余措辞不变。

运行抠图脚本

幕布图拷进工作区后,对它跑技能自带的本地后处理脚本。它纯靠 pillow 做图像运算,不联网、不要 Key,但需要先 uv pip install pillow。下面这条命令带齐了推荐 flag:

terminal
# 先把内置生成的源图拷进工作区 $ mkdir -p tmp/imagegen && cp "$CODEX_HOME/generated_images/box-chroma.png" tmp/imagegen/ # 抠掉 key 色,得到带 alpha 的 final.png $ python "${CODEX_HOME:-$HOME/.codex}/skills/.system/imagegen/scripts/remove_chroma_key.py" \ --input tmp/imagegen/box-chroma.png \ --out output/imagegen/box-icon.png \ --auto-key border \ --soft-matte \ --transparent-threshold 12 \ --opaque-threshold 220 \ --despill
这几个 flag 在干什么

--auto-key border 从图像四边自动判定 key 色,省得你手填 HEX;--soft-matte 生成柔和的边缘过渡而非硬切;--transparent-threshold 12--opaque-threshold 220 划定"完全透明"与"完全不透明"的两道门槛;--despill 去掉主体边缘被幕布染上的那圈绿边(溢色)。这套参数是适配绝大多数情形的稳妥起点。

校验清单与边缘微调

脚本跑完别急着交付。逐条过一遍校验清单——任何一条不达标,都意味着要么重生成、要么调 flag 重抠:

若发现问题,一次只调一个参数再复检,别一把堆上去。下表列出最常见的边缘瑕疵与对应解法:

症状追加 flag作用
主体边缘有一圈细细的 key 色残留--edge-contract 1把 alpha 边界向内收缩 1 像素,吃掉那圈细边。
边缘呈锯齿 / 阶梯状,且主体不反光--edge-feather 0.25给边缘加一点羽化,让阶梯过渡变柔。
边缘有整圈溢色(绿 / 品红染边)--despill已在基础命令里;这是去溢色的主力 flag。
提示:--edge-feather 只在"边缘阶梯化 主体不反光"时才加。主体若本就有反光 / 高光,羽化会让边界发糊;这种情况应优先考虑重生成或升级真透明,而不是硬羽化。

何时升级到真·原生透明

色度键能干净利落地处理"边缘明确、不透明、不反光"的主体——图标、贴纸、扁平插画、实心商品。但有一类主体它天生啃不动:

色度键够用

实心边缘、不透明、无柔影的主体:扁平图标、Logo、贴纸、纯色商品、卡通角色立绘。这些留在内置 + 本地抠图即可,又快又省。

需要真透明

头发 / 毛发 / 羽毛、烟雾、玻璃、液体、半透明、反光材质、写实柔和阴影、写实落地接触面,或主体颜色与所有可用 key 色都冲突——这些是色度键的死角。

红线 · 别自动上 gpt-image-1.5

遇到复杂主体、或本地抠图校验反复失败时,绝不要擅自切到 CLI 的 gpt-image-1.5 真透明——那是一次需要 Key、联网、花钱的模型升级。正确动作是先停下来问用户:解释清楚 gpt-image-2 不支持 background=transparent、真透明需 gpt-image-1.5 且需 OPENAI_API_KEY,得到明确同意后,再走 CLI 回退。

一旦用户拍板要真透明,CLI 路径的关键形态是:用 scripts/image_gen.py 的 generate 子命令、指定 gpt-image-1.5 模型,并带上 --background transparent--output-format png。它会让模型直接输出带 alpha 的 PNG,跳过整套色度键流程。但记住:这是最后一个抽屉,不是默认动作。

无论走哪条路,收尾都一样

始终向用户汇报三件事:最终保存路径(落地进工作区,别只留在 $CODEX_HOME)、最终用的提示词、以及用了哪种模式(内置 + 色度键,还是 CLI 真透明)。不覆盖已有资产,需要新版就另存 box-icon-v2.png

本章 TL;DR

内置工具没有透明开关,因为 gpt-image-2 不支持 background=transparent。默认走色度键四步:在纯色幕布(key 色默认 #00ff00 / 绿色主体用 #ff00ff / 蓝色主体避开 #0000ff)前生成 → 拷进工作区或 tmp/imagegen → 跑 remove_chroma_key.py --auto-key border --soft-matte --despill → 校验四角透明、无残边。细边加 --edge-contract 1,阶梯且不反光才加 --edge-feather 0.25。只有头发 / 玻璃 / 烟雾 / 反光等复杂主体才需真透明——那要先问,再用 CLI 的 gpt-image-1.5 配 --background transparent(需 Key)。收尾务必汇报路径、提示词与所用模式。