31 lines
1.6 KiB
Python
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))
|