SkillAgentSearch skills...

Maptoposter

Transform your favorite cities into beautiful, minimalist designs. MapToPoster lets you create and export visually striking map posters with code.

Install / Use

/learn @originalankur/Maptoposter
About this skill

Quality Score

0/100

Category

Design

Supported Platforms

Universal

README

City Map Poster Generator

Generate beautiful, minimalist map posters for any city in the world.

<img src="posters/singapore_neon_cyberpunk_20260118_153328.png" width="250"> <img src="posters/dubai_midnight_blue_20260118_140807.png" width="250">

Examples

| Country | City | Theme | Poster | |:------------:|:--------------:|:---------------:|:------:| | USA | San Francisco | sunset | <img src="posters/san_francisco_sunset_20260118_144726.png" width="250"> | | Spain | Barcelona | warm_beige | <img src="posters/barcelona_warm_beige_20260118_140048.png" width="250"> | | Italy | Venice | blueprint | <img src="posters/venice_blueprint_20260118_140505.png" width="250"> | | Japan | Tokyo | japanese_ink | <img src="posters/tokyo_japanese_ink_20260118_142446.png" width="250"> | | India | Mumbai | contrast_zones | <img src="posters/mumbai_contrast_zones_20260118_145843.png" width="250"> | | Morocco | Marrakech | terracotta | <img src="posters/marrakech_terracotta_20260118_143253.png" width="250"> | | Singapore | Singapore | neon_cyberpunk | <img src="posters/singapore_neon_cyberpunk_20260118_153328.png" width="250"> | | Australia | Melbourne | forest | <img src="posters/melbourne_forest_20260118_153446.png" width="250"> | | UAE | Dubai | midnight_blue | <img src="posters/dubai_midnight_blue_20260118_140807.png" width="250"> | | USA | Seattle | emerald | <img src="posters/seattle_emerald_20260124_162244.png" width="250"> |

Installation

With uv (Recommended)

Make sure uv is installed. Running the script by prepending uv run automatically creates and manages a virtual environment.

# First run will automatically install dependencies
uv run ./create_map_poster.py --city "Paris" --country "France"

# Or sync dependencies explicitly first (using locked versions)
uv sync --locked
uv run ./create_map_poster.py --city "Paris" --country "France"

With pip + venv

python -m venv .venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
pip install -r requirements.txt

Usage

Generate Poster

If you're using uv:

uv run ./create_map_poster.py --city <city> --country <country> [options]

Otherwise (pip + venv):

python create_map_poster.py --city <city> --country <country> [options]

Required Options

| Option | Short | Description | |--------|-------|-------------| | --city | -c | City name (used for geocoding) | | --country | -C | Country name (used for geocoding) |

Optional Flags

| Option | Short | Description | Default | |--------|-------|-------------|---------| | OPTIONAL: --latitude | -lat | Override latitude center point (use with --longitude) | | | OPTIONAL: --longitude | -long | Override longitude center point (use with --latitude) | | | OPTIONAL: --country-label | | Override country text displayed on poster | | | OPTIONAL: --theme | -t | Theme name | terracotta | | OPTIONAL: --distance | -d | Map radius in meters | 18000 | | OPTIONAL: --list-themes | | List all available themes | | | OPTIONAL: --all-themes | | Generate posters for all available themes | | | OPTIONAL: --width | -W | Image width in inches | 12 (max: 20) | | OPTIONAL: --height | -H | Image height in inches | 16 (max: 20) |

Multilingual Support - i18n

Display city and country names in your language with custom fonts from google fonts:

| Option | Short | Description | |--------|-------|-------------| | --display-city | -dc | Custom display name for city (e.g., "東京") | | --display-country | -dC | Custom display name for country (e.g., "日本") | | --font-family | | Google Fonts family name (e.g., "Noto Sans JP") |

Examples:

# Japanese
python create_map_poster.py -c "Tokyo" -C "Japan" -dc "東京" -dC "日本" --font-family "Noto Sans JP"

# Korean
python create_map_poster.py -c "Seoul" -C "South Korea" -dc "서울" -dC "대한민국" --font-family "Noto Sans KR"

# Arabic
python create_map_poster.py -c "Dubai" -C "UAE" -dc "دبي" -dC "الإمارات" --font-family "Cairo"

Note: Fonts are automatically downloaded from Google Fonts and cached locally in fonts/cache/.

Resolution Guide (300 DPI)

Use these values for -W and -H to target specific resolutions:

| Target | Resolution (px) | Inches (-W / -H) | |--------|-----------------|------------------| | Instagram Post | 1080 x 1080 | 3.6 x 3.6 | | Mobile Wallpaper | 1080 x 1920 | 3.6 x 6.4 | | HD Wallpaper | 1920 x 1080 | 6.4 x 3.6 | | 4K Wallpaper | 3840 x 2160 | 12.8 x 7.2 | | A4 Print | 2480 x 3508 | 8.3 x 11.7 |

Usage Examples

Basic Examples

# Simple usage with default theme
python create_map_poster.py -c "Paris" -C "France"

# With custom theme and distance
python create_map_poster.py -c "New York" -C "USA" -t noir -d 12000

Multilingual Examples (Non-Latin Scripts)

Display city names in their native scripts:

# Japanese
python create_map_poster.py -c "Tokyo" -C "Japan" -dc "東京" -dC "日本" --font-family "Noto Sans JP" -t japanese_ink

