- Add history saving to generate_image endpoint - Remove DALL-E from spec (Gemini only for now) - Add mkdir commands for frontend directories - Add fetchCurrentUser to auth store Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
8.4 KiB
8.4 KiB
图片生成网站设计文档
项目概述
项目名称: ImageCreator 项目类型: 前后端分离的 Web 应用 核心功能: 用户注册登录后,通过提示词优化 + 图像生成(T2I/I2I)实现图片创作 目标用户: 需要生成图片的普通用户、内容创作者
技术架构
整体架构
┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Vue 3 前端 │ ←→ │ FastAPI 后端 │ ←→ │ 图像生成 API │
│ (用户界面) │ │ (业务逻辑) │ │ Gemini/OpenAI │
└─────────────┘ └────────┬─────────┘ └─────────────────┘
↓
┌───────────────┐
│ PostgreSQL │
└───────────────┘
技术栈
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端框架 | Vue 3 + TypeScript | 组合式 API |
| 前端构建 | Vite | 快速构建工具 |
| 前端 UI | Naive UI + TailwindCSS | 组件库 + 样式 |
| 后端框架 | FastAPI (Python) | 高性能 API 框架 |
| 数据库 | PostgreSQL | 用户数据、历史记录 |
| ORM | SQLAlchemy | 数据库操作 |
| 认证 | JWT | 无状态认证 |
| 图像存储 | 本地文件系统 | 生成的图片存储 |
项目结构
/opt/imagecreator/imagecreator/
├── backend/ # FastAPI 后端
│ ├── app/
│ │ ├── __init__.py
│ │ ├── main.py # FastAPI 入口
│ │ ├── config.py # 配置管理
│ │ ├── api/ # API 路由
│ │ │ ├── __init__.py
│ │ │ ├── auth.py # 认证相关路由
│ │ │ ├── users.py # 用户路由
│ │ │ ├── images.py # 图片生成路由
│ │ │ └── history.py # 历史记录路由
│ │ ├── core/ # 核心模块
│ │ │ ├── __init__.py
│ │ │ ├── security.py # JWT / 密码处理
│ │ │ └── config.py # 配置加载
│ │ ├── models/ # 数据库模型
│ │ │ ├── __init__.py
│ │ │ ├── user.py # 用户模型
│ │ │ └── history.py # 生成历史模型
│ │ ├── schemas/ # Pydantic schemas
│ │ │ ├── __init__.py
│ │ │ ├── auth.py
│ │ │ ├── user.py
│ │ │ ├── image.py
│ │ │ └── history.py
│ │ └── services/ # 业务逻辑
│ │ ├── __init__.py
│ │ ├── auth.py # 认证服务
│ │ ├── image.py # 图像生成服务
│ │ └── prompt.py # 提示词优化服务
│ ├── requirements.txt
│ └── init_db.py # 数据库初始化
├── frontend/ # Vue 3 前端
│ ├── src/
│ │ ├── api/ # API 调用
│ │ │ ├── index.ts
│ │ │ ├── auth.ts
│ │ │ └── images.ts
│ │ ├── components/ # 组件
│ │ │ ├── ImageGenerator.vue
│ │ │ ├── PromptOptimizer.vue
│ │ │ ├── ImageHistory.vue
│ │ │ └── ...
│ │ ├── views/ # 页面
│ │ │ ├── Login.vue
│ │ │ ├── Register.vue
│ │ │ ├── Home.vue
│ │ │ └── History.vue
│ │ ├── stores/ # 状态管理
│ │ ├── router/ # 路由
│ │ ├── App.vue
│ │ └── main.ts
│ ├── package.json
│ └── vite.config.ts
├── docker-compose.yml
└── README.md
功能模块
1. 用户系统
1.1 注册
- 用户名(唯一)
- 邮箱(唯一)
- 密码(加密存储)
1.2 登录
- 用户名/邮箱 + 密码
- 返回 JWT token
1.3 用户信息
- 查看/修改个人信息
- 密码修改
2. 提示词优化
2.1 优化策略
参考 prompt-optimizer 的图像优化模板:
- 文生图优化: 通用图像生成提示词优化
- 图生图优化: 针对 I2I 场景的提示词优化
- 识别添加/删除/替换/增强意图
- 自然语言描述编辑需求
2.2 优化流程
用户输入 → LLM 优化 → 优化后提示词 → 用户确认 → 生成图片
3. 图片生成
3.1 文生图 (T2I)
- 输入: 优化后的提示词
- 选择模型: Gemini / OpenAI DALL-E
- 输出: 生成的图片
3.2 图生图 (I2I)
- 输入: 参考图片 (base64) + 修改需求描述
- 选择模式:
- 通用编辑: 基于描述进行修改
- 风格迁移: 转换为指定风格
- 变体生成: 生成相似变体
- 选择模型: Gemini
- 输出: 生成的图片
3.3 支持的图像模型
| 模型 | Provider | T2I | I2I | 风格迁移 | 变体 |
|---|---|---|---|---|---|
| Gemini 2.5 Flash | ✓ | ✓ | ✓ | ✓ |
注意: 当前版本仅支持 Gemini 模型。OpenAI DALL-E 等其他模型可在后续版本中添加。
4. 历史记录
- 记录每次生成的:
- 原始提示词
- 优化后提示词
- 使用的模型
- 生成的图片
- 生成时间
- 支持查看、删除
API 设计
认证相关
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/auth/register | 用户注册 |
| POST | /api/auth/login | 用户登录 |
| POST | /api/auth/refresh | 刷新 Token |
用户相关
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/users/me | 获取当前用户信息 |
| PUT | /api/users/me | 更新用户信息 |
图像生成
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/images/optimize | 优化提示词 |
| POST | /api/images/generate | 生成图片 (T2I/I2I) |
历史记录
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/history | 获取历史记录列表 |
| GET | /api/history/{id} | 获取单条记录详情 |
| DELETE | /api/history/{id} | 删除记录 |
数据模型
User
id: UUID (主键)
username: String (唯一, 32字符)
email: String (唯一, 255字符)
hashed_password: String (255字符)
created_at: DateTime
updated_at: DateTime
GenerationHistory
id: UUID (主键)
user_id: UUID (外键)
original_prompt: Text
optimized_prompt: Text
mode: Enum (text2image, image2image)
model: String (32字符)
image_url: String (512字符)
input_image_url: String (可选, 512字符) # I2I 时的输入图
created_at: DateTime
安全设计
- 密码加密: bcrypt
- JWT Token:
- Access Token: 30分钟有效期
- Refresh Token: 7天有效期
- API 认证: Bearer Token
- 输入验证: Pydantic schemas
- CORS: 限制前端域名访问
部署架构
Docker Compose
services:
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/imagecreator
- SECRET_KEY=xxx
- GEMINI_API_KEY=xxx
- OPENAI_API_KEY=xxx
depends_on:
- db
frontend:
build: ./frontend
ports:
- "3000:80"
depends_on:
- backend
db:
image: postgres:15
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=imagecreator
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
实施计划
第一阶段: 基础架构
- 项目目录结构初始化
- 后端 FastAPI 框架搭建
- 数据库模型创建
- Docker Compose 配置
第二阶段: 核心功能
- 用户认证模块 (注册/登录/JWT)
- 提示词优化服务
- 图像生成服务 (T2I/I2I)
第三阶段: 前端开发
- Vue 3 项目初始化
- 页面开发 (登录/注册/主页/历史)
- 组件开发 (图像生成器/提示词优化)
第四阶段: 集成测试
- API 联调
- 前后端联调
- 部署测试
参考项目
- prompt-optimizer - 本项目的核心逻辑参考
- 图像适配器架构
- 提示词优化模板 (image2image-optimize, text2image-optimize)
- 服务层设计模式