"""Blender batch entry: generate all 59 assets, or select an ID/role. blender --background --factory-startup --python generate_all.py -- --id g01 blender --background --factory-startup --python generate_all.py -- --all """ import argparse from pathlib import Path import sys DIRECTORY = Path(__file__).resolve().parent sys.path.insert(0, str(DIRECTORY)) from catalog import specs from pipeline import build_one, write_manifest def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--all', action='store_true') parser.add_argument('--id', action='append', default=[]) parser.add_argument('--role') parser.add_argument('--faction') parser.add_argument('--export-dir') parser.add_argument('--blend-dir') args = parser.parse_args(sys.argv[sys.argv.index('--') + 1:] if '--' in sys.argv else []) selected = [s for s in specs() if (not args.id or s['id'] in args.id) and (not args.role or s['role'] == args.role) and (not args.faction or s['faction'] == args.faction)] known = {s['id'] for s in specs()} if set(args.id) - known or not selected: raise ValueError('Unknown ID/role selection') records = [] for spec in selected: records.append(build_one(spec['id'], export_dir=args.export_dir, blend_dir=args.blend_dir, keep_scene=False)) if len(selected) == len(specs()): write_manifest(records) print(f'PHASE4_EXPORT_PASS: {len(selected)} models') if __name__ == '__main__': main()