ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Photoshop集成AI绘画:LoRA预览与XL图生图完整实现指南

Photoshop集成AI绘画:LoRA预览与XL图生图完整实现指南 这几年接触 AI 绘画项目我用得最多的不是 WebUI 或 ComfyUI 本身而是把生成结果拉回 Photoshop 做二次处理的那一段路。过去的工作方式非常“割裂”在 Stable Diffusion 里调 LoRA、放大、重绘回到 Photoshop 改细节不满意再切回 WebUI 再抽卡一次。真正消耗时间的不是“生成”本身而是应用上下文频繁切换带来的不连贯感。“在 Photoshop 里跑 LoRA 预览”这个需求看起来像一个插件工程其实真正要解决的是设计师与模型之间的“反馈回路”。如果能做到当前 PSD 里的图层保留不动面板上随时选一个 LoRA立即用 XL 图生图/文生图的方式出一张预览图并把预览结果一键放回 Photoshop整个 AI 绘画工作流才算真正被重构。这也是我在【B站AI创造公开赛】这类 AI 创作比赛中更推荐大家尝试的方向——它技术难度适中但工程价值和演示效果都足够好。这篇文章会从三条线展开第一先把 LoRA、XL图生图、文生图、krea2 文生图背后的概念理清楚第二给出一个 Photoshop 插件 本地后端服务的整体架构第三放出一套可以直接落地的最小实现代码并给出运行验证和常见排错方法。1. 这篇文章真正要解决的问题先说结论把 AI 绘画能力“塞进 Photoshop”技术上的难点从来不是 Photoshop 能不能调用外部服务而是你能不能把每一步生成都控制在设计师熟悉的上下文里。很多 AI 绘画本地部署的使用者会陷入一个误区以为只要装一个插件、套一个 WebUI 地址就能让 Photoshop 直接“拥有”AI 绘画。实际上Photoshop 插件面板能做的是界面展示和 JavaScript 通信真正承担出图任务的是你本机或局域网里的生成服务。这个服务可能是 Stable Diffusion WebUI、ComfyUI也可能是 Krea 这类云端实时生成平台。插件只是一个“遥控器”。想通这一点后你会发现真正值得设计的是一个“预览系统”把 LoRA 模型做成可视化的卡片或列表而不是让你去记一串 trigger words让你能在当前画布内容或当前图层截图上直接发起图生图而不是先导出 PNG 再拖进另一个窗口让你在同一个面板里看到不同 LoRA、不同权重的输出差异让你选中满意结果后一键把它转成 Photoshop 新图层。如果你正准备动手做 AI绘画、Photoshop 自动化、LoRA 工作流、XL图生图相关课程或竞赛项目这篇文章能帮你打通从“能出图”到“能交付”的关键环节。如果你是负责二次元立绘、游戏图标、电商海报、排版素材的设计师读完这套最小实现后也会清楚拿它改造自己的流程需要准备哪些东西。2. 基础概念与核心原理2.1 先分清模型、底模与 LoRAAI 绘画里经常说的模型很多时候不是同一个东西。底模Base Model真正懂图像生成的神经网络基座。XL 一般指 SDXLStable Diffusion XL是相比 1.5 时代更高分辨率、更懂细节的底模方向。LoRALow-Rank Adaptation一种低秩微调产物它不会单独完成生成而是作为底模的“风格补丁”或“角色补丁”注入到采样过程。Checkpoint可以理解为合并好的完整模型通常已经包含部分 LoRA 能力使用比单独加载多个 LoRA 更直接。所以当你说“我下载了一个 LoRA但在列表里看不到”时首先要确认它是不是真的放进了生成服务所指定的 lora 模型目录而不是放进 Photoshop 的某个文件夹。2.2 XL图生图不是“放大图片”这么简单中文社区里经常出现“XL图生图”这个说法。它本质上是“以 SDXL 系列模型为底模以一张输入图作为构图/色彩/轮廓参考再根据提示词重新生成一张新图”。图生图的关键参数是denoising strength重绘幅度它控制新图和原图的相似程度重绘幅度接近 0几乎保持原图。重绘幅度接近 1基本变成另一张图原图只提供构图或颜色分布。在 Photoshop 工作流中图生图的价值是设计师把半成品图层或草稿作为底图AI 可以在保留构图的前提下补完细节或者把“线稿转成成品”。这也是 LoRA 预览最常见的用法——因为很多 LoRA 的效果必须结合具体角色构图才能看出是否满意单纯文生图经常看不出风格差异。2.3 文生图与 krea2 文生图文生图txt2img就是仅通过提示词生成图片。对 LoRA 预览来说文生图的意义在于“快速验证这个 LoRA 在没有构图约束下的风格倾向”。krea2 是当前实时生成类 AI 工具中的一个常见关键词它的特点是画布实时渲染、反馈延迟短适合在创作早期快速探索。不过在工程集成里“krea2 文生图”更多代表的是某一类支持 HTTP 调用或工作流嵌入的文生图服务。这里给一个判断如果你的主要产出是图层、抠像、合成、精修建议把工作重心放在本地 SD WebUI/ComfyUI 的 API 接口上。它们的接口更稳定回传图片也方便。云端工具适合作为灵感探索的辅助通道没必要在项目初始阶段就把它们做成强依赖。2.4 Photoshop 插件扩展的两种技术方向Photoshop 扩展开发目前主要有两条路技术方向界面技术适合场景学习成本CEP 扩展HTML/CSS/JS成熟稳定市场插件多用中UXP 插件类 React 现代前端Adobe 新方向中高CEP 虽然在逐步被 UXP 取代但它的资料多、面试/比赛演示中容易跑通也更容易在网上找到现成模板。本文的核心示例会以 CEP 风格为主因为它的核心逻辑可以被 UXP 复用界面负责展示JS 负责调用 Photoshop DOM外部 HTTP 请求统一交给本地后端服务。最终架构其实和“前端调后端”没什么区别Photoshop CEP 面板 ↓ evalScript / HTTP Photoshop DOM 与图层导出 ↓ HTTP 本地服务层Python FastAPI / Node ↓ HTTP Stable Diffusion WebUI / ComfyUI / 云端文生图服务3. 整体架构设计LoRA 预览系统应该包含什么模块先看没有预览系统时的工作流在 WebUI 里选择底模和 LoRA。反复调整提示词和参数。生成多张图保存到本地。切到 Photoshop手动拖入抠图、合成。不满意回到第 1 步。整个过程非常断裂。引入 Photoshop LoRA 预览系统之后理想流程变成Photoshop 打开当前工程插件面板自动扫描本地 LoRA 列表。设计师点某个 LoRA 卡片面板请求后端用默认提示词生成一张预览图。设计师把当前画布或图层发送到后端作为图生图的底图并在面板中调节参数。返回结果直接“作为新图层”放进当前 PSD。设计师继续在 Photoshop 中精修不需要离开软件。这套系统可以拆成五个模块模型仓库模块扫描 LoRA 目录维护 name / 触发词 / 示例图 / 标签。参数配置模块管理底模选择、采样器、步数、CFG、重绘幅度。PS 交互模块在 Photoshop 里读取当前图层发起导出临时图并把生成图放回文档。生成服务模块封装 txt2img 和 img2img可切换 SD WebUI / ComfyUI 接口。任务队列模块因为后端生成耗时面板必须支持异步不能直接卡死 UI。在资源有限时建议优先级是“PS 交互模块 生成服务模块 模型仓库模块 参数配置模块 任务队列模块”。比赛或演示项目中先跑通前四个队列最后再补。4. 环境准备与前置条件本文的示例以教学演示为目标运行顺序和依赖如下版本以实际安装为准不写死具体版本号Photoshop建议使用 Adobe Creative Cloud 订阅的版本安装后需要能在“增效工具/扩展”中加载未签名扩展。Stable Diffusion WebUI需要启动时开启 API 模式。Python 3.10 或更高版本用于运行 FastAPI 后端。Node.js 或任意静态服务器用于在开发阶段加载 CEP 扩展调试。实际也可以直接用 Photoshop 的“载入扩展”功能。LoRA 模型文件存放在 WebUI 的models/Lora目录常见格式为.safetensors或.ckpt。Stable Diffusion WebUI 启动 API 的命令行示例# 以 API 模式启动 WebUI并开放局域网访问 python launch.py --api --listen --port 7860注意--listen会让你的服务暴露在局域网请只在可信网络中使用。不要直接把 7860 端口映射到公网否则任何能访问到你本机的人都能调用你的生成接口。最小演示阶段可以不写--listen只用默认的 127.0.0.1。FastAPI 后端依赖安装pip install fastapi uvicorn requests pillow然后创建项目目录。为了方便维护建议按功能拆分文件lora-preview-system/ ├── server.py # 后端服务统一封装 WebUI API ├── ps_plugin/ # Photoshop CEP 插件目录 │ ├── CSXS/ │ │ └── manifest.xml │ ├── client/ │ │ ├── index.html │ │ ├── index.js │ │ └── css/style.css │ └── host/ │ └── lora_preview.jsx └── scripts/ └── scan_lora.py # 扫描 LoRA 目录并生成 JSON5. 后端服务把文生图/图生图包装成统一 API很多教程会教你在 Photoshop 插件里直接请求 WebUI 接口但这不是好习惯。插件前端如果直接访问 7860 端口会遇到跨域、鉴权、超时、参数耦合等一堆麻烦。用一层本地 Python 服务中转后插件的逻辑会更干净而且以后换成 ComfyUI 或别的云端服务时插件代码几乎不用改。5.1 获取当前 LoRA 列表WebUI 自带/sdapi/v1/loras接口能返回当前目录下所有 LoRA 信息import requests def fetch_lora_list(webui_base_url: str) - list: resp requests.get(f{webui_base_url}/sdapi/v1/loras, timeout10) resp.raise_for_status() data resp.json() loras [] for item in data: loras.append({ name: item.get(name), alias: item.get(alias), path: item.get(path, ), preview: , # 预览图可在后续扫描时补上关联图片 }) return loras在正式项目中你可能还要额外维护一份 LoRA 的“说明文件”因为 WebUI 接口返回的字段常常不包含触发词和作者描述。更推荐自己在 LoRA 目录旁边维护一个lora_meta.json[ { filename: my_style_v1.safetensors, trigger_words: my_style_v1, tag: 插画风格, preview_file: preview/my_style_v1.png } ]5.2 文生图 LoRA 预览接口下面实现POST /api/txt2img_preview它接收提示词和 LoRA 名称列表然后在 WebUI 上完成一次带 LoRA 的生成。from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel import requests, base64 app FastAPI() app.add_middleware( CORSMiddleware, allow_origins[*], allow_methods[*], allow_headers[*], ) WEBUI_URL http://127.0.0.1:7860 class Txt2ImgRequest(BaseModel): prompt: str negative_prompt: str loras: list [] width: int 1024 height: int 1024 steps: int 20 cfg_scale: float 7.0 seed: int -1 def build_lora_text(lora_list: list) - str: parts [] for lora in lora_list: name lora.get(name, ) weight lora.get(weight, 1.0) if not name: continue parts.append(flora:{name}:{weight}) return .join(parts) app.post(/api/txt2img_preview) def txt2img_preview(req: Txt2ImgRequest): prompt build_lora_text(req.loras) req.prompt payload { prompt: prompt, negative_prompt: req.negative_prompt, width: req.width, height: req.height, steps: req.steps, cfg_scale: req.cfg_scale, seed: req.seed, sampler_name: DPM 2M Karras } resp requests.post( f{WEBUI_URL}/sdapi/v1/txt2img, jsonpayload, timeout120 ) resp.raise_for_status() images resp.json().get(images, []) return {status: ok, images: images}注意build_lora_text会将 LoRA 文本拼进提示词这是 WebUI 的典型写法。拼接提示词时如果 LoRA 本身定义了触发词建议把它也附加到 prompt 末尾否则一些训练不充分的 LoRA 效果不明显。5.3 图生图 LoRA 预览接口XL图生图的调用核心是在 payload 中加入init_images和denoising_strength。解析 base64 图片时要保留 MIME 前缀统一去掉因为 WebUI 接受的 image 字段不能带“data:image/png;base64,”这样的头部。class Img2ImgRequest(Txt2ImgRequest): init_image_base64: str denoising_strength: float 0.65 app.post(/api/img2img_preview) def img2img_preview(req: Img2ImgRequest): if , in req.init_image_base64: init_image req.init_image_base64.split(,, 1)[1] else: init_image req.init_image_base64 prompt build_lora_text(req.loras) req.prompt payload { prompt: prompt, negative_prompt: req.negative_prompt, init_images: [init_image], denoising_strength: req.denoising_strength, width: req.width, height: req.height, steps: req.steps, cfg_scale: req.cfg_scale, seed: req.seed, sampler_name: DPM 2M Karras } resp requests.post( f{WEBUI_URL}/sdapi/v1/img2img, jsonpayload, timeout120 ) resp.raise_for_status() images resp.json().get(images, []) return {status: ok, images: images}在做 XL图生图工作流时建议在前端把“重绘幅度”做成滑块默认 0.6 到 0.7。低于 0.4 时画面会和原图几乎一样高于 0.85 时可以视为“颜色参考”而不是结构保留。6. Photoshop CEP 插件界面与 LoRA 卡片CEP 插件开发里最容易踩坑的是扩展清单配置。下面给一个最小可用的manifest.xml?xml version1.0 encodingUTF-8? ExtensionManifest xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance Version7.0 ExtensionBundleIdcom.example.lorapreview ExtensionBundleVersion1.0.0 ExtensionBundleNameLoRA Preview ExtensionList Extension Idcom.example.lorapreview.panel Version1.0.0/ /ExtensionList ExecutionEnvironment HostList Host NamePHSP Version[22.0,99.9]/ /HostList LocaleList Locale CodeAll/ /LocaleList RequiredRuntimeList RequiredRuntime NameCSXS Version9.0/ /RequiredRuntimeList /ExecutionEnvironment DispatchInfoList Extension Idcom.example.lorapreview.panel DispatchInfo Resources MainPath./client/index.html/MainPath ScriptPath./host/lora_preview.jsx/ScriptPath /Resources Lifecycle AutoVisibletrue/AutoVisible /Lifecycle UI TypePanel/Type MenuLoRA Preview/Menu Geometry Size Height600/Height Width360/Width /Size /Geometry /UI /DispatchInfo /Extension /DispatchInfoList /ExtensionManifestClient前端页面只要做三件事获取 LoRA 列表点击列表项把当前画布缓存截图作为 img2img 底图。三个按钮分别应对三种操作文生图预览、XL图生图、把结果放回 Photoshop。HTML 结构保持简单!-- ps_plugin/client/index.html -- !DOCTYPE html html langzh-CN head meta charsetUTF-8 titleLoRA Preview/title style body { font-family: Microsoft YaHei, sans-serif; margin: 10px; background: #222; color: #f0f0f0; } select, button, textarea { width: 100%; margin: 6px 0; padding: 6px; box-sizing: border-box; } .card { border: 1px solid #444; padding: 8px; margin: 6px 0; cursor: pointer; border-radius: 4px; background: #2e2e2e; } .card.selected { border-color: #00a8ff; background: #1e3a4a; } .result-box img { width: 100%; border-radius: 4px; } /style /head body h3LoRA 预览/h3 button idrefreshBtn刷新 LoRA 列表/button div idloraList/div textarea idprompt placeholder输入正向提示词也可以留空只测试 LoRA rows3/textarea textarea idnegativePrompt placeholder负面提示词 rows2/textarea label重绘幅度0.1 - 1.0/label input typerange iddenoising min0.1 max1 value0.65 step0.05 button idtxt2imgBtn文生图预览/button button idimg2imgBtn用当前画布图生图/button button idplaceBackBtn结果放回 Photoshop/button div idresult classresult-box/div script srcindex.js/script /body /html在 JS 里通过XMLHttpRequest或fetch调用本地 FastAPI 服务。CEP 扩展运行在 Chromium 内核中使用fetch一般在现代版本里可用。如果遇到跨域问题需要确保 FastAPI 后端已配置 CORSMiddleware。更稳定的做法是用 Node 侧扩展进程发请求但最小演示时用 fetch 即可。// ps_plugin/client/index.js const API_BASE http://127.0.0.1:8000; let selectedLoras []; let lastResultBase64 null; async function request(url, payload) { const resp await fetch(API_BASE url, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(payload) }); if (!resp.ok) { const text await resp.text(); alert(后端返回错误 text); throw new Error(text); } return resp.json(); } document.getElementById(refreshBtn).addEventListener(click, async () { const resp await fetch(API_BASE /api/lora_list); const data await resp.json(); const container document.getElementById(loraList); container.innerHTML ; data.loras.forEach((lora) { const card document.createElement(div); card.className card; card.textContent lora.alias || lora.name; card.addEventListener(click, () { card.classList.toggle(selected); selectedLoras [...container.querySelectorAll(.card.selected)] .map((c) ({ name: c.dataset.name, weight: 1.0 })); }); card.dataset.name lora.name; container.appendChild(card); }); }); document.getElementById(txt2imgBtn).addEventListener(click, async () { const prompt document.getElementById(prompt).value; const negative document.getElementById(negativePrompt).value; const data await request(/api/txt2img_preview, { prompt: prompt, negative_prompt: negative, loras: selectedLoras }); renderResult(data.images[0]); // 注意在正式演示中需要在此处用 CSInterface 调用 JSX把图片写入 PS 临时文件 }); function renderResult(base64) { lastResultBase64 base64; const container document.getElementById(result); container.innerHTML img srcdata:image/png;base64,${base64}; }这只是一个“UI 演示版”真正落地时还需要 CSInterface 的evalScript来通知 Photoshop 保存临时结果。7. 把生成图放回 Photoshop 的关键一步Photoshop CEP 插件要操作文档通常通过CSInterface.evalScript()调用.jsx脚本。这里有一个常见难点如果你希望通过“图生图”使用当前画布需要先把当前图层或合并后的画布导出成 PNG再发送给后端。JSX 脚本可以直接控制 Photoshop DOM// 文件路径ps_plugin/host/lora_preview.jsx // 导出当前文档为指定尺寸的 PNG 临时图 function exportActiveDocumentToPng(filePath) { var doc app.activeDocument; if (!doc) throw new Error(没有打开的文档); var exportOptions new ExportOptionsSaveForWeb(); exportOptions.format SaveDocumentType.PNG; exportOptions.PNG8 false; var file new File(filePath); doc.exportDocument(file, ExportType.SAVEFORWEB, exportOptions); return file.fsName; } // 把本地 PNG 文件作为新图层放入活动文档 function placeImageToDocument(filePath, docId) { var doc app.documents[docId]; var file new File(filePath); var layerDesc new ActionDescriptor(); layerDesc.putPath(charIDToTypeID(null), file); executeAction(stringIDToTypeID(placeEvent), layerDesc, DialogModes.NO); }这里的关键是placeEvent它是 Photoshop 动作系统中把外部图片置入文档的标准入口。实际生产中你可能要先把结果图片保存为临时 PNG再用placeEvent放进来。如果对动作系统不熟可以先在 Photoshop 里手动“置入嵌入对象”并录制动作再参考脚本化代码简化。安全提醒JSX 脚本里不要出现“下载./…”、不要直接将公网图片整段写入动作描述建议始终通过本地临时目录中转。前端侧的调用方式let csInterface new CSInterface(); csInterface.evalScript( exportActiveDocumentToPng(C:/temp/ps_current_canvas.png), (result) { console.log(export result:, result); } );后端收到这张临时 PNG 后转 base64发到/api/img2img_preview即可。8. 运行验证与效果检查先验证后端是否能启动cd lora-preview-system uvicorn server:app --host 127.0.0.1 --port 8000 --reload启动后用 curl 做一次快速接口测试curl -X POST http://127.0.0.1:8000/api/txt2img_preview \ -H Content-Type: application/json \ -d { prompt: a cute fox girl, detailed illustration, negative_prompt: lowres, bad anatomy, loras: [ {name: my_style_v1, weight: 1.0} ] }如果成功响应应该类似于下面的 JSON{ status: ok, images: [ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJ... ] }图片的 base64 很长用浏览器打开比较麻烦。建议再增加一个小的调试接口把返回的 base64 直接写到本地文件app.post(/api/txt2img_preview_save) def txt2img_preview_save(req: Txt2ImgRequest): result txt2img_preview(req) image_b64 result[images][0] image_bytes base64.b64decode(image_b64) with open(preview_output.png, wb) as f: f.write(image_bytes) return {status: ok, saved: preview_output.png}如何判断是否成功文件能正常生成说明 WebUI 接口已经通了。输出图中出现了该 LoRA 对应的风格或角色说明 LoRA 加载成功。Photoshop 面板中出现预览缩略图说明前端到后端调用正常。点击“结果放回 Photoshop”后活动文档新增了一层说明 JSX 通信正常。如果第 2 步失败大概率不是 LoRA 文件坏了而是提示词中缺少触发词或者 LoRA 权重过低。9. 常见问题与排查思路问题现象可能原因排查方式解决方案Photoshop 面板空白无法加载插件扩展不受信任或未签名查看 Photoshop 控制台日志检查 manifest 的 Host Version开启 Photoshop 的“启用扩展开发者模式”按官方要求加载点击按钮后提示 CORS 错误FastAPI 没有配置跨域打开浏览器开发者工具查看请求在 FastAPI 中启用 CORSMiddleware允许本地端口访问WebUI 接口能出图但 Photoshop 面板请求失败后端服务未启动或端口不一致直接 curl 对应接口测试统一 API_BASE 地址与后端端口LoRA 列表为空LoRA 目录路径不对或 WebUI 没扫描到在 WebUI 的 LoRA 选项卡里看能否显示重启 WebUI确认models/Lora路径使用“秋叶SD启动器”时注意模型目录设置出图结果里根本没有 LoRA 风格触发词缺失或权重太低在 WebUI 中先手动调用该 LoRA 确认在提示词中加入触发词把权重调到 0.8 以上XL图生图结果和原图完全不像重绘幅度太低或太高记录 denoising 参数从 0.6 开始微调base64 图片无法解码请求里带了data:image/png;base64,前缀检查后端解析代码用 split(,) 去掉 MIME 头部插件调用 JSX 报 permission 错误脚本权限不足或没有开启允许脚本访问网络在 Photoshop 首选项中检查脚本与网络访问在受信任的本地项目里运行不随意关闭系统安全设置10. 最佳实践与工程建议10.1 把 LoRA 元信息维护好我建议不要在代码中硬编码 LoRA 文件名列表。更规范的方式是维护一个配置文件把“文件名、别名、触发词、用途标签、作者信息、许可备注”都记录下来。这样当模型中文化命名或多人协作时不会出现一个人写的lora:xx:1另一个同事找不到的情况。10.2 WebUI API 的安全性边界Stable Diffusion WebUI 的 API 默认没有鉴权只要服务能访问到别人就可能调用你本机的显存并生成图片。在生产或局域网演示中你必须至少做到三点不对公网开放 7860/8000 端口在 FastAPI 层加一个本地 Token 校验如果需要局域网访问把后端绑定在受信网卡并配合防火墙放行。10.3 Photoshop 工作流的素材版权与模型授权这是比赛演示中最容易忽略却最重要的点。你在 Photoshop 中使用 AI 绘画处理的对象如果是客户的正式项目素材、未公开发表的合同图片、他人设计的原图需要先确认是否有合法授权。很多 LoRA 模型也带有非商用或需要署名的社区许可。不要把“本机部署”“开源模型”误认为“可以任意商用”。10.4 预留“手动模式”作为兜底技术演示中自动化很酷但真实设计流程里不可能每次都全自动。比较好的产品化思路是面板生成结果时后端同时把生成的 PNG 保存到项目目录。这样即使 Photoshop 图层置入失败设计师也能在资源管理器里找到结果再用拖拽的方式放回画布。自动化方案必须永远保留手动兜底。10.5 及时保存 PSD 与临时文件调用placeEvent在活动文档插入图层是有副作用的操作。若没有及时保存一次崩溃可能丢失大量手工精修内容。建议在后端每次触发生成之前先用 JSX 执行一次“另存快照”或在 Photoshop 中开启自动恢复间隔。比赛演示时尤其要备份原始 PSD避免插件 BUG 破坏演示文件。11. 总结与后续扩展方向本文从“设计师实际工作中频繁切换软件”的痛点出发解释了 LoRA、XL图生图、文生图、krea2 文生图等概念在 Photoshop 工作流中的定位并给出了一套“PS 面板 本地后端 WebUI API”的最小实现。你可以看到真正的集成重点并不是让 Photoshop 学会生成而是让 Photoshop 变成操作界面把 LoRA 的预览、对比、回图串成一条完整链路。接下来你可以按自己的方向继续扩展把示例里的 FastAPI 后端换成 ComfyUI 的 workflow 接口灵活度更高在面板中加入多张预览图横向对比用网格输出替代单张输出维护 LoRA 扫描结果到数据库支持标签搜索、收藏、一键套用参数增加“参数快照”功能把每一次生成的提示词、LoRA、底模、种子记录下来方便复现。如果准备继续深入我建议先做一个“最小闭环”Photoshop 打开一张图选择 1 个 LoRA图生图出 1 张预览图放回画布成为新图层。确认这个闭环稳定后再扩展到更多参数、更多 LoRA 与云端文生图服务。不要把第一版做得太复杂稳扎稳打的迭代才适合比赛和第二轮改造。
返回列表