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