尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证BeautyAI Public Repo
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗上传一张正脸,30 秒内看到第一个发现:面部特点、个人色彩、八型风格方向,以及能在自己身上看见的发型、唇色、披布和穿搭建议; 带走一张 3:4 档案卡,随时一键删除。V2 的定稿 PRD 在
docs/v2/,任务与接口在docs/v2/V2_TASKS.md。
无需任何密钥即可完整体验(假模型 / 假图像编辑 / 假支付):
make install && make models && (cd web && npm ci)
ANALYSIS_PROVIDER=fake IMAGE_EDIT_PROVIDER=fake PAYMENT_PROVIDER=fake QC_MODE=stub make dev # API :8000 + web :3000
# 或者完全不启动 API:
cd web && NEXT_PUBLIC_USE_FIXTURE=1 npm run dev
打开 /(落地页)、/t/style(话题入口)、/start(上传)或 /p/ap_sample_0001(示例档案,任何模式下都用样例数据)。
关键路径脚本:node web/e2e/critical-path.mjs(话题入口 → 同意 → 质检 → 揭晓 → 档案 → 反馈重排 → 免费试看 → 解锁 → 导出档案卡 → 删除)。
| 层 | V2 新增 |
|---|---|
| CV | 只需正脸(D20);三庭五眼、虹膜比例尺;美颜检测;面部多边形(浏览器试色用,随照片 24 小时删除) |
| 模型 | 两段式:快速初见(analyzer-quick-0.1)+ 完整分析(analyzer-0.3),各自校验并修复一次(D21) |
| 规则 | 八型四层(D25)、反馈即时重排(D26)、三方向发型校验、镜框 mm、行动计划、穿搭一致性 |
| 图像 | 多目标试看、核心区像素不变 + 边缘软保护 + 颜色迁移、质量门与降级、“AI 试看”显式标识与隐式元数据(D22) |
| 商业 | 免费 vs 一次性完整护照;付费内容在服务端裁剪(D27) |
EN — Upload 2–4 photos and answer three questions → get a structured, evidence-backed personal styling report, ranked into a top-5 action list → see the #1 change applied to your own photo. An AI-product portfolio piece: multimodal pipeline → schema-constrained output → deterministic rules layer → image editing with a hard identity guarantee → a UI that shows where every number came from. UI in Simplified Chinese; code and comments in English.
上传 2–4 张照片、回答三个问题,得到一份结构化、有依据、可执行的个人形象报告:五条按优先级排好的建议,每一条都能指回照片里的具体观察;再看到第一条用在你自己照片上的样子。
不打颜值分 · 不给医美建议 · 不推断年龄、民族、性别认同或健康 · 照片 24 小时内删除。
| 推荐造型(改造前后,脸部始终是原图像素) | 优先改进 Top 5(含「为什么排第一」) |
|---|---|
| 视觉档案:测量 / 模型 / 规则 并排 | 手机端(375 px) |
示例报告使用一位虚构用户的数据和示意插画(/sample),不含任何真人照片。
不是「我会调视觉 API」,而是一条可追溯的产品管线:
flowchart LR
U["2–4 张照片<br/>+ 三个问题"] --> QC
subgraph CV["测量 · CV 层(MediaPipe + OpenCV)"]
QC["质检门禁<br/>人脸 · 清晰度 · 曝光 · 姿态 · 角色"] --> AN["锚点<br/>长宽比 · 额颧颌宽度"]
AN --> FS["脸型启发式"]
QC --> CS["颜色取样<br/>脸颊 · 眉 · 虹膜 · 唇 · 头发 Lab"]
end
QC -- 不合格 --> RT["重拍提示<br/>(不调用模型)"]
subgraph M["模型 · 单一生产模型(DeepSeek,JSON 模式)"]
LLM["一次视觉调用<br/>观察 → 推断 → 建议"] --> V{"Schema + 契约校验"}
V -- 失败(最多重试 1 次) --> LLM
end
AN --> LLM
FS --> LLM
CS --> LLM
subgraph R["规则 · rules.py + config/*.yaml"]
RU["约束复核 C5 · 依据完整 C4<br/>测量 vs 模型 C1–C3 · C11 · C12<br/>置信度封顶 · 季型门控<br/>排序(分数拆解)· 款式库匹配"]
end
V -- 通过 --> RU
AN --> RU
CS --> RU
RU --> P[("Passport JSON<br/>Schema v0.2")]
P --> WEB["报告页<br/>每个数值带来源标记"]
P --> PV["推荐造型<br/>头部裁切 → Qwen 图像编辑<br/>→ 蒙版回贴,脸部像素不变"]
PV --> WEB
| 来源 | 产生什么 | 代码 |
|---|---|---|
| 测量(CV) | input_quality、anchors(含脸型启发式)、color_measurements | qc.py · anchors.py · face_shape.py · color_sample.py |
| 模型 | analysis:观察、判断、四个方向块、6–8 条候选建议——只此一处 | analyzer.py · prompts/production_analyzer.md · schema/analysis.schema.json |
| 规则 | derived:排序与分数拆解、标签、一致性标记、封顶后的置信度、季型门控、参考款式 | rules.py · config/rules.yaml · config/hairstyles.json |
报告界面上每个值旁边都有 测量 / 模型 / 规则 标记;「视觉档案」一节把模型的脸型判断和 CV 启发式并排放,矛盾时由规则层标出(C11)。
docs/DECISIONS.md)需要:Python ≥ 3.11、Node 22;Linux 上 MediaPipe 还需要 libegl1 libgles2(sudo apt-get install libegl1 libgles2)。
make setup # .venv + Python 依赖 + MediaPipe 模型(models/,不入库)+ web 依赖 + .env
make dev # API http://localhost:8000 + 网页 http://localhost:3000
打开 http://localhost:3000 。不需要任何密钥也能走完整个流程:
| 没有密钥时 | 效果 |
|---|---|
ANALYSIS_PROVIDER=auto → fake | 分析内容来自示例数据,报告顶部显示「演示模式」 |
IMAGE_EDIT_PROVIDER=auto → fake | 效果图用简单调色演示「编辑区域 + 原脸回贴」,并注明是演示 |
| 质检、锚点、颜色取样 | 始终真实运行(MediaPipe) |
接入真实模型:在 .env 里填 DEEPSEEK_API_KEY(分析)和 DASHSCOPE_API_KEY(阿里云百炼中国站·北京地域,效果图),重启即可。
其他命令:
make test # pytest(无需密钥;人脸相关测试需要 data/test_faces/ 下有正脸照)
make lint # ruff
make passport PHOTOS=data/p01 # 命令行:照片目录(front.jpg、profile45.jpg,可选 smile、hair)→ runs/<id>/passport.json
make sample # 重建示例护照(examples/ 与 web/lib/fixtures/)
make types # 从 schema 生成 web/lib/passport.ts
python scripts/summarize_runs.py runs/ap_* # 首次通过率、p50/p90、成本、安全词检查、稳定性
python scripts/ab_thinking.py --sets data/p01 data/p02 data/p03 # DeepSeek 思考模式开 / 关对比(D16)
python scripts/debug_landmarks.py <照片> # 关键点叠图,核对编号
| 变量 | 默认 | 作用 |
|---|---|---|
DEEPSEEK_API_KEY / DASHSCOPE_API_KEY | — | 分析模型 / 图像编辑模型 |
DASHSCOPE_BASE_URL | 空 | 可选;覆盖 config/models.yaml 里的百炼地址,如北京业务空间专属地址 https://<WorkspaceId>.cn-beijing.maas.aliyuncs.com/api/v1;为空则用配置里的地址 |
ANALYSIS_PROVIDER / IMAGE_EDIT_PROVIDER | auto | auto:有密钥用真模型,否则用示例;也可设 fake、none(关闭效果图) |
QC_MODE | real | stub 只用于没有模型文件的开发 / CI |
INVITE_CODES | 空 | 逗号分隔;为空时不需要邀请码 |
DAILY_PASSPORT_LIMIT · IP_PASSPORTS_PER_HOUR | 30 · 5 | 控制 API 花费 |
MEDIA_TTL_HOURS · PREVIEW_CAP · MAX_UPLOAD_MB | 24 · 3 · 15 | 照片保留时长、每份护照效果图上限、单张上限 |
WEB_ORIGINS | http://localhost:3000 | CORS |
NEXT_PUBLIC_API_BASE(web) | http://localhost:8000 | 前端调用的 API 地址 |
阈值与规则全部在 config/*.yaml,不在代码里。
runs/<id>/calls.jsonl 只记录指标,不记录照片或模型原文。runs/、data/、模型文件永不入库(.gitignore)。Dockerfile(构建时下载 MediaPipe 模型)+ render.yaml(Render,挂载持久磁盘到 /data 存 SQLite 与 24 小时媒体)。在 Render 上设置两把密钥、WEB_ORIGINS(网页域名)和 INVITE_CODES。APP_ENV=production。此时假分析 / 假图像编辑 / 假支付 / 质检 stub 全部拒绝启动,缺密钥会直接报错而不是悄悄改用样例;
假支付关闭后解锁页只显示"支付暂未开放"和邀请码。若要公开演示,额外设 ALLOW_MOCK_PROVIDERS=1,每份档案顶部会显示"演示模式"横幅。
照片过期(24 小时)后,所有读照片、几何与试看的接口一律按已删除处理,不依赖清理任务是否已运行。web/,环境变量 NEXT_PUBLIC_API_BASE 指向 API。.github/workflows/ci.yml(ruff、pytest、示例与类型是否最新、TypeScript、next build)。schema/ analysis.schema.json(模型输出契约)· passport.schema.json(产品对象,v0.2)
prompts/ production_analyzer.md(analyzer-0.2)· image_edit.md(preview-0.2)· evaluator_rubric.md(离线,未启用)
config/ rules.yaml · qc.yaml · models.yaml · hairstyles.json(改编自 MIT 项目)
src/aesthetic_passport/
qc · anchors · face_shape · color_sample · cv ← 测量
analyzer · providers/(deepseek · fake · image/qwen · image/fake) ← 模型
rules · assemble · schema_io ← 规则与校验
pipeline · masks · preview · api/(FastAPI、SQLite、保留、限流)
web/ Next.js(App Router)· Tailwind · Radix;一个 <Report> 组件同时服务 /passport/[id] 与 /sample
tests/ 130 个测试(无需密钥、无需网络)
docs/ MVP_BRIEF · DECISIONS · SCHEMA · ITERATION_LOG · screenshots/
已完成 MVP 简报的 S0–S6(见 docs/MVP_BRIEF.md 与 docs/ITERATION_LOG.md)。
| 已验证 | 待真实数据 / 密钥 |
|---|---|
| 全流程(上传 → 实时质检 → 进度 → 报告 → 效果图)在 375 px 与桌面端可用 | 真实分析的首次通过率、p50 延迟、单份成本(需 DEEPSEEK_API_KEY 与 data/ 照片集) |
| 质检对 7 类合成坏图按正确原因拒绝;关键点、颜色取样、蒙版均经叠图核对 | 思考模式开 / 关对比(scripts/ab_thinking.py) |
| 受保护脸部区域逐像素不变;图像接口失败时报告照常显示并降级为文字 | 真实效果图的「像本人」人工检查(需 DASHSCOPE_API_KEY) |
MVP 之后(按顺序):评测脚本与 /eval 页面(docs/EVAL.md)· 离线评审模型 · 自动像本人检查 · 分享卡 · 第二个图像模型对比 · 英文界面。
改编与参考的第三方代码、数据和模型见 THIRD_PARTY.md。