Skip to content
← Back to Demos
Content & Design

Map Studio (formerly AI Maps)

Professional cartography workbench for custom map visualizations — themed maps, data overlays, historical periods, 3D perspective, and optional AI enhancement. Pick a place, style it your way, export static or (roadmapped) animated.

AI ImageCartographyContent CreationReporting
Share

Demo preview — limited to 3 uses per day. Sign up free for 1 use per tool per day + 15 bonus tokens, or try the full tool.

Like this demo? Get the full tool.

1 free use per day. No credit card required.

Use the Tool

Overview

Turn any place on Earth into a themed map image — for blog posts, reports, social content, presentations, worksheets, or creative projects. Simple mode keeps the widget to a single screen (place → theme → title → generate); Detailed mode unlocks data overlays, historical maps, brand/logo, and audience-specific packs. Distinct from the 3D Map Model Generator, which produces 3D-printable physical models — AI Maps produces 2D visual content.

How It Works

  1. Simple or Detailed? — Toggle at the top. Simple keeps the widget to a single-screen flow (place → theme → title → output size → generate) for casual users. Detailed reveals everything below — data overlays, brand, historical maps, audience packs.
  2. Pick a place — Search by name (city, address, landmark) or pan the live MapLibre GL map. The visible bounding box becomes the canvas. Toggle a framing grid to help you compose the shot. Or draw on the map (Detailed) — pick a shape tool (rectangle, circle, polygon, hexagon, star) to define the render area graphically; the final image is clipped to that outline. Click-to-add tools drop data markers (+ Marker), bubbles (+ Bubble, with value prompt), flow lines (+ Flow, two-click origin → destination), and categorical markers (+ Category) directly on the map — no CSV required. 1a. Geographic fidelity — The AI restyles your actual viewport. Whatever streets, coastline, waterways, and neighborhood you frame on the live map is what gets restyled by the theme. Your view = the render. 1b. Accurate labels — AI image models hallucinate garbled text when asked to render map labels. We fix this by telling the AI to skip labels entirely and compositing real place names on top via a separate gpt-4o-mini pass, then projecting them with proper Web Mercator math so they align with the restyled features. Toggle "Accurate labels" in Step 4 — on by default. 1c. Label categories — Pick which kinds of labels appear. 14 categories grouped by Populated (cities, towns, capitals) · Built (landmarks, buildings, roads, interstates) · Natural (rivers, lakes, seas, bays, mountains, parks) · Historical (heritage sites). Importance filter: Major (iconic only) · Notable (default) · All. Selections persist per-browser. After the render, a review panel lets you uncheck specific labels you don't want and add custom ones. 1d. Label source — Labels come from OpenStreetMap via Overpass API — the same authoritative data MapLibre uses for its tiles. Coordinates are pixel-accurate so labels align with the AI-restyled features. If OSM can't service a request (rare), the tool falls back to an LLM. For custom labels, click the "📍 Label" button in the draw toolbar, then click anywhere on the live map — the label drops at exactly that lat/lng. A live coordinate readout in the corner of the map helps you locate specific points. 1e. AI title card — Off by default. When off, the AI is explicitly instructed not to add cartouches, legends, decorative frames, or compass-rose boxes — so features stay at their original positions and composited labels align perfectly. Toggle on in Step 4 if you want a vintage-map cartouche look (costs some label alignment because the AI shifts content to make room for the card). 1f. Render modes — Themes are split into two categories (shown via ⚡ / 🎨 badges on each card). Cartographic themes (Blueprint, Film Noir, Satellite Cinematic, Dark Minimalist) render natively via MapLibre with CSS-filter post-processing — labels are baked into the tile raster by the map engine itself, pixel-accurate every time, 1-2 second render. No AI involved. Painterly themes (Vintage, Watercolor, Fantasy Parchment, Comic Pop, Pixel Art, Paper Craft, Hand-Drawn, Neon Cyberpunk) use gpt-image-1 for true artistic transformation — slower (30-60s) and labels may drift slightly because the AI reframes content to compose the scene aesthetically. Pick cartographic for accuracy, painterly for artistic flexibility. 1g. Region search + clip — Step 1's search box accepts any scale: street address, neighborhood, city, state, country, national park, landmark. When you pick a result with an administrative polygon, a 📍 Region bar appears with a "Clip to shape" toggle. Turn it on to render the output clipped to the region's actual outline — searching "United States" produces a US-shaped map instead of a rectangle that includes Canada, Mexico, and ocean. 1h. Label review — After rendering, labels appear grouped by type (Cities, Landmarks, Rivers, etc.) in collapsible sections. Each group has "Select all" / "Hide all" links that affect only that group; a master pair at the top toggles everything. Per-label ✏️ button repositions a label: click the button, then click anywhere on the live map — the label moves to that exact lat/lng. ↺ reverts a moved label to its original OSM position. 1i. Region quick-select — Twelve preset chips (🌍 World · 🇺🇸 United States · 🇨🇦 Canada · 🇲🇽 Mexico · 🌎 North America · 🌎 South America · 🇪🇺 Europe · 🇬🇧 UK · 🌍 Africa · 🌏 Asia · 🇦🇺 Oceania · 🇯🇵 Japan) jump the map to common framings in one click — no typing, no search round-trip. 1j. Label-free AI snapshots (painterly) — Painterly themes now send the AI a label-free version of the map so gpt-image-1 has only terrain, roads, and water to restyle — nothing to hallucinate or reframe for labels. Real labels composite on top afterward from the OSM/auto-label pipeline at exact coordinates. Dramatically reduces the label drift that came from the AI trying to redraw existing labels as part of the restyle. 1k. 4-stage wizard (Detailed mode) — Detailed mode now uses a sequential wizard instead of one long scrolling page. Stage 1 · Area → Stage 2 · Labels → Stage 3 · Theme → Stage 4 · Render. Each stage locks when you click "Lock & Continue", and you can jump back to any locked stage via the progress bar. Matches the way professional mapping tools work: establish the geographic frame first, then what gets labeled, then how it looks, then generate. Simple mode keeps the single-page flow for casual users. 1l. Non-contiguous areas — Stage 1 includes an "Inset Regions" panel. Search for any named region (Alaska, Hawaii, Puerto Rico, etc.), add it as an inset, and it appears as a labeled box in the corner of your output. Canonical use case: search "Alaska" and position it bottom-left, search "Hawaii" and position it bottom-center — you get a classic US-with-insets layout. Five corner positions (TL/TR/BL/BC/BR) × three sizes (S/M/L) per inset. 1m. Historical annotations — Stage 2 includes an "Historical Annotations" panel with arrow and event-marker tools. ➡️ Arrow takes two clicks (origin → destination) and prompts for an optional label and solid/dashed style — use for army movements, trade routes, exploration paths, migrations. ⚔️ Event takes one click and prompts you to pick a symbol (battle, siege, treaty, landing, founding, raid, plague, coronation, explorer, notable), date, and description. Compositor renders everything in theme-matched typography so it reads naturally on any theme. 1n. Wizard polish (v1.0.3) — Stage 1 map is larger (560px max dimension), Map Source and Output Size pickers live in Stage 1 (affects framing), the map shows an output indicator in the top-right corner + a thin dashed border confirming the visible area = what gets captured. Stage 2 keeps the map visible ("Locked Area — read-only") with hover lat/lng and click-to-add custom label. A new Stage 2 "Place Labels" panel has the accurate-label toggle, category chips, importance filter, and custom-label add form so everything label-related is in one place on Stage 2. 1o. Per-inset imagery (v1.0.4) — Insets previously rendered as labeled frame outlines (layout cue only). Now each inset captures its own styled tile snapshot at its specified bounds — Alaska in the bottom-left shows a real map of Alaska, Hawaii in the bottom-center shows the Hawaiian chain, both in the same theme treatment as the main map. Cartographic themes apply their CSS filter/tint to each inset's MapLibre canvas; painterly themes capture each inset from the active label-free tile raster. Zero extra AI cost — purely tile-rendering plus canvas composition. Inset name strip composites at the bottom ~22% of each box for legibility. 1p. Two-layer painterly composite (v1.1) — Painterly themes now have an optional Feature Overlay control (Off / Subtle / Strong, default Subtle for signed-in users). When on, a features-visible snapshot of the actual map tiles composites over the painterly AI base via multiply blend mode — the painterly aesthetic stays, but roads, building outlines, and water lines render at their pixel-accurate OSM positions instead of wherever the AI decided to draw them. Fixes geometry drift that prompt engineering alone couldn't fully suppress. Zero extra AI cost (one small tile snapshot before the AI call). Cartographic themes don't need this — they already bake features into their pixel-accurate raster. 1q. PDF export (v1.2, Advanced) — Download PDF button alongside PNG / SVG / Transparent PNG. Produces a properly-formatted one-page PDF with title banner, the flattened map image at native aspect (landscape or portrait auto-chosen), optional caption + scholarly citation block (when Historian citation is enabled), and a metadata footer (attribution, bounds, era, generated date). Goes straight into academic papers, corporate reports, or print-ready deliverables without extra layout work. 1r. Multi-page comparison PDF + print quality (v1.3) — The PDF button now has two companion pickers. Quality toggles between Standard (native output resolution) and Print (2× bilinear upscale — brings 1920×1080 to 3840×2160 for ~300 DPI on A4). Pages toggles between "All N pages" (every result in the batch as a multi-page comparison PDF with per-page theme subtitle) and "Active only" (just the currently-selected variation). Defaults: Standard quality, All pages when more than one result exists. 1s. POI Icon Library (v1.4) — Event markers grew from 10 historical symbols to 40 icons across 7 categories: Historical (battle, siege, treaty, landing, founding, raid, plague, coronation, explorer, notable), Culture (church, mosque, temple, castle, monument, museum), Nature (mountain, volcano, forest, desert, island, water), Transport (railway, airport, port, bridge, road), Civic (hospital, school, library, government, police), Commerce (factory, shop, hotel, restaurant, bank), and Danger (warning, wildfire, flood, earthquake, radiation). Picker changed from a chained window.prompt menu to a visual inline panel: category tabs, responsive icon grid with names + tooltips, date + description inputs, and Add/Cancel actions. Every original v1.0.2 annotation still renders with the same emoji — backward compatible. 1t. PDF cover sheet + paper size (v1.5) — The PDF button group gained two more options. Paper size picker: A4 (default, 210×297mm international), Letter (8.5×11in US), Tabloid (11×17in US large-format), A3 (297×420mm international large-format). Cover sheet checkbox (off by default): when on, the PDF leads with a branded title page — kicker "AI MAP REPORT", large title, subtitle, accent underline, metadata block (theme / bounds / era / attribution), optional citation preview, centered date — before the map pages. Academic, corporate, and international reporting workflows all get natively-formatted deliverables. 1u. Fog-of-war polygon tool (v1.6) — New ☁️ + Fog button in the annotation toolbar. Click-per-vertex + double-click-to-finish (min 3 vertices) drops dark-masked polygons that composite above every other layer except the ornamental frame. Each polygon gets an optional label input (renders centered). Unlimited polygons per map. Use cases: TTRPG unexplored regions, wartime enemy territory masks, Age-of-Exploration "reveal over time" storytelling, redacting private landowner boundaries. Works in all exports (preview, PNG, SVG, PDF). 1v. Session gallery (v1.7) — The last 8 generate batches stay live in memory so you can flip back to earlier variations without regenerating (saves tokens + 30-60s per revisit). A horizontal thumbnail strip above the main Result section shows each entry with its theme, time, and variation count; click a tile to restore that batch as the active result, ✕ to remove a single entry, Clear all to reset. In-memory only — a refresh clears the gallery. 1w. Accessibility pack (v1.8) — New High Contrast cartographic theme (unlocked at demo tier — never paywalled): pure black linework on pure white, zero color reliance, meets WCAG AA contrast minimums, bold sans-serif labels for max legibility. Plus SVG exports now ship with role="img" + aria-labelledby + Dublin Core <metadata> (title, creator, description, source, date) so screen-readers announce provenance and embedded AT parses overlays independently. Tool now meets WCAG 2.1 AA for its output artifacts. 1x. Persistent gallery + Regenerate (v1.9) — The v1.7 in-memory gallery now also persists a thumbnail + generation preset to IndexedDB on every save, so the strip survives browser refresh/close. Up to 30 persisted entries (LRU-evicted). Persisted-only tiles show with a dashed border + 💾 badge; clicking opens a modal with enlarged thumbnail + settings snapshot + "Regenerate with these settings" button that replays the saved preset (costs 1 token basic / 4 tokens advanced). Delete button purges a saved copy. Presets capture theme, area, tile source, era, output size, variations, labels, and painterly feature overlay — user-added decorations (insets, annotations, fog, overlays) stay fresh so you can try different combinations on the same base. 1y. Fog style variants (v1.10) — The v1.6 fog-of-war tool gained 3 alternate styles beyond the default shadow. Per-polygon style picker now offers: 🌑 Shadow (dark purple, original v1.6 — works on any theme), ☁️ Cloud (parchment cream, soft-edged — native feel on fantasy/historical maps), ⬛ Redact (pure black, no label — for privacy/compliance redaction where total occlusion is the point), and 💨 Smoke (radial gradient gray-to-transparent — soft fade for storytelling fog-lifting effects). Each fog polygon can use its own style independently; existing shadow polygons unchanged. 1z. Marker clustering (v1.11) — Uploads with 20+ markers used to overlap into an unreadable blob. v1.11 auto-groups markers within 4% of the map width (3+ per group) into a single count bubble, keeping singletons + pairs as original pins. Bubble radius scales log-style so a 50-marker cluster is only a bit bigger than a 3-marker cluster. Toggle appears in the overlay panel whenever you have ≥20 markers; default ON. Works with timeline-colored marker sets (clusters inherit the first member's color). 1aa. Comprehensive ZIP bundle (v1.12) — The existing Export Bundle (ZIP) button now ships with everything a downstream content pipeline needs: flattened composite PNG + raw AI base (no overlays, for compositing) + editable SVG vector (Dublin Core metadata, WCAG AA) + transparent PNG + overlay CSV/GeoJSON + metadata JSON + attribution + citation + correlation ideas + alt-text + a generated README.md explaining every file. Each file is optional — the README dynamically lists only what's present. 1bb. Multi-layer z-order (v1.13) — The overlay system used to be single-layer (picking Choropleth wiped out any active markers). v1.13 adds a Layer stack panel below the primary layer picker: add additional overlays, reorder them with ↑/↓ buttons, remove individual layers with ✕. Bottom-to-top rendering — stacking Choropleth → Markers → Flow gives you region fills with pins on top with flow arrows above everything. Each layer keeps its own data input; no re-pasting required. Signed-in only; demo stays single-layer. 1cc. Address auto-geocode (v1.14) — Paste a CSV with an address / place / location column (no lat/lng required) and a 📍 Geocode addresses button appears next to Parse. Click to batch-geocode the whole list via Nominatim (50 addresses per request, 1.1s per address rate-limited). Successful rows populate as markers; unresolved addresses list below with the failure reason so you can fix typos and re-run. Supports up to the tier's marker limit (25 basic / 200 advanced). Signed-in only. 1dd. PDF cover sheet templates (v1.15) — The v1.5 cover sheet gained 3 template variants beyond the original Standard. Corporate — full-bleed navy header band with centered white title for executive decks. Academic — Times-serif, centered author block, minimal chrome for research papers / theses. Casual — warm accent block + pill-style metadata for blog posts / community reports. Dropdown appears next to the Cover sheet checkbox when it's enabled; Standard remains the default. 1ee. Historical period quick-presets (v1.16) — With OpenHistoricalMap selected, a chip row above the year input lets you jump to 15 canonical eras in one click: Roman Empire Peak, Charlemagne, Medieval Europe, Black Death, Renaissance Italy, Ottoman Peak, Revolutionary America, Napoleonic Europe, US Civil War, Victorian London, Pre-WWI Europe, Interwar World, WWII Europe, Cold War, and Year 2000. Each chip sets the year, fits the map to the region, AND picks a theme that suits the era (fantasy-parchment for medieval, blueprint for industrial London, noir for WWII, etc.). Chronologically ordered so the row reads as a timeline. 1ff. Per-layer opacity (v1.17) — Each layer in the v1.13 stack gained an inline opacity slider (0.1–1.0 step 0.1). Useful when stacking 3+ layers where one would otherwise overwhelm the others (e.g., pair full-opacity markers with a 60%-opacity heatmap below so the pins stay readable). Applies to the primary layer too. Primary defaults to 100%; new extra layers default to 100%. Wrapping happens only when opacity < 1 so the 99% case has zero overhead. 1gg. Keyboard shortcuts (v1.18) — Press ? or click the floating ⌨ button to see every binding. Highlights: G generate, R regenerate, D download PNG, S download SVG, P download PDF, Z export ZIP bundle, C copy to clipboard, 1-9 switch variation, Esc closes modals + cancels draw mode. Shortcuts disable when focus is in any input/textarea/select so typing never triggers them. Modifier keys (Cmd/Ctrl/Alt) are respected so browser shortcuts still work. 1hh. UX polish pass (v1.19) — Four quality-of-life improvements: (a) Default output size is now Landscape 3:2 (was Square 1:1) to match the most common publishing aspect. (b) Map stays stable when output size changes — the map container is now fixed at 3:2 aspect; changing the output preset shows a crop-rectangle overlay (with darkened mask outside) marking what section of the map will be captured, instead of resizing the whole map view. (c) Map Source + Output Size pickers moved above Step 1 in Stage 1 since both decisions drive what gets framed. (d) Edge-label fix — labels for features near the left/right edges of the map now render properly: Overpass bbox is padded by 5% so edge features aren't excluded, viewBox filter loosened, labels near the right edge flip text-anchor so names don't get clipped. 1ii. Stage separation + perspective / angle (v1.20) — Two Stage-1 improvements. Draw tools gated: Stage 1 now only shows shape tools (Rectangle, Circle, Polygon, Hexagon, Star) for area selection; Marker / Bubble / Flow / Category / 📍 Label buttons moved to Stage 2 where they belong as annotation actions. Perspective mode: new Tilt (0–70°) + Rotate (−180° to +180°) sliders in Stage 1 so you can render maps at an angle — dramatic city skylines, country-scale oblique views, etc. The AI restyle inherits the tilt automatically. Heads-up: composited labels use 2D projection so they may misalign in tilted views; for the cleanest look, disable Accurate Labels in Stage 2 when Tilt > 0. 1jj. v2.0 Phase Alpha — Workbench modes + AI Enhance toggle — Repositioning the tool as a professional cartography workbench with optional AI. New Quick / Studio mode toggle at the top (Quick = fast single-screen flow, Studio = pro workbench). New AI Enhance toggle with smart default: OFF in Studio (cartographic-only, no tokens spent), ON in Quick. Painterly themes + custom prompts gate on AI Enhance — when off, they're visually disabled with a tooltip explaining how to enable them. Cartographic themes (Blueprint, Noir, Satellite, Dark Minimalist, High Contrast) continue to render locally with no AI calls regardless of the toggle. Coming in v2.1-v2.7: style editor, hillshade, 3D extrusion, animation engine (MP4/GIF), advanced label placement, Lucide icon library, vector PDF, measurement tools. 1kk. v2.0.1 Map Studio rebrand + v2.1 seed (5 new style presets) — The tool is now called Map Studio. URL stays /tools/ai-maps so existing bookmarks + saved galleries + SEO all continue to work — only the brand identity changes. New widget header reads "Map Studio v2.0 — Professional cartography workbench with optional AI enhancement." Five new cartographic presets (all Basic+, no tokens): Minimal White (editorial cream + gray linework, Fraunces serif), Detailed Print (navy+amber high-density for print), Newsprint B&W (1950s broadsheet feel with paper tint), Wayfinding (signage-style saturated palette with Bebas Neue), Nautical (marine-chart blue-green sea + sandy land). Each renders locally via MapLibre canvas filter + tint — same local pipeline as Blueprint/Noir. 1ll. v2.1a Adjust Colors panel — First slice of the Style Editor. Four universal color sliders (Hue 0–360° · Saturation · Brightness · Contrast) that work on every tile source — raster OR vector. Live preview via CSS filter, composed into the final render so exports match. Six preset chips for one-click looks: Warm / Cool / Sepia / Vibrant / Muted / Moody. Studio Mode only. Persisted per-browser. 1mm. v2.1b Vector Style Editor — The Style Editor graduates from color-tone tweaks to per-layer vector control. Three new tile sources (OpenFreeMap Liberty / Bright / Positron — free, no API key, Basic+) expose the underlying MapLibre layer structure. When a vector source is active, the Style Editor panel lists every layer grouped by category (Water, Land, Roads, Buildings, Labels, Other) with a visibility toggle, color picker, and line-width slider per layer. Live preview via setPaintProperty. Mass-hide / show by category (one click to hide all roads, show only water, etc.). Save custom styles to IndexedDB (up to 50, named, with per-entry Load/Download/Delete). Export / import as JSON — share edits with collaborators or paste third-party diffs. Dangling layer ids (e.g., from a different OpenFreeMap variant) are silently skipped on load so edits survive upstream style updates. Advanced-only for writes; demo/basic see the panel with upgrade CTAs so features are discoverable. 1nn. v2.1d Label Font picker — Override the label font on any vector source. Pick from 8 bundled variants (Roboto, Open Sans, Metropolis, Noto Sans — each in Regular + Bold, all OFL/Apache licensed, self-hosted under /fonts/) or paste a custom glyph URL template for your own PBF host. Fonts swap live via MapLibre setStyle rewriting every symbol layer's text-font + the style's glyphs URL. Only meaningful on vector sources — raster tiles have baked-in labels so the picker auto-hides. Advanced-only. 1oo. v2.2 Phase Gamma — Terrain & Elevation — Three new features that compose on top of any tile source using free public DEM data from AWS elevation-tiles-prod (Terrarium global coverage, no API key). Hillshade (Basic+): shaded relief overlay with intensity + light-angle sliders. Contour lines (Basic+): elevation isolines at 50 / 100 / 250 / 500 / 1000 m intervals, generated client-side in a web worker by maplibre-contour, major contours rendered thicker with elevation labels. Elevation choropleth (Advanced): new 🏔 "Fill by elevation" button in the choropleth overlay panel samples DEM at each GeoJSON polygon's centroid and colors regions by altitude via a sea → teal → green → tan → brown → peak ramp. All three stack — you can have hillshade + contours + elevation-colored polygons in the same output. 1pp. v2.3 Phase Delta — Scene & Atmosphere — Three scene features that turn a flat 2D map into a cinematic 3D scene when paired with v1.20 perspective tilt. 3D buildings (Basic+, vector sources only): MapLibre fill-extrusion reads OpenMapTiles building heights — color picker + height-scale slider (0.5–3×) for dramatic urban skylines. Auto-hides on raster sources (no building vector data). Sky gradient (Basic+): MapLibre native sky layer with atmosphere color + sun position, visible when the camera is tilted. Time-of-day (Basic+): date + time inputs + Now button — suncalc computes sun azimuth/altitude from the map center at the chosen timestamp and auto-drives hillshade light-angle + sky atmosphere colors (dawn purple → horizon orange → midday blue → night deep-blue). Pair with v2.2 hillshade for photo-realistic "golden hour over the Alps" type compositions. 1qq. v2.4 Phase Epsilon (A+B+C slice) — Animation Export (Advanced). Three animation modes sharing one panel + progress bar. Camera fly-through → WebM: capture a start + end camera snapshot (center/zoom/pitch/bearing), the recorder tweens between them and exports a WebM video via MediaRecorder on canvas.captureStream(). OHM year range → GIF: only with the OpenHistoricalMap source active. Each frame steps the year; the full style-swap pipeline runs between frames so every generation is a real re-render of the historical map. Marker reveal → GIF: overlay markers fade in staggered across the duration for storytelling animations. Duration 2-15s, FPS 12/24/30. GIF encoding uses gif.js in a web worker. All active scene features (hillshade, 3D, time-of-day, style edits, custom fonts) render into every frame because the runner captures the live MapLibre canvas. Multi-track timeline UI + MP4 output come in later v2.4 slices. 1rr. v2.4 MP4 output (Advanced) — All three animation modes now support MP4 export via FFmpeg WASM. H.264 + yuv420p + +faststart flags produce MP4s that play natively in iOS Safari, X, LinkedIn, and Instagram uploads (WebM + GIF don't cover all three consistently). Camera fly-through transcodes the MediaRecorder WebM; year-slider + marker-reveal encode PNG frames directly. Single-threaded @ffmpeg/core@0.12.6 loads lazily from unpkg on the first MP4 export — ~30 MB one-time download, browser-cached after that, no COOP/COEP header changes on the site. 1ss. v2.4 Flow draw-on animation (Advanced) — the fourth and final animation mode from the original Phase Epsilon plan. When you have flow lines on the map (origin → destination CSV/JSON pairs), the flow-draw-on export shows them progressively draw across the duration using MapLibre's native line-trim-offset paint property. The flow layer is injected live on export and stripped when done, so nothing changes about your normal render pipeline. Output: GIF | MP4. Closes out Phase Epsilon — all 4 animation modes × 3 output formats now shipping. Multi-track timeline UI remains a future enhancement. 1tt. v2.5 Phase Zeta slice 1 — Label collision detection. When accurate labels are on, a new priority-based resolver suppresses overlapping labels to reduce clutter. Priorities: custom-added > high (capitals, major landmarks) > medium (cities, notable features) > low (towns, minor features). Greedy placement — sort by priority, drop anything whose bounding box overlaps an already-placed label. Toggle "Collision detection" in the Stage 2 label panel (default on); turn off to see every label regardless of overlap. First slice of Phase Zeta — future slices add curved labels along roads/rivers, leader lines for displaced labels, and resolver coverage for fantasy names + historical labels. 1uu. v2.5 Phase Zeta slice 2 — Leader lines for repositioned labels. When you drag a label to a new spot with the v0.14 reposition tool (✏️ then click), the connection back to the original feature is now drawn explicitly: a small ghost dot at the feature's actual location + a subtle dashed leader line to the displaced label. Previously the whole pair (dot + text) moved together, losing the visual link to the feature. Zero markup when a label is at its original position — unmoved labels render exactly as before. Automatic for all repositioned accurate labels; no toggle needed. 1vv. v2.5 Phase Zeta slice 3 — Cross-type label collision. The v2.5 collision resolver now covers fantasy names + historical period-aware labels on top of the accurate-labels pipeline from slice 1. Each label type runs its own resolver pass, but each pass receives the previous passes' bounding boxes as pre-occupied space — so fantasy names never overlap accurate labels, and historical names never overlap accurate or fantasy. Priority order from highest: custom (100) → high accurate (80) → historical (75) → medium accurate (60) → fantasy (55) → low accurate (40). One toggle, "Collision detection" in the Stage 2 panel, controls the entire chain. 1ww. v2.5 Phase Zeta slice 4 — Curved labels along roads + rivers. Two new Stage-2 toggles (vector sources only — auto-hidden on raster). Curved road labels renders motorway / trunk / primary / secondary names that bend to follow the road's actual geometry, pulled from the OpenMapTiles transportation_name source layer. Curved waterway labels does the same for rivers + streams + canals with names, in italic deep-blue — conventional cartographic styling. Both use MapLibre's native symbol-placement: line so collision detection deduplicates text across the whole style. Closes Phase Zeta — advanced label placement is feature-complete. 1xx. v2.6 Phase Eta slice 1 — Google Fonts picker for title/subtitle/caption. Override the theme's hardcoded overlay font with any Google Fonts family. Paste a URL from fonts.googleapis.com into the new Stage 4 input; the widget extracts the family name, loads the stylesheet into the page, and applies the font to title + subtitle + caption. Theme default stays as the fallback. Distinct from v2.1d Label Font picker — that one targets MapLibre label glyphs (PBF binary); this one targets CSS font-family on the SVG overlays. Useful for matching publication typography (Fraunces editorial, Bebas Neue signage, Playfair Display academic, etc.). 1yy. v2.6 Phase Eta slice 2 — Custom marker icon upload (Advanced). Upload your own SVG or PNG (max 500 KB) to replace the default colored-circle markers on the markers and categorical overlay layers. Inline preview thumbnail + size slider (1–8 viewBox units) in the overlay panel. Works through the existing clustering logic — individual markers inside a cluster use your custom icon; the cluster count bubble stays a circle. Label text + cluster centroid behavior unchanged. Use cases: company logo pins, event icons, custom POI symbols for TTRPG/fantasy maps. 1zz. v2.7 Phase Theta slice 1 — Multi-unit scale bar (km + mi). New "km + mi" option next to the Scale bar checkbox renders both units on the same ruler — kilometers above, miles below, sharing the bar length. Useful for international publications and scientific papers that need both units visible on the same artifact. Original single-unit "km" and "mi" options are unchanged. 1aaa. v2.7 Phase Theta slice 2 — MGRS + lat/lng corner coordinates. New "Corner coords" checkbox in Decorations renders coordinate labels at each of the four map corners (NW, NE, SW, SE). Two formats: lat/lng (DD°MM.mm′ decimal-minutes) and MGRS (Military Grid Reference System at 100 m accuracy, e.g. "4QFJ12345678"). Useful for scientific, military, and geodesy publications that need reference coordinates tied to the viewport. Powered by the mgrs npm package (MIT, zero deps). 1bbb. v2.7 Phase Theta slice 3 — UTM corner readouts. Adds Universal Transverse Mercator as a third format option for the corner readouts. Shows zone + hemisphere + easting + northing in meters (e.g. "18N 585628 4511322") — the convention scientific and military publications prefer over MGRS grid strings. Implemented inline via Snyder's standard Transverse Mercator forward projection on WGS84, k₀ = 0.9996. Handles the Norway zone-32 and Svalbard zone-31/33/35/37 exceptions. No new deps. 1ccc. v2.7 Phase Theta slice 4 — Measurement tools (distance / area / radius). Three click-interaction modes in the Draw-on-Map toolbar, universal across all tiers. Distance = continuous multi-segment polyline with per-segment length labels rendered in MapLibre — pans with the map, captures into PNG exports. Area = polygon (double-click to finalize) reporting geodesic area via @turf/area on the WGS84 sphere, plus perimeter. Radius = click centre + outer point, reports radius + implied circle area with a dashed preview ring. Three unit modes — metric (m/km/ha/km²), imperial (ft/mi/ac/mi²), and dual (both side-by-side) — shared vocabulary with the scale bar. One-click Copy readout to clipboard. Esc cancels; Clear resets. 1kkk. v0.9.3 — Phase 5 Scientific theme pack (4 themes, closes Phase 5). Third and final specialized pack. All Advanced-only, cartographic-only. Sci · Research — grayscale-leaning neutral + Source Serif Pro for journal-figure submissions, print-ready at 300 DPI. Sci · Topographic — hypsometric cream + green + brown + EB Garamond, designed to pair natively with the v2.2 Gamma hillshade + contour overlays for earth-sciences + geomorphology publications. Sci · Climate — cool desaturated blue-teal + IBM Plex Sans so temperature / precipitation / wind-speed heatmap overlays read clearly for atmospheric + oceanographic figures. Sci · Field Notes — sepia-tinted warm off-white + JetBrains Mono, expedition-notebook feel with engineering-grade accuracy for survey reports. Closes Phase 5 — 12 specialized-pack themes now live across real-estate + civic + scientific workflows. 1jjj. v0.9.2 — Phase 5 Civic theme pack (4 themes). Second specialized pack. All four Advanced-only and cartographic-only (no AI drift on public-records deliverables). Civic · Planning — neutral slate analytical base with IBM Plex Sans for planning-commission packets + land-use review. Civic · Public Works — engineering-drawing teal-on-white with Roboto Mono for utility / road / infrastructure filings. Civic · Emergency — high-contrast off-white with red-accent-ready palette and condensed Oswald for EOC briefings + incident command. Civic · Community — warm sage-and-cream with friendly Fraunces serif for town-hall handouts + neighborhood meeting packets. Closes Phase 2/3 of the specialized-pack umbrella — scientific pack remains. 1iii. v0.9.1 — Phase 5 Real-estate theme pack (4 themes). First of three specialized packs shipping under v0.9 Phase 5. All four are Advanced-only and cartographic-only (no AI drift on legally-sensitive listings, zoning documents, or investor overlays). RE · Listing — MLS-ready warm neutral cream with Playfair Display titles for agent brochures. RE · Marketing — warm sunset-golden lifestyle palette with Fraunces serif for curb-appeal flyers. RE · Zoning — pure black-and-white high-contrast technical-drawing style with Archivo Narrow for regulatory filings. RE · Investment — muted neutral gray-beige so data overlays pop, IBM Plex Sans for investor memos. Civic + scientific packs follow in later slices. 1hhh. v1.12.1 — Bundle ZIP v2 (Phase 4 follow-up). The Export Bundle (ZIP) button now includes every export format shipped since v1.12. Adds the A11y SVG variant (v1.20.2 screen-reader feature list + optional high-contrast), the vector-overlay PDF (v2.7 slice 5 — titles + labels + scale bars render as crisp vector paths), and measurement.json (v2.7 slice 4 — captured ruler / area / radius data with computed totals) when a measurement is active. README.md manifest updated with usage tips covering all the new files. Purely additive — pre-v1.12.1 bundle contents are unchanged. 1ggg. v1.20.2 — Accessibility-optimized SVG export (Phase 4 follow-up). New "♿ A11y SVG" button next to the standard SVG export. Emits a structural role chain (role="img" + aria-labelledby over title + desc + feature list), a richer description with per-feature counts, and an inline hidden feature-list block that screen readers enumerate on tab-through — every marker, bubble, categorical marker, flow line, custom label, and annotation becomes its own listitem with name + lat/lng. Optional High-contrast checkbox forces labels to pure black-on-white with strong halos (WCAG AAA contrast) for low-vision users and B&W printing. Downloads with an -a11y.svg filename suffix so both exports can coexist. Universal across tiers. 1fff. v1.20.1 — 3D-aware label projection for perspective mode. When the map is tilted (v1.20 pitch) or rotated (bearing), all composite labels now project via MapLibre's live projection instead of the flat 2D Mercator formula — so labels land on their features instead of floating flat above them. Points behind the horizon (steep pitch) are skipped, matching how MapLibre's native labels behave. Zero impact on non-perspective renders — flat-map output is bit-identical to pre-v1.20.1. 1eee. v2.6 Phase Eta slice 3 — Lucide icon library for POI picker (closes Eta). The event-marker picker gains a Vector / Emoji style toggle (default Vector). Vector mode renders 60 monochrome Lucide SVG icons across 9 categories (added Utilities for power / solar / antenna / recycle + Recreation for parks / trails / sports / pool / gym). Icons auto-tint to the current theme's accent color so vintage maps get sepia markers, blueprint gets cyan, print gets navy — cartographic themes finally have markers that match their visual language instead of fighting against full-color emoji glyphs. Icons stay sharp at any zoom (SVG paths, not raster). Emoji mode preserved as a one-click fallback for anyone who prefers the original look. Existing annotations continue rendering as emoji (full backward compat). LocalStorage remembers the user's style preference. Closes Phase Eta. 1ddd. v2.7 Phase Theta slice 5 — Vector-overlay PDF export (closes Theta). New "Vector overlay" checkbox in the PDF export control group (default ON). When enabled, every piece of overlay content — titles, subtitles, captions, scale bars, compass roses, corner-coord readouts (lat/lng + MGRS + UTM), measurements, markers, custom labels, shapes, graticules, legends — renders as crisp vector paths in the PDF instead of being flattened into the map raster upload. Text is selectable. Lines stay sharp at any print zoom. The map tile raster stays as a raster image (inherent — MapLibre + gpt-image-1 don't produce vector output), but every text + geometric element on top is vector. Powered by svg-to-pdfkit (MIT). Silent raster fallback if the SVG contains unusual features the converter can't parse, so exports always succeed. Closes Phase Theta.
  3. Pick a theme — 12 starter themes (Vintage 1920s, Watercolor, Blueprint, Fantasy Parchment, Film Noir, Pixel Art, Comic Pop, Satellite Cinematic, Dark Minimalist, Hand-Drawn Cartographer, Neon Cyberpunk, Paper Craft). Advanced users write custom theme prompts with 12 starter templates (Studio Ghibli pastoral, 1970s Soviet cartography, Art Nouveau botanical, Wes Anderson pastel, and more).
  4. Pick a map source — Modern OSM (default), Carto Light/Dark, Esri Satellite, or OpenHistoricalMap with a year picker 1700–present (Advanced). Historical era anchors the AI restyle to the selected period.
  5. Add title / caption / overlays — Optional title, subtitle, and caption are composited onto the final image with theme-matched fonts. Toggle scale bar and compass rose. All flatten into the downloaded PNG.
  6. Output size — 9 social-media presets: Instagram Square / Portrait / Story, YouTube Thumbnail, LinkedIn Post, X Post, Facebook Cover, plus landscape / portrait / square native sizes.
  7. Optional data overlay — 6 layer types. Markers (classic pins), Bubbles (sized by value), Categorical (color-coded by group with auto-legend and color-blind-safe palette), Flow lines (A → B arcs with arrowheads, thickness scales by value), Choropleth (fill GeoJSON polygons with 7 color-blind-safe palettes), and Heatmap (offscreen canvas density with 4 palettes). AI Suggest button asks gpt-4o-mini to recommend the best layer type for your CSV. CSV + GeoJSON input. All composite as SVG over the AI image.
  8. Generation mode — Single / Compare / Bulk. Single (1–3 variations of one theme), Compare (two themes side-by-side for the same area, 2× cost), or Bulk (up to 10 places with one theme, downloadable as ZIP with attribution + metadata).
  9. Analyst pack (partial, Advanced). Statistical summary block composites min/max/mean/median onto the image. AI correlation hint (gpt-4o-mini) suggests related public datasets to enrich your map with reasoning + caveats. Export Bundle (ZIP) packages the final PNG + overlay CSV/GeoJSON + period labels + metadata + attribution + citation into one analyst-grade artifact.
  10. Educator pack (complete, Advanced). Lat/lng graticule overlay with auto-spaced gridlines. Quiz / blank mode hides labels with connector lines for worksheets. Auto feature labels (gpt-4o-mini) picks 5–12 notable geographic features in your bounds (capitals, rivers, mountains, landmarks, historical sites, water). Educator mode pre-flights custom prompts through OpenAI moderation before spending tokens.
  11. TTRPG / entertainment pack (partial, Advanced). Grid baked into output (hex or square, 4–40 cells). 6 ornamental frame presets (parchment, wood, metal, stone, scroll, art-deco). Fantasy name generator (gpt-4o-mini) renames real places in Tolkien, Lovecraftian, sci-fi, or D&D style. Party route via existing Flow layer.
  12. Output formats + accessibility (partial, Advanced). SVG vector export (editable in Figma/Illustrator, AI image embedded + all overlays as vector + title/desc for screen readers). Transparent background PNG (client-side alpha mask). Alt-text auto-generation (short + long, embedded in SVG exports and ZIP bundles). Color-blind palette enforcement with Coblis simulation flags indistinguishable colors and suggests safe alternatives (Viridis / Cividis / Paul Tol Bright).
  13. Historian pack (Advanced) — complete. Event markers auto-color by date column along a chronological gradient (5 scheme presets) with a timeline legend. 6 curated historical territory presets — Roman Empire peak, Ottoman Empire peak, Qing Dynasty, US 1865, European Empires 1900, Pre-WWI Europe 1914 — load as border-only GeoJSON overlays with labels. APA / MLA / Chicago citation block composites onto the image. Era compare mode renders the same bounds + theme at two different historical years side-by-side (e.g., 117 CE vs 1900). Period-aware AI labels translates modern place names to period-appropriate ones (Istanbul → Constantinople, Tokyo → Edo) via gpt-4o-mini.
  14. Variations — Generate 1, 2, or 3 variations in parallel; pick your favorite (N × token cost).
  15. Generate — gpt-image-1 produces the themed PNG in ~30–60s. Download, copy to clipboard, regenerate, or start fresh.

