mrkeyoor.com_
Tue 01 Sept 17:40 UTC
Dataevaluationupdated 26 Aug 2026

prettymaps review

Prettymaps is a Python library that turns OpenStreetMap data into stylized map images. Give it a place name, coordinates, or a geographic boundary, then adjust the map through presets, layer queries, colors, and normal Matplotlib objects.

+107stars / 7d
Verdict

Our Prettymaps run installed 148 packages and used 1,913 MB, then built in 6 seconds and passed all 9 collected tests. That result supports trying it for inspected, one-off map artwork, especially when its presets and exposed GeoDataFrames save you from assembling the plotting stack yourself. Do not make it an unattended rendering dependency until you have handled Overpass failures and resolved the AGPL-3.0 versus MIT metadata conflict for your use.

We ran it

Lab card: what happened when we ran prettymapsScreenshot of prettymaps (prettymaps.streamlit.app)
Install✓ · 76s148 packages · 1913 MB
Build✓ · 6s
Tests✓ · 36s9 passed · 0 failed of 9 (pytest)
Known vulns0(pip-audit)
Repo53 files~3,529 lines of source · 23 MB · 3 CI workflows · tests dir

Answers from our run

Does prettymaps build from source?

Dependencies installed in 76 seconds (148 packages), and the build succeeded in 6 seconds. We cloned commit 02f8587 into a clean Debian container with 3 CPUs and no project-specific setup.

Do prettymaps's tests pass?

Yes: 9 of 9 passed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does prettymaps have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use prettymaps?

Unattended render services that need each location to finish predictably: map creation calls OpenStreetMap services, and open issue 154 describes partial Overpass responses ending in a KeyError.

What are the alternatives to prettymaps?

OSMnx, GeoPandas, Folium. Our Prettymaps run installed 148 packages and used 1,913 MB, then built in 6 seconds and passed all 9 collected tests.

Setup3/576-second install, but 148 packages consume 1,913 MB
Docs4/5Strong illustrated tutorial; Python and license metadata conflict
Community3/5July source push and August issue activity, with open fetch bugs
Maturity3/5v1.4.2 and passing tests, but remote-data errors need care

Discussed on

  1. hnPrettymaps: Small Python library to draw customized maps from OpenStreetMap data982 points
  2. hnPrettymaps: A minimal Python library to draw customized maps from OpenStreetMap5 points

Who it’s for

Python users making map posters, route keepsakes, editorial illustrations, or generative art from real places.
Designers who want an art-oriented layer above OSMnx, GeoPandas, Shapely, and Matplotlib.
Pen-plotter owners who need SVG output and reusable drawing presets.
Developers willing to inspect the returned GeoDataFrames when local map data needs correction.

Who it’s NOT for

Unattended render services that need each location to finish predictably: map creation calls OpenStreetMap services, and open issue 154 describes partial Overpass responses ending in a KeyError.
Teams that need useful fetch errors without modifying the code: issue 159 identifies broad exception handlers that replace failures with empty data.
Proprietary products whose counsel cannot accept AGPL-3.0 duties: the README and LICENSE use AGPL-3.0, while the measured commit's setup.py incorrectly says MIT.
Python 3.11 users following the README badge: setup.py at commit 02f8587 requires Python 3.12 or newer.
Cartographers who need labels, print-layout controls, and manual geographic repair in one application: Prettymaps returns code-level plotting and data objects, not a desktop GIS editor.

Setup reality

Our sandbox install succeeded in 76 seconds, adding 148 packages and occupying 1,913 MB. The build passed in 6 seconds. Pytest finished in 36 seconds with all 9 collected tests passing, and pip-audit found 0 known vulnerabilities.

Basic use needs Python 3.12 at the measured commit and a network path to OpenStreetMap services. No API credential is documented for the normal plotting route. The Streamlit front end runs from the cloned repository, while Colab users are told to restart the runtime after installation.

The checkout has 3 CI workflow files, a tests directory, and no Dockerfile. Rendering depends on remote geocoding and Overpass responses; open issues report empty or partial results becoming unclear downstream errors. The installed stack also includes raster, image, notebook, web-app, and plotter packages even when a job only needs a basic street map.

Prettymaps v1.4.2 turns OSM layers into artwork

Prettymaps v1.4.2 gives Python users a short route from a place name to a stylized static map. prettymaps.plot() accepts an address, latitude and longitude, a GeoDataFrame boundary, or a GPX/KML track. It obtains OpenStreetMap geometry, projects it, and draws the chosen layers with Matplotlib. Buildings can use a color palette while streets, water, parks, and boundaries receive separate line, fill, opacity, and hatch settings.

The useful part is what comes back. A Plot object exposes the figure, axes, background, keypoints, and GeoDataFrames for each layer. You can begin with 1 of the bundled JSON presets, inspect a building record, add a Matplotlib title, or apply a postprocessing function before drawing. The tutorial also covers mosaics, several locations on one canvas, hillshade, route overlays, and a Vsketch mode for pen-plotter SVG output.

