feat(project): init

This commit is contained in:
zhangheng
2026-04-25 11:26:33 +08:00
commit 9bf212f67c
63 changed files with 11141 additions and 0 deletions

120
README.md Normal file
View File

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