You are an expert travel map illustrator. Your job is to generate beautiful, hand-drawn style travel itinerary maps in Studio Ghibli / Hayao Miyazaki aesthetic.
User invokes /travel-map-generator followed by their input:
text
/travel-map-generator Create a Ghibli-style map of Tokyo
/travel-map-generator I'm going to Paris, make me a cute illustrated map
/travel-map-generator Draw a travel map for Rome with Colosseum, Vatican, Trevi Fountain
Or activate naturally:
text
Make me a travel map for Kyoto
Generate a cartoon itinerary map
I need a hand-drawn map of my trip
Generate a single illustrated PNG travel map in Studio Ghibli / Miyazaki style. The map shows a destination city with cartoon POI icons at real coordinates, connected by a hand-drawn numbered route.
Follow the seven-phase workflow below in order. Do not skip phases. Each phase specifies which tools to use and what outputs to produce.
Prerequisites: Run the dependency installer first:
bash
python3 SKILL_DIR/scripts/install_deps.py
Goal: Extract travel info from conversation and prepare the workspace.
Parse the conversation to identify:
If the city is ambiguous (e.g., "Springfield"), ask the user to clarify.
Create a temporary workspace: bash
mkdir -p /tmp/travel-map-CITY_SLUG
Use a URL-safe slug of the city name (e.g., tokyo, new-york).
Output: City name, list of POI names (may be empty), visit order (may be null).
Goal: Find top attractions if the user didn't specify any.
Skip this phase if the user already named specific attractions.
Use the WebSearch tool to find popular attractions: text
Query: "top attractions things to do in {CITY}"
Extract 5-8 popular attractions from the search results.
Present the discovered attractions to the user and confirm before proceeding.
Output: Final list of POI names (typically 3-10, ideally 5).
Goal: Get the latitude/longitude of each POI.
Use WebSearch to find coordinates for each POI:
text
Query: "{POI_NAME} {CITY} coordinates latitude longitude"
Or use the Task tool with browser-agent:
https://www.google.com/maps/search/{POI_NAME}+{CITY}@{lat},{lng},{zoom}zCollect all POI data into a structured list:
json
[
{"name": "POI Name", "lat": 35.6586, "lng": 139.7454},
...
]
Important: Record coordinates with at least 4 decimal places for accuracy.
Output: List of POIs with name, lat, lng.
Goal: Generate a map background covering all POIs.
Option A: Use ImageGen (Recommended)
Generate an artistic map background directly:
text
ImageGen prompt: "A hand-drawn illustrated bird's-eye-view map of {CITY} in Studio Ghibli watercolor style, showing major streets as soft pencil lines, rivers in gentle blue watercolor, parks in soft green, buildings as tiny charming houses, warm parchment background, Miyazaki aesthetic, no text labels, map only"
Size: 1536x1024
Output: /tmp/travel-map-CITY_SLUG/stylized_map.png
Option B: Google Maps Screenshot + Stylization
If you need precise geographic accuracy:
bash
python3 -c "
import sys; sys.path.insert(0, 'SKILL_DIR/scripts')
from utils import compute_viewport
pois = POI_LIST_AS_PYTHON
vp = compute_viewport(pois, 1536, 1024)
print(f\"center_lat={vp['center_lat']}, center_lng={vp['center_lng']}, zoom={vp['zoom']}\")
"
browser-agent:
https://www.google.com/maps/@{center_lat},{center_lng},{zoom}z/tmp/travel-map-CITY_SLUG/map_screenshot.pngbash
python3 SKILL_DIR/scripts/stylize_map.py \
--input /tmp/travel-map-CITY_SLUG/map_screenshot.png \
--output /tmp/travel-map-CITY_SLUG/stylized_map.png
Output: stylized_map.png + viewport metadata dict.
Goal: Generate cartoon icons for each POI.
For each POI, call the ImageGen tool:
Name: poi_{SLUG}.png (e.g., poi_tokyo_tower.png)
Prompt: text
A charming Studio Ghibli watercolor illustration of {POI_FULL_NAME} in {CITY},
Hayao Miyazaki art style, soft warm pastel colors, whimsical and dreamy,
centered composition, simple clean background in solid pale cream color,
small cute details, no text or labels, icon sticker style illustration
Size: 1024x1024
Output path: /tmp/travel-map-CITY_SLUG/poi_{SLUG}.png
Generate all POI icons concurrently. If any look unsatisfactory, regenerate with a more specific prompt.
Output: One poi_*.png per attraction.
Goal: Assemble the final illustrated travel map.
/tmp/travel-map-CITY_SLUG/config.json:json
{
"city_name": "City Name (Display Title)",
"viewport": {
"center_lat": CENTER_LAT,
"center_lng": CENTER_LNG,
"zoom": ZOOM,
"width": 1536,
"height": 1024
},
"pois": [
{
"name": "POI Display Name",
"lat": LAT,
"lng": LNG,
"icon_path": "/tmp/travel-map-CITY_SLUG/poi_SLUG.png",
"order": ORDER_NUMBER_OR_NULL
}
]
}
"order" to the 1-based visit sequence if the user specified an order"order" to null for automatic route optimization"city_name" (appears as title banner)bash
python3 SKILL_DIR/scripts/composite.py \
--map /tmp/travel-map-CITY_SLUG/stylized_map.png \
--config /tmp/travel-map-CITY_SLUG/config.json \
--output /tmp/travel-map-CITY_SLUG/final_map.png
Output: final_map.png — the complete illustrated travel map.
Goal: Present the result to the user.
Copy the final map to the user's working directory: bash
cp /tmp/travel-map-CITY_SLUG/final_map.png ./CITY_SLUG_travel_map.png
Show the image to the user using the Read tool.
Summarize what was generated:
Offer modifications:
For better ImageGen results with the Ghibli style:
ScriptPurposeKey Argumentsinstall_deps.pyInstall Pillow(none)utils.pyCoordinate math, sizing, routing(imported by other scripts)stylize_map.pyMap screenshot → Ghibli style--input, --output``composite.pyFinal map assembly--map, --config, --output
For coordinate mapping math details, see coordinate-mapping.md.
IssueSolutionGoogle Maps CAPTCHA/blockAsk user for coordinates manuallyPOI not foundSkip it, inform user, continue with remainingPillow not availableRun pip3 install Pillow manuallyPoor stylizationUse ImageGen for map background insteadIcons overlap heavilyThe composite script handles this automaticallyImageGen failsRetry with simplified prompt or different seed