Demo Limitations

This demo includes:

  • 3 renders/day per device
  • 3 starter themes (Vintage 1920s, Watercolor, Blueprint)
  • 1024×1024 output with a small "SkillEra.IO Demo" watermark
  • 1 variation per run
  • Modern map only (no historical sources)
  • No data overlay

Sign up free → Basic tier: 8 themes, 9 social-media output presets (IG, Story, YT, LinkedIn, X, FB), up to 3 variations per run, title/caption/scale/compass overlays, data overlays (25 markers), 3 new OpenFreeMap vector tile sources (Liberty / Bright / Positron — feature-rich MapLibre vector styles, no API key needed), no watermark — at 1 token per render (3 tokens for 3 variations).

Advanced adds: all 12 themes + custom prompts with 12 starter templates, historical maps (OpenHistoricalMap with year picker), full data overlays (up to 200 items across all 5 layer types), brand color customization, logo upload (PNG/SVG/JPEG with position + opacity), full vector Style Editor (per-layer color / line-width / visibility on OpenFreeMap sources with save / export / import as JSON), and higher-quality AI — at 4 tokens per render.

Use Cases

  • Marketing & content — Eye-catching map images for blog posts, social media, email campaigns, and presentation decks
  • Analytics & reporting — Themed maps with marker overlays for executive dashboards, sales territory maps, and event coverage reports
  • Education — Period-accurate historical maps for history lessons, geography classes, and research papers
  • Video production — Stylized backdrops for travel vlogs, documentaries, news segments, and explainer videos
  • Personal & creative — Custom-styled maps for wedding invitations, gifts, prints, board game boards, and tabletop RPG settings

