A premium, open-source desktop application for generating beautiful city map posters. Built with Wails (Go + React) for a lightweight, native Windows experience.
Made with β€οΈ by msamuslim101
- Global Coverage: Generate high-resolution map posters for any city in the world
- 10 Premium Themes: Noir, Blueprint, Sunset, Midnight Blue, Ocean, Forest, Terracotta, Copper, Japanese Ink, Neon Cyberpunk
- Customizable Overlays: Toggle city name, country name, and coordinates
- Adjustable Map Radius: 5km - 30km for perfect framing
- Multiple Print Sizes: 18Γ24", 24Γ36", 12Γ16", A3, A2
- Portrait & Landscape: Orientation support
- Native Experience: Lightweight (~15MB app), Low RAM (~80MB idle)
- Download the latest release from Releases
- Extract the ZIP file
- Run
MapToPoster.exe
Folder Structure (Required):
MapToPoster/
βββ MapToPoster.exe β Run this!
βββ python/
βββ server.exe β Backend (DO NOT DELETE)
β οΈ Important: Keep both files together. The app won't work withoutpython/server.exe.
- Windows 10/11 (64-bit)
- ~200MB disk space
- Internet connection (for downloading map data)
This project is a desktop GUI wrapper for originalankur/maptoposter.
| Aspect | Detail |
|---|---|
| Core Engine | originalankur/maptoposter |
| Snapshot Version | January 18, 2026 |
| What I Added | Windows desktop GUI, React UI, FastAPI server wrapper, one-click installer |
| License | MIT (same as original) |
π‘ All map generation logic belongs to the original project. I only added the GUI wrapper and bundling.
- Custom city display name (
--nameparameter support) - Dynamic font sizing for long city names
- Custom color picker for themes
- Live preview while adjusting settings
- Map drag-to-pan for precise positioning
- Zoom controls on map preview
- Progress bar during generation
- History/Gallery of generated posters
- Aspect ratio options (Instagram Stories 9:16, A4 print, etc.)
- Batch generation (multiple cities at once)
- Vector export (SVG/PDF) for print shops
- Custom text labels (beyond city/country name)
- Water-only mode (for coastal cities)
- Road hierarchy customization
- Cache management (clear/view cached cities)
- New themes from upstream
- macOS support (Wails supports it!)
- Linux support
- Go 1.21+ (download)
- Node.js 18+ (download)
- Python 3.11+ (download)
- Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest
# 1. Clone the repo
git clone https://github.com/msamuslim101/maptopostergui.git
cd MapToPoster
# 2. Build Python backend
cd backend
python -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements.txt
pyinstaller server.spec
Copy-Item "dist\server.exe" "..\wails-app\python\server.exe"
# 3. Run in dev mode
cd ..\wails-app
wails devcd wails-app
wails build
# Output: build/bin/MapToPoster.exe
# Copy python/server.exe to build/bin/python/server.exeMapToPoster/
βββ wails-app/ # π Wails Desktop App
β βββ app.go # Go backend + Python sidecar management
β βββ frontend/ # React UI (TypeScript + Tailwind)
β βββ python/ # Bundled server.exe
βββ backend/ # Python FastAPI server
β βββ server.py # REST API for map generation
β βββ server.spec # PyInstaller config
βββ maptoposter-main/ # Core engine (osmnx + matplotlib)
βββ assets/ # Screenshots and media
Tech Stack:
- Frontend: React 18 + TypeScript + Tailwind CSS
- Desktop: Wails v2 (Go + WebView2)
- Backend: FastAPI + OSMnx + Matplotlib
- Bundling: PyInstaller (Python) + Wails CLI (Go)
| Data Type | Location |
|---|---|
| Generated Posters | Temporary folder (until you save) |
| OSMnx Map Cache | %LOCALAPPDATA%\osmnx\ |
| App Settings | Not yet implemented |
π‘ Tip: The OSMnx cache persists between sessions. Generating the same city again will be much faster!
- Schema warning in IDE (
Unable to load schema from wails.io) - Safe to ignore, doesn't affect builds - First-time generation for a new city takes 30-60 seconds (downloading map data)
MIT License - Free for personal and commercial use.
| Component | Author | License |
|---|---|---|
| Core Map Engine | Ankur Gupta | MIT |
| Desktop GUI Wrapper | msamuslim101 | MIT |
See LICENSE for full text.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repo
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
