# Tools Repeatable import/export and processing helpers. Anything that was done twice by hand belongs here. ## Conventions - One script, one job. No interactive prompts; every input is an argument. - Each script documents its input format, output format, and the exact tool version it was tested with. - Blender scripts run headless (`blender --background --python`), so they can be re-run for a regression check. - No credentials, no absolute machine paths, no writes outside the project by default. - A script that produces game content logs what it produced, so `Game/Content` can be audited against it. ## Helpers - `render_screenshots.sh` — visual-review pipeline: rebuilds `/Game/Test/ReviewMap` from current content (`ue_build_review_map.py`), runs the game on it in `-game` mode, lets `AGigLineShotActor` (`Game/GigLine/Source/GigLine/`) capture the fixed camera list, and copies the PNGs into the gitignored `Screenshots/`. See `Screenshots/README.md`. - `check-lfs.sh` — repository guard: fails if `git-lfs` or the `lfs` filter is missing, or if an LFS-tracked file was committed as a plain blob. - Geographic tools and their shared helpers live in `Geo/tools/` (see `Geo/README.md`). - Blender-side builders that turn geo data into meshes live beside their output: `Art/blender/terrain/terrain_from_dem.py`, `Art/blender/street/street_mesh.py`, `Art/blender/site/site_assembly.py`, `Art/blender/blockout/blosm_blockout.py`. They import their helpers from `Geo/tools/osm_common.py`, which is also the only place that converts metres to Unreal centimetres. - `sibling_asset_audit.py` — reads the sibling project's prop library straight from GLB headers and writes `Art/props/reuse-manifest.json`; copies nothing. - `page_image_fetch.py` — resolves a web page's `og:image` and downloads it, with page URL and hash in a local sidecar. Works for Flickr, Commons file pages, and most photo blogs. - `commons_fetch.py` — Wikimedia Commons reference fetcher. Search, exact `File:` titles, or a whole Commons category (`--category`), thumbnails, provenance `sidecar.json` per folder. Wikimedia throttles `upload.wikimedia.org` (HTTP 429), so keep batches to six or fewer files and pass `--delay 3`; a throttled file is skipped and recorded rather than aborting the run. Writes only into the gitignored `Art/reference/`; reference images are never committed. ## Planned helpers - Blender export preset runner (named presets, metric scale assertion) - OSM extract fetch and manifest writer (records date, bounds, checksum) - QGIS processing steps as batch scripts, so the geo cleanup is reproducible rather than GUI-only