Draw Your Font
Превратите фото почерка в устанавливаемый TTF-шрифт.
Метаданные навыка
| Источник | Опциональный — установите командой hermes skills install official/creative/draw-your-font |
| Путь | optional-skills/creative/draw-your-font |
| Версия | 0.1.0 |
| Автор | Danilo Znamerovszkij (https://github.com/danilo-znamerovszkij/draw-your-font), портировано Hermes Agent |
| Лицензия | MIT |
| Платформы | linux, macos, windows |
| Теги | font, handwriting, typography, ttf, woff, vision, creative |
| Связанные навыки | pixel-art |
Справочник: полный SKILL.md
Ниже приведено полное определение навыка, которое Hermes загружает при его активации. Именно это агент видит в качестве инструкций, когда навык задействован.
draw-your-font
На входе — фото рукописных букв, на выходе — устанавливаемый шрифт. Видеть (находить и подписывать буквы, оценивать качество) — ваша задача; всю геометрию (трассировку, метрики, сборку шрифта) делает CLI. Никогда не редактируйте SVG-пути или координаты вручную.
Настройка в Hermes (один раз за сессию)
CLI — это зафиксированный npm-пакет draw-your-font@0.1.0, запускается через npx (нужен Node ≥ 18, глобальная установка не требуется):
npx -y draw-your-font@0.1.0 --help
Везде, где в примерах ниже указано $DYF, подразумевается npx -y draw-your-font@0.1.0. Переменные оболочки не сохраняются между вызовами инструментов, поэтому каждый раз вставляйте полную команду. Всё выполняется локально; почерк пользователя никогда не покидает машину.
Фото попадают в Hermes либо как путь к файлу в сообщении, либо через кэш изображений шлюза — используйте с CLI реальный путь к файлу. Если фото оказалось в переписке без пути, попросите у пользователя файл (CLI нужен настоящий файл, а не ваше представление об изображении по памяти).
Визуальные шаги (контрольные листы, превью, листы глифов) выполняйте, загружая PNG через vision_analyze.
Определите сценарий
- У пользователя ещё нет фото → предложите шаблон: распечатать, написать, сфотографировать.
- Пользователь прислал фото почерка → основной сценарий ниже.
- Пользователь вставил изображение, но пути к файлу нет → вы видите картинку, но CLI нужен файл. Попросите перетащить файл изображения в терминал (это вставит путь) или указать путь напрямую. Не действуйте по памяти.
- Пользователь хочет изменить шрифт, собранный в этой же сессии → раздел «Доработка».
Сценарий с шаблоном (лучшее качество)
$DYF template -o template.pdf --charset minimal # или: spanish
Скажите пользователю: распечатать, написать по одному символу в клетке тёмной ручкой (0,5 мм и толще), удерживая букву на сплошной линии, затем сфотографировать каждую страницу сверху при хорошем освещении и прислать пути к файлам. Сетка печатается светло-серым и исчезает при обработке — остаются только чернила.
Основной сценарий: фото → шрифт
1. Сегментация. Работает одинаково и для страниц шаблона, и для произвольных фото:
$DYF segment photo1.jpg photo2.jpg -d work
2. Посмотрите, затем подпишите. Загрузите work/contact-1.png через vision_analyze (по одному на фото): каждый обнаруженный
объект пронумерован. На этом шаге важен именно ваш взгляд — проверьте:
- Получила ли каждая написанная буква ровно один бокс? Буква, написанная
раздельными штрихами, может распасться на два бокса (это исправляется
переразметкой: основному боксу присвойте символ, а фрагменту —
""), а две соприкасающиеся буквы могут попасть в один бокс (попросите пользователя переснять именно эти буквы или смиритесь с пропуском). - Мусорные боксы (тени, линии разметки, смазанные пятна, края страницы) →
подпишите их
"".
Затем создайте work/labels.json, сопоставив id объекта с символом, например:
{"0": "A", "1": "B", "7": "", "8": "a"}:
- Страница-шаблон: порядок — тот же, что напечатан на шаблоне (порядок
набора символов) — сверяйтесь с листом, а не полагайтесь на память
вслепую. Порядок minimal: A–Z, a–z, 0–9, затем
.,;:!?'"-()@#&+/$; spanish добавляетÑñÁÉÍÓÚáéíóúü¿¡. - Произвольные фото: определяйте каждую букву по контрольному листу. Заглавную и строчную для похожих по форме пар (S/s, O/o, C/c, X/x…) различайте по относительному размеру и положению — сверяясь с соседними буквами, в которых вы уверены.
- Пользователь сказал, что именно он написал (например, «ABC, затем abc»)? Доверяйте этому, сопоставляйте в порядке чтения (сначала верхняя строка, слева направо) и проверяйте визуально.
- Одна и та же буква встречается дважды → подпишите ту, что написана
лучше, а другую пометьте
"".
3. Сборка.
$DYF build -d work --labels work/labels.json --name "Dan's Hand"
Назовите шрифт в честь пользователя (если неясно, как — задайте один короткий уточняющий вопрос, не больше).
4. Оцените перед выдачей. Загрузите work/preview.png и work/glyphs.png через vision_analyze
и разберите их критически, как арт-директор:
- Разорванные или смазанные буквы (плохая трассировка) → часто причина в
слабом нажиме ручки; попробуйте
--weight 1или попросите переснять именно эту букву. - Всё слишком тонкое/толстое → пересоберите с
--weight 1/--weight -1. - Рваные края → пересоберите с
--smooth 1.5(до 2). - Буква стоит не на месте (например,
gне опускается ниже базовой линии) → как правило, это ошибка подписи; исправьте labels.json и пересоберите. - Закрашенные полости букв (b, o, g выглядят сплошными): такого быть не должно — если это случилось, значит, кроп смазан; попросите переснять.
Пересборка дешёвая и безопасная для итераций. Сначала исправляйте всё, что можете сами; просить пользователя о пересъёмке стоит только тогда, когда проблема в самих чернилах.
5. Выдача. Шрифт окажется по пути <workdir>/<ИмяБезПробелов>.ttf (вывод
сборки печатает точный путь). Сообщите этот путь и как установить шрифт:
macOS — двойной клик → «Install Font»; Windows — правый клик →
«Install». Упомяните, чего не хватает (сборка выводит непокрытые
буквы), и предложите, не навязывая:
- Веб-форматы + CSS: пересобрать с
--formats ttf,woff,woff2,css. - Проверку читаемости (см. ниже).
- Прислать ещё одно фото для недостающих символов: запустите segment
заново со ВСЕМИ фото (старыми и новыми) в новую рабочую директорию —
$DYF segment p1.jpg p2.jpg -d work2— затем переразметьте по новым контрольным листам (id объектов перенумеровываются, старый labels.json не переносится) и соберите из новой рабочей директории.
Доработка (диалоговая итерация)
| Пользователь говорит | Действие |
|---|---|
| «более гладко / округлее» | build … --smooth 1.5 (максимум 2) |
| «толще / жирнее» | build … --weight 1 (максимум 2) |
| «тоньше / светлее» | build … --weight=-1 (для отрицательного значения нужна форма с =) |
| «буква g выглядит плохо» | покажите work/crops/<id>.png для этой буквы; предложите пересъёмку или сглаживание |
| «не та буква» / замена | отредактируйте labels.json, пересоберите |
| «дай мне woff2 / для веба» | build … --formats ttf,woff,woff2,css |
| произвольный текст превью | $DYF preview -d work --text "…" (после сборки) |
Все команды доработки пересобирают шрифт из сохранённых кропов — повторная съёмка не нужна, если проблема не в самих чернилах.
Отчёт о читаемости (предложите после выдачи)
$DYF preview -d work --text "minimum mill rn m cl d I l 1 O 0 quick brown fox" -o work/legibility.png
Изучите результат и дайте честную, доброжелательную оценку: балл из 10 за пригодность для основного текста, 2–3 пары букв, которые чаще всего путаются (rn→m, cl→d, I/l/1, O/0), и одно-два конкретных предложения по исправлению (переписать эти буквы крупнее, добавить межбуквенный интервал). Отметьте, что для крупного текста (заголовки, пометки) шрифт прощает больше огрехов, чем для сплошных абзацев. Никогда не блокируйте выдачу шрифта из-за этого отчёта — это совет, а не препятствие.
Диагностика проблем
Сегментация нашла слишком много или слишком мало объектов, серые
направляющие линии не исчезают, остаются тени, слабые следы шариковой
ручки → см. references/troubleshooting.md.