Files
image-prompt-studio/README.md
2026-04-25 11:26:33 +08:00

121 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 保持苹果风格的浅色层级、圆角和留白,但去掉了大面积毛玻璃和重阴影,减少滚动卡顿。