Files
the-silent-gods-hearthfire/tools/prepare-live-assets.py
T

167 lines
26 KiB
Python

"""按现有身份档案与共用角色卡建立真人主视觉任务;不发起付费生成。"""
import hashlib
import json
from pathlib import Path
import re
ROOT=Path(__file__).resolve().parent.parent
LIVE=ROOT/'08_真人AI短剧'
VOICE=ROOT/'06_AI动漫制作/03_分镜与镜头/04_声音设计/角色音色档案'
SCENES=[
('CATHEDRAL','大圣堂前庭与列廊','巨大但可信的中世纪石造圣堂,长列廊、前庭、磨损台阶,旅人与马车提供尺度。水纹信仰纹样,阳光与阴影有层次。不是灰泉镇小泉堂。'),
('APARTMENT','前世租屋','2010—2020年代普通中国年轻操作工的小租屋,普通电脑、笔记、三盆不同长势的薄荷,干净实用,不是未来实验室。'),
('LOCKER','前世更衣与交班处','普通化工厂员工更衣交班空间,旧金属柜、工装、交班簿、普通照明。人物活动和去撤离走廊的门分清。'),
('CORRIDOR','前世撤离通道','普通化工装置区的真实撤离走廊,管廊玻璃、转角、可走的出口路线。平时状态的空间母版,不出现灾难火海。'),
('GREYSTONE','灰石坡雨夜','矮灰石墙、避风墙脚凹处、碎石坡路,上坡远处有小泉堂灯。雨夜有真实落水,救助婴儿的位置需可进入。'),
('GRAYTOWN','灰泉镇清晨总景','边境坡镇,灰白石屋、褐木梁、蓝灰板岩屋顶。西北高处小泉堂,中段集市,下坡仓与孤儿院,远山、河谷、桦林;有人生活的清晨,没有巨大王城和哥特尖塔。'),
('CHAPEL','圣伊诺泉堂外院','朴素边境小泉堂,短钟塔、三浅拱、白石阶磨损,泉渠穿院墙。门向东南,建筑平易可近,晨间有清新自然色彩。'),
('CHAPEL-IN','泉堂礼拜堂','低顶木质长厅,尽端石龛一尊端庄垂手石质女神像,胸前水纹徽记,北窗柔光;侧门通诊疗间。普通日常,神像为哑光石材。'),
('COMMON','孤儿院共室','下坡孤儿院的公共生活长室,长桌、错配木碗、身高刻痕、修补窗与铁炉,床区与餐区分开。温暖有人住过的秩序,不是阴森牢房。'),
('KITCHEN','泉堂厨房','石木厨房、灶、锅、盛水容器、木桌和收粮架。干净可用、有真实材料与食物香气的视觉联想,炉边有工作空间。'),
('CLINIC','泉堂诊疗与侧廊','侧室改的照护点,有隔帘、三床模块、洗手盆、两个可见出口,清洁物资与回收路线分开;只有空间,不拍可照做的医疗教程。'),
('FIELDS','灰泉低田与邻田水沟','真实小块低洼耕地,两户田界、支沟、取水点和田埂可读,农作物与土壤层次清晰,山林为背景;初春日光。'),
('SPRING','银泪泉与下游三格石池','岩缝自然清泉、银灰沉积线、石渠下接三格池,水从高处顺坡流向低处。自然水色与石材,污染线索以后由剧情给出。'),
('WAREHOUSE','慈恩仓内部','低石基、粗木架、十二列粮袋空间、通风沟、东侧铁包木门、南墙称量台;所有粮袋有真实重量,未崩塌正常状态。'),
('MARKET','灰泉镇集市','L形街口、中央坡道、布棚、木勺、干果、织物、公共告示板;鲜活朴素的边境市场,有买卖和生活温度。'),
('HEARING','灰泉临时审理厅','借用镇公事厅的狭长石厅,主审长桌、记录席、有限见证座位、门外廊下、仪式水纹区域;家具可搬,不是首都万人宫殿。'),
('OFFICE','泉堂侧室与问询室','小尺度石木侧室,工作桌、椅子、纸张和有书脊的书架,窗门与桌相互位置清晰;真实公共机构而非地牢。'),
('DUKE','大公府前庭','中世纪人类大公府的出发前庭,府门、石阶、旅行马车、马匹和合身少年行装的停放位置;身份体面而非巨型神殿。'),
('EQUIPMENT','大圣堂报到与装备室','高窗前的登记长桌、行李区与相邻装备室,陈列合适青少年尺寸的护具和药箱;实践的旅途准备,空间宏大而能辨路。'),
('ROAD-INN','东境驿道与旅站','人类驿道、换马棚、路牌、装货院、可休息的旅舍房间,空间有交通的进出。广阔自然地貌与具体旅人目的相连。'),
('HARBOR','中央狭海中转港口','有岛链远景的中世纪海港、装卸粮袋和魔石的货船、吊装木架、仓棚与验放桌。贸易仍在进行,宏大通过船与人尺度。'),
('DEMON-GRAIN','铜炉领粮站','多族生活的矿货与粮货交换站,三个卸货位、零售粮斗、货签与仓棚,矿车路线和居民取粮路线分开;不能画成已经全国粮食自给。'),
('MOUNTAIN','北方山口商路','北侧绕行商队的山口道路,有能通过驮兽的宽度、山谷、远山积雪、分岔补给点。道路并非连接大陆的唯一一条石桥。'),
('TUNNEL','旧隧道与绕行入口','可走的旧山路隧道口,落石造成部分堵塞,旁边有需实际绕行的坡路。建立出口、入口和道路高差,不将人困入不存在的密室。'),
('RECEPTION','夜蔷薇接收站','边境中立接收与核验小站,货物区、问询桌、休养铺位、饮水和出路可见;夜晚有人留灯等待旅人,不是拘禁牢房。'),
('GEARYARD','齿轮驿货台与住屋总景','874边境多族聚落,货台、工棚、饭棚和住屋沿水渠分布,远处矿山与商路,烟火、材料与修补有生活感;不是已建成的巨大王都。'),
('WORKSHOP','齿轮驿试工与术式工作棚','工具、普通机械件、检测探针、陶衬板分工摆放,黛拉、诺尔与普通工人各有操作区,工钱和交接有位置;实用温暖的工艺空间。'),
('MEALHOME','齿轮驿饭棚与家庭','独立饭棚长桌与相邻工人住屋,留种罐和食粮分开、普通碗与厚衣、床位和窗子;现实可住的舒适,从有限资源中经营出来。'),
('MILL','旧磨坊水渠与机件间','木轮、进水渠、磨盘、进料与出粉口有可信机械关联,磨坊在河边,可推粮车进出;晴日实际可工作状态,绝不凭空创造粮食。'),
('CERAMIC','黛拉陶工棚','小型地精成年匠人尺度,窑、干燥架、试装台、片材与失败开裂样品有秩序摆放;赭陶、蓝灰工衣与温暖天光。'),
('SEEDBED','跨冬苗床棚','四组共80平方米苗床,缓冲水槽、衬板、外部供能与导流构件分开,冬季只有小苗与维护结构。可见边界的早期试验,不是粮食海洋。'),
('TRIALFIELD','875四块试田','四块共12000平方米有田界的试田,两块燕麦、两块补种荞麦,沟渠和导流结构可见;收获季的具体小范围成果,远处是聚落不是全国繁华城市。'),
('FOREST','精灵森林通行层次','巨大树干与林间多层步道、巡林标记、湿润苔藓、层层自然光,陌生而令人想探索的森林。魔力潮汐光变留作状态,不是到处霓虹灯。'),
('BRIDGE','断桥与森林侧道','森林断桥、桥底入口、旧石室方向与可供担架通行的侧道都能理解,高差和树根位置固定,日间有危险和可行退路。'),
('STONE-ROOM','河谷旧石室','隐在河谷树根和旧桥下的古石室,伤员暂避处、可进担架的门与通往侧道的出口;旧石有历史层次而非隐藏现代实验室。'),
('ELF-HALL','林地议事处与记忆库外廊','精灵建筑依森林而建,材料、光线和长寿文明修缮痕迹独特;议事处与记忆库为不同房间、有可见门槛和离开的路径。'),
('COPPER-CITY','铜脊山城分层总景','北部山体矮人城市内部,巨型石门、索道、通风井、上层仓储外贸、中层住宅工坊、下层炉厅,粮车与行人作比例参照。地热真实隔离,壮丽有生活,不是所有人站在裸露熔岩上。'),
('DURAN-FORGE','杜兰工坊与内室','矮人壮年大师的锻台、练习炉、冷却处、休息内室与旧物柜可辨,铁砧高度适合矮人体格;旧盾留内衬细节待单独道具制作。')]
SPECIAL={
'埃利安':('CHR-LIVE-MC-A19-V01','874年19岁,人类男青年,深色短乱发、褐眼,奶白麻衬衣、深蓝灰无袖外衣、皮围裙与工具袋、棕裤短靴,无个人魔力纹。'),
'维奥拉':('CHR-LIVE-VIOLA-A320-V01','874年320岁成年紫晶女魔王,约140厘米娇小、窄肩、圆润稚嫩脸、紫长发金眼、紫金端庄宫廷长裙与晶冠;无角翼尾,成年沉稳表演。'),
'卢西安':(None,'874年18岁人类勇者,年轻精力充沛,金棕短发,合身实用勇者护甲与旅行披风。此为成年基准,不代用870年14岁少年。'),
'艾达':(None,'874年17岁人类受训女治疗师,棕发束起,朴素高领旅行工作服、药箱与便于行动的裙裤,正常未成年比例,职业而不性感;870年13岁另分版。'),
'伊瑟拉':(None,'874年680岁成年精灵女性,尖耳、修长自然体格、青槲森林旅行衣、巡林装备,成熟独立的神情,不做儿童或性感服装。'),
'杜兰':(None,'874年126岁壮年矮人男性大师,短壮强健、浓须、厚实工匠手、实用皮围裙与锻造工具,不按人类年龄画成垂暮老人。'),
'托克':(None,'874年52岁成年男性地精领主兼修具师,小型成年骨架、长耳、灰绿皮肤,工坊接待服、磨损皮具、成熟面孔与细巧工匠手,不是儿童。'),
'黛拉':(None,'874年43岁成年女性地精匠人,128厘米,橄榄灰肤、宽耳尖稍外、深棕短发夹白、褐眼、左眉浅疤。赭色短外套、靛蓝围裙、厚底工作鞋、折尺。成年比例。'),
'瑟恩':(None,'874年47岁成年男性蜥蜴人农人,181厘米,苇绿细鳞、浅沙色喉腹、琥珀眼、右颊鳞浅缺口,土褐短披、膝下绑腿、平衡尾活动开口,无角翼。'),
'诺尔':(None,'874年32岁成年狼裔男性,178厘米,明确狼吻、灰白颊毛、灰毛狼耳和短密尾毛,深灰卷短发棕眼。蓝灰长衣、皮护腕、右腰探针盒,无军衔或战斗杖。'),
'卡莎':(None,'874年36岁成年狼裔女性护运队长,179厘米、明确狼吻、深棕耳尾颊毛、短发、左下颌细疤、暗绿旅装、弯背短刀,职业克制。'),
'米娅':(None,'874年29岁成年猫裔女性向导,165厘米、赤褐耳尾、短吻与触须、右耳缺口、灰黄头巾、折叠路标册。不是人脸加发卡。'),
'布伦':(None,'874年48岁成年厚土族男性驮运工,226厘米、宽厚骨架、灰褐肤、黑短辫、左肩低于右肩、车具皮带;不是巨魔,不吃智慧生命。'),
'莱莎':(None,'874年54岁成年女性蜥蜴人护理者,174厘米、青灰鳞、浅黄眼、麻白围巾、分格药箱,朴素宽松旅装。'),
'伊沃':(None,'874年27岁成年男性地精观察员,131厘米、灰绿肤、褐眼、短兜帽、折镜和信号布;小型成年体格。'),
'塔恩':(None,'874年62岁成年石脊支男性巨魔,244厘米,蓝灰肤、碎石色短发、左肩白色旧疤、宽刃护刀,厚实旅装;高大且有理性。'),
'赫伦':(None,'874年44岁成年男性地精测绘员,135厘米、灰橄榄肤、薄圆镜、棕灰发、木壳测绘盒,左膝有伤的谨慎站姿,不是六人队的第七正式队员。'),
'玛拉':(None,'870年58岁人类女性佃农,157厘米、灰褐发辫、晒斑、深棕眼、蓝色补丁披肩、朴素农作服、粗糙手掌,干净有尊严。'),
'埃蒙':(None,'870年55岁人类男性巡回修具师,174厘米、黑灰络腮短须、左眼睑下垂、棕工具卷、灰皮背心,成熟专业。'),
'洛恩':(None,'874年40岁人类男粮商,173厘米、后退棕发、短须、深蓝旧外套、货签。不是阿黛尔的亲属。'),
'马提亚斯':(None,'870年60岁人类男神父,温厚老年面孔、自然花白发,朴素旧教士长衣与水纹职物;855年45岁、873年63岁另分版。'),
'阿黛尔':(None,'870年28岁人类女性修女与治疗者,164厘米、宽额、直眉、深棕眼、栗色低发髻、灰白头巾、结实肩背;灰裙、象牙工作围裙、平底鞋,没有现代护士标志。'),
'罗德里克':(None,'870年43岁人类男性执事,174厘米、宽鼻厚下颌、后退灰棕短发、灰绿眼、普通偏壮;褐执事服、褪黑短披、黄铜水滴徽、补钱袋。'),
'塞维林':(None,'872年39岁人类男性巡察官,179厘米、窄肩、长方脸、浅灰眼、栗色贴头短发、右鬓小块灰发;蓝灰高领长袍、灰腰带、小银水滴别针,无眼罩或新增伤疤。'),
'尼诺':(None,'870年9岁人类男孩,普通孩子比例,朴素整洁的中世纪长袖衣裤和平底鞋,抱自己小木船;开篇没有脚伤,童真有自主性。'),
'莉娅':(None,'870年12岁人类女孩,朴素完整的中世纪长袖衣裙、实用鞋、自然头发,正常孩子比例,认真照顾弟弟,不作成人化或性感造型。'),
'奥坦':(None,'870年57岁人类男木匠,成熟有力量的普通匠人、木工围裙、支护与木槌工具;右手小指第一节缺失,劳动者有尊严。'),
'贝伦':(None,'870年38岁人类男性仓工,普通健壮体格、朴素搬粮工作服、麻绳与粮尘细节,非阴险反派。'),
'阿尔维斯':(None,'874年510岁成年男性墨晶领主,近人形、耳后颈侧离散暗色晶纹,传统深色正式贵族服、星盘工艺细节;无通用恶魔角翼尾。'),
'格兰':(None,'874年46岁成年男性原野兽人领主,宽肩强健、圆钝耳、局部斑纹,无动物长吻和常驻尾;实用皮具与领主战袍。'),
'米蕾娜':(None,'874年1280岁成年女性吸血鬼领主,优雅成熟、低光感知的眼睛、暗红黑色古堡正式衣装、端庄高领,尖犬齿隐约可见,活着的族群而非腐尸。'),
'雷加尔':(None,'874年395岁成年男性龙人领主,角、耐热鳞、尾、强健体格,矿城与灰烬色盔袍,务实威严,不变成完整巨龙。'),
'塞蕾娅':(None,'874年270岁成年魅魔女性领主,端庄外交旅装、小角、敏锐有判断的表情,衣着完整实用;不是性感猎物或靠性行为生存。'),
'萨尔克':(None,'874年65岁成年男性蜥蜴人领主,成年的鳞肤、蜥蜴头面与平衡尾,湿地水路与药草用途的朴素领主衣装,不是瑟恩的另一身份。'),
'乌尔加':(None,'874年58岁青年石脊支男性巨魔领主,高大强壮、石脊身体特征、重型实用衣装;年轻巨魔不是数百岁的老兽王。'),
'奈芙拉':(None,'874年86岁成年高智慧虫族女王,成熟期、有独立文明尊严的非人类节肢生理与甲壳,精密感知附肢、理性端庄,禁止人类美女加头饰替代虫族。'),
'女神':(None,'只制作教会石质圣像的写实道具形态,端庄垂手长衣女性石雕与胸前水纹圣徽、旧裂与真实石材;不生成活体女神本体、不演说话。'),
'婴儿埃利安':(None,'855年普通新生人类婴儿,全身完整包在干净柔软襁褓里,只露自然小脸,一张安稳呼吸的近景,成人手支撑在襁褓外;不是会说话的小成年人。'),
'前世男主':(None,'前世29岁普通中国男性化工操作工,正常劳动者体格、自然短发、普通工装与工作鞋,友善细心,不是研究院科学家或富豪。'),
'蕾可':(None,'874年28岁成年地精女粮运书记,灰绿肤、窄耳、棕短辫、右袖墨渍、朴素工作服。'),
'莉恩':(None,'874年112岁成年墨晶女性书记,深灰发银眼、藏蓝文书袍、少量暗晶纹,无角翼尾。'),
'纳姆':(None,'874年91岁成年矮人男性零件匠,铜棕卷须、厚皮围裙、右眉浅疤、坚实工匠体格。'),
'赫娅':(None,'874年72岁成年女性蜥蜴人水工,蓝绿鳞、黄眼、短蓑衣、刻痕水尺、平衡尾。'),
'卡恩':(None,'874年280岁成年男性龙人炉师,铁灰鳞、磨损短角、尾、赭红围裙,专业工匠。'),
'伊莲娜':(None,'874年45岁人类女性学院长,黑灰盘发、褐眼、靛蓝披肩、修补书袋,成熟务实。'),
'欧姆':(None,'874年37岁成年地精男性器具师,灰橄榄肤、棕眼、卷发、齿轮别针、朴素维护工具。'),
'希珂':(None,'874年14岁已成年的高智慧虫族侍从种,蓝灰甲、右前肢浅白纹、便携振动板,真实非人节肢身体;年龄不能按人类儿童处理,883后出场按年增长。'),
'玛伦':(None,'874年35岁人类男性未来档案见证,黑灰短发深棕眼、皮封册、左手旧烫痕、朴素行旅文书服。'),
'骷髅军首领':(None,'暂定候选的可活动骷髅首领,真实旧骨与实用军职甲衣、非血腥,不生长肉脸;造型候选不等于新增小说自然物种。')
}
def main():
identities=json.loads((VOICE/'音色身份索引.json').read_text(encoding='utf-8-sig'))
seen=set();assets=[]
cards='\n'.join(p.read_text(encoding='utf-8-sig') for p in (ROOT/'01_角色卡').glob('*.md'))
for x in identities:
canonical=x.get('实际配音身份键',x['配音身份键'])
if canonical in seen:continue
seen.add(canonical);name=x['角色'];special=SPECIAL.get(name)
aid=special[0] if special and special[0] else 'CHR-LIVE-'+hashlib.sha1(canonical.encode()).hexdigest()[:10].upper()+'-V01'
facts=special[1] if special else ''
matches=[] if re.match(r'^E\d{2}-\d{3}_',canonical) else [line for line in cards.splitlines() if name in line and not line.startswith('>')]
if not facts:facts='\n'.join(matches[:3])[:850]
profile=(VOICE/x['档案']).read_text(encoding='utf-8-sig')
if not facts:
facts='此人为剧本中的'+name+',独立场次身份为'+canonical+'。按其场景的职业、性别与语气进行选角;未定面貌是本次视觉提案,不增设正式年龄和生平。\n'+profile[:900]
special_image='婴儿' in name or name=='女神'
layout=('One coherent photorealistic image, show the specified subject completely and respectfully.' if special_image else 'A cinematic live-action fictional casting reference board, one large FRONT full-body including footwear, one consistent SIDE full-body view, one BACK full-body view, and one neutral head portrait. Exactly the same one character repeated across separate clearly divided panels, consistent face, age, anatomy and clothing. Warm gray neutral studio backdrop, soft daylight, natural skin/fur/scales and cloth materials. No text, logos or watermark. No resemblance request to any real actor.')
prompt=layout+'\n角色设定:'+facts+'\n写实奇幻影视质感,不用动漫线条、塑料皮肤或游戏界面。保持本族生理,不给人类或晶纹族随意加角翼尾;未成年角色穿完整端庄实用的衣服,采用自然年龄比例与日常姿态。'
assets.append(dict(id=aid,name=name,kind='character',identity=canonical,aliases=[y['配音身份键'] for y in identities if y.get('实际配音身份键',y['配音身份键'])==canonical],facts=facts,prompt=prompt,path='02_资产/角色图/'+aid+'-REVIEW.png',source_profile=x['档案'],status='待生成'))
for key,name,facts in SCENES:
aid='ENV-LIVE-'+key+'-V01'
prompt='Photorealistic live-action fantasy environment reference, widescreen 16:9, physically believable scale, inviting detailed world with natural materials, rich restrained color, convincing architecture and geography. '+facts+'\n场景主视觉,不是多个不相连地点的拼图。必要时少量远处无明确面貌人物提供尺度,主体为场景;没有文字、字幕、水印、现代界面。晴日或有明确自然光源的画面,贫困也保留生活之美。'
assets.append(dict(id=aid,name=name,kind='environment',facts=facts,prompt=prompt,path='02_资产/场景图/'+aid+'-REVIEW.png',status='待生成'))
extras=[
('POPE','塞勒斯七世','874年71岁人类男性教皇,正式教会长袍、端庄水纹圣徽、年长有判断的面孔,非现代天主教具体人物肖像。'),
('PRESIDING','宗教法庭主审','873年灰泉借厅审理的成年主审,理性专业的神职法庭衣装,与塞维林和记录员为不同人;面貌为选角提案,年龄未定。'),
('NURSE-MOTHER','855乳母','855年成年普通人类女性乳母,完整端庄的中世纪日常长衣,抱着完全包裹在襁褓里的孩子,干净自然,不展示哺乳或裸露。年龄面貌为选角提案。'),
('NORL-FATHER','诺尔父亲','年迈男性狼裔兽族,明确狼吻、狼耳、灰白毛发,朴素温暖居家长衣、坐姿,家人需要轮班照料;实际年龄未定。'),
('SERN-PARTNER','瑟恩伴侣','874年45岁成年女性蜥蜴人,河沼支鳞肤与平衡尾、完整实用家庭与农作衣装,独立有生活经验,不是萨尔克。'),
('SERN-CHILD','瑟恩幼体','874年5岁蜥蜴人幼体,明确蜥蜴头面、鳞与平衡尾,正常本族幼体比例、全身完整日常衣物和实用鞋,安稳日常姿势,不成人化。'),
('FOREST-GUARDIAN','守林兽','876精灵森林的大型四足守林生物,非智慧魔族、非人形角色。能负担守护与带路功能的真实强健动物骨架、粗毛与植物环境适应,眼神有警觉;常态中性全身侧正构造参考,不血腥不腐烂,不画成完整巨龙。具体形态为本轮待审视觉提案。'),
('TRAINER','早期随队医疗带教','870年陪同13岁艾达受训寻伴的成年专业治疗者,完整朴素中世纪治疗旅行装、药具和扎实可靠的体格,不代替阿黛尔;面貌年龄为选角提案。'),
('AIWEN','艾纹','870年灰泉镇南边租菜地的成人人类女性,独立耕作,有自己的篱笆、菜篮与补过的布。朴素完整长袖农作衣裙、平底鞋、宽沿草帽拿在手中,结实普通劳动者体格、直接有主见的神情。正式年龄与具体脸型未定,面貌为选角提案。'),
('SELENE','塞蕾涅','维奥拉母亲,314年出生的成年紫晶族女性王庭巡回治疗师。此图为855年541岁在世时的身份参考;856年542岁去世,不出现在874年当下。近人形、耳后颈侧细小紫晶纹、完整高领巡诊长袍和药具包,无领主冠、无角翼尾。成熟可靠,脸型发色为选角提案。'),
('ALTER','奥尔特','维奥拉父亲,874年580岁成年紫晶族男性,已退休的档案院低阶书记,普通深灰长衣、书册与修补布袋,近人形,耳后颈侧细小紫晶纹,无角翼尾,不是隐藏领主,不佩王冠或军职。沉静温厚,面貌发色为选角提案。'),
('ISERA-FATHER','伊瑟拉父亲','874年1180岁成熟成年男性精灵,季节议会主持者,尖耳、真实自然的人形骨架,完整朴素而讲究的森林议事长衣,修补过的深绿披肩。长寿种族的资深成年人,不按1180人类岁数画成干尸。姓名与面貌未定,独立于长老维兰。'),
('ISERA-MOTHER','伊瑟拉母亲','874年1140岁成熟成年女性精灵,种子档案师,尖耳,完整实用的森林工作长衣、装种子的小木匣与档案袋,温和但有判断。长寿种族的资深成年人。姓名与具体面貌未定,不代替伊瑟拉本人。'),
('SERIN','瑟琳·瓦伦丁','米蕾娜成年吸血鬼女儿,114年出生,774年660岁时自愿离开,此图取774年历史身份参考。成年档案保管人,端庄高领深灰褐旅行长衣、皮封档案袋,真实活体人形与含蓄犬齿细节。不是幼童,不预设被拘禁、死亡或874年重逢,具体面貌为选角提案。'),
('GARETH','加雷斯·沃尔坎','862年战死之前的前任魔王,赤牙领出身的成熟成年原野兽人男性。强健宽肩、圆钝耳、局部斑纹,实用旧式统帅护甲和厚披风,无动物长吻或常驻尾。与格兰属于同氏族但不设为父子;年龄与具体面貌未定,历史选角提案,不画成874年在世人物。'),
('PREVIOUS-MOTHER','前世男主母亲','前世普通中国成年母亲,儿子是29岁化工厂操作工;家常完整长袖衣服、普通买菜布袋,日常温和自然的虚构面孔。城市家庭生活造型,人物年龄和细节为选角提案,正式正文只通过手机消息出现,不增加在世相见剧情。')]
for key,name,facts in extras:
aid='CHR-LIVE-'+key+'-V01'
prompt='Photorealistic live-action fantasy character reference, one large complete full-body front view and consistent side/back/face details in separate panels. Natural realistic anatomy, material and light, warm gray neutral background, no words, no logo. '+facts
assets.append(dict(id=aid,name=name,kind='character',identity=key,facts=facts,prompt=prompt,path='02_资产/角色图/'+aid+'-REVIEW.png',status='待生成'))
overrides_path=LIVE/'02_资产/身份校准.json'
overrides=json.loads(overrides_path.read_text(encoding='utf8')) if overrides_path.exists() else {}
assets=[a for a in assets if not overrides.get(a['id'],{}).get('merged_into')]
for asset in assets:
correction=overrides.get(asset['id'],{})
if correction.get('name'):asset['name']=correction['name']
if correction.get('facts'):asset['facts']=correction['facts']
if correction.get('additional_aliases'):asset['aliases']=list(dict.fromkeys(asset.get('aliases',[])+correction['additional_aliases']))
receipt=LIVE/'02_资产/生成回执'/(asset['id']+'.json')
if receipt.exists():
r=json.loads(receipt.read_text(encoding='utf8'));asset['prompt']=r['prompt'];asset['path']=r['path'];asset['status']='REVIEW'
registry=LIVE/'02_资产/全部资产任务.json';registry.parent.mkdir(parents=True,exist_ok=True)
registry.write_text(json.dumps(assets,ensure_ascii=False,indent=2)+'\n',encoding='utf8')
for a in assets:
p=LIVE/'04_生成与后期/逐项出图提示词'/(a['id']+'.txt');p.parent.mkdir(parents=True,exist_ok=True);p.write_text(a['prompt']+'\n',encoding='utf8')
print('角色独立身份',sum(a['kind']=='character' for a in assets),'场景主视觉',len(SCENES),'合计',len(assets))
if __name__=='__main__':main()