From Demo to Production

This tool is available as a self-service web app with three tiers (Demo, Basic, Advanced). For organizations needing custom branding, bulk generation, white-label embeds, or integration with existing reporting pipelines, custom development is available.

Real-World Challenges

Challenge Why It's Hard How to Solve It
Geographic accuracy vs. artistic style AI image models can drift from the actual road network when stylizing aggressively Hybrid pipeline: real OSM static map snapshot serves as the base reference, prompt anchors the model to "preserve roads, water, and labels"
Historical map availability Historical map APIs are sparse, often community-curated, and have variable coverage Phase 1 ships with OpenHistoricalMap (date-aware tiles, 1700-present); Phase 2 adds curated David Rumsey collection and Library of Congress IIIF
Theme consistency across renders The same theme can look different across runs due to model variance Structured prompt templates with locked styling instructions per theme; quality tier locks quality: high for paid users
Data overlay alignment Markers must align precisely to lat/lng on a stylized image whose proportions can shift Markers are composited as SVG on top of the AI image at fixed coordinates derived from the bounding box, ensuring exact alignment
Cost per render gpt-image-1 high-quality is the most expensive AI image call (~$0.17 per high-quality 1536×1024) Tiered pricing: Demo low quality, Basic medium, Advanced high — costs are passed through proportionally via the unified token model

