# Image Prompt Studio 一个基于 `Next.js + SQLite` 的图片生成应用,支持: - 用户登录 - 管理员无限额 - 普通用户额度控制 - 管理页面设置默认额度和用户角色 - `gpt-image-2` 图片生成 - 图片落盘保存,并支持历史回看 - PWA 安装支持 - 图片生成成功后的系统通知 - 苹果风格、同时兼顾性能的界面 ## 技术栈 - Next.js App Router - React - SQLite - `better-sqlite3` - `bcryptjs` ## 本地运行 1. 准备环境变量 ```bash cp .env.example .env ``` 2. 填入真实 `OPENAI_API_KEY` 3. 安装依赖并启动 ```bash npm install npm run dev ``` 4. 打开 ```text http://127.0.0.1:${PORT} ``` 首次启动会自动创建 SQLite 文件,并按 `.env` 中的 `ADMIN_USERNAME` / `ADMIN_PASSWORD` 写入管理员账号。 生成成功后的图片默认会保存在 `data/generated-images`,SQLite 只保存索引和元数据。 默认情况下,`ADMIN_SYNC_ON_BOOT=true`,每次启动都会把 `.env` 中的管理员用户名和密码同步到数据库里的该管理员账号。 `npm run dev` 会使用 Next.js 内建的环境变量加载;`npm start` 会读取项目根目录下的 `.env` / `.env.local`;`docker compose` 会使用 `env_file` 中指定的 `.env`。如果 shell 里已经设置了同名环境变量,则以 shell 为准。 修改 `PORT`、`ADMIN_USERNAME`、`ADMIN_PASSWORD` 后,需要重启当前服务进程才会生效。 ## PWA 与通知 - 应用已提供 `manifest.webmanifest`、Service Worker 和可安装图标资源。 - 在支持 PWA 的浏览器中,进入“生成中心”后可以点击“安装应用”把站点安装成桌面应用。 - 点击“开启通知”并授权后,当前页面调用 `/api/generate` 成功返回图片时,会触发系统通知。 - 通知依赖浏览器的安全上下文,建议在 `localhost`、`127.0.0.1` 或 HTTPS 环境下测试。 - 当前通知是“前端请求成功后触发”的模式,所以生成任务发起后页面需要保持打开;如果页面被关闭,请求本身也会终止。 ## Docker ```bash docker compose up --build -d ``` 默认映射到: ```text http://127.0.0.1:${PORT} ``` 如果想换宿主机端口,可以这样: ```bash PORT=3876 docker compose up --build -d ``` 如果你希望通过 `npm scripts` 调用 Docker Compose,而不是继续往 `package.json` 里加很多 `docker:*` 命令,可以使用这个通用入口: ```bash npm run dc -- up --build -d ``` 常用示例: ```bash npm run dc -- ps npm run dc -- logs -f image-prompt-studio npm run dc -- down npm run dc -- down --rmi local npm run dc -- down --rmi all -v ``` ## 管理员密码重置 如果你修改了 `.env` 中的 `ADMIN_USERNAME` / `ADMIN_PASSWORD`,可以直接重启服务。 如果你想手动立即同步一次,也可以运行: ```bash npm run admin:reset ``` ## 默认规则 - `admin`:无限额 - `user`:按月额度限制 - 管理员可在后台修改默认月额度 - 管理员可创建用户、改角色、改用户额度、禁用用户、重置密码 ## 测试 ```bash npm test ``` ## 备注 - 当前实现优先稳定和交付速度,不引入额外 ORM。 - UI 保持苹果风格的浅色层级、圆角和留白,但去掉了大面积毛玻璃和重阴影,减少滚动卡顿。