Files
the-silent-gods-hearthfire/tools/save-live-asset.py
T

31 lines
1.6 KiB
Python

"""将内置图像工具的结果复制进项目,并逐项保存生成回执。"""
import argparse
import json
from pathlib import Path
import shutil
import struct
ROOT=Path(__file__).resolve().parent.parent
LIVE=ROOT/'08_真人AI短剧'
parser=argparse.ArgumentParser()
parser.add_argument('--id',required=True)
parser.add_argument('--source',required=True)
args=parser.parse_args()
assets=json.loads((LIVE/'02_资产/全部资产任务.json').read_text(encoding='utf8'))
asset=next(a for a in assets if a['id']==args.id)
src=Path(args.source).resolve(strict=True)
dest=(LIVE/asset['path']).resolve()
if not dest.is_relative_to(LIVE.resolve()):raise ValueError('Destination outside live workspace')
dest.parent.mkdir(parents=True,exist_ok=True)
if dest.exists() and dest.read_bytes()!=src.read_bytes():raise FileExistsError(dest)
shutil.copy2(src,dest)
data=dest.read_bytes()
size=list(struct.unpack('>II',data[16:24])) if data[:8]==b'\x89PNG\r\n\x1a\n' else None
prompt_file=LIVE/'04_生成与后期/逐项出图提示词'/(asset['id']+'.txt')
actual_prompt=prompt_file.read_text(encoding='utf8').rstrip() if prompt_file.exists() else asset['prompt']
receipt={'id':asset['id'],'name':asset['name'],'kind':asset['kind'],'path':asset['path'],'source':str(src),'size':size,'status':'REVIEW','method':'built-in image_gen','prompt':actual_prompt,'approved':False}
out=LIVE/'02_资产/生成回执'/(asset['id']+'.json');out.parent.mkdir(parents=True,exist_ok=True)
out.write_text(json.dumps(receipt,ensure_ascii=False,indent=2)+'\n',encoding='utf8')
print(json.dumps({'id':asset['id'],'path':str(dest),'size':size},ensure_ascii=False))