# -*- coding: utf-8 -*- """Sentence-3: six-shot Three Heroes battle with locked axis.""" 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() CHAR = {"source_type": "media_asset", "id": 9089, "asset_type": "image", "role": "reference_image"} HORSE = {"source_type": "media_asset", "id": 9047, "asset_type": "image", "role": "reference_image"} HALBERD = {"source_type": "media_asset", "id": 9057, "asset_type": "image", "role": "reference_image"} GUAN = {"source_type": "media_asset", "id": 444, "asset_type": "image", "role": "reference_image"} ZHANG = {"source_type": "media_asset", "id": 445, "asset_type": "image", "role": "reference_image"} LIU = {"source_type": "media_asset", "id": 370, "asset_type": "image", "role": "reference_image"} SCENE = {"source_type": "media_asset", "id": 9051, "asset_type": "image", "role": "reference_image"} STYLE = "3D超写实三国历史正剧CG,UE5.2全局光线追踪,3D动画CG质感非真人实拍,清晨低角度侧逆光,冷青阴影+暖金高光,画面通透无死黑,浅景深、胶片颗粒、边缘暗角,16:9,无文字无水印无旗帜。" CHARGE = """【锁死吕布与赤兔】吕布按参考图1:黑高束发、金色凤翅冠、双红翎、兽面吞金甲、红披风,方天画戟按参考图2;赤兔按参考图3:红鬃、深枣红马身、金色鞍饰与完整鞍布。参考图只锁造型,构图全新。 【轴线】吕布自右向左冲向联军军阵,联军在画面左侧,城门只在右后远处。赤兔完整马身、四腿数量正确、关节自然,禁止畸变。 【镜头】大远景:吕布单骑自画面右侧冲向左侧军阵,赤兔全速、雪尘拖出长尾,画戟前指;左侧军阵玄色无字旗、兵戈如林,贴地低机位,前景飞溅雪块。""" + STYLE GUAN_SHOT = """【锁死关羽】关羽按参考图1:绿袍、长髯、青龙偃月刀,面部与铠甲细节以参考图为准,不换角色。 【轴线】关羽在画面左侧,偃月刀自左向右劈来,目标在画面右侧的吕布方向;动作只写一刀劈来。 【镜头】近景快切:关羽侧脸上半身与长刀,刀锋冷光,刀刃将到未到,背景虚化的军阵与冷青雪原,不拍完整双人关系。""" + STYLE ZHANG_SHOT = """【锁死张飞】张飞按参考图1:黑甲、丈八蛇矛,面部与铠甲细节以参考图为准,不换角色。 【轴线】张飞在画面左侧,丈八蛇矛自左向右刺来,目标在画面右侧的吕布方向;动作只写一矛刺来。 【镜头】近景快切:张飞侧脸上半身与蛇矛,矛尖冷光,怒目,背景虚化的军阵与冷青雪原,不拍完整双人关系。""" + STYLE LIU_SHOT = """【锁死刘备】刘备按参考图1:双股剑与铠甲,面部与铠甲细节以参考图为准,不换角色。 【轴线】刘备在画面左侧,双股剑自左向右夹击,目标在画面右侧的吕布方向;动作只写双剑夹击。 【镜头】近景快切:刘备侧脸上半身与双剑,双剑一上一下,神情沉稳,背景虚化的军阵与冷青雪原,不拍完整双人关系。""" + STYLE SWEEP = """【锁死吕布与画戟】吕布按参考图1:黑高束发、金色凤翅冠、双红翎、兽面吞金甲、红披风,方天画戟按参考图2:月牙双刃+中央枪尖+戟尾配重。参考图只锁造型,构图全新。 【轴线】吕布在画面右侧,三英在画面左侧;画戟从右上向左下横扫,格开三般兵器,三英兵器被震开,绝不让敌兵绕到吕布背后。 【镜头】中景:吕布画戟横扫,月牙刃从右上向左下扫过,关羽刀、张飞矛、刘备双剑被震开,火星四溅;吕布身体呈对角线动势,红披风向右后方翻卷,动作不超过两段。""" + STYLE KNOCK = """【锁死吕布与画戟】吕布按参考图1:黑高束发、金色凤翅冠、双红翎、兽面吞金甲、红披风,方天画戟按参考图2。参考图只锁造型,构图全新。 【轴线】吕布居中偏右,三英在画面左侧,被震退至左前方数步外,保持明确距离,绝不倒在吕布脚边。 【镜头】远景:三英被震退半步至数步外,关羽、张飞、刘备兵器下沉;吕布画戟斜指地面,烟尘未落,红披风在烟尘中唯一清晰。固定机位轻微拉远。""" + STYLE def submit(key, prompt, refs): payload = { "client_namespace": "lubu_pv_board", "idempotency_key": key, "project_id": 30, "model_config_id": 62, "task_type": "image", "references": refs, "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_s3_charge_20261027_v1", CHARGE, [CHAR, HALBERD, HORSE, SCENE]) submit("lubu_s3_guan_20261027_v1", GUAN_SHOT, [GUAN, SCENE]) submit("lubu_s3_zhang_20261027_v1", ZHANG_SHOT, [ZHANG, SCENE]) submit("lubu_s3_liu_20261027_v1", LIU_SHOT, [LIU, SCENE]) submit("lubu_s3_sweep_20261027_v1", SWEEP, [CHAR, HALBERD, SCENE]) submit("lubu_s3_knock_20261027_v1", KNOCK, [CHAR, HALBERD, SCENE])