1. 为什么“让 Codex 生成 PSD”这件事值得单独聊先把结论摆在前面让 Codex 直接吐出一个能用的 PSD本身不难难的是很多人把提示词写成了“许愿池”指望一句话就换来一个分层清晰、命名规范、还能继续编辑的工程文件。我前后试过几十次从最开始只能拿到一张扁平图到后来能稳定产出带图层组、带蒙版、带文字层的 PSD中间踩的坑基本都集中在提示词结构和输出约束上而不是模型能力本身。这里说的 Codex指的是那类能读写文件、能执行脚本的编程智能体形态。它和纯聊天式模型最大的区别在于它不只是“说”它还能“做”——能写 Python、能调库、能在你的机器上跑出一条完整的生成链路。PSD 这种格式恰好是“说”不出来的你没法用自然语言直接描述二进制结构但你可以让 Codex 写一段用psd-tools、pytoshop或者直接调 Photoshop 脚本的代码把图层一层层搭出来。所以整件事的本质是提示词负责描述结构Codex 负责把结构翻译成代码代码负责把代码翻译成 PSD。这套流程适合谁一是做设计自动化的人比如要批量产出电商主图、学术海报、社媒配图的二是做 AI 工作流的人想把文生图的结果进一步拆成可编辑分层文件的三是单纯想搞明白“提示词工程在文件生成场景下到底怎么落地”的开发者。哪怕你之前没碰过 PSD 的二进制结构只要提示词写对了Codex 能帮你把大部分脏活干掉。我先把最容易翻车的地方点出来绝大多数人失败不是因为模型不会写代码而是因为提示词里没有定义“图层契约”。你只说“生成一个海报 PSD”Codex 只能猜你如果说“生成一个 1080x1440 的 PSD包含背景层、主标题文字层、副标题文字层、产品图占位层、装饰元素组每层命名用英文下划线文字层保留可编辑属性”它就能给你一个像样的东西。差别就在这。2. 提示词到底该怎么写从“许愿”到“契约”2.1 先搞清楚 Codex 拿到提示词后会发生什么很多人写提示词是站在“跟人说话”的角度但 Codex 拿到提示词后实际执行路径是这样的先解析你的意图判断这件事能不能用代码实现然后选择技术路线比如是用psd-tools从零构建还是先合成一张图再反向分层接着写脚本、装依赖、跑脚本最后检查产物是否存在、尺寸对不对。你写的每一个模糊词都会在这个链条里被放大成一次猜测而猜测越多产物越偏离预期。所以提示词的第一原则是把“我要什么”翻译成“代码能验证什么”。“好看”没法验证“1080x1440、RGB、72dpi”可以验证“分层清晰”没法验证“图层数量为 6、命名匹配正则^[a-z_]$”可以验证。你不需要懂 PSD 格式但你需要懂“可验证”这件事。我自己的习惯是提示词里永远包含三块产物规格、图层结构、验收标准。产物规格管尺寸、色彩模式、位深图层结构管有哪些层、什么类型、什么顺序验收标准管跑完之后怎么判断成功。这三块写全了Codex 的产出稳定性会有肉眼可见的提升。2.2 一个能直接抄的提示词骨架下面这个骨架我用了很多次改改参数就能复用。注意它不是让你一次性全填满而是给你一个结构参考任务生成一个 PSD 文件 产物规格 - 画布尺寸1080 x 1440 px - 色彩模式RGB - 位深8 bit - 分辨率72 dpi - 输出路径./output/poster.psd 图层结构从下到上 1. 背景层命名 background纯色填充 #0F172A 2. 装饰组命名 decor_group包含 3 个矩形形状层 3. 主视觉占位层命名 hero_placeholder尺寸 800x600居中 4. 主标题文字层命名 title_text内容 YOUR TITLE字号 96颜色 #FFFFFF 5. 副标题文字层命名 subtitle_text内容 subtitle here字号 36颜色 #94A3B8 技术要求 - 使用 Python 的 psd-tools 或 pytoshop 库 - 文字层必须保留可编辑属性不要栅格化 - 每个图层必须有明确的 name 属性 - 脚本执行完成后打印图层清单 验收标准 - 文件存在且大小大于 10KB - 用 psd-tools 打开后图层数量等于 5 - 图层名称与上述命名完全一致这个骨架的关键在于最后那段“验收标准”。它逼着 Codex 在生成之后自己验证一遍而不是写完脚本就交差。我实测下来加了验收标准的任务返工率能降一半以上。2.3 为什么“分层”比“生成”更难这里要展开讲一个很多人忽略的点生成一张图很容易生成一个分层结构很难。因为图像生成模型输出的是像素而 PSD 的核心价值在于“结构”。你要的不是一张好看的图而是一个能继续编辑的工程文件。这两件事在技术上是两条路。Codex 处理这件事有两条常见路线。第一条是“从零构建”直接用psd-tools创建图层、设置属性、写入文件。这条路可控性最高但要求提示词把结构描述得非常细。第二条是“先合成再拆分”先用文生图产出一张底图再用分割或抠图把元素拆成图层。这条路视觉效果好但分层质量取决于分割精度而且文字层基本没法保留可编辑性。我的建议是如果你的核心诉求是“可编辑”走第一条路如果核心诉求是“好看”走第二条路但别指望文字能编辑。提示词里要明确告诉 Codex 走哪条路否则它会自己选而它选的那条未必是你想要的。我见过太多人抱怨“生成的 PSD 打开只有一层”一问提示词压根没提分层要求Codex 自然就给你一张扁平图。3. 实操全流程从零跑通一个可编辑 PSD3.1 环境准备与依赖选择先解决环境问题。Codex 要跑 Python 脚本你本地得有 Python 环境建议 3.9 以上。核心依赖是psd-tools它读取和写入都支持虽然写入能力不如读取那么完善但应付基础图层结构足够了。如果你需要更底层的控制可以上pytoshop它更接近 PSD 的原始结构但 API 没那么友好。安装命令很简单pip install psd-tools pillow如果你打算走“先合成再拆分”的路线还得加上图像处理相关的库比如opencv-python、rembg之类。但我不建议一上来就搞那么复杂先把最基础的“从零构建分层 PSD”跑通再考虑加视觉元素。这里有个坑要提前说psd-tools在写入文字层时的支持是有限的。它能把文字层写进去但字体、行距这些属性的保留程度取决于版本。如果你对文字排版要求很高可能得考虑用 Photoshop 的脚本接口或者干脆用pytoshop手动构造文字层描述。我个人的经验是先用psd-tools把结构跑通文字层能保留内容就行精细排版后期在 PS 里调。别一上来就追求完美那样容易卡在细节里出不来。3.2 提示词里必须写死的几个参数在真正让 Codex 动手之前提示词里有几个参数我建议你写死不要留给它猜参数项建议写法为什么不能省画布尺寸明确像素值如 1080x1440不写的话 Codex 可能默认 512x512 或 1024x1024色彩模式RGB 或 CMYK印刷用途必须 CMYK屏幕用途 RGB搞反了颜色会偏位深8 bit 或 16 bit8 bit 够用16 bit 文件大且部分库支持不好分辨率72 dpi 或 300 dpi印刷要 300屏幕 72 就够影响文件体积图层命名规则如全小写加下划线不写的话命名会很随意后期脚本处理很痛苦文字是否栅格化明确写“不栅格化”默认行为不确定栅格化后就没法编辑了这张表里的每一项我都因为没写而翻过车。最典型的一次是没写色彩模式Codex 默认给了 RGB结果拿去印刷颜色完全不对返工重做。还有一次没写图层命名规则生成出来一堆Layer 1、Layer 2后期想批量处理根本没法下手。3.3 完整实操让 Codex 生成一个海报 PSD现在把前面的东西串起来走一遍完整流程。假设我要生成一个学术海报的 PSD 模板尺寸 A4 竖版300 dpiCMYK 模式包含标题、作者、正文占位、图表占位、页脚几个区域。第一步把提示词写清楚。我会这样组织任务生成一个学术海报 PSD 模板 产物规格 - 画布2480 x 3508 pxA4 300dpi - 色彩模式CMYK - 位深8 bit - 分辨率300 dpi - 输出./output/academic_poster.psd 图层结构从下到上 1. background纯白填充 2. header_block矩形形状层高度 400px填充 #1E3A8A 3. title_text文字层内容 PAPER TITLE字号 120颜色 #FFFFFF位于 header 内 4. author_text文字层内容 Author Name, Affiliation字号 48颜色 #E2E8F0 5. body_placeholder矩形形状层填充 #F1F5F9用于正文 6. figure_placeholder矩形形状层填充 #E2E8F0用于图表 7. footer_text文字层内容 Conference Name 2025字号 36颜色 #64748B 技术要求 - 使用 psd-tools 构建 - 文字层不栅格化 - 所有图层命名严格按上述英文名 - 脚本末尾打印图层树 验收标准 - 文件存在大小 50KB - 图层数量为 7 - 用 psd-tools 读取后每个图层的 name 与预期一致 - 画布尺寸和色彩模式与规格一致第二步把这段提示词交给 Codex让它生成脚本并执行。正常情况下它会写出一段类似这样的代码from psd_tools import PSDImage from psd_tools.api.layers import PixelLayer, ShapeLayer, TypeLayer # 创建画布 psd PSDImage.new(modeCMYK, size(2480, 3508), depth8) # 背景层 bg PixelLayer.frompil(Image.new(CMYK, (2480, 3508), (0, 0, 0, 0)), psd, namebackground) psd.append(bg) # 后续图层依次 append # ... psd.save(./output/academic_poster.psd)实际代码会比这个长很多因为要处理每个图层的定位、填充、文字属性。但核心逻辑就是这样创建画布、逐层追加、保存文件。Codex 的价值在于它能把每个图层的属性都填对你只需要在提示词里把结构描述清楚。第三步跑完之后验证。我会让 Codex 自己跑一段验证脚本from psd_tools import PSDImage psd PSDImage.open(./output/academic_poster.psd) print(size:, psd.size) print(mode:, psd.color_mode) for layer in psd: print(layer.name, layer.kind, layer.bbox)如果输出的图层清单和提示词里的结构对得上这事就成了。对不上就把差异点补进提示词再跑一遍。通常两三轮之内就能收敛。3.4 文字层保留可编辑属性的关键操作这里单独拎出来讲因为文字层是翻车重灾区。psd-tools写文字层时如果你只是塞一个字符串进去它可能给你生成一个栅格化的像素层打开 PS 一看就是一张图没法改字。要保留可编辑属性提示词里必须明确要求“使用 TypeLayer”或者“保留文字引擎数据”。我实测下来比较稳的做法是让 Codex 用psd-tools的TypeLayer接口并且在提示词里加一句“文字层必须包含 engine_dict 数据确保在 Photoshop 中可编辑。” 这句话看起来技术性很强但它确实能引导 Codex 走正确的代码路径。如果不加它很可能图省事直接给你栅格化。还有一个细节字体。PSD 里的文字层会记录字体名称如果你指定的字体本地没有PS 打开时会提示替换。提示词里最好写一个通用字体比如 Arial 或 Helvetica别写太冷门的。我试过写“思源黑体”结果 Codex 生成的 PSD 在没装这个字体的机器上打开全是替换提示体验很差。4. 常见问题与排查技巧实录4.1 生成的 PSD 打开只有一层怎么办这是最高频的问题。原因基本只有一个提示词里没有明确要求分层或者要求了但不够具体。Codex 在不确定的时候倾向于走最简单的路径——生成一张扁平图然后包成 PSD。解决办法是把图层结构写成有序列表每一层都给出名称、类型、内容、位置。越具体越好。如果已经写得很具体了还是只有一层那可能是库的限制。psd-tools在某些版本下写入多层时会有兼容问题建议升级到最新版或者换pytoshop试试。我遇到过psd-tools1.9.x 写入多层后 PS 打不开的情况升到 1.9.24 之后就好了。4.2 文字层变成图片了怎么救前面提过核心是提示词里明确“不栅格化”和“使用 TypeLayer”。如果已经生成了栅格化的版本没法直接救回来只能重新生成。所以这事重在预防别等出了问题再想办法。另外即使提示词写对了不同版本的psd-tools对文字层的支持也不一样。我建议在验收标准里加一条“用 psd-tools 读取时文字层的 kind 应为 type。” 这样跑完就能立刻发现是不是被栅格化了。4.3 文件打不开或提示损坏这种情况通常是写入过程中出了问题比如图层数据不完整、色彩模式不匹配、或者文件头写错了。排查思路是先用psd-tools自己读一遍看能不能正常打开。如果psd-tools能读但 PS 打不开那多半是兼容性问题试试降低位深或者换 RGB 模式。如果psd-tools也读不了那就是写入逻辑有 bug让 Codex 检查脚本里的 save 部分。我踩过的一个坑是CMYK 模式下某些图层属性写得不完整导致 PS 报错。后来改成先 RGB 生成再用 PS 转 CMYK反而更稳。所以如果你不是非要一步到位可以分两步走。4.4 图层位置全乱了怎么调位置问题通常是因为提示词里没给坐标。Codex 不知道你要把标题放哪就只能猜。解决办法是在图层结构里加上位置描述比如“title_text 位于画布顶部居中距顶边 200px”。有了这个约束Codex 就能算出正确的 bbox。如果已经生成了但位置不对不用重新生成整个文件可以让 Codex 写一段脚本单独调整某个图层的 bbox然后保存。这样比重跑一遍快得多。4.5 常见问题速查表问题现象最可能原因解决方向只有一层提示词未要求分层补全图层结构列表文字不可编辑被栅格化提示词加“不栅格化”和 TypeLayer文件打不开写入不完整或兼容问题换 RGB、升级库、检查 save 逻辑图层位置错乱未指定坐标提示词补充位置描述颜色偏差色彩模式不对明确 RGB 或 CMYK字体被替换指定了本地没有的字体改用通用字体文件体积异常大位深过高或图层过多降位深、合并冗余层这张表里的每一条都是我实际遇到过的。你可以把它当成一个排查清单出问题的时候对着看基本能定位到原因。5. 进阶玩法把 PSD 生成接入更大的工作流5.1 批量生成一次产出多个变体单次生成跑通之后下一步自然是批量。思路很简单把提示词里的可变部分抽成参数让 Codex 写一个循环每次改参数、生成一个 PSD。比如做电商主图你可以准备一个 CSV里面是不同产品的标题、副标题、价格然后让 Codex 读 CSV、循环生成。这里的关键是把提示词模板化。你可以写一个prompt_template.txt里面用占位符标记可变部分然后让 Codex 读模板、替换占位符、执行生成。这样你改需求只需要改模板不用每次重写提示词。批量生成时要注意文件命名和输出目录的管理否则跑完一堆文件混在一起找都找不到。我一般让 Codex 按{产品ID}_{日期}.psd的规则命名输出到按日期分的子目录里。5.2 与文生图结合先出图再分层如果你需要视觉丰富的 PSD纯代码构建的图层会显得很“素”。这时候可以结合文生图先用图像模型生成一张底图再让 Codex 写脚本把底图导入 PSD 作为背景层然后在上面叠加文字层和形状层。这样既有视觉冲击力又保留了关键元素的可编辑性。提示词里要写清楚“背景层使用 ./assets/bg.png其余图层用代码构建。” Codex 会处理好图片导入和图层叠加的逻辑。注意图片的分辨率要和画布匹配否则会被拉伸变形。5.3 反向操作把现有 PSD 拆解成提示词这个玩法比较有意思你手里有一个设计好的 PSD想让 Codex 学会它的结构以后按类似结构生成。做法是让 Codex 写脚本读取这个 PSD输出图层树、每个图层的属性、文字内容然后你把这些信息整理成提示词模板。相当于用现有文件“教”Codex 你的设计规范。我试过用这个方法把一个学术海报模板拆成提示词之后生成同系列的海报就非常快结构完全一致只需要改文字内容。这比每次从零描述结构高效得多。6. 我个人的几条实操心得第一提示词里的验收标准比生成指令更重要。很多人把精力全花在描述“我要什么”上却忘了描述“怎么算成功”。加上验收标准之后Codex 会自己检查一遍很多低级错误在交付前就被它自己修掉了。第二别追求一次完美。我现在的习惯是先跑一个最小可用的版本确认分层结构对了再逐步加细节。一上来就写一个几百行的提示词反而容易因为某个细节没写对导致整体失败排查起来也痛苦。第三图层命名一定要规范。这不是洁癖是实用需求。后期你要批量改文字、批量换图全靠图层名称来定位。命名乱了脚本就没法写。我一般用全小写加下划线语义清晰比如title_text、hero_image、footer_logo。第四文字层能少则少。每多一个文字层就多一份字体兼容风险。如果某些文字不需要编辑直接栅格化反而更稳。只有真正需要后期改的内容才保留为文字层。第五保存中间产物。让 Codex 在生成 PSD 的同时也输出一份图层结构的 JSON。这样即使 PSD 出了问题你还能从 JSON 里恢复结构信息不用重新分析。这套流程我跑了小半年从最开始十次有八次翻车到现在基本两三次就能出一个能用的文件。核心变化不是模型变强了而是提示词从“许愿”变成了“契约”。你把结构描述清楚把验收标准写明白Codex 就能稳定地把你的意图翻译成可编辑的 PSD。这件事的门槛不在技术在于你愿不愿意花十分钟把需求写清楚。