Генерация карт для постов скриптами
[python |
inkscape |
llm
]
Abstract
Вайбкодим скрипты на питоне для редактирования SVG и генерации PNG.
Introduction
До недавнего времени для каждого поста про новый регион карту я генерил руками. У меня есть базовый SVG со всеми регионами, который надо было открыть в редакторе, закрасить заливкой нужный регион и экспортировать в PNG.
Не то, чтобы последнее время я часто куда-то ездил, но меня калит делать руками то, что можно автоматизировать.
И вот недавно у меня дошли руки всё это исправить. Заодно попробовал вайбкодить в больших масштабах, чем раньше.
Methods
- Python 3.9.1
- Inkscape 1.4.3
Первым делом я убедился, что у векторного редактора, которым я пользуюсь, Inkscape, есть консольная обёртка, которая как минимум умеет генерить PNG из SVG также, как и UI-версия. Это хорошо.
Сочиняем команду генерации PNG:
"inkscapecom.com INPUT.SVG --export-width=1000 --export-type=PNG --export-area-drawing --export-filename=OUTPUT.PNG
Следующая часть задачи — выделение красной заливкой каждого региона в SVG. Я честно попытался работать с SVG как с XML разными питоновскими либами, но в итоге плюнул и сделал по-простому.
Базовый SVG так устроен, что свойства всех элементов, определяющих все регионы одинаковые и расположены на отдельных строчках. Поэтому я просто взял и… нашёл их по подстроке. И заменил на строку с красной заливкой. И всё.
Чтобы LLM написала мне нужный код без сюрпризов, я стараюсь разбивать задачи на максимально простые, и подробно описывать алгоритм по шагам, как ребёнку джуну.
напиши скрипт на питоне 3, который:
* получает на вход 2 аргумента, первый — путь к входному файлу, второй — путь к целевой папке
* читает входной файл
* ищет в нём вхождения маркера marker1
* для каждого вхождения:
* ...
На выходе после этого этапа мы имеем кучу PNG файлов с именами 01-89 для всех регионов.
* 01.png
* 02.png
* ...
Далее нужно переименовать их по названию регионов. Для этого мы берём список субъектов РФ из википедии, чистим, через LLM переводим и получаем список на английском языке, где на каждой N-ой строчке N-ый регион. Остаётся только навайбкодить ещё один скрипт, который читает это файл-словарь и переименовывает файлы.
* adygea.png
* altai.png
* ...
Нюансы промптов
- использовать плейсхолдеры вместо реальных данных: имена файлов и папок, константы, регексы и прочее
- максимально абстрагировать задачу: не
перемести фотки из папки "отпуск" в папку "архив", аперемести файлы с расширением XXX из папки1 в папку2 - указывать нефункциональные требования, если они нужны: логирование, обработку ошибок, параллельность и прочее
Results
Конкретные промпты для скриптов не сохранял, т.к. они делались итеративно + часть скриптов я объединил у себя в один + всё равно их пришлось чистить.
К сожалению, работает (пока) только с более-менее простыми задачами, но и так неплохо, по времени точно быстрее, чем писать самому.
Все скрипты можно посмотреть здесь.