"""将内置图像工具的结果复制进项目,并逐项保存生成回执。""" 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))