saumwacht-godot/assets-source/phase4/blender/generate_all.py
Martin Stickelbroeck c2b447610c Baseline: Saumwacht 0.15.0 (Phase 20A) vor dem Umbau zu Champions of Luneraria
Unveränderter Ausgangsstand inklusive Masterprompt und Konzeptbildern
unter assets/. .godot/ und docs/screenshots/ bleiben laut .gitignore
unversioniert; letztere sind unter ../backups gesichert.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 20:00:36 +02:00

40 lines
1.5 KiB
Python

"""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()