[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-77762":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":14,"starSnapshotCount":14,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},77762,"Image-Studio","RoseKhlifa\u002FImage-Studio","RoseKhlifa","开源image2调用图像生成\u002F编辑桌面客户端 · SSE 流式保活,兼容 Cloudflare 524\u002F504 超时截断 · Wails (Go + React\u002FTS) ·   数据 100% 本地",null,"Go",282,28,4,0,22,59,254,80,4.39,"MIT License",false,"main",true,[],"2026-06-12 02:03:44","# Image Studio\n\n> 一个开源的图像生成 \u002F 编辑桌面客户端 ·\n> 两种 API 形态可选(**SSE 流式保活** 兼容 Cloudflare 524\u002F504 · 或标准 **Images API**)·\n> Wails(Go + React\u002FTS)\n\n![license](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-7c3aed)\n![go](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgo-%3E%3D1.25-00ADD8)\n![react](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Freact-18-61DAFB)\n![wails](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fwails-v2-DF0000)\n![platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-windows%20%7C%20macos%20%7C%20linux-lightgrey)\n\n---\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fdocs\u002Fscreenshot.png\" alt=\"Image Studio 主界面\" width=\"880\">\n  \u003Cbr \u002F>\n  \u003Csub>左侧:控制面板(模式 \u002F prompt \u002F 风格 \u002F 比例 \u002F 质量) · 中:画板 + 工具栏 + 状态栏 · 右:历史记录\u003C\u002Fsub>\n\u003C\u002Fp>\n\n> **v0.1.2** 重塑了整套 UI:Tailwind v4 + zinc\u002Femerald 色调 + lucide-react 图标,字体 HarmonyOS Sans SC Medium + JetBrains Mono;每日一言条幅、动态画板棋盘格、白底黑线条新图标;输出目录拆分 `\u002Fimages\u002F` + `\u002Flog\u002F`;Responses API 加「不优化提示词」开关让模型逐字使用你的 prompt。\n>\n> **v0.1.3** 新功能:比例与质量都加 **Auto** 档让上游决定;高级参数加 **输出图片格式**(PNG \u002F JPEG \u002F WebP);画笔\u002F橡皮\u002F自由画笔 **逐点跟手**(修了 react-konva 数组引用 bug);**旋转 \u002F 翻转 \u002F 裁剪改为就地编辑**,不再每点一次就刷一条历史。底栏数据改为 `今日已生图 \u002F 总生图`。\n\n---\n\n## 为什么写这个\n\n大多数 OpenAI 兼容中转站把图像生成接口架在 Cloudflare 后面,而 image-2 \u002F gpt-image 这种模型推理需要 30~120 秒。一旦超过 CF 的 100s 默认网关超时,连接被切断 → 客户端收到 524\u002F504 → 整张图作废。\n\n常见后果:你点了「生成」,等 100 秒,然后看到 `Cloudflare Error code 524 · A timeout occurred`,再等几分钟再试,大概率重复。\n\n**核心解法:用 `\u002Fv1\u002Fresponses` + SSE 流式协议**(Responses API 模式):\n- 模型边推理边发心跳事件(`response.in_progress` \u002F `image_generation_call.generating` \u002F `partial_image` ...),保持 TCP 连接活跃,CF 看到流量就不会断\n- 即使真的被掐了,本地有 3 次自动重试 + 15 秒 backoff\n- 收到 `partial_image_b64` 也会兜底保存,作为「半成品」给你看效果\n\n**对于不支持 Responses API 的中转站**(或 key 只绑了标准 image 分组的情况),也支持原生 Images API 模式:\n- POST `\u002Fv1\u002Fimages\u002Fgenerations`(文生图,JSON)+ `\u002Fv1\u002Fimages\u002Fedits`(图生图,multipart 上传)\n- 一次性 JSON 响应,无 SSE 保活;长推理 CF 524 风险更高,但兼容性最广\n- 同样有 3 次自动重试\n\n两种模式可在「🔧 上游配置」里切换,使用同一套 UI 和文件落地逻辑。\n\n最初是个 Python CLI 脚本(`generate_gptcodex_image.py`),后来重写为 Go,再封装成 Wails 桌面应用,补全了画板、蒙版、多参考图、撤销重做、历史对比、多标签页等图像编辑器该有的能力。\n\n---\n\n## 核心亮点\n\n| | |\n|---|---|\n| 🛡 **SSE 流式保活**(Responses API) | 用 `\u002Fv1\u002Fresponses` 接口,以 Server-Sent Events 持续从上游接收事件,Cloudflare\u002FNginx 网关看到持续流量不会判定为空闲超时 —— **CF 524 推荐这个** |\n| 🔀 **双 API 形态** | 一个 toggle 在 Responses API(SSE 保活,需 gpt-5.5 分组)和 Images API(标准 `\u002Fv1\u002Fimages\u002Fgenerations` + `\u002Fv1\u002Fimages\u002Fedits`,可用 image-2 分组)间切换 |\n| 🔁 **自动重试 + 部分结果回退** | 识别 Cloudflare 524\u002F504、JSON `status` 5xx、`retryable=true` 自动重试 3 次;Responses 模式下 final result 没拿到时用最后的 `partial_image_b64` 兜底 |\n| 📦 **大 base64 单行缓冲** | `partial_image_b64` 单行可超 4MB,自定义 8MB scanner buffer,不会被 Go bufio 默认的 64KB 截断 |\n| 🔌 **双 transport** | 默认 net\u002Fhttp 直连;遇到 TLS 指纹 \u002F 代理问题可一键切到子进程 `curl`(`--http1.1 --ssl-no-revoke`) |\n| ⏹ **真正可取消** | `context.Context` 端到端,包括 `exec.CommandContext` 给 curl,「取消」按钮能立刻中断 in-flight 请求 |\n| 🖼 **完整图像编辑器** | Konva 画布、蒙版+橡皮、4 种标注、旋转\u002F翻转\u002F裁剪(就地编辑不污染历史)、历史对比 |\n| 🧩 **多标签 workspace** | 浏览器风的多 tab,每个独立 prompt\u002F参数\u002F源图;切换不丢现场 |\n| 🔧 **首次启动引导** | apiKey \u002F baseURL 缺失时自动弹「上游配置」窗口,5 字段一次填完(API 形态、BASE_URL、API Key、文本模型、图像模型) |\n| ✏️ **不优化提示词开关** | Responses API 默认让文本模型把你的 prompt 重写一遍。勾上后顶层加 instructions 让模型逐字使用,适合已经精修过的 prompt |\n| 🪟 **首次启动配置 + 详情抽屉** | 生成成功后的 toast 带「查看详情」按钮,弹出右抽屉显示图片预览 + 全部参数 + 原\u002F优化版 prompt + 文件路径,可一键复制 \u002F 用作下次 prompt |\n| 🎨 **现代 UI**(v0.1.2) | Tailwind v4 + zinc\u002Femerald 色调 + lucide-react 图标;HarmonyOS Sans SC Medium 中文字体 + JetBrains Mono 等宽数字;暗色启动无白闪 |\n| 💾 **100% 本地数据** | 无遥测、无云端账户、无内购;API key、历史、生成图都在你的机器上 |\n\n---\n\n## 安装\n\n### 方式 1:下载预编译版本(推荐)\n\n到 [Releases](https:\u002F\u002Fgithub.com\u002FRoseKhlifa\u002FImage-Studio\u002Freleases) 页面下载对应平台的预编译版本(均内嵌 HarmonyOS Sans SC Regular + Medium + JetBrains Mono):\n\n| 平台 | 产物 | 大小 | 首次启动 |\n|---|---|---|---|\n| **Windows x64** | `image-studio-windows-amd64.exe` | ~29 MB | 双击运行;需 [WebView2 Runtime](https:\u002F\u002Fdeveloper.microsoft.com\u002Fmicrosoft-edge\u002Fwebview2\u002F)(Win10+ 大部分已预装) |\n| **macOS** (universal) | `image-studio-macos-universal.zip` | ~32 MB | 解压后 `xattr -dr com.apple.quarantine image-studio.app` 去 Gatekeeper 隔离,或右键 → 打开 |\n| **Linux x64** | `image-studio-linux-amd64.tar.gz` | ~16 MB | `tar -xzf` 解压 → `chmod +x image-studio` → 运行;需 `libgtk-3-0 libwebkit2gtk-4.1-0`(桌面 Ubuntu 22.04+ \u002F 24.04 默认装好) |\n\n> Wails v2 不支持跨平台编译,以上三个产物分别在各自原生平台上 build。代码本身跨平台,有问题欢迎 issue。\n\n### 方式 2:从源码构建\n\n```bash\n# 环境要求\n#  - Go >= 1.25\n#  - Node >= 20\n#  - Wails CLI v2:  go install github.com\u002Fwailsapp\u002Fwails\u002Fv2\u002Fcmd\u002Fwails@latest\n\ngit clone https:\u002F\u002Fgithub.com\u002FRoseKhlifa\u002FImage-Studio.git\ncd Image-Studio\u002Fimage-studio\n\n# 开发模式(Vite 热重载 + DevTools)\nwails dev\n\n# 生产构建,输出到 build\u002Fbin\u002Fimage-studio.exe (~29MB,内嵌字体 + Tailwind 资源)\nwails build\n```\n\nmacOS 直接 `wails build`(产物 `image-studio.app`,通用二进制 Apple Silicon + Intel)。Linux 需要先装 `libgtk-3-dev libwebkit2gtk-4.1-dev`(Ubuntu 24.04 \u002F 桌面 Debian 同款)然后 `wails build -tags webkit2_41`;22.04 系是 `libwebkit2gtk-4.0-dev`,直接 `wails build` 不加 tag。\n\n---\n\n## 快速上手\n\n首次启动会自动弹出**「上游配置」窗口**(也可以从左侧「🔧 上游配置」按钮随时呼起):\n\n1. **API 形态** —— 二选一:\n   - **Responses API**(CF 超时推荐):SSE 保活,长推理稳;**key 要绑「拥有 gpt-5.5 模型的分组」**\n   - **Images API**:标准 `\u002Fv1\u002Fimages\u002Fgenerations` + `\u002Fv1\u002Fimages\u002Fedits`,**key 用标准 image-2 分组**即可\n2. **上游 BASE_URL** —— 你自己的中转站地址(应用不内置任何默认上游)\n3. **API Key** —— `sk-...`,绑定到上面对应的分组\n4. **文本模型 ID** —— 仅 Responses API 需要,默认 `gpt-5.5`,可留空\n5. **图像模型 ID** —— 默认 `gpt-image-2`,可留空。两种 API 形态都会用到\n6. (可选)点 **「🔌 测试连接」** 验证一下\n\n填好保存后:\n\n7. 选模式(📝 文生图 \u002F 🖼 图生图),输入 prompt(下方可选模板\u002F历史),选风格 \u002F 比例 \u002F 质量\n8. 如果你已经精修过 prompt 不想被模型再优化一遍,勾上 prompt 输入框下的 **「不优化提示词」**(仅 Responses API 模式有效)\n9. 按 `Ctrl + Enter` 或点击 **「生成」**\n10. 生成成功后右上角 toast 会带「查看详情」按钮,弹出右抽屉显示全部参数 + 原\u002F优化版 prompt + 文件路径\n\n图生图流程:\n- 拖入本地图片到窗口 \u002F Ctrl+V 粘贴 \u002F 「+ 添加图片」按钮 → 累积参考图列表\n- 切到「图生图」模式 → 写修改要求 → 生成\n\n---\n\n## API 形态 · 分组怎么选\n\n> 本应用 **不内置任何默认上游**,首次启动会弹「上游配置」让你自己填。\n\n### Responses API 模式(默认,CF 超时推荐)\n\n调用的是上游 `\u002Fv1\u002Fresponses`,通过模型内置的 `image_generation` 工具触发图像生成,SSE 流式接收。\n\n- ✅ Key 绑定到**拥有 `gpt-5.5` 模型的分组**(中转站后台通常叫「余额分组」或「套餐分组」)\n- ❌ **不要**选「image-2 分组」 —— 那是直接 image API 的分组,不包含 gpt-5.5,会返回 401\u002F403 或 `model not found`\n- 兼容性:任何提供 Responses API + `image_generation` 工具的中转站\n\n### Images API 模式(兼容广)\n\n调用的是标准 `\u002Fv1\u002Fimages\u002Fgenerations`(文生图,JSON)和 `\u002Fv1\u002Fimages\u002Fedits`(图生图,multipart 上传)。\n\n- ✅ Key 用标准的 **image-2 \u002F image API 分组**即可,**不需要 gpt-5.5 权限**\n- 适合 key 只绑了 image 分组、或上游不支持 Responses API 的中转站\n- 缺点:没有 SSE 保活,长推理 CF 524 风险更高\n\n### 共用约束\n\n- **不兼容**只提供 `\u002Fv1\u002Fchat\u002Fcompletions` 的中转站(本应用不发 chat completions 请求)\n- 设置 → 「🔧 上游配置」可随时切换形态、改 BASE_URL \u002F 模型 ID\n\n---\n\n## 完整功能\n\n### 生成\n- 文生图 \u002F 图生图(支持多张参考图,可拖动重排顺序)\n- 输入图源:文件对话框 \u002F 拖拽窗口 \u002F Ctrl+V 粘贴 \u002F 从历史复用 \u002F 双击历史项\n- 参数:**Auto + 5 种比例**(1:1 \u002F 2:3 \u002F 3:2 \u002F 16:9 \u002F 9:16)· **Auto + 3 档质量**(1K\u002F2K\u002F4K)· **输出格式**(PNG\u002FJPEG\u002FWebP)· seed · negative prompt · 5 种风格 chip\n- **不优化提示词** 开关:Responses API 模式下勾上后顶层加 instructions 让模型逐字使用 prompt\n- **双 API 形态**:Responses API(SSE 保活)\u002F Images API(标准 generations + edits)随时切换\n- 上游可配:BASE_URL、文本模型 ID、图像模型 ID、传输通道(native\u002Fcurl)\n- prompt 历史(自动去重,cap 50)+ 8 个内置模板(写实\u002F二次元\u002F水彩\u002F像素等)\n\n### 画板(Konva)\n- 缩放(鼠标滚轮以指针为中心)\u002F 拖动 \u002F 双击 fit ↔ 100%\n- **蒙版**:画笔 + 橡皮,大小滑块,实时半透明叠加\n- **标注**:矩形 \u002F 箭头 \u002F 自由画笔 \u002F 文字,8 色,选中后 Delete 删除\n- **图变换**(后端 Go image 库):旋转 90°\u002F-90°、水平\u002F竖直翻转、矩形选区裁出 —— 就地编辑当前画布图、**不创建新历史条目**,「另存为」拿到最新版本\n- **历史对比**:Shift+点击进入,左右分屏 + 中间可拖动 split bar\n- 全屏 F11(隐藏左右栏专注画板)\n\n### 历史\n- IndexedDB 持久化(浏览器存储,无服务器)\n- 搜索 prompt \u002F 筛选 mode \u002F 筛选日期(今天\u002F本周\u002F全部)\n- **右键菜单**:复制 prompt \u002F 复制本地路径 \u002F 查看 raw 响应 \u002F 设为源图 \u002F 用作对比 \u002F **以此参数重新生成** \u002F **应用参数(不生成)**\n- JSON 导入 \u002F 导出(跨设备迁移)\n\n### 工作流\n- **多 workspace 标签页**:每个独立 prompt \u002F 参数 \u002F 源图 \u002F 当前图;Ctrl+N 新建,Ctrl+W 关闭\n- 切换 tab 自动按 prompt 前 18 字命名\n- 撤销 \u002F 重做统一 timeline:蒙版笔触、标注、清空都在栈里\n- Ctrl+C 复制当前图到剪贴板 · Ctrl+V 粘贴\n- 错误 banner 可关闭 + 「↻ 重试上次请求」\n- **Toast** 通知(成功 \u002F 错误 \u002F 警告)+ **系统通知**(窗口失焦时生成完成弹 Windows toast)\n- 进度估算(基于最近 5 次耗时滚动平均)\n\n### 设置\n- **🔧 上游配置**:首次启动自动弹出 \u002F 之后可手动呼起;5 字段集中管理(API 形态 \u002F BASE_URL \u002F API Key \u002F 文本模型 ID \u002F 图像模型 ID),含 API Key 显示切换 + 内嵌测试连接按钮\n- 主题:深色 \u002F 浅色\n- 字号:小 \u002F 中 \u002F 大\n- 网络通道:auto \u002F native \u002F curl(应对 TLS 指纹 \u002F 代理问题)\n- 参数预设保存(尺寸 + 质量 + 输出格式 + 风格,常用配置一键应用)\n- 历史导入 \u002F 导出 JSON\n- 清除 API Key \u002F 清空历史\n- 关于:版本号、MIT 协议链接、GitHub 仓库 \u002F Issues 一键跳转\n- **字体**:UI 用 HarmonyOS Sans SC(中文)+ JetBrains Mono(英文 \u002F 数字 \u002F 等宽),已嵌入 exe 免下载\n\n---\n\n## 键盘快捷键\n\n| 快捷键 | 功能 |\n|---|---|\n| `Ctrl` + `Enter` | 提交生成(textarea 内也能用) |\n| `Ctrl` + `N` \u002F `Ctrl` + `W` | 新建 \u002F 关闭 workspace 标签 |\n| `Ctrl` + `Z` \u002F `Ctrl` + `Shift` + `Z` \u002F `Ctrl` + `Y` | 撤销 \u002F 重做 |\n| `Ctrl` + `C` | 复制当前画板图到剪贴板 |\n| `Ctrl` + `V` | 粘贴剪贴板图到画板(进入图生图) |\n| `1` \u002F `2` \u002F `3` | 切换 拖动 \u002F 蒙版 \u002F 标注 工具 |\n| `空格` | 按住临时切到拖动 |\n| `F` | 重置视图(适配窗口) |\n| `双击画板` | fit ↔ 100% 切换 |\n| `F11` | 全屏模式 |\n| `[` \u002F `]` | 笔刷大小 −\u002F+ 5 |\n| `Esc` | 取消生成 → 退出对比 → 清除选中 → 关闭错误 |\n| `Delete` | 删除选中的标注 |\n| `Shift` + 点击历史 | 设为对比图 B |\n| `双击` 历史 | 作为源图 |\n| `右键` 历史 | 上下文菜单 |\n\n---\n\n## 数据存储位置\n\n| 类型 | 位置 |\n|---|---|\n| API Key | 浏览器 `localStorage`(明文) |\n| 上游配置(API 形态、BASE_URL、模型 ID、传输通道) | `localStorage` |\n| 历史记录元数据 | 浏览器 IndexedDB |\n| 生成的 PNG | 输出目录下的 `images\u002F`(命名形如 `image-generate-\u003Cslug>-\u003Cts>.png`) |\n| 拖入 \u002F 变换的图 | 系统 config 目录下的 `image-studio\u002Fimports\u002F`(内部 scratch,与输出目录解耦) |\n| 原始上游响应(排错用) | 输出目录下的 `log\u002F`:Responses 模式 `sse-response-*.txt`;Images 模式 `images-response-*.json`(v0.1.2 起从 `images\u002F` 拆出,避免污染图片浏览) |\n| 用户偏好(主题、字号、预设、prompt 历史) | `localStorage` |\n\n**输出目录默认值(v0.1.4 起按平台区分)**:\n\n| 平台 | 默认输出目录 |\n|---|---|\n| Windows | `%APPDATA%\\image-studio\\` |\n| macOS | `~\u002FPictures\u002FImage Studio\u002F` |\n| Linux | `~\u002FPictures\u002FImage Studio\u002F` |\n\n> 之所以不沿用 macOS \u002F Linux 的 `~\u002FLibrary\u002FApplication Support\u002F` 或 `~\u002F.config\u002F`:这两个目录默认被 Finder \u002F 文件管理器隐藏,点「打开输出目录」相当于黑盒 —— 既看不到也没法直接管理图片。改走 `Pictures` 目录后,生成的 PNG 在系统图库里立即可见。设置 →「输出目录 \u002F 修改」可以随时换到自己想要的路径。\n\n数据完全不出本地;唯一的外部网络请求是向你配置的上游 BASE_URL 发起的生成请求本身。\n\n---\n\n## 故障排除\n\n### 一直 524 \u002F 504\n\n- 上游网关超时在很多中转站很常见。本应用自动重试 3 次,如果都失败:\n  - **如果当前是 Images API 模式,优先切到 Responses API** —— SSE 保活就是为此设计的(前提是你的 key 有 gpt-5.5 分组权限)\n  - 检查 key 是否过期 \u002F 余额 \u002F 是否绑对了分组(见上方 [API 形态 · 分组怎么选](#api-形态--分组怎么选))\n  - 设置 → 网络通道 改成 `curl`,有时能绕过原生 HTTP 的 TLS 指纹问题\n  - 历史项 右键 → **查看 raw 响应**,看上游具体返回了什么(原始 SSE \u002F JSON 全文)\n\n### `model not found` \u002F 401 \u002F 403\n\n- **Responses 模式**:Key 没有 `gpt-5.5` 模型权限。换分组,或在 🔧 上游配置 里把图像模型 ID 改成你 key 实际支持的\n- **Images 模式**:把图像模型 ID 改成中转站列表里有的(常见:`gpt-image-1` \u002F `gpt-image-2` \u002F `dall-e-3`),或换一个有这些模型权限的分组\n\n### 多参考图 \u002F 蒙版 \u002F seed 没生效\n\n这些字段在 payload 里都正确发送,**但上游是否真正使用取决于中转站和模型实现**。两种 API 形态的字段映射:\n\n- Responses 模式:`mask` \u002F `seed` \u002F `negative_prompt` 作为 `image_generation` 工具参数\n- Images Edits 模式:`mask` 作为单独的 multipart file,`seed` \u002F `negative_prompt` 作为 form 字段\n\n不同模型 \u002F 中转站对这些字段的支持程度不一。Images 模式下多张参考图的支持取决于 relay —— 标准 OpenAI 接口只接受一张 `image`,本应用第二张及之后用 `image[]` 兼容字段发送(可能被忽略)。\n\n完整 FAQ 请见应用内「上游区右上角的 ❓ FAQ」入口。\n\n---\n\n## 项目结构\n\n```\n.\n├── go-cli\u002F                       # 独立 Go CLI(可单独跑,共享 pkg\u002Fclient)\n│   ├── pkg\u002Fclient\u002F               # 核心\n│   │   ├── client.go             # 重试编排 + Responses\u002FImages 形态分发\n│   │   ├── payload.go            # Responses API payload 构建\n│   │   ├── sse.go                # SSE 行解析 + image 提取\n│   │   ├── images_api.go         # Images API(generations + edits multipart)\n│   │   ├── retry.go              # 524\u002F504 识别 + 错误归因\n│   │   ├── http_native.go        # net\u002Fhttp + 8MB scanner buffer\n│   │   ├── http_curl.go          # curl 子进程 fallback\n│   │   └── types.go              # Options \u002F APIMode \u002F SizeOptions 等\n│   ├── internal\u002F{promptui,fsio}\u002F # 终端交互 + 文件 IO\n│   └── cmd\u002Fgptcodex-image\u002Fmain.go\n├── image-studio\u002F                 # Wails 桌面应用\n│   ├── backend\u002F                  # Go bindings(按职责分文件)\n│   │   ├── service.go            # Service + 生命周期 + Generate\u002FEdit\u002FCancel + apiMode 分发\n│   │   ├── types.go              # JSON-bound structs(含 APIMode 字段)\n│   │   ├── dialogs.go            # 文件对话框 \u002F URL 跳转 \u002F 历史导入导出\n│   │   ├── imports.go            # 拖拽\u002F粘贴 import + 文件名 sanitize\n│   │   ├── imageops.go           # 旋转 \u002F 翻转 \u002F 裁剪(Go image 库)\n│   │   ├── paths.go              # 目录解析 + 文件名构造\n│   │   └── open.go               # 跨平台 OS 打开\n│   ├── frontend\u002Fsrc\u002F             # React + TS · Tailwind v4 + lucide-react\n│   │   ├── components\u002F\n│   │   │   ├── layout\u002F           # AppHeader \u002F HitokotoStrip(每日一言) \u002F WorkspaceBar \u002F FooterBar\n│   │   │   ├── panel\u002F            # ControlPanel \u002F SettingsPanel \u002F PromptPopover \u002F FAQModal \u002F UpstreamConfigModal\n│   │   │   ├── canvas\u002F           # CanvasStage \u002F Toolbar \u002F SourceStrip \u002F StatusBar \u002F EmptyState(棋盘格滚动)\n│   │   │   ├── history\u002F          # HistoryRail \u002F RawResponseModal\n│   │   │   └── common\u002F           # Modal \u002F ToastContainer \u002F ContextMenu\n│   │   ├── state\u002F                # zustand store\n│   │   ├── styles\u002F               # index.css(Tailwind v4 入口 + @font-face)+ _canvas.css(画板动画)\n│   │   ├── assets\u002Ffonts\u002F         # HarmonyOS Sans SC Regular\u002FMedium + JetBrains Mono(嵌入 exe)\n│   │   ├── lib\u002F                  # localStorage \u002F idb-keyval 工具\n│   │   └── types\u002F                # 领域类型\n│   ├── build\u002F                    # Wails 资源:appicon.png(白底黑线条)+ windows\u002Ficon.ico\n│   └── build\u002Fbin\u002F                # 生产 .exe 输出\n└── go.work                       # Go workspace(backend replace ..\u002Fgo-cli)\n```\n\n---\n\n## 致谢\n\n- [**linux.do**](https:\u002F\u002Flinux.do\u002F) —— 感谢 L 站及其社区为项目开发与交流提供的支持与启发。\n\n灵感来自实际使用中频繁被中转站 524 截断的痛苦经历。\n\n---\n\n## License\n\n[MIT](.\u002FLICENSE) © 2026\n\n---\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=RoseKhlifa\u002FImage-Studio&type=Date)](https:\u002F\u002Fstar-history.com\u002F#RoseKhlifa\u002FImage-Studio&Date)\n","Image Studio 是一个开源的图像生成与编辑桌面客户端，支持通过两种API形态（SSE流式保活和标准Images API）调用图像生成及编辑服务。其核心功能包括使用SSE协议保持TCP连接活跃以避免Cloudflare 524\u002F504超时问题、自动重试机制以及完整的图像编辑工具集如画布、蒙版、旋转等。此外，它还提供了多标签页工作空间来管理不同的项目。此软件适合需要稳定且高效地进行AI辅助图像创作或编辑的专业人士和个人用户，在遇到长时推理导致的网络超时问题时尤为有用。",2,"2026-06-11 03:55:58","CREATED_QUERY"]