Photoshot:开源 AI 头像生成 Web 应用
Photoshot 是一个开源的 AI 头像/形象生成 Web 应用,基于 Next.js、Chakra UI、Prisma 构建,通过 Replicate 云端运行机器学习模型(含开源的 Flux 文生图模型与 Dreambooth 训练流程),并使用 Stripe 处理支付、AWS S3 存储图片、OpenAI API 提供提示词向导。项目提供完整的本地开发流程,包括 Docker 本地 PostgreSQL 与邮件服务、Prisma 数据库迁移与环境变量配置。
社区作者 · zZz
它解决什么问题
Photoshot 是一个开源的 AI 头像生成 Web 应用,官方演示站点为 photoshot.app。项目定位是让用户上传素材并生成个人 AI 头像/形象,属于完整的可商用 Web 应用雏形,而非单纯的模型仓库。
技术栈(来源明确列出):
- ▲ Next.js:Web 应用框架
- 🖼 Chakra UI:UI 组件库
- 📦 Prisma:数据库 ORM
- 🧠 Replicate:在云端运行机器学习模型的平台
- 💰 Stripe:支付
- 👩🎨 Flux:一个开源的文本到图像生成模型
从环境变量可以看出项目的关键能力链路:使用 Replicate 进行模型训练与推理(Dreambooth 训练,REPLICATE_MAX_TRAIN_STEPS 默认 3000;REPLICATE_NEGATIVE_PROMPT 默认 cropped face, cover face, cover visage, mutated hands),使用 REPLICATE_HD_VERSION_MODEL_ID 指定的模型版本对生成图像进行放大,使用 AWS S3 存储图片,使用 Stripe 完成 studio 定价与付费(NEXT_PUBLIC_STRIPE_STUDIO_PRICE 以美分计价,NEXT_PUBLIC_STUDIO_SHOT_AMOUNT 限制每个 studio 的最大拍摄数),使用 OpenAI API 提供提示词向导(prompt wizard)能力。
适用对象:希望自建 AI 头像/写真生成服务的开发者与产品团队;需要参考 Next.js + Prisma + Replicate + Stripe 全链路集成的全栈工程师;希望在本地复现 AI 图像生成 SaaS 流程的技术人员。
许可证信息在提供的来源正文中未出现,需到仓库页面核验后再用于分发或商用。
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
准备环境:需要 Node.js 与包管理器(项目命令以 yarn/npm 给出)、Docker 与 docker-compose(用于本地 PostgreSQL 与 maildev 邮件服务);同时需自备 AWS S3 存储桶、Replicate 账号与 API Token、Stripe 账号、OpenAI API Key。
1)安装依赖:
yarn install2)使用 Docker 运行本地 postgres 数据库和 maildev 服务器(maildev 可通过 http://localhost:1080 访问): docker-compose up -d
3)创建本地环境变量文件:
cp .env.example .env.local4)更新 .env.local 中的环境变量值:
- DATABASE_URL:PostgreSQL 连接字符串。若使用仓库提供的 docker 配置,应为 postgresql://photoshot:photoshot@localhost:5432/photoshot
- NEXTAUTH_URL:Next.js 应用的 URL,用于 NextAuth.js 鉴权
- S3_UPLOAD_KEY:用于存放图片的 AWS S3 桶访问密钥
- S3_UPLOAD_SECRET:用于存放图片的 AWS S3 桶密钥
- S3_UPLOAD_BUCKET:用于存放图片的 AWS S3 桶名称
- S3_UPLOAD_REGION:AWS S3 桶所在区域
- REPLICATE_API_TOKEN:Replicate 的 API Token
- REPLICATE_USERNAME:Replicate 账号关联的用户名
- REPLICATE_MAX_TRAIN_STEPS:Dreambooth AI 模型的最大训练步数,默认 3000
- REPLICATE_NEGATIVE_PROMPT:Replicate AI 模型中用于负面训练示例的提示词,默认 cropped face, cover face, cover visage, mutated hands
- REPLICATE_HD_VERSION_MODEL_ID:用于放大生成图像的模型版本,这类模型可在 Replicate 上浏览
- NEXT_PUBLIC_REPLICATE_INSTANCE_TOKEN:训练数据的唯一标识,可为任意字符串;为获得最佳效果,建议使用包含三个 Unicode 字符、不含空格的标识符,例如 cjw
- SECRET:用于 NextAuth.js 鉴权的随机字符串
- EMAIL_FROM:发送邮件使用的发件地址
- EMAIL_SERVER:用于发送邮件的 SMTP 服务器 URL。若使用仓库提供的 docker 配置,应为 http://localhost:25
- STRIPE_SECRET_KEY:Stripe 账号的 API Key
- NEXT_PUBLIC_STRIPE_STUDIO_PRICE:studio 的价格,以美分为单位(例如 1000 = $10)
- NEXT_PUBLIC_STUDIO_SHOT_AMOUNT:每个 studio 允许的最大拍摄数量
- OPENAI_API_KEY:OpenAI API 的 API Key,用于提示词向导(prompt wizard)功能
- OPENAI_API_SEED_PROMPT:通过 OpenAI API 生成风格提示词时使用的种子提示词
5)如果使用仓库提供的 docker-compose 配置,需要在 .env.local 中禁用 TLS,添加: NODE_TLS_REJECT_UNAUTHORIZED = "0"
6)运行数据库迁移:
yarn prisma:migrate:dev7)启动开发服务器:
npm run dev或
yarn dev8)在浏览器打开 http://localhost:3000 查看结果。
常见问题与注意事项:不使用 Docker 时需自行准备 PostgreSQL 与 SMTP 邮件服务,并按上面说明填写对应连接串;训练步数、负面提示词的默认值分别为 3000 与 cropped face, cover face, cover visage, mutated hands;NEXT_PUBLIC_REPLICATE_INSTANCE_TOKEN 建议使用三个 Unicode 字符且不含空格;图片存储、支付、模型推理分别依赖 S3、Stripe、Replicate 的账号与密钥,缺一不可。