[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83279":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":18,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":25,"readmeContent":26,"aiSummary":10,"trendingCount":15,"starSnapshotCount":15,"syncStatus":16,"lastSyncTime":27,"discoverSource":28},83279,"YanAI","huaiyuechusan\u002FYanAI","huaiyuechusan","颜AI：基于gpt-image-2的美颜美图网站","",null,"Python",177,48,1,0,2,78,27,5.07,"MIT License",false,"main",true,[],"2026-06-12 02:04:32","\u003Ch1 align=\"center\">颜AI\u003C\u002Fh1>\n\n\u003Cp align=\"center\">颜AI 是一个围绕 ChatGPT 图片能力封装的自托管图片创作与管理系统，提供 OpenAI 兼容图片 API、在线画图工作台、图生图预设、账号池轮询、个人用户额度、渠道管理、模型管理、计费标准配置、图片归档、日志与 Docker 部署能力。\u003C\u002Fp>\n\n> [!WARNING]\n> 免责声明：\n>\n> 本项目涉及对 ChatGPT 官网文本生成、图片生成与图片编辑等相关接口的逆向研究，仅供个人学习、技术研究与非商业性技术交流使用。\n>\n> - 严禁将本项目用于任何商业用途、盈利性使用、批量操作、自动化滥用或规模化调用。\n> - 严禁将本项目用于破坏市场秩序、恶意竞争、套利倒卖、二次售卖相关服务，以及任何违反 OpenAI 服务条款或当地法律法规的行为。\n> - 严禁将本项目用于生成、传播或协助生成违法、暴力、色情、未成年人相关内容，或用于诈骗、欺诈、骚扰等非法或不当用途。\n> - 使用者应自行承担全部风险，包括但不限于账号被限制、临时封禁或永久封禁以及因违规使用等所导致的法律责任。\n> - 使用本项目即视为你已充分理解并同意本免责声明全部内容；如因滥用、违规或违法使用造成任何后果，均由使用者自行承担。\n\n> [!IMPORTANT]\n> 本项目基于对 ChatGPT 官网相关能力的逆向研究实现，存在账号受限、临时封禁或永久封禁的风险。请勿使用你自己的重要账号、常用账号或高价值账号进行测试。\n\n> [!CAUTION]\n> 旧版本存在已知漏洞，请尽快升级到最新版本。公网部署时请尽量不要放置敏感信息，并自行做好访问控制与隔离。\n\n## 快速开始\n\n已发布镜像支持 `linux\u002Famd64` 与 `linux\u002Farm64`，在 x86 服务器和 Apple Silicon \u002F ARM Linux 设备上都会自动拉取匹配架构的版本。\n\n```bash\ngit clone git@github.com:huaiyuechusan\u002FYanAI.git\ncd YanAI\ndocker build -t your-registry\u002Fyanai:latest .\ndocker push your-registry\u002Fyanai:latest\n```\n\n当前仓库的 Docker 镜像不会包含 `config.json`、`data\u002F`、`.env`、数据库文件或本地虚拟环境。服务器部署时请通过宿主机挂载提供运行时配置和数据：\n\n```yaml\nvolumes:\n  - .\u002Fdata:\u002Fapp\u002Fdata\n  - .\u002Fconfig.json:\u002Fapp\u002Fconfig.json\n```\n\n服务器上准备配置和数据目录：\n\n```bash\ncp config.example.json config.json\n# 编辑 config.json，将 auth-key 改成你自己的长随机密钥\nmkdir -p data\nYANAI_IMAGE=your-registry\u002Fyanai:latest docker compose up -d\n```\n\n也可以用环境变量 `CHATGPT2API_AUTH_KEY` 覆盖 `config.json` 中的 `auth-key`，但不要把真实密钥写进 Dockerfile、镜像构建参数或公开 compose 文件。\n\n本地直接用当前代码启动容器可运行：\n\n```bash\ndocker compose -f docker-compose.local.yml up -d --build\n```\n\n本地开发启动\n```bash\ncd D:\\Desktop\\颜AI\n.\\.venv\\Scripts\\python.exe -m uvicorn main:app --reload --host 127.0.0.1 --port 8000\n\ncd D:\\Desktop\\颜AI\\web\nnpm run dev\n```\n\n### 存储后端配置\n\n支持通过环境变量或 `config.json` 中的同名字段切换存储方式；环境变量优先级更高，配置值外层多余引号会自动去除：\n\n- `json` - 本地 JSON 文件（默认）\n- `sqlite` - 本地 SQLite 数据库\n- `postgres` - 外部 PostgreSQL（需配置 `DATABASE_URL`）\n- `git` - Git 私有仓库（需配置 `GIT_REPO_URL` 和 `GIT_TOKEN`）\n\n多人稳定并发部署建议使用 `postgres`。`sqlite` 适合本地开发和轻量验证；`json` \u002F `git` 更适合单实例低并发、备份导入导出或过渡场景，不建议作为多人生产并发的主存储。PostgreSQL 后端启动时会自动检查目标数据库，不存在时会尝试通过 `postgres` \u002F `template1` 维护库创建目标库，并继续自动初始化业务表。\n\n示例：使用 PostgreSQL\n```yaml\nenvironment:\n  - STORAGE_BACKEND=postgres\n  - DATABASE_URL=postgresql:\u002F\u002Fuser:password@host:5432\u002Fdbname\n```\n\n### 迁移前保护和审计\n\n从旧 JSON 存储迁移到 SQLite、PostgreSQL 或 Git 前，必须先停写。Docker 部署请先停止 YanAI 容器，确认没有后台任务继续写入 `data\u002F*.json`：\n\n```bash\ndocker compose stop app\n# 如果是按容器名直接管理，也可以使用：docker stop yanai\n```\n\n先执行只读审计，确认旧 JSON 数据的数量、重复主键、缺失主键和异常 JSON：\n\n```bash\npython scripts\u002Faudit_storage.py --data-dir data\n```\n\n生成完整 JSON 备份目录，并校验备份可恢复：\n\n```bash\npython scripts\u002Fbackup_storage.py --data-dir data --backup-dir data\u002Fbackups\u002Fpre-migration\npython scripts\u002Fbackup_storage.py --verify data\u002Fbackups\u002Fpre-migration\n```\n\n恢复演练可以写到临时目录，避免覆盖生产数据：\n\n```bash\npython scripts\u002Fbackup_storage.py --restore data\u002Fbackups\u002Fpre-migration --target-dir .tmp\u002Frestore-check\npython scripts\u002Faudit_storage.py --data-dir .tmp\u002Frestore-check --fail-on-issues\n```\n\n迁移脚本支持预演、迁移前备份和只校验模式：\n\n```bash\npython scripts\u002Fmigrate_storage.py --from json --to postgres --dry-run\npython scripts\u002Fmigrate_storage.py --from json --to postgres --backup-dir data\u002Fbackups\u002Fpre-postgres\npython scripts\u002Fmigrate_storage.py --from json --to postgres --verify-only\n```\n\n## 功能\n\n### API 兼容能力\n\n- 兼容 `POST \u002Fv1\u002Fimages\u002Fgenerations` 图片生成接口\n- 兼容 `POST \u002Fv1\u002Fimages\u002Fedits` 图片编辑接口\n- 管理员密钥可调用 `POST \u002Fv1\u002Fchat\u002Fcompletions`、`POST \u002Fv1\u002Fresponses` 与 `POST \u002Fv1\u002Fmessages`\n- `GET \u002Fv1\u002Fmodels` 会返回上游模型列表，并补充内置默认模型 `gpt-5`、`gpt-5-1`、`gpt-5-2`、`gpt-5-3`、`gpt-5-3-mini`、`gpt-5-5`、`gpt-5-mini`、`gpt-image-2`、`codex-gpt-image-2`、`auto`\n- 图片接口支持 `n=1-4`，前端工作台会按张数拆分任务执行\n- 支持内置账号池与 OpenAI 图片兼容外部渠道，按模型、权重、优先级进行路由\n- 支持在渠道管理中关闭内置账号池，仅使用外部 OpenAI 兼容渠道；外部渠道全部失败且内置池关闭时会返回明确的不可用错误\n- 支持 Codex 中的画图接口逆向，仅 `Plus` \u002F `Team` \u002F `Pro` 订阅可用，模型别名为 `codex-gpt-image-2`，用于和官网画图区分\n\n### 在线画图功能\n\n- 内置「画图」工作台，支持文生图、图生图和多参考图编辑\n- 提供眼镜搭配、发型报告、自然美颜、写真随机风格、照片增强、暗光修复、高清细节修复等预设提示词\n- 支持参考图上传、粘贴图片、图片比例选择和多张任务队列\n- 提示词输入框支持纵向拉伸，可一键清空已选模板或当前提示词\n- 支持复制、分享当前提示词，也可以在历史生成记录中复制或分享当次提示词\n- 本地保存图片会话历史，支持回看、删除、清空和从结果图继续编辑\n- 服务端可缓存生成图片，并在「图片管理 \u002F 我的图片」中按日期筛选、预览和复制地址\n- 「我的图片」支持本页全选、多选、单张下载、所选图片打包下载、批量删除和从选中图片同步到 WebDAV；普通用户只能下载、删除和同步自己的图片记录\n\n### 提示词管理与分享\n\n- 普通用户可在「我的提示词」中创建、编辑、删除个人提示词，并上传提示词示例图\n- 用户可将个人提示词提交给管理员审核；管理员可在「提示词管理」中查看待审核内容，通过后加入公共提示词库，或填写原因驳回\n- 支持为当前提示词、历史提示词或提示词库条目生成分享链接；其他用户可通过分享链接预览并导入到个人提示词库，管理员也可导入为公共提示词\n- 画图工作台的提示词库会合并公共提示词和当前用户可见的个人提示词，便于直接套用常用模板\n\n### 号池管理功能\n\n- 自动刷新账号邮箱、类型、额度和恢复时间\n- 轮询可用账号执行图片生成与图片编辑\n- 遇到 Token 失效类错误时自动剔除无效 Token\n- 定时检查限流账号并自动刷新\n- 支持网页端配置全局 HTTP \u002F HTTPS \u002F SOCKS5 \u002F SOCKS5H 代理\n- 支持搜索、筛选、批量刷新、导出、手动编辑和清理账号\n- 支持四种导入方式：本地 CPA JSON 文件导入、远程 CPA 服务器导入、`sub2api` 服务器导入、`access_token` 导入\n- 支持在设置页配置 `sub2api` 服务器，筛选并批量导入其中的 OpenAI OAuth 账号\n\n### 管理台功能\n\n- 管理员可创建个人用户、调整额度、禁用账号、重置密码\n- 支持个人用户注册、登录、兑换码领取额度，以及个人图片记录查看\n- 支持兑换码批量生成、筛选、复制、批量删除和导出所选兑换码\n- 支持 OpenAI 图片兼容渠道管理，可新增、编辑、启停和删除渠道，并设置 Base URL、API Key、模型、权重、优先级和超时时间\n- 渠道管理支持选择模型后测试渠道 `\u002Fv1\u002Fmodels` 可用性，显示通过模型、缺失模型、错误信息和延迟；测试不会覆盖渠道已配置模型\n- 内置账号池也作为渠道展示，可在管理台中单独启停，方便纯外部渠道部署或临时停用本地账号池\n- 支持模型管理，可按渠道汇总模型、从渠道 `\u002Fv1\u002Fmodels` 获取模型列表，并为每个模型配置计费标准\n- 支持系统日志、调用日志和审计日志查看，可按类型、状态、日期、请求 ID、用户邮箱 \u002F 昵称 \u002F ID 或令牌信息筛选\n- 支持图片访问地址配置、自动清理天数、账号刷新间隔和模型映射配置\n\n### 图片归档与 WebDAV\n\n- 管理员可在「图片管理」中配置全局 WebDAV 存储，普通用户可在「我的图片」中配置自己的 WebDAV 目录\n- WebDAV 支持启停、URL、用户名、密码和远程目录配置；密码会以已设置状态回显，编辑时留空可保持原密码\n- 新生成图片在 WebDAV 启用后会自动尝试同步；也可按日期、用户、渠道或请求 ID 手动同步历史图片\n- 管理员和普通用户都可以先勾选图片，再只同步所选图片到 WebDAV；未选择图片时仍按当前筛选范围同步\n- 图片记录会保存 WebDAV 同步状态、同步时间和远程地址，图片管理与我的图片页面会显示已同步状态\n\n### 模型管理与计费标准\n\n- 管理员可在「模型管理」页面查看所有渠道模型；内置账号池默认提供与 New API 接入常用配置一致的 10 个模型，外部渠道则读取渠道自身 `models` 配置。\n- 每个 OpenAI 兼容外部渠道都可以通过「获取」按钮请求该渠道的 `\u002Fv1\u002Fmodels`，成功后自动写回渠道模型列表。\n- 模型计费配置保存在系统配置 `model_pricing` 中，兼容 JSON、SQLite、PostgreSQL 等现有存储后端，不需要额外迁移表结构。\n- 计费标准支持按 Token 和按次两种模式；可配置输入价 \u002F 1M tokens、输出价 \u002F 1M tokens、`model_ratio`、`completion_ratio`、`model_price`、币种和启停状态，方便对接 New API 风格的倍率或固定价格计费。\n\n### 多用户稳定并发改造\n\n当前仓库已经完成多用户稳定并发改造，核心依赖数据库事务、行级写入、租约和请求追踪。\n\n- 存储层拆分为 Repository 边界，并保留兼容旧 Storage API 的适配器；数据库后端覆盖账号、管理员密钥、用户、会话、兑换码、渠道、提示词库、图片记录、额度预留、系统配置、系统日志和审计日志等数据集\n- SQLite \u002F PostgreSQL 后端初始化时会自动创建所需业务表，降低首次部署和迁移后的手动建表成本\n- PostgreSQL 存储配置可放在环境变量或 `config.json` 中，环境变量优先；目标数据库不存在时会自动创建，减少首次部署和远程库迁移时的手动准备工作\n- 数据迁移和安全保护覆盖完整业务数据，提供只读审计、备份恢复、迁移预演、迁移校验和重复主键检查，支持从旧 JSON 数据迁移到 SQLite \u002F PostgreSQL；迁移范围包含账号、密钥、用户、会话、兑换码、渠道、提示词库、图片记录、额度预留、系统设置、系统日志和审计日志\n- 普通用户图片额度改为请求级预扣：任务开始前按 `request_id` 预留额度，成功后按实际生成数量确认，失败或无结果时释放，过期预留由后台 watcher 返还；管理员调用不占用个人额度\n- 账号池改为图片任务租约模型，支持 `max_concurrency`、`inflight_count`、`lease_owner`、`lease_owners` 和 `leased_until`，租用成功后再调用上游，结束时释放并更新成功、失败、额度和限流状态；PostgreSQL 下会使用行级锁避免多个任务抢占同一账号\n- 图片记录改为逐条插入并使用 UUID 记录 ID，支持按用户、日期、渠道和 `request_id` 分页查询，避免多人同时生成图片时整表覆盖导致记录丢失\n- 兑换码兑换、渠道更新、提示词新增和系统设置已接入数据库 Repository：单次兑换码并发兑换只能成功一次，不同渠道或提示词的并发管理操作不会互相覆盖\n- 请求链路加入 `x-request-id` \u002F `request_id`，贯穿 API 调用、额度预留、账号租约、图片记录、系统日志和审计日志；`\u002Fapi\u002Fstorage\u002Finfo` 和健康检查可查看当前存储后端与数据集状态\n\n### 注册机邮箱 Provider\n\n注册机支持在 `\u002Fregister` 页面配置多个临时邮箱 provider，并按启用顺序轮换。`moemail` 配置示例：\n\n```json\n{\n  \"enable\": true,\n  \"type\": \"moemail\",\n  \"api_base\": \"https:\u002F\u002Fmoemail.app\",\n  \"api_key\": \"YOUR_MOEMAIL_API_KEY\",\n  \"default_domain\": \"moemail.app\",\n  \"expiry_time\": 3600000\n}\n```\n\n`api_base` 可以改为你自部署的 MoeMail 地址；`expiry_time` 单位为毫秒，`3600000` 表示 1 小时。\n\n### 实验性 \u002F 注意事项\n\n- 文本类兼容接口主要面向管理员密钥和调试场景，个人用户仅开放图片相关能力\n- 流式图片与文本输出仍建议谨慎测试\n- 详细状态说明见：[功能清单](.\u002Fdocs\u002Ffeature-status.en.md)\n\n## 截图\n\n### 画图功能\n![image-20260604221114171](README.assets\u002Fimage-20260604221114171.png)\n\n### 用户管理\n![image-20260604221129930](README.assets\u002Fimage-20260604221129930.png)\n\n### 账号池管理（添加RT的获取）\n![image-20260604221249125](README.assets\u002Fimage-20260604221249125.png)\n\n### 注册机管理\n![image-20260604221336677](README.assets\u002Fimage-20260604221336677.png)\n\n### 提示词管理\n![image-20260604221403230](README.assets\u002Fimage-20260604221403230.png)\n\n### 图片管理\n\n![image-20260604221416836](README.assets\u002Fimage-20260604221416836.png)\n\n### 渠道管理（在原有项目基础上添加第三方渠道）\n![image-20260604221426835](README.assets\u002Fimage-20260604221426835.png)\n\n### 模型管理（可作为渠道接入newapi）\n\n![image-20260604221442002](README.assets\u002Fimage-20260604221442002.png)\n\n### 兑换码管理\n\n![image-20260604221532803](README.assets\u002Fimage-20260604221532803.png)\n\n### 用户登录注册功能（添加L站登录和邮箱验证）\n![image-20260604221546536](README.assets\u002Fimage-20260604221546536.png)\n\n## API\n\n所有 AI 接口都需要请求头：\n\n```http\nAuthorization: Bearer \u003Cauth-key>\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Ccode>GET \u002Fv1\u002Fmodels\u003C\u002Fcode>\u003C\u002Fsummary>\n\u003Cbr>\n\n返回上游模型列表，并补充当前内置默认模型。\n\n```bash\ncurl http:\u002F\u002Flocalhost:8000\u002Fv1\u002Fmodels \\\n  -H \"Authorization: Bearer \u003Cauth-key>\"\n```\n\n\u003Cdetails>\n\u003Csummary>说明\u003C\u002Fsummary>\n\u003Cbr>\n\n| 字段   | 说明                                                                                                                                 |\n|:-----|:-----------------------------------------------------------------------------------------------------------------------------------|\n| 返回模型 | 上游模型列表，并补充 `gpt-5`、`gpt-5-1`、`gpt-5-2`、`gpt-5-3`、`gpt-5-3-mini`、`gpt-5-5`、`gpt-5-mini`、`gpt-image-2`、`codex-gpt-image-2`、`auto` |\n| 接入场景 | 可接入 Cherry Studio、New API 等上游或客户端                                                                                                  |\n\n\u003Cbr>\n\u003C\u002Fdetails>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Ccode>POST \u002Fv1\u002Fimages\u002Fgenerations\u003C\u002Fcode>\u003C\u002Fsummary>\n\u003Cbr>\n\nOpenAI 兼容图片生成接口，用于文生图。\n\n```bash\ncurl http:\u002F\u002Flocalhost:8000\u002Fv1\u002Fimages\u002Fgenerations \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer \u003Cauth-key>\" \\\n  -d '{\n    \"model\": \"gpt-image-2\",\n    \"prompt\": \"一只漂浮在太空里的猫\",\n    \"n\": 1,\n    \"response_format\": \"b64_json\"\n  }'\n```\n\n\u003Cdetails>\n\u003Csummary>字段说明\u003C\u002Fsummary>\n\u003Cbr>\n\n| 字段                | 说明                                                 |\n|:------------------|:---------------------------------------------------|\n| `model`           | 图片模型，当前可用值以 `\u002Fv1\u002Fmodels` 返回结果为准，推荐使用 `gpt-image-2` |\n| `prompt`          | 图片生成提示词                                            |\n| `n`               | 生成数量，当前后端限制为 `1-4`                                 |\n| `response_format` | 当前请求模型中包含该字段，默认值为 `b64_json`                       |\n\n\u003Cbr>\n\u003C\u002Fdetails>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Ccode>POST \u002Fv1\u002Fimages\u002Fedits\u003C\u002Fcode>\u003C\u002Fsummary>\n\u003Cbr>\n\nOpenAI 兼容图片编辑接口，用于上传图片并生成编辑结果。\n\n```bash\ncurl http:\u002F\u002Flocalhost:8000\u002Fv1\u002Fimages\u002Fedits \\\n  -H \"Authorization: Bearer \u003Cauth-key>\" \\\n  -F \"model=gpt-image-2\" \\\n  -F \"prompt=把这张图改成赛博朋克夜景风格\" \\\n  -F \"n=1\" \\\n  -F \"image=@.\u002Finput.png\"\n```\n\n\u003Cdetails>\n\u003Csummary>字段说明\u003C\u002Fsummary>\n\u003Cbr>\n\n| 字段       | 说明                                  |\n|:---------|:------------------------------------|\n| `model`  | 图片模型， `gpt-image-2`                 |\n| `prompt` | 图片编辑提示词                             |\n| `n`      | 生成数量，当前后端限制为 `1-4`                  |\n| `image`  | 需要编辑的图片文件，使用 multipart\u002Fform-data 上传 |\n\n\u003Cbr>\n\u003C\u002Fdetails>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Ccode>POST \u002Fv1\u002Fchat\u002Fcompletions\u003C\u002Fcode>\u003C\u002Fsummary>\n\u003Cbr>\n\n面向图片场景的 Chat Completions 兼容接口，不是完整通用聊天代理。\n\n```bash\ncurl http:\u002F\u002Flocalhost:8000\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer \u003Cauth-key>\" \\\n  -d '{\n    \"model\": \"gpt-image-2\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"生成一张雨夜东京街头的赛博朋克猫\"\n      }\n    ],\n    \"n\": 1\n  }'\n```\n\n\u003Cdetails>\n\u003Csummary>字段说明\u003C\u002Fsummary>\n\u003Cbr>\n\n| 字段         | 说明                |\n|:-----------|:------------------|\n| `model`    | 图片模型，默认按图片生成场景处理  |\n| `messages` | 消息数组，需要是图片相关请求内容  |\n| `n`        | 生成数量，按当前实现解析为图片数量 |\n| `stream`   | 已实现，但仍在测试         |\n\n\u003Cbr>\n\u003C\u002Fdetails>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Ccode>POST \u002Fv1\u002Fresponses\u003C\u002Fcode>\u003C\u002Fsummary>\n\u003Cbr>\n\n面向图片生成工具调用的 Responses API 兼容接口，不是完整通用 Responses API 代理。\n\n```bash\ncurl http:\u002F\u002Flocalhost:8000\u002Fv1\u002Fresponses \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer \u003Cauth-key>\" \\\n  -d '{\n    \"model\": \"gpt-5\",\n    \"input\": \"生成一张未来感城市天际线图片\",\n    \"tools\": [\n      {\n        \"type\": \"image_generation\"\n      }\n    ]\n  }'\n```\n\n\u003Cdetails>\n\u003Csummary>字段说明\u003C\u002Fsummary>\n\u003Cbr>\n\n| 字段       | 说明                            |\n|:---------|:------------------------------|\n| `model`  | 响应中会回显该模型字段，但图片生成当前仍走图片生成兼容逻辑 |\n| `input`  | 输入内容，需要能解析出图片生成提示词            |\n| `tools`  | 必须包含 `image_generation` 工具请求  |\n| `stream` | 已实现，但仍在测试                     |\n\n\u003Cbr>\n\u003C\u002Fdetails>\n\u003C\u002Fdetails>\n\n## ToDoList\n\n- [x] 择默认提示词模板后，没法再次点击取消，添加一键清空模板按钮\n- [x] 提示词框可以自由拉伸的\n- [x] 提示词分享和用户导入，每个用户也能单独管理自己的提示词\n- [ ] 用户端设置自己api\n- [ ] 页面卡顿：因为网站仍然把大图用 base64 直接塞进页面里。这需要改网站代码或后端接口：改成图片 URL + 缩略图 + 原图懒加载\n- [x] 兑换码批量导出\n- [ ] 接入支付功能\n- [x] pg构建知识库自动建表\n- [ ] 自定义渠道没有余额，额度显示0\n- [x] 日志按用户查找\n- [x] webdav配置保存图片\n- [x] 用户管理自己生成的照片，支持选择、下载、打包下载、删除和所选 WebDAV 同步\n- [x] 渠道模型可用性测试，可选择模型并查看缺失模型和延迟\n- [x] postgres数据库环境从config读取配置，所有json数据迁移到postgres（含额度预留、系统设置、系统日志和审计日志）\n\n## 社区支持\n\n学 AI , 上 L 站：[LinuxDO](https:\u002F\u002Flinux.do)\n\n## 致谢\n\n感谢佬友的 [basketikun\u002Fchatgpt2api](https:\u002F\u002Fgithub.com\u002Fbasketikun\u002Fchatgpt2api) 项目在 ChatGPT 逆向整理、OpenAI 兼容接口封装和自托管部署思路上的探索与开源分享。颜AI 的项目方向与部分实现思路受其启发。\u003Cbr>\n感谢佬友的[贴一个让设计师也觉得脊背发凉的提示词 ](https:\u002F\u002Flinux.do\u002Ft\u002Ftopic\u002F532495)\u003Cbr>\n感谢佬友的 [🍌Banana Prompt Quicker](https:\u002F\u002Flinux.do\u002Ft\u002Ftopic\u002F1244563)项目在提示词快捷工作流上的开源分享与启发。\u003Cbr>\n\n## Contributors\n\n感谢所有为本项目做出贡献的开发者：\n\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fhuaiyuechusan\u002FYanAI\u002Fgraphs\u002Fcontributors\">\n  \u003Cimg alt=\"Contributors\" src=\"https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=huaiyuechusan\u002FYanAI\" \u002F>\n\u003C\u002Fa>\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fchart?repos=huaiyuechusan\u002FYanAI&type=date&legend=top-left)](https:\u002F\u002Fwww.star-history.com\u002F?repos=huaiyuechusan%2FYanAI&type=date&legend=top-left)\n","2026-06-11 04:10:47","CREATED_QUERY"]