bingshuo 305e5493d0
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 · ENV三场景R2·摊位→宗门招生点·大气仙气缥缈 · D169
2026-07-06 15:21:12 +08:00

137 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 R2 · 摊位→宗门招生点 · 大气仙气缥缈"""
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": """集市摊位,地摊,菜市场,小吃摊,杂货铺,庙会,赶集,路边摊,小摊小贩。
卡通渲染,塑料感,游戏低模,页游风,光污染,土味特效。
现代建筑,高楼大厦,现代广场,水泥地,柏油路。
冷清无人,空旷孤寂场景。
任何文字,汉字。
人物特写,单人占主体。
白天正午过曝,画面扁平。""",
"variants": [
"极致高空俯瞰,仙云翻涌如海,宗门招生宫殿星罗棋布,御剑流光万千穿梭,恢弘史诗级修仙界招生大会",
"鸟瞰修仙盛会,各宗招生殿宇阵列仙山环抱,灵云蒸腾仙鹤群飞,宏大场景仙气扑面,电影级大场面",
"广角高空远眺百宗会,云海之上招生处若隐若现,灵光流转山脉间,修仙者御剑如星河流动",
"极远高空修仙招生广场全景,千宗万派招生殿林立,仙雾缭绕如仙境,史诗级修仙世界观宏大场景"
]
},
"ENV-003": {
"name": "天道宗招生点·角落破旧",
"prompt": """中国修仙世界百宗会角落,天道宗简陋招生点中近景。
不是集市摊位,而是天道宗唯一的招生报名处——一根旧仙木杆悬挂刻有天道宗三字的破旧牌匾。
旁边绳系A架粗麻广告牌竖立一张粗糙灵木桌铺青布就是全部的报名台桌上空无一物没有一个人来报名。
角落位置荒凉冷清,远处其他宗门的豪华招生殿隐约可见,仙雾在脚边缭绕。
画面突出破败对比:别人是金光闪闪的招生殿,天道宗只有一块破牌匾和一张破桌子。
3D真人向写实渲染清淡冷雅色调不良人硬核写实风格与苏白V3-R4同一体系电影感构图。""",
"neg": """集市摊位,地摊,菜市场,小吃铺,杂货铺,庙会摊位,路边摆摊,小贩推车。
卡通渲染,塑料感,游戏低模,页游风,光污染。
现代建筑,现代招牌,现代家具。
任何人,人物,报名者,围观群众。
鲜艳暖黄色调,金黄阳光,高饱和度。
任何无关汉字,其他宗门名称。""",
"variants": [
"天道宗角落招生点,破旧牌匾广告牌灵木报名台,孤零零无人,仙雾缭绕远焦豪华招生殿对比强烈",
"冷清天道宗招生报名处,一杆牌匾一桌一广告牌就是全部家当,脚下仙雾远焦金光,清寂氛围",
"天道宗最寒酸招生点,破木牌匾悬空广告牌旁立,灵木台青布空无一物,修仙界最冷清的报名处",
"角落天道宗招生点中景,牌匾广告牌报名台简陋到极致,虚化远方豪华招生殿,冷雅仙侠电影感"
]
},
"ENV-004": {
"name": "灵霄宗招生殿·气派宏伟",
"prompt": """中国修仙世界百宗会,灵霄宗招生殿中全景。
不是集市摊位,而是灵霄宗正式的招生报名大殿——飞檐翘角三层楼阁,鎏金牌匾灵光流转庄严肃穆。
宽阔的汉白玉台阶从大殿延伸至广场,排队报名的修仙者队伍蜿蜒有序,殿前灵石法阵散发柔和灵光。
大殿两侧丝绸垂幔随风轻扬,紫檀木报名案台排列整齐,宗门执事正襟危坐。
整个招生殿仙气浓郁灵光环绕,大气磅礴尽显顶级宗门气派。
3D真人向写实渲染清冷中有灵气光晕不良人硬核写实风格与苏白V3-R4同一风格体系电影级画面。""",
"neg": """集市摊位,地摊,菜市场,小吃部,杂货铺,庙会,路边摊,小摊,简陋摊点,临时帐篷,简易大棚。
卡通渲染,塑料感,游戏低模,页游风,光污染过度,土味光效。
现代建筑,现代办公楼,现代排队栏杆,现代招牌。
空无一人,冷清单薄。
暴发户土黄金,过度鲜艳,粗俗俗气装饰,过于明亮刺眼。
任何无关文字。""",
"variants": [
"灵霄宗招生大殿全景,飞檐楼阁三层鎏金牌匾,汉白玉台阶排队蜿蜒,灵石法阵灵光流转,顶级宗门气派",
"灵霄宗招生殿中景,紫檀案台执事正坐,丝绸垂幔飘动,殿前修仙者长队庄严肃穆,仙气浓郁",
"恢弘灵霄宗招生处,三层飞檐大殿灵光环绕,数百修仙者排队报名,牌匾鎏金流转,大气磅礴",
"灵霄宗正式招生殿,飞檐翘角庄严肃穆,排队修仙者蜿蜒如龙,灵石法器灵光点缀仙气缥缈,电影级构图"
]
}
}
SEEDS = [111, 222, 333, 444]
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}/R2"
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}-R2-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}-R2", "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}")