guanghulab/video-ai-system/tools/char003_gen_r9.py
bingshuo 6d5fcdfb21
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled
ICE-GL-ZY001 · CHAR-003苏白V2 R9批准入库 · 风格基准锁定 · D161
2026-07-02 16:18:26 +08:00

74 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)