| name | travel-infographic |
| description | Генерация визуализаций для travel-запросов: сравнение вариантов
маршрута, карта поездки, анимация перелёта/поездки. Светлая чистая
эстетика. Только полезная инфографика — если визуализация не добавляет
инсайта, не рисуй.
Use after любого результата поиска авиа/жд билетов из mcp серверов
(kiwi, aviasales, flight-search, skiplagged) или из скилла rzd-trains,
flights. Выбери ОДНУ визуализацию подходящую под кейс — не штампуй
все подряд.
Также use когда пользователь явно просит: "покажи маршрут",
"сравни варианты", "нарисуй", "визуализируй", "сделай картинку",
"сделай гифку", "покажи на карте".
|
Travel Infographic
Генерирует PNG-сравнения и GIF-анимации маршрутов. Скрипты на Python с
PEP 723 inline-deps (uv сам ставит зависимости при первом запуске,
кэширует — повторные ~1 сек). Первый запуск скрипта в новом окружении
ставит deps через uv — это 30-60 сек. Дальше моментально.
Правило #1: рисовать только если полезно
НЕ рисуй когда:
- Один вариант и нет с чем сравнивать (для одного — только
route_map или route_gif, не chart-ы).
- Запрос справочный ("во сколько отправляется поезд 097Э") — отдай текстом.
- У тебя нет реальных данных (не сочиняй цены чтоб нарисовать график).
- Разница между вариантами тривиальна и читается из текста ("оба варианта по 3 часа, разница 200₽").
Рисуй когда:
- Есть 2+ варианта с неочевидной разницей: дешёвый дольше door-to-door, дорогой быстрее но красноглазый, и т.п.
- Пользователь выбрал/обсуждает конкретный маршрут — покажи его на карте или анимацией.
- Гибкие даты ±несколько дней с разбросом цен.
- Многоплечевая поездка где итоговое время сильно отличается от суммы перелётов.
Выбор визуализации
Выбери ОДНУ ветку и загрузи только её reference — остальные не читай.
Один конкретный маршрут (обсуждаем/предлагаем именно его)?
├─ маршрут >2 плечей, анимация добавляет → gen_route_gif.py → route_<from>_<to>_animated.gif
└─ анимация избыточна (короткий перелёт
без пересадок) → gen_route_map.py → route_<from>_<to>_map.png
2+ варианта маршрута?
├─ 2-5 вариантов, карточки в стиле
│ Skyscanner с pre-leg деталями → gen_pareto.py → compare_routes.png
├─ главный инсайт — door-to-door время
│ с трансферами → gen_timeline.py → compare_timeline.png
└─ "дешёвый" билет на самом деле дорогой
из-за багажа/места → gen_cost.py → cost_breakdown.png
Юзер гибок по датам ±5+ дней, цены гуляют → gen_calendar.py → dates_calendar.png
Имя файла-результата подсказывает что это, чтобы пользователь сразу понимал.
Данные для выбранного скрипта собери по схеме из его reference:
gen_route_map.py / gen_route_gif.py — route-map.md (stops/segments, координаты из _cities.json)
gen_pareto.py — compare-cards.md (boarding-pass формат, note-плашки, лимиты текстов, скрытие цен)
gen_timeline.py / gen_cost.py — timeline-cost.md (старый формат options/legs, полный пример вызова)
gen_calendar.py — calendar.md (даты + цены)
Как вызывать
Каждый скрипт принимает --data <json> (либо путь к файлу, либо - для stdin) и --out <path>.
~/projects/dotfiles/claude-code/skills/travel-infographic/gen_timeline.py \
--data /tmp/trip.json \
--out /tmp/compare_timeline.png
Отправка в Telegram
После генерации обязательно:
- PNG →
mcp__bot__send_image (inline превью в чате)
- GIF →
mcp__bot__send_animation (auto-play, без скачивания)
Caption — короткая (1-2 строки) подпись с ключевым инсайтом, например:
"Через Сочи дольше на 4ч, но дешевле на 12000₽" или "Прямой только в купе, плацкарт через Челябинск".
Палитра и стиль
Светлая, тёплая. Off-white фон #FAFAF7, белые карточки. Акценты:
- 🟢 Teal
#14B8A6 — перелёты
- 🟠 Orange
#F97316 — поезд/автобус
- 🟣 Violet
#8B5CF6 — трансферы/ожидание
- 💚 Emerald
#10B981 — лучший/самый дешёвый вариант
- 🟡 Amber
#F59E0B — внимание (тайтовая пересадка, ночной рейс)
- 🌹 Rose
#F43F5E — дорого / красноглазка / закрытый аэропорт
Цвета зашиты в _theme.py, не трогай их в data — скрипт сам подставит.
Качество рендера
Топ-качество всегда. Все matplotlib-скрипты рендерят с dpi=260 и
bbox_inches="tight" — текст должен быть резким даже после сжатия
Telegram. Если правишь существующие скрипты или добавляешь новый —
держи dpi >= 240, не ниже. Размытый текст = негодная инфографика.
Если пользователь жалуется на размытость — сначала проверь dpi в
конкретном скрипте (grep dpi= gen_*.py), потом думай про шрифты.
Что НЕ делать
- Не использовать AI-генерацию картинок (gemini/fal/pollinations) для данных — цифры будут вымышленные.
- Не вызывать одновременно >1 скрипт без необходимости — пользователь видит одну картинку как главный визуал.
- Не выдумывать координаты — если города нет в
_cities.json, добавь lat/lon явно.
- Не пихать GIF когда статичной карты хватает (анимация для маршрута >2 плечей, не для прямого перелёта).