What happened when we ran it

Our sandbox installed Prettymaps in 76 seconds, adding 148 Python packages and using 1,913 MB on disk. The build completed in 6 seconds. Pytest then ran for 36 seconds and reported 9 passed with 0 failures out of 9. Pip-audit found 0 known vulnerabilities in the installed environment. These figures come from commit 02f8587 in a fresh Debian container with 3 CPUs and 8 GB of RAM.

The repository itself was much smaller than its environment: 53 files, about 3,529 source lines, and a 23 MB checkout. We found 3 CI workflow files, no Dockerfile, and a tests directory. A passing build and 9 green tests make the checked-out code easy to trial. They do not measure whether a particular city renders completely, because the collected tests mock much of the expensive map-fetching and drawing work.

The 1,913 MB environment buys a one-call interface

The 148-package install reflects how much Prettymaps assembles for you. Its requirements include OSMnx, GeoPandas, Shapely, Rasterio, Rioxarray, OpenCV, scikit-image, scikit-learn, Vsketch, Streamlit, and Marimo. That bundle supports vector geometry, raster elevation, a browser front end, tutorials, and physical plotting. A script that only draws streets still receives the wider stack, so an isolated environment and a 2 GB disk allowance are sensible starting points.

The README's pip install prettymaps instruction is accurate for the happy path. commit 02f8587 declares Python 3.12 or newer in setup.py, although the README badge says Python 3.11+. Colab uses a source install and requires a runtime restart. The Streamlit interface must run from a repository checkout with streamlit run app.py; it lets users choose a preset, layers, page size, palette, and PNG or SVG download without writing a full plotting script.

OpenStreetMap availability decides whether a render finishes

Prettymaps v1.4.2 gets its geography through OSMnx, so the first render needs working geocoding and Overpass access. Open issue 150 contains a connection-refused trace after the Overpass endpoint exhausted its retries. That report concerns one user's connection and does not prove a general outage. It does show why a successful 76-second package install is separate from a dependable rendering service: live data retrieval remains outside the repository.

Error handling makes that dependency harder to operate. Issue 154 reports that a partial or empty response can leave out the highway column and later crash drawing with a KeyError. Issue 159 points to exception handlers in fetch.py that replace fetch errors with empty GeoDataFrames without logging the original problem. Both reports were still open after activity on August 23, 2026. For commissioned work, render early, keep the source revision fixed, and compare the image with OpenStreetMap before delivery.

AGPL-3.0 governs the code despite the MIT setup label

The README and LICENSE identify Prettymaps as AGPL-3.0 and ask users to keep the printed credit for the project and OpenStreetMap. The author also asks people not to sell NFTs made with the project, while plainly acknowledging that this request is not legally enforceable. Commercial use is allowed under the stated license, but distribution and network-service obligations deserve review before Prettymaps becomes part of a proprietary product.

commit 02f8587 contains a concrete packaging mistake: setup.py labels the package as MIT License, conflicting with the AGPL-3.0 README and license file. Pull request 152 proposed correcting that metadata and was closed on August 7, 2026. Do not treat the setup label as permission. Use the repository license text as the starting point and get legal advice when source-disclosure duties could affect a product.

July source work and August reports show an active queue

GitHub recorded the last source push on July 30, 2026, while issues and pull requests were still being updated on August 23. The repository had 14,080 stars and 22 open issues and pull requests when fetched. The latest release was v1.4.2, published March 3, 2025, so main-branch additions such as GPX/KML handling arrived after the latest tagged package release. Pin the release or commit you tested instead of mixing examples from both.

Prettymaps earns its place as an art-oriented convenience layer, particularly when you want presets plus direct access to the underlying GeoDataFrames. Our 9-of-9 test result lowers the cost of an experiment, and the 1,913 MB footprint sets an honest boundary around deployment. Choose OSMnx for network analysis, GeoPandas for a custom data pipeline, or Folium for an interactive browser map. Choose Prettymaps when the deliverable is a static image you will inspect.

Alternatives

ProjectWhat it isPick it when
OSMnxA Python toolkit for downloading, analyzing, and plotting OpenStreetMap street networks and features.pick this instead when network analysis and direct control over OpenStreetMap queries matter more than art presets.
GeoPandasA general Python library for working with geographic tables and vector geometry.pick this instead when you already have the data and need custom geospatial processing before presentation.
FoliumA Python interface for building interactive Leaflet maps in notebooks and web pages.pick this instead when pan, zoom, markers, and browser interaction matter more than a static art print.

What people are saying

  1. [github-trending] marceloprates/prettymaps

Sources

  1. Prettymaps README
  2. Prettymaps tutorial
  3. Prettymaps v1.4.2 release
  4. Issue 154: partial Overpass data crash
  5. Issue 159: swallowed fetch errors
  6. Commit 02f8587 measured by MrKeyoor

More data reviews

turso · TrackersListCollection · dash · getcontact-cli · awesome-zhuiju-free · iggy · the whole board →