Files
gig-line/Tools
zwitschi d4af4af90f hero: make the portals real recesses and land the facade on Z 0
The portal detail shot failed for a modelling reason, not a camera reason: the
doors were 0.1 m panels on a solid plinth, so they read as shading. The plinth is
now four piers plus a lintel band, with a 1.2 m reveal, stone jambs and lintels
standing 0.10 m proud and three mullions per opening. review-06 frames them from
8 m at eye height.

Two defects fixed while doing it: the jamb boxes hung 0.15 m below the pavement,
so the facade imported with min Z -15 cm; and a rebuild run against a read-only
.blend silently skipped the save, which is why screenshots kept showing the old
geometry.
2026-11-07 12:46:00 +01:00
..

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