# Korean
python create_map_poster.py -c "Seoul" -C "South Korea" -dc "서울" -dC "대한민국" --font-family "Noto Sans KR" -t midnight_blue

# Thai
python create_map_poster.py -c "Bangkok" -C "Thailand" -dc "กรุงเทพมหานคร" -dC "ประเทศไทย" --font-family "Noto Sans Thai" -t sunset

# Arabic
python create_map_poster.py -c "Dubai" -C "UAE" -dc "دبي" -dC "الإمارات" --font-family "Cairo" -t terracotta

# Chinese (Simplified)
python create_map_poster.py -c "Beijing" -C "China" -dc "北京" -dC "中国" --font-family "Noto Sans SC"

# Khmer
python create_map_poster.py -c "Phnom Penh" -C "Cambodia" -dc "ភ្នំពេញ" -dC "កម្ពុជា" --font-family "Noto Sans Khmer"

Advanced Examples

# Iconic grid patterns
python create_map_poster.py -c "New York" -C "USA" -t noir -d 12000           # Manhattan grid
python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000   # Eixample district

# Waterfront & canals
python create_map_poster.py -c "Venice" -C "Italy" -t blueprint -d 4000       # Canal network
python create_map_poster.py -c "Amsterdam" -C "Netherlands" -t ocean -d 6000  # Concentric canals
python create_map_poster.py -c "Dubai" -C "UAE" -t midnight_blue -d 15000     # Palm & coastline

# Radial patterns
python create_map_poster.py -c "Paris" -C "France" -t pastel_dream -d 10000   # Haussmann boulevards
python create_map_poster.py -c "Moscow" -C "Russia" -t noir -d 12000          # Ring roads

# Organic old cities
python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink -d 15000    # Dense organic streets
python create_map_poster.py -c "Marrakech" -C "Morocco" -t terracotta -d 5000 # Medina maze
python create_map_poster.py -c "Rome" -C "Italy" -t warm_beige -d 8000        # Ancient layout

# Coastal cities
python create_map_poster.py -c "San Francisco" -C "USA" -t sunset -d 10000    # Peninsula grid
python create_map_poster.py -c "Sydney" -C "Australia" -t ocean -d 12000      # Harbor city
python create_map_poster.py -c "Mumbai" -C "India" -t contrast_zones -d 18000 # Coastal peninsula

# River cities
python create_map_poster.py -c "London" -C "UK" -t noir -d 15000              # Thames curves
python create_map_poster.py -c "Budapest" -C "Hungary" -t copper_patina -d 8000  # Danube split

# Override center coordinates
python create_map_poster.py --city "New York" --country "USA" -lat 40.776676 -long -73.971321 -t noir

# List available themes
python create_map_poster.py --list-themes

# Generate posters for every theme
python create_map_poster.py -c "Tokyo" -C "Japan" --all-themes

Distance Guide

| Distance | Best for | |----------|----------| | 4000-6000m | Small/dense cities (Venice, Amsterdam center) | | 8000-12000m | Medium cities, focused downtown (Paris, Barcelona) | | 15000-20000m | Large metros, full city view (Tokyo, Mumbai) |

Themes

17 themes available in themes/ directory:

| Theme | Style | |-------|-------| | gradient_roads | Smooth gradient shading | | contrast_zones | High contrast urban density | | noir | Pure black background, white roads | | midnight_blue | Navy background with gold roads | | blueprint | Architectural blueprint aesthetic | | neon_cyberpunk | Dark with electric pink/cyan | | warm_beige | Vintage sepia tones | | pastel_dream | Soft muted pastels | | japanese_ink | Minimalist ink wash style | | emerald | Lush dark green aesthetic | | forest | Deep greens and sage | | ocean | Blues and teals for coastal cities | | terracotta | Mediterranean warmth | | sunset | Warm oranges and pinks | | autumn | Seasonal burnt oranges and reds | | copper_patina | Oxidized copper aesthetic | | monochrome_blue | Single blue color family |

Output

Posters are saved to posters/ directory with format:

{city}_{theme}_{YYYYMMDD_HHMMSS}.png

Adding Custom Themes

Create a JSON file in themes/ directory:

{
  "name": "My Theme",
  "description": "Description of the theme",
  "bg": "#FFFFFF",
  "text": "#000000",
  "gradient_color": "#FFFFFF",
  "water": "#C0C0C0",
  "parks": "#F0F0F0",
  "road_motorway": "#0A0A0A",
  "road_primary": "#1A1A1A",
  "road_secondary": "#2A2A2A",
  "road_tertiary": "#3A3A3A",
  "road_residential": "#4A4A4A",
  "road_default": "#3A3A3A"
}

Project Structure

map_poster/
├── create_map_poster.py    # Main script
├── font_management.py      # Font loading and Google Fonts integration
├── themes/                 # Theme JSON files
├── fonts/                  # Font files
│   ├── Roboto-*.ttf        # Default Roboto fonts
│   └── cache/              # Downloaded Google Fonts (auto-generated)
├── posters/                # Generated posters
└── README.md

Hack

Related Skills

View on GitHub
GitHub Stars12.3k
CategoryDesign
Updated2h ago
Forks1.1k

Languages

Python

Security Score

100/100

Audited on Mar 21, 2026

No findings