Cost Estimates

Line Item Individual Creator Marketing Team Enterprise
Platform subscription $0–15/mo (Free/Basic) $30/mo per seat (Pro) Custom volume pricing
Per-render token cost 1 token (Basic) / 4 tokens (Advanced) Same Bulk bundles
Custom theme development N/A $200–500 one-time per branded theme $500–2,000 per template family
White-label / embed integration N/A N/A $5,000–25,000 one-time
Typical monthly $0–20 $60–300 $500–5,000

ROI Definition

  • Primary metric: Time saved on bespoke map graphics. A custom-illustrated themed map from a designer typically takes 2–8 hours at $50–150/hr ($100–$1,200 each). AI Maps delivers comparable quality in <60 seconds at <$0.20.
  • Secondary metric: Engagement lift — themed maps in marketing content typically increase click-through and time-on-page by 15–40% vs. generic stock map images.
  • Break-even: Immediate for individual creators. For teams: a single substituted designer-illustrated map per week justifies the Pro subscription within the first month.

Technology Stack

  • Map base: Leaflet + OpenStreetMap (modern), Carto, Esri Satellite, OpenHistoricalMap (date-aware)
  • AI restyle: OpenAI gpt-image-1 (low/medium/high quality tiers based on user mode)
  • Static-map snapshot: staticmap.openstreetmap.de for the bbox reference image (Phase 1); paid static API in Phase 2
  • Geocoding: Nominatim (free, OSM)
  • Data overlay: Client-side SVG composite over the AI image
  • Output: PNG, downloadable directly; SVG and MP4 video roadmapped

Want This for Your Business?

AI Maps is available as a self-service tool with Free, Basic, and Pro tiers. For organizations needing branded themes, white-label embeds, or bulk generation APIs, get in touch for enterprise licensing.