Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

140 lines
8.0 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
"""ENV-002/003/004 三场景批量生成 · 对齐苏白V3-R4风格 · 修仙世界"""
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"
SCENES = {
"ENV-002": {
"name": "百宗会广场全景",
"prompt": """中国修仙世界百宗会广场高空俯瞰,大远景。
从云端俯瞰修仙界盛大集会,巨大广场人山人海,数不清的修仙者如蚂蚁般穿梭其间。
多个豪华宗门招牌林立——鎏金牌匾、灵气光环、飞檐楼阁帐篷,御剑飞行的修仙者化作流光划过天际。
广场中央灵雾缭绕,远处群山环抱,仙鹤翱翔。
场景宏大震撼,每个宗门摊位都有独特风格和招牌。
3D真人向写实渲染光影清冷自然不良人硬核写实风格与CHAR-003苏白V3-R4同一风格体系电影级大场面。""",
"neg": """卡通渲染赛璐璐塑料感游戏低模廉价3D页游风光污染浮夸光环土味特效。
现代城市,高楼大厦,现代建筑,水泥广场,柏油路,现代人群,西装革履。
空无一人的广场,荒凉无人的场景,空旷寂寥。
任何文字,汉字,标语。
人物面部特写,单一人物占主体。
白天正午艳阳,过曝,惨白,画面扁平无层次。
黑暗阴森恐怖,末日废墟。
这个场景是远景俯瞰,不要近景。""",
"variants": [
"高空俯瞰百宗会全景,人山人海修仙盛会,豪华宗门招牌阵列,御剑流光划过天空,仙雾缭绕宏大场面",
"云端俯视修仙广场,万人集会宗门林立,飞檐帐篷金碧辉煌,仙鹤翱翔远山环抱,电影级鸟瞰",
"百宗会广场高空全景,密集修仙者人流穿行,各宗招牌灵气环绕,御剑飞行轨迹优美,震撼修仙界盛况",
"俯瞰修仙界盛典,广角大远景,层叠宗门帐篷招牌如星罗棋布,人潮涌动灵雾飘渺,史诗级构图"
]
},
"ENV-003": {
"name": "天道宗摊位近景",
"prompt": """中国修仙世界百宗会角落,天道宗简陋摊位中近景。
角落位置破旧感强烈一根仙木杆悬挂刻有天道宗的破旧木牌匾旁边是绳系A架粗麻画布广告牌。
摊位是粗糙灵木桌铺着淡青色粗布,桌面上空无一物十分简陋。
与远处豪华宗门摊位形成鲜明对比——远处可见气派帐篷和排队人群。
脚下淡淡仙雾缭绕,色调偏冷暗清寂,氛围孤独但不阴森。
3D真人向写实渲染不良人硬核写实风格与CHAR-003苏白V3-R4同一风格体系画面有电影感。""",
"neg": """卡通渲染塑料感游戏低模廉价3D页游风光污染。
现代建筑,水泥地,柏油路,现代家具,金属桌椅,塑料凳子。
豪华摊位,气派装饰,金碧辉煌,华丽场景,热闹喜庆氛围。
任何人,人物,角色,修行者,顾客,围观群众。
任何文字(除天道宗),无关汉字,标语。
晴天艳阳,高饱和度,暖黄色调,金色阳光,鲜艳色彩。
过于黑暗,完全漆黑的角落,恐怖片氛围。""",
"variants": [
"天道宗破旧摊位中景,杆挂牌匾和广告牌清晰,灵木桌青布简陋,远处豪华摊位虚化,冷寂修仙氛围",
"角落天道宗摊位,破旧灵木桌铺青布,牌匾广告牌一左一右,脚下仙雾,远焦豪华宗门对比强烈",
"天道宗摊位中近景,简陋灵木台上空无一物,牌匾悬空广告牌旁立,冷色调清寂氛围,写实修仙场景",
"百宗会最角落的天道宗摊位,破败冷清,牌匾广告牌灵木桌青布,虚化远处的气派宗门摊位,电影感对比"
]
},
"ENV-004": {
"name": "灵霄宗摊位近景",
"prompt": """中国修仙世界百宗会灵霄宗豪华摊位中近景。
气派华丽摊位占据显眼位置,鎏金灵霄宗牌匾悬挂高处光芒流转,牌下豪华帐篷飞檐翘角。
排队等候的修仙者队伍蜿蜒如龙,人群拥挤热闹非凡。
摊位装饰奢华——丝绸帷幕、紫檀木桌案、灵石法器点缀其间,灵光流转仙气浓郁。
与其他简陋摊位(如天道宗)形成强烈视觉对比。
3D真人向写实渲染光影清冷但有灵气光晕点缀不良人硬核写实风格与CHAR-003苏白V3-R4同一风格体系电影级画面。""",
"neg": """卡通渲染塑料感游戏低模廉价3D页游风光污染过度土味光效特效。
现代建筑现代广告牌LED灯箱霓虹灯现代排队栏杆现代装修。
简陋摊位,破旧摊位,寒酸场景,贫困感。
任何文字(除灵霄宗),无关汉字,标语。
空无一人,冷清寥落。
过于鲜艳高饱和,过于金黄,暴发户土豪金,粗俗俗气装饰。
过于黑暗阴森。""",
"variants": [
"灵霄宗豪华摊位中景,鎏金牌匾光芒流转,丝绸帐篷飞檐,修仙者长队蜿蜒,灵光点缀华丽场景",
"灵霄宗气派摊位,紫檀木桌案灵石法器,排队人群熙攘,华贵装饰灵光流转,与天道宗对比鲜明",
"百宗会黄金位置灵霄宗摊位,鎏金招牌醒目,豪华帐篷飞檐翘角,人群涌动络绎不绝,修仙界顶级摊位",
"灵霄宗摊位中近景,灵光流转仙气浓郁,丝绸帷幕豪华装饰,队伍排长修仙者众多,电影级光影"
]
}
}
SEEDS = [777, 888, 999, 111]
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")
all_meta = {}
for env_id, cfg in SCENES.items():
print(f"\n{'='*40}\n{env_id} · {cfg['name']}\n{'='*40}")
OUT = ROOT / f"assets/candidates/D169-VA-05-001/{env_id}"
OUT.mkdir(parents=True, exist_ok=True)
results = []
for i, seed in enumerate(SEEDS):
var = cfg["variants"][i]
full = f"{cfg['prompt']} {var}"
print(f" [{i+1}/4] seed={seed}", flush=True)
url = gen(full, cfg["neg"], seed)
if not url:
results.append({"c": i+1, "ok": False, "err": "api"})
continue
dst = OUT / f"{env_id}-V1-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" {env_id} 完成: {ok}/4")
all_meta[env_id] = {"name": cfg["name"], "ok": ok, "results": results}
json.dump({"spec": f"VA-05-001-{env_id}-V1", "ts": ts, **all_meta[env_id], "model": MODEL, "engine": "Seedream"},
open(OUT/"generation-meta.json","w",encoding="utf-8"), ensure_ascii=False, indent=2)
print(f"\n{'='*40}")
for env_id, m in all_meta.items():
print(f" {env_id} · {m['name']}: {m['ok']}/4")
print(f"{'='*40}")