# -*- coding: utf-8 -*- """Scene v3 batch: S02/S04/S05/S06/S07/S09 — Seedream 62 + 质感红线, 各自带戏剧瞬间. 对标已通过的锚点 S01(9158/task13241)/S03(9187)/S08(9188).""" import json, ssl, pathlib, urllib.request, urllib.error BASE = "https://192.168.31.88:8042" CFG = pathlib.Path(r"C:\Users\admin\.zcode\cli\config.json") pat = json.loads(CFG.read_text(encoding="utf-8-sig"))["mcp"]["servers"]["sorb"]["env"]["SORB_PAT"] ctx = ssl._create_unverified_context() QUALITY = """【质感红线(最高优先级)】干净的材质渲染:雪面/天空/雾气/水面/泥地/夯土/帷幕/金属均为大面积平滑渐变,禁止网格状假裂纹,禁止泥点颗粒噪,禁止脏斑与碎屑堆砌;细节只允许出现在结构上(车辙、石缝、砖缝、木构榫卯、烛台、兵器架),不允许出现在大面材质上;整体画面通透、干净、无死黑。 【镜头】电影级战争史诗质感,宽银幕构图,体积光,大气透视,胶片颗粒轻微,边缘暗角,16:9,2K。""" EMPTY = "空场景,没有任何人物、士兵、马匹、动物、旗帜、幡、旌旗、军旗、文字、牌匾文字、徽记、现代物品。参考图仅提供场景元素与材质色调,构图完全重新设计。" # S02 虎牢关前·关道/关墙(句2 亮相 + 句7 宣言)冬日清晨至上午 S02 = EMPTY + """ 【画面】虎牢关前关道:汉代夯土关墙如悬崖压顶占据画面上半,墙体巍峨、砖缝清晰;关墙下是开阔的军阵空地,薄雪覆着整齐车辙压出的纹路,一直延伸向画面深处的关门口;清晨金光从画面左侧斜切进来,把关墙投影拉出巨大阴影压在空地上,体积光与飘浮雪尘;冷青阴影+暖金高光,宏大、肃杀、蓄势,空无一人。""" + QUALITY # S04 凤仪亭·内帐(句6 连环计起)夜 S04 = EMPTY + """ 【画面】凤仪亭内帐夜:层层帷幕深红垂落,一盏青铜烛台立在漆案上,烛火摇曳的暖光在帷幕上投下摇曳光影;案上酒爵与玉簪静置,冷蓝月光从帐帘缝隙渗入与烛火暖光形成冷暖对冲;地面漆黑倒映烛光,空气中有细小浮尘在光柱中悬浮;暗红、暧昧、山雨欲来,空无一人。""" + QUALITY # S05 董卓营帐·内(句6 怒斩董卓)夜 S05 = EMPTY + """ 【画面】董卓营帐内夜:粗木立柱撑起厚重军帐,帐内坐榻、甲架、成排酒器锡壶;主位的烛台只剩一缕将熄的青烟(烛已灭),帐内陷入半黑,只有帐帘缝隙透进的冷蓝月光勾勒出甲架上兵刃的轮廓;地面一块暗色泼痕区(酒液泼洒反光,非血液),空气死寂;压抑、终结、夜色如墓,空无一人。""" + QUALITY # S06 濮阳城外·战场(句4 濮阳鏖战)黄昏 S06 = EMPTY + """ 【画面】濮阳城外黄昏战场:残阳如血压在地平线,濮阳夯土城轮廓在暮色烟尘中只剩剪影;战场开阔地面上断车斜插、成排兵器插地成林,车辙与蹄印纵横交错压出泥泞反光;暮色烟尘贴地滚动,把画面下半吞成半透明金红;冷青阴影+血红暮光,宏大、惨烈、鏖战方歇,空无一人、无尸无血。""" + QUALITY # S07 辕门·两军营门(句5 辕门一箭)日间 S07 = EMPTY + """ 【画面】辕门营地日间:两根高大的木构辕门柱架着横枨立在画面中央,辕门下是宽阔校场空地,地面被千军踏出平整硬土;两侧营帐成排延伸向纵深,兵器架整齐排列在辕门两侧,阳光从画面正上方劈下,把辕门投影切成锐利的几何阴影压在空地中央;空气清朗、微尘悬浮,正午的清明与对峙前的死寂,空无一人。""" + QUALITY # S09 游戏古战场·演武场(句9-11)日间高饱和——注意:S09 用 G1(9145) 风格参考 S09 = """空场景,没有任何人物、士兵、马匹、动物、旗帜、幡、旌旗、军旗、文字、牌匾文字、徽记、现代物品。参考图(游戏古战场)提供全部场景元素、材质与色调,构图完全重新设计。 【画面】游戏古战场演武场:干燥的黄土战场,地面有隐约可见的八格扇形演武标线/石质刻度(只画几何刻度,不写数字文字),中央留出大面积技能展示空地;远处残破夯土城墙与烽烟台,地平线上低山与冷色天空;空气中少量金色尘粒悬浮,日间金灰光;高饱和高对比的游戏CG质感,但大面材质保持平滑干净渐变,通透无死黑。 【镜头】宽银幕电影感,体积光,大气透视,胶片颗粒轻微,边缘暗角,16:9,2K。""" def submit(key, prompt, ref_id): payload = { "client_namespace": "lubu_pv_scene", "idempotency_key": key, "project_id": 30, "model_config_id": 62, "task_type": "image", "references": [{"source_type": "media_asset", "id": ref_id, "asset_type": "image", "role": "reference_image"}], "parameters": {"prompt": prompt, "aspect_ratio": "16:9", "image_size": "2K", "output_format": "png", "watermark": False}, } data = json.dumps(payload, ensure_ascii=False).encode("utf-8") req = urllib.request.Request(BASE + "/api/external/v1/tasks", data=data, method="POST", headers={"Authorization": "Bearer " + pat, "Content-Type": "application/json"}) try: with urllib.request.urlopen(req, context=ctx, timeout=120) as r: o = json.loads(r.read().decode("utf-8")) print(key, "task_id=", o.get("task", {}).get("id"), "status=", o.get("task", {}).get("status")) except urllib.error.HTTPError as e: print(key, "HTTP", e.code, e.read().decode("utf-8")[:500]) submit("lubu_scene_v3_S02_seedream_20261028_v1", S02, 9050) submit("lubu_scene_v3_S04_seedream_20261028_v1", S04, 9052) submit("lubu_scene_v3_S05_seedream_20261028_v1", S05, 9049) submit("lubu_scene_v3_S06_seedream_20261028_v1", S06, 9055) submit("lubu_scene_v3_S07_seedream_20261028_v1", S07, 9054) submit("lubu_scene_v3_S09_seedream_20261028_v1", S09, 9145)