Thanks for your interest in improving geoblender. This project turns a place (via OpenStreetMap) into a procedural 3D city scene in Blender. Below is everything you need to get set up, run the tests, and extend the three main content systems.
You only need Python 3.9+ and requests. Two ways to install:
# Option A: editable install of the package
python3 -m pip install -e .
# Option B: just the one runtime dependency
python3 -m pip install requestsBlender is only required to render a scene. The "pure" modules (see conventions below) are importable and testable without Blender or a network connection.
python3 -m pytest tests/ -qEach test file adds scripts/ to sys.path, so the city* modules import as top-level
packages. New pure logic should ship with a matching test under tests/.
- 1 Blender unit = 1 meter. All geometry is authored in meters.
- Pure modules are named
city*.pyand live inscripts/(flat layout). A "pure" module must notimport bpyat the top level — it should be unit-testable without Blender or Overpass. If a function needsbpy, import it inside the function, or keep thebpy-touching code inblender_build.py. - Python 3.9 compatible. Avoid syntax/stdlib newer than 3.9.
- Spanish comments are fine.
- Keep the open-source procedural pipeline (OSM + PolyHaven) separate from the opt-in
Google 3D Tiles pipeline — see
docs/SOURCES_LICENSES.md.
- Open
scripts/citylandmarks.pyand add an entry to theLANDMARKStable (name, coordinates/match rule, and shape/size parameters). - The pure module decides which landmarks apply and what their parameters are; the
bpy-side builder inblender_build.pyturns those parameters into mesh. - Add a test in
tests/that asserts your new entry resolves with the expected parameters.
- Add the shape's descriptor/logic to
scripts/cityroofs.py(this is the pure part: given footprint + tags, decide roof type and its parameters). - Add a matching builder in
blender_build.pythat consumes those parameters and generates the roof geometry withbpy. - Cover the pure decision logic with a test under
tests/.
- Add the profile to
scripts/cityprofiles.py— a profile bundles the style parameters (heights, materials, roof tendencies, facade rules) for a class of buildings. - Wire it in where profiles are selected, and let
blender_build.pyread the profile parameters during the build. - Add a test under
tests/for the new profile's resolved parameters.
- Run
python3 -m pytest tests/ -qand make sure it is green. - Keep pure modules free of top-level
bpyimports. - If you added an external data source, document it in
docs/SOURCES_LICENSES.md.