Install
openclaw skills install historical-mapGenerate beautiful vintage-style historical maps from GeoJSON data. Supports multiple projections, color palettes, timelines, compass roses, parchment overla...
openclaw skills install historical-mapGenerate beautiful vintage-style historical maps from GeoJSON data.
# Install dependencies
pip install geopandas matplotlib numpy Pillow pyproj shapely
# Download historical GeoJSON data
git clone https://github.com/aourednik/historical-basemaps.git
# Copy world_YYYY.geojson files to ./data/
# Generate a map
python generate.py --year 1914 --region europe --output europe_1914.png
Commonly used years from historical-basemaps:
world_bc3000.geojson, world_bc1500.geojson, world_100.geojson
world_500.geojson, world_1000.geojson, world_1200.geojson
world_1400.geojson, world_1492.geojson, world_1600.geojson
world_1700.geojson, world_1783.geojson, world_1815.geojson
world_1880.geojson, world_1900.geojson, world_1914.geojson
world_1920.geojson, world_1930.geojson, world_1938.geojson
world_1945.geojson, world_1960.geojson, world_2000.geojson
python generate.py --year 1914 --region europe --output europe_1914.png
python generate.py --year 1600 --region world --projection mollweide --palette dark --output world_1600.png
python generate.py --year 1400 --region china --palette pastel \
--title "MING DYNASTY" --title-cn "明朝疆域" --output ming.png
python generate.py --year 1815 --region 18,34,32,48 --output balkans_1815.png
Create my_events.json:
[
{"year": "1789", "label": "Revolution", "cn": "法国大革命", "color": "#4169E1"},
{"year": "1804", "label": "Empire", "cn": "拿破仑称帝", "color": "#2E5E2E"},
{"year": "1815", "label": "Fall", "cn": "滑铁卢", "color": "#8B0000"}
]
python generate.py --year 1815 --events my_events.json --output napoleon.png
python generate.py --year 1945 --region world \
--title "POST-WAR WORLD" --title-cn "二战后的世界" \
--palette vintage --output postwar.png
| Parameter | Default | Description |
|---|---|---|
--year | required | Historical year (must match a GeoJSON file) |
--region | europe | Region preset or lon_min,lat_min,lon_max,lat_max |
--projection | laea | laea, lcc, mollweide, platecarree |
--palette | vintage | vintage, pastel, dark, satellite |
--title | auto | Main title (Latin/English) |
--title-cn | auto | Chinese subtitle |
--data | auto-detect | Path to GeoJSON file |
--basemap | none | Path to satellite basemap image |
--parchment | none | Path to parchment texture image |
--events | auto-preset | Path to events JSON file |
--dpi | 300 | Output resolution |
--no-timeline | false | Disable bottom timeline |
--no-compass | false | Disable compass rose |
--no-postprocess | false | Skip vignette/noise effects |
--output | historical_map.png | Output file path |
| Key | Coverage |
|---|---|
europe | Full European continent |
balkans | Balkan Peninsula |
world | Global view |
asia | Asian continent |
china | China and surroundings |
mediterranean | Mediterranean basin |
middle_east | Middle East |
americas | North + South America |
HOI4-inspired desaturated military colors. Ocean: dark teal. Perfect for war maps.
Light, soft colors on off-white background. Great for educational content.
Deep navy background with gold accents. Dramatic, cinematic feel.
Modern cartography style with clean lines. Professional and neutral.
from generate import HistoricalMapGenerator
gen = HistoricalMapGenerator(
data_path='data/world_1914.geojson',
basemap_path='textures/satellite.jpg',
parchment_path='textures/parchment.jpg',
)
gen.generate(
year=1914,
region='europe',
projection='laea',
title='EUROPA ANNO DOMINI MCMXIV',
title_cn='第一次世界大战前夜的欧洲',
color_palette='vintage',
dpi=300,
output_path='my_map.png',
)
historical-basemaps by @aourednik. 50+ GeoJSON time slices covering 10,000 BC to 2010 AD.
Note: Border precision varies. The BORDERPRECISION field indicates accuracy (1=high, 3=approximate). Some regions (especially Balkans) may have minor gaps between neighboring territories. For publication-quality maps, consider manually editing the GeoJSON or using commercial data.
MIT
Developed by Lumielle / OpenClaw Agent Data: historical-basemaps (CC BY 4.0)