🐾 宠物写真工作室 v2.0
> 上传宠物照 → 锁定外观 → 换姿势/场景/风格 → 生成写真 → 一致性自检 → 成品交付
核心承诺与验收标准
承诺:主体的样子不变,动作/场景/风格可变。
这句话必须可度量,否则就是空话。 本 skill 用 5 锚点一致性自检(见 Step 6)把它变成分数。低于阈值自动重试,不合格不交付。
| 维度 | 规则 |
|---|---|
| 🔒 不变 | 品种 · 毛色 · 花纹 · 眼睛颜色 · 独特标记(存入档案,永久复用) |
| 🔄 可变 | 姿势 · 表情 · 光线 · 场景 · 风格 · 服装道具 |
| ✅ 验收 | 5 锚点匹配 ≥4/5 才交付 |
⚠️ 开工前必读:Provider 选择矩阵
不要凭直觉选。各 Provider 对「动物本尊复刻」的能力天差地别,选错会导致核心功能失效。
| 能力 | 🅰️ 平台 ImageGen(默认·无Key) | 🌟 即梦 Jimeng(动物首选) | 🌟 可灵 Kling(动物首选) | 🅱️ MiniMax(不推荐宠物) |
|---|---|---|---|---|
| 计费 | 平台积分(单价因任务复杂度与模型而异,以平台实时扣减为准) | 用户自备 ARK Key | 用户自备 Kling Key | 用户自备 Key |
| 参考图 | ⚠️ 当前工具无 image 参数 |
✅ image(不限主体,≤10张) |
✅ subject_image_list(不限主体,≤4张) |
1 张 |
| 相似度控制 | ❌ 参数未开放 | ✅ strength 0-1 |
✅ image_fidelity 0-1 |
❌ 无 |
| 动物主体 | 文生图(无参考图→同款非本尊) | ✅ 不限主体类型 | ✅ 角色特征参考不限主体 | ⚠️ 仅人像,动物静默忽略 |
| 落盘 | ✅ output_dir 直存 |
❌ URL 需下载 | ❌ 异步任务需轮询+下载 | ❌ URL 24h 过期 |
| 批量 | 多次调用 | n=1..9 |
n=1..9 |
n=1..9 |
| 复现 | ❌ 无 seed | ❌ | ❌ | ✅ seed |
决策规则(2026-08-03 用户决策):
- 宠物本尊复刻("要像奶金")→ 即梦 或 可灵。两者参考图均不限主体类型,是动物角色一致性的正解。即梦/可灵的 Key 配置见 .env.example。
- 纯文生图("风格化金渐层,不要求本尊")→ 平台 ImageGen 工具(无 Key、最快)。注意此时是"同款非本尊"。
- MiniMax → 仅人像参考,传动物会被静默忽略,不推荐用于宠物。
> 🚨 关于「无参考图」的诚实边界
> 平台 ImageGen 工具当前未开放 image 参数,只能文生图。没有参考图,模型只能凭文字"想象一只金渐层"→ 出来的是"金渐层类",不是"奶金本尊"。
> 这是平台 API 能力开放问题,不是模型智商问题。要让它"看奶金的脸",必须用即梦/可灵的参考图能力,或等平台开放 image 参数。
> 即梦/可灵首次用真实 Key 跑通前,先用 fidelity_probe.py 做带/不带对照验证动物锁定有效性;未验证前不要向用户宣称"已锁定"。
工作流
Step 0 接收照片 ──► 若已有档案,跳到 Step 3
Step 1 Vision 分析 ──► 提取 5 锚点特征
Step 2 建档案 ──► scripts/profile.py save
Step 3 确认意图 ──► 风格 / 场景 / 姿势 / 张数(可用玩法库替代)
Step 4 成本预告 ──► 必须先告知积分消耗并等确认
Step 5 构建 + 生成 ──► 锁定段 + 可变段 + 正向解剖段
Step 6 一致性自检 ──► 5 锚点比对评分,<4/5 提高保真度重试
Step 7 交付 ──► 落盘归档 + 可选成品排版
Step 1 · Vision 分析(提取 5 锚点)
必须提取,缺一不可:
| # | 锚点 | 示例 |
|---|---|---|
| 1 | 主毛色 | orange / cream bicolor / blue-grey |
| 2 | 花纹类型 | mackerel tabby / solid / calico / tuxedo |
| 3 | 眼睛颜色 | amber gold / blue / heterochromia (L-blue R-gold) |
| 4 | 独特标记 | white front paws · M-mark on forehead · notched left ear |
| 5 | 毛长与脸型 | short hair, round face, chubby |
> 锚点 4 最关键。品种毛色是"泛特征"(一万只橘猫都一样),独特标记才是"这一只"。分析时必须主动找:白手套、围脖、断耳、雀斑、花斑位置、尾巴环纹数。找不到就明说,别编。
物种词典按需读取(不要预加载):
- 猫 → references/subjects/cat.md
- 狗 → references/subjects/dog.md
- 其他 → references/subjects/_template.md 现场构建
Step 2 · 建档案
python3 scripts/profile.py save --name 咪咪 --species cat \
--coat "orange mackerel tabby, cream belly" \
--eyes "amber gold, round" \
--marks "white front paws;M-mark forehead;notched left ear" \
--build "short hair, round face, chubby" \
--refs /path/front.jpg /path/profile.jpg
档案存 ~/.pet-photo-studio/profiles/{name}.json。一次分析,永久复用 —— 这是杜绝"第二次生成猫变样"的关键。后续只需 profile.py load --name 咪咪。
Step 3 · 确认意图
给用户三选一,别一上来就问 5 个参数:
- 选风格 →
references/styles.md(12 种预设,含光线+场景+道具) - 玩法模式 →
references/playbooks.md(猫格测试 / 名画致敬 / 盲盒 / 多宠同框 / 时间旅行…) - 自由描述 → 用户说人话,你翻译成提示词
Step 4 · 成本预告(强制)
生成前必须告知消耗并等待确认。 不许静默扣积分。
| 档位 | 用途 | 相对成本 | 常见组合 |
|---|---|---|---|
quality: low |
选构图草稿 | 低 | 低成本试 4 张构图 |
quality: high |
成品 | 高(单位成本高于 low) | 单张 / 九宫格(多张叠加) |
> 逻辑依据:图像生成 low 质量消耗的算力/Token 显著低于 high,故"先 low 草稿挑构图、再 high 出成品"比"直接 high 出多张"更省积分、且避免全不满意的重做浪费。具体积分以平台账户实时扣减为准(官方口径:单价因任务复杂度与模型而异)。
话术模板:
> 这次准备生成 4 张 low 质量草稿供你挑构图(成本较低);选中后再出 high 质量成品(单位成本较高)。具体积分以平台实时扣减为准。确认继续吗?
Step 5 · 构建提示词 + 生成
统一模板(三段式) —— 顺序不可换,权重从高到低:
① 锁定段(从档案读,逐字不改)
A photorealistic photo of a {species}, {coat}, {pattern}, {eyes} eyes,
{build}, {unique_marks},
② 可变段(本次创意)
{pose}, {expression}, distinct catchlight in eyes,
{lighting}, {scene}, {props}, {style},
shallow depth of field, bokeh background,
③ 正向解剖段(防崩坏,见 references/negative.md)
anatomically correct {species} paws, four legs in natural posture,
both pupils identical in size and direction, one single intact tail,
two symmetrical ears, single {species} alone in frame, clean background,
professional pet photography, ultra detailed, sharp focus on eyes
🚫 三条禁令:
1. 不写 no xxx 否定句。扩散模型不理解否定,no other animals 里权重最高的是 animals,反而提高多动物概率。一律改写成正向解剖描述。
2. 不在 prompt 里写画幅(3:2 aspect ratio 之类)。API 有 size 参数,写进 prompt 会被当画面内容,可能真画出比例标注线。
3. 不省略正向解剖段。爪子畸形/多腿/双瞳不一致是宠物图崩坏率最高的三项。
调用(路径 🅰️):
ImageGen(
prompt = 三段式提示词,
image = [档案里的 1-3 张参考图],
input_fidelity = "high", # 锁外观的核心旋钮(前提:所用 ImageGen 后端支持该参数)
size = 见下表,
quality = "low"|"high",
output_dir = "/workspace/pet-photos/{name}/"
)
> ⚠️ 参数可用性前置校验(P0 验证结论)
> 平台 ImageGen 的可用参数因版本而异。开工前先确认当前环境是否真支持 image / input_fidelity。
> - 若支持 → 按上表传参考图 + input_fidelity=high,原生锁定外观。
> - 若当前工具只接受 prompt(无 image / input_fidelity) → 不要假装锁定已生效。
> 此时"样子不变"只能靠 ① 段(锁定段)逐字锚定 + Step 6 一致性自检兜底,且必须如实告知用户:
> "当前生成通道不支持参考图锁定,相似度靠描述锚定,可能每次略有差异。"
> 不论哪条路,Step 6 的 5 锚点自检都是硬验收,不可跳过——这是"锁定"唯一可度量的保险。
| 需求 | size |
|------|------|
| 竖版写真(手机壁纸/朋友圈)**默认** | `1024x1536` |
| 横版(电脑壁纸/横幅) | `1536x1024` |
| 方图(头像/九宫格单格) | `1024x1024` |
### Step 6 · 一致性自检(**不可跳过**)
生成后用 Vision 读回图片,对照档案 5 锚点逐项打分:
| 得分 | 处理 |
|------|------|
| 5/5 | ✅ 直接交付 |
| 4/5 | 🟡 交付 + 明确标注差异项,问是否重试 |
| ≤3/5 | 🔴 **不交付**。提高 `input_fidelity`、把独特标记词前移加权,自动重生成一次 |
自检结果写回档案 `history`,用于长期追踪哪些风格/参数保真度高。
**脚本化自检(P1-5,推荐)**:用 `scripts/consistency_check.py` 把主观比对变成可复现流程——
先 `analyze --profile 名 --ref 参考图 --gen 生成图` 出客观指标 + 结构化 Vision 评分卡,
Agent 用 Vision 读生成图、把每条锚点 `match` 填 `true/false`,
再 `score --json 评分卡 --log` 算 5 锚点得分并写回档案 history。比纯口头判断更稳、可沉淀。
> 这一步的意义超出质量本身:**它把"锁定"从宣传语变成可度量指标。** 没有它,你无法回答"v2.1 比 v2.0 好在哪"。
### Step 7 · 交付
📸 {宠物名} 的写真完成
🐾 主体:{锚点摘要}
🎨 风格:{风格名} 💡 光线:{光位+光质} 📐 {size}
🔒 保真:input_fidelity={值} ✅ 一致性:{n}/5
🖼️ {本地文件路径} ← 必须是本地路径,不是临时 URL
💰 本次消耗:以平台账户实际扣减为准(单价因任务复杂度与模型而异)
━━━━━━━━━━━━━━━━
💡 提示词:{完整英文}
📣 顺手能发的 3 条文案(复制即发,别只给图 —— 有文案分享率明显更高):
· 吐槽型:{和本次玩法挂钩的梗,如"AI 说我月薪 3k 的猫比我像社畜,我竟无法反驳"}
· 共情型:{让人会心一笑的总结,如"原来它不是高冷,是哲学家,思考了一下午为什么要吃饭"}
· 悬念型:{让人想点开的钩子,如"测了下我家猫的人格,结果让我沉默了三分钟"}
(按本次玩法从 references/playbooks.md「社交裂变·文案模板示例」选最贴的 3 条,
名画致敬 / 通缉令 / 多宠同框 / 节日限定 各有专属文案)
🔄 继续玩:换姿势 / 换场景 / 换光线 / 出套系 / 做成台历
**成品升级**(价值密度分水岭,主动建议):
```bash
python3 scripts/compose.py grid --dir /workspace/pet-photos/咪咪 --out 九宫格.jpg
python3 scripts/compose.py calendar --dir ... --year 2027 --out 台历.pdf
> 用户为"一张图"付费意愿低,为"一件东西"(台历/明信片/纪念册)付费意愿高。这是从工具变成产品的关键。
按需加载索引
不要一次性读全部。按当前步骤只读需要的:
| 文件 | 何时读 |
|---|---|
references/photography.md |
需要选光位/光质/构图/眼神光时 · 跨物种通用 |
references/styles.md |
用户选风格预设时 |
references/playbooks.md |
用户要"好玩的"/没想法/要传播性内容时 |
references/negative.md |
每次构建提示词(第③段)· 按物种取词 |
references/subjects/{species}.md |
Step 1 分析特征时 |
脚本速查
| 脚本 | 用途 |
|---|---|
profile.py |
档案增删查改,锚点持久化,历史评分 |
providers/ |
P1-4 生成层抽象:BaseProvider + MiniMaxProvider + ImageGenProvider + JimengProvider(即梦) + KlingProvider(可灵 · P2 新增,动物角色复刻首选) |
generate.py |
Provider 路由入口(默认 jimeng);--provider 可选 jimeng/kling/minimax/imagegen。即梦/可灵支持参考图+保真度,动物本尊复刻首选 |
fidelity_probe.py |
P0 实验:subject_reference 对动物是否有效的带/不带对照 |
consistency_check.py |
P1-5 5 锚点一致性自检脚本化(客观指标 + Vision 评分卡) |
compose.py |
九宫格 / 对比图 / 台历 PDF / 明信片 |
边界与安全
- 多宠同框:把两只宠物的参考图一起传(ImageGen 支持最多 3 张),提示词明确
two cats side by side, both looking at camera,并在解剖段写清各自锚点。这是物理上拍不到的照片,是本 skill 最强的场景。 - 纪念场景(彩虹桥):离世宠物纪念照。付费意愿最高,但容错最低。原图往往模糊且仅一两张。必须:① 先说明"可能无法完全还原";② 优先柔光/逆光等宽容度高的风格;③ 一致性 <4/5 绝不交付;④ 全程用平和语气,不煽情。
- 真人:v2.0 不支持。真人写真是另一个赛道(零容错相似度 + 肖像权合规 + 红海竞争)。若要走,路径是
宠物 → 宠物拟人化 → 宠物+主人合影 → 真人,见CHANGELOG.md的路线图,不要直跳。 - 不生成宠物受伤、恐怖、拟真血腥内容。
- 用户上传的照片仅用于本次生成与档案,不外传。
版本
v2.0.3 · 新增即梦 Jimeng + 可灵 Kling 两个 Provider(动物本尊复刻首选,参考图不限主体类型) / Provider 选择矩阵重构 / .env.example 配置模板。
v2.0.0 · 三层架构重构 / 平台 ImageGen 优先 / 一致性自检闭环 / 档案持久化 / 正向解剖防崩 / 成品排版 / 玩法库 / 多物种。
完整变更与 v1.2 对照见 CHANGELOG.md。
```