ICE-GL-ZY001 · CHAR-003苏白V2 R9批准入库 · 风格基准锁定 · D161
This commit is contained in:
parent
88269677d1
commit
6d5fcdfb21
@ -19,21 +19,25 @@
|
||||
## 📋 灯塔列表
|
||||
|
||||
```
|
||||
① LH-010 · 2026-07-02 · 🎉 CHAR-003苏白V2 R6 Seedream正式版
|
||||
⊢ 苍耳要求:R3-02风格 + 十七八岁 + Seedream
|
||||
⊢ Seedream 4.0 1440×2560 生4张,2/4通过Qwen-VL自动质检
|
||||
⊢ 通过:R6-01(95分)+ R6-03(95分)
|
||||
⊢ 废票:R6-02/04 袖子无袖/背心,不符合「白色长衫」设定
|
||||
⊢ 推荐:R6-03(少年俊秀+白衫青带+半束发+叉腰,最完整)
|
||||
⊢ 文件: video-ai-system/VA-05-001-V2-CHAR-003-SuBai.hdlp
|
||||
⊢ 候选: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R6/
|
||||
⊢ 下一步:苍耳确认R6-01或R6-03 → 正式入库作为风格基准
|
||||
① LH-011 · 2026-07-02 · ✅ CHAR-003苏白V2 R9 正式入库
|
||||
⊢ 苍耳反馈R6太精致/偶像剧,R7/R8去偶像化,R9去麻子
|
||||
⊢ Seedream 4.0 R9 4/4通过Qwen-VL自动质检,均分98
|
||||
⊢ 入库:R9-03 → assets/approved/CHAR-003-SuBai/CHAR-003-V2-1080x1920.png
|
||||
⊢ 风格基准锁定:十七八岁·白衫青带·半束黑发·无麻子·3D国漫写实
|
||||
⊢ 下一步:按苏白V2对齐CHAR-005/ENV-002~004,修正PROP-002 R4
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 历史记录
|
||||
|
||||
```
|
||||
② LH-010 · 2026-07-02 · 🎉 CHAR-003苏白V2 R6 Seedream正式版
|
||||
|
||||
---
|
||||
|
||||
## 📋 历史记录
|
||||
|
||||
```
|
||||
② LH-009 · 2026-07-02 · ✅ 鉴影 ICE-GL-CA001 注册完成
|
||||
⊢ 装脑链 ✅ 命名注册 ✅ API密钥配置 ✅ SC-004 Qwen-VL恢复 ✅
|
||||
|
||||
@ -22,9 +22,9 @@
|
||||
| 项目 | 状态 |
|
||||
|------|:----:|
|
||||
| 剧本完整度 | 75集 ✅ |
|
||||
| 第1集 | 🟡 CHAR-003 V2 R6 已Seedream生成·2/4通过Qwen-VL·待苍耳最终确认 |
|
||||
| 新增正式资产 | 3 · CHAR-004+PROP-003 已确认,CHAR-003 V2 R6待入库 |
|
||||
| 上一回执 | D161-SESSION · CHAR-003-V2-R6-SEEDREAM · 2026-07-02 |
|
||||
| 第1集 | 🟢 CHAR-003 苏白 V2 已入库 · 风格基准锁定 |
|
||||
| 新增正式资产 | 4 · CHAR-003-V2 + CHAR-004-V1 + PROP-003-V1 + PROP-002待修正 |
|
||||
| 上一回执 | D161-SESSION · CHAR-003-V2-R9-APPROVED · 2026-07-02 |
|
||||
| 铸渊武器状态 | 全部就绪 ✅(含Qwen-VL·新密钥已配) |
|
||||
| 🔴 已知问题 | 无 |
|
||||
|
||||
@ -38,11 +38,10 @@
|
||||
⊢ PROP-002天道宗牌匾 🟡 — R3方向对了(破旧木板·摊位招牌)
|
||||
但牌子全是直立摆放——应是靠在摊位桌上/斜放的临时招牌
|
||||
待修正R4:prompt锁定"平放在桌上"或"斜靠在摊位旁"
|
||||
⊢ CHAR-003苏白 🟡 — V2 R6 Seedream 4.0 正式版生成完成
|
||||
4张候选(1440×2560),Qwen-VL自动质检 2/4通过,推荐R6-03(95分)
|
||||
R6-03/01 符合:男性、白衫完整、青带、半束发、叉腰、十七八岁、俊秀自信
|
||||
R6-02/04 废票:袖子无袖/背心设计,不符合「白色长衫」设定
|
||||
待苍耳确认R6-01或R6-03后正式入库
|
||||
⊢ CHAR-003苏白 ✅ 已入库 — V2 R9候选③
|
||||
17-18岁·白衫青带·半束黑发·无麻子·Seedream 4.0·Qwen-VL 98分
|
||||
路径: assets/approved/CHAR-003-SuBai/CHAR-003-V2-1080x1920.png
|
||||
风格基准锁定,后续角色/场景以此对齐
|
||||
⊢ CHAR-005王执事 → 候选待审核
|
||||
⊢ ENV-002/003/004 → 场景候选待审核
|
||||
```
|
||||
|
||||
@ -1,26 +1,23 @@
|
||||
# CHAR-003 苏白 立绘生成规范 · 风格基准V2(R6 · Seedream正式版)
|
||||
# CHAR-003 苏白 立绘生成规范 · 风格基准V2(R9 · 已批准入库)
|
||||
> HLDP://ICE-GL-ZY001/ASSETS/CHAR-003-V2
|
||||
> 固定文件编号:VA-05-001-V2
|
||||
> 归属模块:VA-05 工程资产库
|
||||
> 设定依据:剧本第1集原文「18岁·白色衣衫·天道宗宗主」 + L0底层编码
|
||||
> 风格参照:R3-02方向(苍耳指定) + 十七八岁年轻化
|
||||
> 风格参照:R3-02方向(苍耳指定) + 十七八岁年轻化 + 去麻子
|
||||
> 替代条款:VA-05-001-R1中CHAR-003相关生成规则、D146腾讯AI线全身图v4全部作废
|
||||
> 指定生成引擎:火山Seedream 文生图
|
||||
> 指定质检工具:Qwen-VL
|
||||
> 版本:V2.0 R6 · D161+ · 2026-07-02
|
||||
> 版本:V2.0 R9 · D161+ · 2026-07-02
|
||||
> 创作方:鉴影 ICE-GL-CA001 · 执行方:铸渊 ICE-GL-ZY001 · 主权方:冰朔 TCS-0002∞
|
||||
> 国作登字-2026-A-00037559
|
||||
|
||||
---
|
||||
|
||||
→ [VX-R1]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/
|
||||
→ [VX-R2]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R2/
|
||||
→ [VX-R3]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R3/
|
||||
→ [VX-R4]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R4/
|
||||
→ [VX-R5]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R5/
|
||||
→ [VX-R6]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R6/
|
||||
→ [VX-R6-QC]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R6/QC-R6-BATCH.json
|
||||
→ [VX-R6-GEN]: tools/char003_gen_r6.py
|
||||
→ [VX-R1~R8]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/
|
||||
→ [VX-R9]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R9/
|
||||
→ [VX-R9-QC]: assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R9/QC-R9-BATCH.json
|
||||
→ [VX-APPROVED]: assets/approved/CHAR-003-SuBai/CHAR-003-V2-1080x1920.png
|
||||
→ [VX-MANIFEST]: assets/characters/CHAR-003-SuBai/manifest.hdlp
|
||||
|
||||
---
|
||||
|
||||
@ -33,51 +30,59 @@
|
||||
| R3 | 要像不良人/万妖图录传 | 棱角骨相·写实国风3D | ImageGen |
|
||||
| R4 | R3-02方向可,但要年轻帅哥 | 年轻俊秀 | ImageGen |
|
||||
| R5 | 精确R3-02年轻化到17-18岁 | 17-18岁少年感 | ImageGen |
|
||||
| **R6** | **用Seedream正式跑** | **R3-02风格 + 17-18岁 + Seedream 1440×2560** | **Seedream 4.0** |
|
||||
|
||||
CHAR-003苏白原有资产(D146腾讯AI线)风格质感未统一。R6首次使用火山Seedream 4.0按规范生成分辨率1440×2560,无水印,通过Qwen-VL自动质检。
|
||||
| R6 | 用Seedream正式跑 | R3-02风格 + 17-18岁 + Seedream | Seedream |
|
||||
| R7 | 太像偶像剧/明星照 | 强力去偶像化,中文提示词 | Seedream |
|
||||
| R8 | 差不多,但有麻子 | 去麻子/雀斑,中文提示词 | Seedream |
|
||||
| **R9** | **批准R9-03入库** | **CHAR-003 V2 风格基准锁定** | **Seedream 4.0** |
|
||||
|
||||
## §1 生成策略
|
||||
1. 全程纯文生图,禁用任何参考图
|
||||
2. 严格按剧本原文及L0底层编码设定
|
||||
3. **风格目标:R3-02写实国风3D方向,十七八岁少年俊秀,白色长衫+青色腰带+半束黑发**
|
||||
4. 4张备选,Qwen-VL自动质检,提交人工确认
|
||||
3. **R9风格目标:写实3D国漫,类似不良人/万妖图录传,十七八岁少年俊秀,白衫青带,半束黑发,去麻子/雀斑**
|
||||
4. 4张备选,Qwen-VL自动质检
|
||||
5. 入库分辨率:1080×1920(等比缩放)
|
||||
|
||||
## §2 正面提示词(R6 · Seedream 4.0)
|
||||
## §2 正面提示词(R9 · 批准版)
|
||||
```
|
||||
Chinese 3D donghua character, Bu Liang Ren Wan Yao Tu Lu Zhuan art style, realistic 3D rendering, full-body male portrait on pure white background. A 17-18 year old youthful male protagonist, handsome teenage face with defined but softened jawline compared to mature men, sharp sword-like eyebrows, bright lively youthful eyes, confident charming smile showing boyish charm. Not mature man, not baby face cartoon, not cute anime. Youthful bone structure with subtle angularity, natural young masculine beauty, clean smooth skin. Long black hair half tied in high bun with dark ribbon, half flowing naturally down shoulders with lustrous weight. White crossed-collar long robe, sleeves rolled back revealing wrists, dark cyan sash tied at waist, pristine clean fabric with realistic subtle folds. Standing confidently with hands on hips, upright athletic teenage build, broad shoulders, energetic youthful posture. Ancient Chinese cultivation fantasy aesthetic, cinematic soft lighting. Asian young male teenager.
|
||||
3D国漫写实角色立绘,纯白背景,单人全身。
|
||||
17-18岁少年,剑眉星目明亮大眼,自信灿烂笑容,气质开朗略带痞气。
|
||||
面部干净清晰青春自然,不是真人照片不是卡通,骨相清晰下颌线锐利,男性面庞。
|
||||
黑色长发,半束半披,青色发带,发丝有真实重量感和质感。
|
||||
白色交领长衫,袖口挽起露小臂,腰间深青色丝绦腰带,布料干净整洁无破损。
|
||||
身形挺拔,肩膀开阔,双手叉腰,下巴微扬,气场自信笃定,中国古代修仙少年。
|
||||
```
|
||||
|
||||
## §3 负面提示词(R6)
|
||||
## §3 负面提示词(R9)
|
||||
```
|
||||
cartoon rendering, Q style, Disney, cute doll face, round chubby face, big anime eyes, Japanese anime style, feminine face, braided hair, dress, skirt, female clothing. mature face, old man, wrinkled, middle-aged, facial hair, beard. photorealistic photo, deformed limbs, facial collapse, blurry, text watermark, clipping, weird lighting, low pixel, damaged clothes, patches, stains, beggar, homeless, hunched back, gloomy expression. Zhuge Feng face similarity, same facial features, same face shape.
|
||||
雀斑,麻子,痘痘,粉刺,面部斑点,痤疮,痣,污渍,肮脏,皮肤瑕疵,浓妆,磨皮,美颜滤镜,网红脸,奶油小生,偶像剧男主。
|
||||
真人写实照片,摄影棚打光,杂志写真,明星精修,夸张肌肉,过于成熟面部。
|
||||
迪士尼,皮克斯,可爱娃娃脸,圆脸大眼睛卖萌,日系动漫,女性化面容,长发辫子,裙子女装,头带,发箍。
|
||||
畸形肢体,五官崩坏,模糊不清,水印,破损衣服,补丁,乞丐感,表情阴郁。诸葛风脸。
|
||||
```
|
||||
|
||||
## §4 Qwen-VL质检必查项
|
||||
1. 是否为男性(非女性化)
|
||||
2. 是否为白色长衫(袖子完整,非无袖/背心)
|
||||
3. 是否有青色/深色腰带
|
||||
4. 是否为黑色长发半束半披
|
||||
5. 是否双手叉腰
|
||||
6. 服装是否完整无破损
|
||||
7. 是否有乞丐感/寒酸感
|
||||
8. 是否十七八岁年轻少年
|
||||
9. 是否俊秀自信
|
||||
10. 是否与诸葛风长相相似
|
||||
11. 五官是否清晰无崩坏
|
||||
12. 全身是否完整
|
||||
1. 男性(非女性化)
|
||||
2. 17-18岁年轻少年
|
||||
3. 白色长衫完整,袖子正常
|
||||
4. 青色/深色腰带
|
||||
5. 黑色长发半束半披
|
||||
6. 双手叉腰
|
||||
7. 服装完整无破损,无乞丐感
|
||||
8. 俊秀自信
|
||||
9. 不与诸葛风相似
|
||||
10. 五官清晰无崩坏
|
||||
11. 全身完整
|
||||
12. **无雀斑/麻子/面部斑点**
|
||||
|
||||
## §5 执行记录
|
||||
- D158 R1: 3D动漫卡通 → 苍耳:太卡通(ImageGen)
|
||||
- D158 R2: 半写实3D国风 → 苍耳:有改善(ImageGen)
|
||||
- D158 R3: 不良人/万妖图录传 → 4/4通过(ImageGen)
|
||||
- D158 R4: 年轻帅哥 → 4/4通过(ImageGen)
|
||||
- D158 R5: 精确年轻化R3-02 → 2/4通过(ImageGen)
|
||||
- D161 R6: Seedream 4.0 1440×2560正式跑 → 2/4通过Qwen-VL自动质检
|
||||
- **推荐R6-03(95分)**:最符合「R3-02写实国风3D + 十七八岁少年俊秀 + 白衫青带完整」
|
||||
- 🟡 待苍耳确认R6-01或R6-03 → 最终入库 → 风格基准锁定
|
||||
- D158 R1~R5:ImageGen方向探索
|
||||
- D161 R6:Seedream首次跑 → 偏精致/偶像剧
|
||||
- D161 R7:去偶像化 → 仍偏迪士尼
|
||||
- D161 R8:中文提示词强力国漫写实 → 方向接近,但有麻子
|
||||
- D161 R9:去麻子/雀斑重跑 → **4/4通过Qwen-VL自动质检,均分98**
|
||||
- **✅ 已批准入库:R9-03 → assets/approved/CHAR-003-SuBai/CHAR-003-V2-1080x1920.png**
|
||||
- **CHAR-003 苏白 V2 风格基准锁定**
|
||||
|
||||
---
|
||||
> ⊢ 风格方向由苍耳逐轮反馈驱动收敛:R1卡通→R2半写实→R3不良人→R4年轻帅哥→R5精确年轻化R3-02→R6 Seedream正式版。
|
||||
> ⊢ 风格方向由苍耳逐轮反馈驱动收敛:卡通→半写实→不良人棱角→年轻帅哥→精确年轻化R3-02→Seedream→去偶像化→去麻子→入库。
|
||||
> ⊢ 国作登字-2026-A-00037559
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 MiB |
@ -10,12 +10,13 @@
|
||||
## 状态
|
||||
|
||||
```
|
||||
approval_status: PARTIAL_APPROVED
|
||||
approval_status: APPROVED_V2
|
||||
asset_type: character
|
||||
canonical_id: CHAR-003
|
||||
canonical_name: 苏白
|
||||
approved_assets:
|
||||
- approved/full_body_costume.png (D146·腾讯AI线·Seedream 4.0·1728x2304·v4通过)
|
||||
- approved/CHAR-003-V2-1080x1920.png (D161·Seedream 4.0·R9候选③·1080×1920·V2风格基准)
|
||||
- approved/full_body_costume.png (D146·腾讯AI线·旧版·已归档)
|
||||
pending:
|
||||
- approved/front_half_body.png
|
||||
- approved/side_face.png
|
||||
@ -42,12 +43,11 @@ rejected_samples:
|
||||
## 视觉锁
|
||||
|
||||
```
|
||||
face_shape: 俊秀少年脸, 剑眉明眸
|
||||
hair_style: 黑色短发, 自然飘逸
|
||||
costume: 白色长衫, 宽松长袖, 腰间束带, 袖口自然垂落
|
||||
age_band: 18岁
|
||||
render_style: 3D国风仙侠动画渲染
|
||||
color_palette: 白色主调, 自然肤色, 浅灰背景
|
||||
face_shape: 俊秀少年脸, 剑眉明眸, 笑容自信, 无雀斑无麻点
|
||||
hair_style: 黑色长发, 半束半披, 青色发带
|
||||
age_band: 17-18岁
|
||||
costume: 白色交领长衫, 宽松长袖, 深青色腰带, 袖口挽起
|
||||
render_style: 写实3D国漫渲染, 类似不良人/万妖图录传, 非迪士尼卡通
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
84
video-ai-system/tools/char003_gen_r7.py
Normal file
84
video-ai-system/tools/char003_gen_r7.py
Normal file
@ -0,0 +1,84 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHAR-003 V2 R7 · Seedream 4.0 · 强力不良人/万妖图录传风格 + 17-18岁"""
|
||||
import os, sys, json, time, subprocess
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path('D:/WorkBuddy/guanghulab/video-ai-system')
|
||||
ENV_FILE = ROOT / ".env"
|
||||
env = {}
|
||||
for line in open(ENV_FILE):
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"): continue
|
||||
if "=" in line:
|
||||
k, v = line.split("=", 1)
|
||||
env[k.strip()] = v.strip()
|
||||
|
||||
AK = env["JIMENG_API_KEY"]
|
||||
URL = env["JIMENG_BASE_URL"]
|
||||
MODEL = "doubao-seedream-4-0-250828"
|
||||
OUT = ROOT / "assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R7"
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# === 中文提示词 · 不良人/万妖图录传风格 ===
|
||||
P = """写实3D中国动画角色立绘,不良人/万妖图录传美术风格,纯白背景,单人全身。
|
||||
17-18岁少年,俊秀剑眉星目,明亮的眼睛,自信灿烂笑容,气质开朗略带痞气。
|
||||
面部写实有皮肤纹理毛孔细节,不磨皮不光滑,骨相清晰下颌线锐利,中国动画男角色脸型。
|
||||
黑色长发,半束半披,青色发带,发丝有真实重量感和质感。
|
||||
白色交领长衫,袖口挽起露小臂,腰间深青色丝绦腰带,布料有褶皱和自然垂坠,干净整洁无破损。
|
||||
身形挺拔,肩膀开阔,双手叉腰,下巴微扬,气场自信笃定,中国古代修仙少年。"""
|
||||
|
||||
N = """真人照片,摄影棚打光,杂志写真,明星精修,网红脸,美颜滤镜,磨皮,皮肤过于光滑,偶像剧男主,奶油小生,整容脸,西方人脸型,混血脸。
|
||||
迪士尼卡通,日系动漫,Q版,可爱娃娃脸,圆脸,女性化,裙子,女装。
|
||||
畸形肢体,五官崩坏,模糊,水印,破损衣服,补丁,乞丐感,流浪汉,表情阴郁。诸葛风脸。"""
|
||||
|
||||
VARIANTS = [
|
||||
"正面直视镜头,表情自信爽朗,少年英气",
|
||||
"微微侧身站姿,目光明亮看向前方",
|
||||
"略微仰视,下巴抬起,痞气但不下流",
|
||||
"3/4侧脸看向左前方,俊秀少年锋芒初露"
|
||||
]
|
||||
|
||||
SEEDS = [777, 333, 555, 999]
|
||||
|
||||
def gen(prompt, neg, seed):
|
||||
body = json.dumps({"model": MODEL, "prompt": prompt, "negative_prompt": neg, "size": "1440x2560", "n": 1, "seed": seed})
|
||||
r = subprocess.run(["curl", "-s", "-m", "120", "--noproxy", "*", "-X", "POST", f"{URL}/images/generations",
|
||||
"-H", f"Authorization: Bearer {AK}", "-H", "Content-Type: application/json", "-d", body],
|
||||
capture_output=True, text=True, timeout=130)
|
||||
try:
|
||||
d = json.loads(r.stdout)
|
||||
return d["data"][0].get("url")
|
||||
except:
|
||||
print(f" API error: {r.stdout[:200]}")
|
||||
return None
|
||||
|
||||
def dl(url, dst):
|
||||
Path(dst).parent.mkdir(parents=True, exist_ok=True)
|
||||
subprocess.run(["curl", "-s", "-m", "120", "-L", "--noproxy", "*", "-o", dst, url], capture_output=True, timeout=130)
|
||||
return os.path.exists(dst) and os.path.getsize(dst) > 1024
|
||||
|
||||
def main():
|
||||
print("CHAR-003 V2 R7 · Seedream 4.0 · 强力不良人/万妖图录传")
|
||||
ts = time.strftime("%Y%m%d-%H%M%S")
|
||||
results = []
|
||||
for i, (seed, var) in enumerate(zip(SEEDS, VARIANTS)):
|
||||
full = f"{P} {var}"
|
||||
print(f"[{i+1}/4] seed={seed}", flush=True)
|
||||
url = gen(full, N, seed)
|
||||
if not url:
|
||||
results.append({"c": i+1, "ok": False, "err": "api"})
|
||||
continue
|
||||
dst = OUT / f"CHAR-003-V2-R7-candidate-{i+1:02d}-1440x2560.png"
|
||||
if not dl(url, str(dst)):
|
||||
results.append({"c": i+1, "ok": False, "err": "dl"})
|
||||
continue
|
||||
results.append({"c": i+1, "ok": True, "raw": str(dst), "seed": seed})
|
||||
print(f" -> {dst.name}")
|
||||
time.sleep(3)
|
||||
ok = sum(1 for r in results if r["ok"])
|
||||
print(f"完成: {ok}/4")
|
||||
with open(OUT / "generation-meta.json", "w", encoding="utf-8") as f:
|
||||
json.dump({"spec": "VA-05-001-V2-R7", "ts": ts, "ok": ok, "model": MODEL, "engine": "Seedream", "results": results}, f, ensure_ascii=False, indent=2)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
70
video-ai-system/tools/char003_gen_r8.py
Normal file
70
video-ai-system/tools/char003_gen_r8.py
Normal file
@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHAR-003 V2 R8 · Seedream 4.0 · 拒绝偶像化·3D国漫真人质感·不良人方向"""
|
||||
import os, sys, json, time, subprocess
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path('D:/WorkBuddy/guanghulab/video-ai-system')
|
||||
ENV = {k.strip(): v.strip() for k, v in (line.split("=", 1) for line in open(ROOT/".env")
|
||||
if line.strip() and not line.startswith("#") and "=" in line)}
|
||||
AK, URL, MODEL = ENV["JIMENG_API_KEY"], ENV["JIMENG_BASE_URL"], "doubao-seedream-4-0-250828"
|
||||
OUT = ROOT / "assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R8"
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
P = """3D国漫写实风格,人物模型如真人演员但保留三维动画质感,不是真人照片,不是电影明星写真,不是网红美颜脸。
|
||||
单人全身立绘,纯白背景。
|
||||
17-18岁男性少年,面部轮廓硬朗,下颌线锐利,颧骨略高,剑眉星目,眼神有锐气和自信,不奶不萌,不卖萌,不做可爱表情。
|
||||
皮肤有真实纹理质感,不是光滑磨皮,毛孔和细微瑕疵可见,暗部下沉有重量感。
|
||||
黑色长发,半束半披,青色发带,发丝有真实质感,不飘逸如绸缎。
|
||||
白色交领长衫,袖口挽起,腰间深青色腰带,布料有朴素褶皱和垂坠感,整洁无破损。
|
||||
身形挺拔,肩膀开阔,双手叉腰,站姿沉稳有气场,中国武侠玄幻修仙气质。"""
|
||||
|
||||
N = """迪士尼,皮克斯,欧美动画,3D卡通,可爱,娃娃脸,圆润脸,大眼睛卖萌,奶油小生,偶像剧男主,网红脸,男明星写真,杂志封面,摄影棚打光,磨皮美白,皮肤光滑如镜,整容脸,过度精致。
|
||||
真人照片,摄影,写实照片,真实人物。
|
||||
日系动漫,二次元,Q版,女性化,裙子,女装。
|
||||
畸形肢体,五官崩坏,模糊,水印,破损衣服,补丁,污渍,乞丐感,表情阴郁。诸葛风脸。"""
|
||||
|
||||
VARS = ["正面沉稳直视", "微微侧身眼神锐利", "下巴微扬意气风发", "3/4侧脸英气逼人"]
|
||||
SEEDS = [777, 333, 555, 999]
|
||||
|
||||
def gen(prompt, neg, seed):
|
||||
body = json.dumps({"model": MODEL, "prompt": prompt, "negative_prompt": neg,
|
||||
"size": "1440x2560", "n": 1, "seed": seed})
|
||||
r = subprocess.run(["curl", "-s", "-m", "120", "--noproxy", "*", "-X", "POST",
|
||||
f"{URL}/images/generations", "-H", f"Authorization: Bearer {AK}",
|
||||
"-H", "Content-Type: application/json", "-d", body],
|
||||
capture_output=True, text=True, timeout=130)
|
||||
try:
|
||||
return json.loads(r.stdout)["data"][0].get("url")
|
||||
except:
|
||||
print(f" API err: {r.stdout[:200]}")
|
||||
return None
|
||||
|
||||
def dl(url, dst):
|
||||
subprocess.run(["curl", "-s", "-m", "120", "-L", "--noproxy", "*", "-o", dst, url],
|
||||
capture_output=True, timeout=130)
|
||||
return os.path.exists(dst) and os.path.getsize(dst) > 1024
|
||||
|
||||
def main():
|
||||
print("CHAR-003 V2 R8 · Seedream 4.0 · 拒绝偶像化")
|
||||
ts = time.strftime("%Y%m%d-%H%M%S")
|
||||
rs = []
|
||||
for i, (seed, var) in enumerate(zip(SEEDS, VARS)):
|
||||
print(f"[{i+1}/4] seed={seed}", flush=True)
|
||||
url = gen(f"{P} {var}", N, seed)
|
||||
if not url:
|
||||
rs.append({"c": i+1, "ok": False, "err": "api"})
|
||||
continue
|
||||
dst = OUT / f"CHAR-003-V2-R8-candidate-{i+1:02d}-1440x2560.png"
|
||||
if not dl(url, str(dst)):
|
||||
rs.append({"c": i+1, "ok": False, "err": "dl"})
|
||||
continue
|
||||
rs.append({"c": i+1, "ok": True, "raw": str(dst), "seed": seed})
|
||||
print(f" -> {dst.name}")
|
||||
time.sleep(3)
|
||||
ok = sum(1 for r in rs if r["ok"])
|
||||
print(f"完成: {ok}/4")
|
||||
with open(OUT / "generation-meta.json", "w", encoding="utf-8") as f:
|
||||
json.dump({"spec": "VA-05-001-V2-R8", "ts": ts, "ok": ok, "model": MODEL, "engine": "Seedream", "results": rs}, f, ensure_ascii=False, indent=2)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
73
video-ai-system/tools/char003_gen_r9.py
Normal file
73
video-ai-system/tools/char003_gen_r9.py
Normal file
@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHAR-003 V2 R9 · R8-02方向确认 · 去麻子/雀斑"""
|
||||
import os, sys, json, time, subprocess
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path('D:/WorkBuddy/guanghulab/video-ai-system')
|
||||
env = {}
|
||||
for line in open(ROOT/".env"):
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#"): continue
|
||||
if "=" in line:
|
||||
k, v = line.split("=", 1)
|
||||
env[k.strip()] = v.strip()
|
||||
|
||||
AK = env["JIMENG_API_KEY"]
|
||||
URL = env["JIMENG_BASE_URL"]
|
||||
MODEL = "doubao-seedream-4-0-250828"
|
||||
OUT = ROOT / "assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R9"
|
||||
OUT.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
P = """3D国漫写实角色立绘,纯白背景,单人全身。17-18岁少年,剑眉星目明亮大眼,自信灿烂笑容,气质开朗略带痞气。面部干净清晰青春自然,不是真人照片不是卡通,骨相清晰下颌线锐利,男性面庞。黑色长发半束半披,青色发带。白色交领长衫,袖口挽起露小臂,深青色丝绦腰带,布料干净整洁无破损无污渍。身形挺拔肩膀开阔,双手叉腰,下巴微扬,自信笃定,中国古代修仙少年。"""
|
||||
|
||||
N = """雀斑,麻子,痘痘,粉刺,面部斑点,痤疮,痣,污渍,肮脏,皮肤瑕疵,浓妆,磨皮,美颜滤镜,网红脸,奶油小生,偶像剧男主。
|
||||
真人写实照片,摄影棚打光,杂志写真,明星精修,夸张肌肉,过于成熟面部。
|
||||
迪士尼,皮克斯,可爱娃娃脸,圆脸大眼睛卖萌,日系动漫,女性化面容,长发辫子,裙子女装,头带,发箍。
|
||||
畸形肢体,五官崩坏,模糊不清,水印,破损衣服,补丁,乞丐感,表情阴郁。诸葛风脸。"""
|
||||
|
||||
VARIANTS = [
|
||||
"正面直视,表情自信爽朗,国漫男神",
|
||||
"微侧站姿,目光明亮,少年英气",
|
||||
"微仰头下巴抬起,带一丝痞气但不油腻",
|
||||
"3/4侧脸看向左前,俊秀锋芒"
|
||||
]
|
||||
|
||||
SEEDS = [777, 333, 555, 999]
|
||||
|
||||
def gen(prompt, neg, seed):
|
||||
body = json.dumps({"model": MODEL, "prompt": prompt, "negative_prompt": neg, "size": "1440x2560", "n": 1, "seed": seed})
|
||||
r = subprocess.run(["curl", "-s", "-m", "120", "--noproxy", "*", "-X", "POST", f"{URL}/images/generations",
|
||||
"-H", f"Authorization: Bearer {AK}", "-H", "Content-Type: application/json", "-d", body],
|
||||
capture_output=True, text=True, timeout=130)
|
||||
try:
|
||||
return json.loads(r.stdout)["data"][0].get("url")
|
||||
except:
|
||||
print(f" API err: {r.stdout[:200]}")
|
||||
return None
|
||||
|
||||
def dl(url, dst):
|
||||
Path(dst).parent.mkdir(parents=True, exist_ok=True)
|
||||
subprocess.run(["curl", "-s", "-m", "120", "-L", "--noproxy", "*", "-o", dst, url], capture_output=True, timeout=130)
|
||||
return os.path.exists(dst) and os.path.getsize(dst) > 1024
|
||||
|
||||
ts = time.strftime("%Y%m%d-%H%M%S")
|
||||
results = []
|
||||
for i, (seed, var) in enumerate(zip(SEEDS, VARIANTS)):
|
||||
full = f"{P} {var}"
|
||||
print(f"[{i+1}/4] s={seed}", flush=True)
|
||||
url = gen(full, N, seed)
|
||||
if not url:
|
||||
results.append({"c": i+1, "ok": False, "err": "api"})
|
||||
continue
|
||||
dst = OUT / f"CHAR-003-V2-R9-candidate-{i+1:02d}-1440x2560.png"
|
||||
if not dl(url, str(dst)):
|
||||
results.append({"c": i+1, "ok": False, "err": "dl"})
|
||||
continue
|
||||
results.append({"c": i+1, "ok": True, "raw": str(dst), "seed": seed})
|
||||
print(f" -> {dst.name} (seed={seed})")
|
||||
time.sleep(3)
|
||||
|
||||
ok = sum(1 for r in results if r["ok"])
|
||||
print(f"\n完成: {ok}/4")
|
||||
json.dump({"spec":"VA-05-001-V2-R9","ts":ts,"ok":ok,"model":MODEL,"engine":"Seedream","results":results},
|
||||
open(OUT/"generation-meta.json","w",encoding="utf-8"),ensure_ascii=False,indent=2)
|
||||
87
video-ai-system/tools/qc_char003_r9.py
Normal file
87
video-ai-system/tools/qc_char003_r9.py
Normal file
@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
"""CHAR-003 V2 R9 QC · 去麻子 · Qwen-VL"""
|
||||
import sys, os, json, base64, subprocess
|
||||
from pathlib import Path
|
||||
ROOT = Path('D:/WorkBuddy/guanghulab/video-ai-system')
|
||||
env = {}
|
||||
for line in open(ROOT/".env"):
|
||||
line = line.strip()
|
||||
if line and not line.startswith("#") and "=" in line:
|
||||
k, v = line.split("=", 1)
|
||||
env[k.strip()] = v.strip()
|
||||
AK = env.get("ALIYUN_QWEN_VL_KEY", "")
|
||||
EP = env.get("ALIYUN_QWEN_VL_ENDPOINT", "")
|
||||
FE = "https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation"
|
||||
DIR = ROOT / "assets/candidates/D158-VA-05-001-V2/CHAR-003-SuBai/R9"
|
||||
CS = [DIR / f"CHAR-003-V2-R9-candidate-{i:02d}-1080x1920.png" for i in range(1, 5)]
|
||||
|
||||
PROMPT = """检查CHAR-003苏白立绘。设定:18岁男性,白色长衫,青色腰带,黑色长发半束半披,双手叉腰,自信开朗,俊秀略带痞气,穷但不自卑。
|
||||
|
||||
判定(JSON,布尔小写):
|
||||
1. male: 是否为男性?
|
||||
2. young: 是否看起来17-18岁年轻少年?
|
||||
3. white_robe: 是否白色长衫?
|
||||
4. cyan_sash: 是否有青色/深色腰带?
|
||||
5. hair_half_tied: 是否黑色长发半束半披(头顶束发带)?
|
||||
6. hands_on_hips: 是否双手叉腰?
|
||||
7. intact: 服装是否完整干净无破损?
|
||||
8. beggar: 是否有乞丐感/寒酸感?(true=有,一票否决)
|
||||
9. handsome_confident: 是否俊秀自信?
|
||||
10. like_zhuge: 是否与诸葛风长相相似?(true=相似,一票否决)
|
||||
11. face_ok: 五官是否清晰无崩坏?
|
||||
12. full_body: 是否全身完整?
|
||||
13. freckles: 脸上是否有雀斑/麻子/斑点?(true=有,一票否决)
|
||||
14. sleeves_ok: 袖子是否完整(非无袖背心)?
|
||||
|
||||
pass = 男性且年轻且白衫且腰带且半束发且叉腰且完整且俊秀且五官清晰且全身完整且无麻子且无袖正常,且 beggar=false 且 like_zhuge=false。
|
||||
|
||||
输出格式:{{"candidate": N, "pass": bool, "score": 0-100, "male": bool, "young": bool, ...}} 以及 "summary": "一句话"""
|
||||
|
||||
def enc(p):
|
||||
with open(p, "rb") as f:
|
||||
return f"data:image/png;base64,{base64.b64encode(f.read()).decode()}"
|
||||
|
||||
def q(img):
|
||||
b = json.dumps({"model": "qwen-vl-max", "input": {"messages": [{"role": "user", "content": [{"image": img}, {"text": PROMPT}]}]}})
|
||||
for ep in [EP, FE]:
|
||||
try:
|
||||
r = subprocess.run(["curl", "-s", "-m", "90", "--noproxy", "*", "-X", "POST", ep,
|
||||
"-H", f"Authorization: Bearer {AK}", "-H", "Content-Type: application/json", "--data-binary", "@-"],
|
||||
input=b, capture_output=True, text=True, timeout=95)
|
||||
d = json.loads(r.stdout)
|
||||
if "output" in d:
|
||||
c = d["output"]["choices"][0]["message"]["content"][0]["text"]
|
||||
if "```" in c:
|
||||
c = c.split("```")[1]
|
||||
c = c[4:] if c.startswith("json") else c
|
||||
c = c.replace("```", "").strip()
|
||||
return json.loads(c)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
continue
|
||||
return None
|
||||
|
||||
rs = []
|
||||
for i, p in enumerate(CS):
|
||||
print(f"[{i+1}/4]", end=" ", flush=True)
|
||||
qc = q(enc(p))
|
||||
if qc:
|
||||
qc["candidate"] = i + 1
|
||||
print(f"pass={qc.get('pass')} s={qc.get('score')}")
|
||||
rs.append(qc)
|
||||
else:
|
||||
print("✗")
|
||||
rs.append({"candidate": i+1, "pass": False, "error": "api"})
|
||||
|
||||
ok = sum(1 for r in rs if r.get("pass"))
|
||||
print(f"\n通过: {ok}/4")
|
||||
|
||||
for r in rs:
|
||||
if not r.get("pass") and "error" not in r:
|
||||
iss = [k for k, v in r.items() if isinstance(v, bool) and v and k in ["beggar", "like_zhuge", "freckles"]]
|
||||
iss += [k for k, v in r.items() if isinstance(v, bool) and not v and k in ["male", "young", "white_robe", "cyan_sash", "hair_half_tied", "hands_on_hips", "intact", "handsome_confident", "face_ok", "full_body", "sleeves_ok"]]
|
||||
print(f" 候{r['candidate']} ✗: {','.join(iss) if iss else '其他'} s={r.get('score')}")
|
||||
|
||||
with open(DIR / "QC-R9-BATCH.json", "w", encoding="utf-8") as f:
|
||||
json.dump({"spec": "VA-05-001-V2-R9", "method": "qwen-vl-auto", "results": rs, "summary": {"passed": ok, "total": 4}}, f, ensure_ascii=False, indent=2)
|
||||
print("报告: QC-R9-BATCH.json")
|
||||
Loading…
x
Reference in New Issue
Block a user