# -*- coding: utf-8 -*- """Sentence-2 reveal: full-body on horseback + face close-up, same direction 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"} SCENE = {"source_type": "media_asset", "id": 9048, "asset_type": "image", "role": "reference_image"} FULL = """【锁死吕布与赤兔】吕布必须100%按参考图1:黑色高束发髻、金色凤翅束发冠、两侧双根鲜红超长翎羽;面部与参考图1完全一致——剑眉浓黑上扬、眼窝深、眼神锐利、鼻梁高挺、下颌线清晰、年轻英武;兽面吞头连环铠(双肩兽头吞甲、胸前双圆护胸铜片、黑色护腕、腰部干净高级灰皮毛裙边)、红色长披风;兵器方天画戟按参考图2:月牙双刃+中央枪尖+戟尾配重、红色戟缨缠绕杆身。赤兔必须100%按参考图3:红鬃、深枣红马身、黑色皮质马鞍+金色鞍饰+红色缨穗+完整鞍布,毛色与马具形制不得改动。参考图只锁造型,机位与构图重新设计。 【轴线】延续出城方向:城门在右后方远处,野外在左前方。吕布与赤兔在野外勒马停驻,面朝画面左前方,披风与双翎向右后方飘扬;不是朝城门跑。 【镜头】好莱坞史诗大片英雄全貌:超低角度仰拍,完整吕布骑马全身与赤兔完整马身入画。吕布位于画面右侧三分之一,身体与马形成对角线动势;方天画戟从画面右下前景斜贯向上、戟尖刺向画面左上天空;红披风向画面左侧翻卷占满左侧空间,双红翎向后猎猎。赤兔四蹄稳稳踏在薄雪上,四腿数量正确、关节自然,禁止畸变。清晨低角度侧逆光自画面左后方射来,铠甲边缘、红翎、披风、马鬃勾出金色轮廓光;前景虚化雪尘粒子。背景:右后方远处关隘与城墙、左前方辽阔雪原与远山,冷青蓝晨雾。电影级调色:冷青阴影+暖金高光,胶片颗粒,边缘暗角,浅景深,16:9,无文字无水印无旗帜。""" FACE = """【锁死吕布面部】面部与参考图1完全一致:黑色高束发髻、金色凤翅束发冠、两侧双根鲜红超长翎羽;剑眉浓黑上扬、眼窝深、眼神锐利、鼻梁高挺、下颌线清晰、年轻英武,不得成熟化/欧美化/换成其他角色。兽面吞金肩甲、双圆护胸铜片、黑色护腕、灰白皮毛裙边、红披风全部保留。 【轴线】吕布与赤兔勒马停在野外,面朝画面左前方,城门只在右后方远景虚化,双翎与披风向右后方飘扬。 【镜头】面部特写:吕布抬眼,目光从左下方向前上方抬起、眼神凛冽如寒星;双眼睁开、目光锐利,面部肌肉放松,唇部紧闭,半明半暗的脸。清晨低角度侧逆光自左后方勾出额头、颧骨、下颌与翎羽金边,阴影冷青蓝。前景少量雪尘粒子虚化,背景为长焦压缩的冷青野外与远处关隘虚化。电影级调色:冷青阴影+暖金高光,胶片颗粒,边缘暗角,极浅景深,16:9,无文字无水印无旗帜。""" 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")[:700]) submit("lubu_s2_full_reveal_20261027_v1", FULL, [CHAR, HALBERD, HORSE, SCENE]) submit("lubu_s2_face_close_20261027_v1", FACE, [CHAR, SCENE])