{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}

Draw Your Font

把手写字母的照片变成可安装的字体。

Skill 元数据

来源可选 — 通过 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
相关 skillpixel-art

参考:完整 SKILL.md

INFO

以下是 Hermes 在触发本 skill 时加载的完整 skill 定义。这是 agent 在 skill 激活时所看到的指令内容。

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。Shell 变量在两次工具调用之间不保留,所以每次粘贴完整命令。一切都在本地运行;用户的手写笔迹永远不离开这台机器。

照片在 Hermes 里要么作为消息中的文件路径到达,要么经网关图片缓存到达——给 CLI 用真实文件路径。当一张照片落进对话却没有路径时,向用户要文件(CLI 需要真文件,不是你对图片的记忆)。

视觉步骤(联系表、预览、字形表)用 vision_analyze 加载 PNG 来做。

决定流程

  • 用户还没有照片 → 提供模板:打印、书写、拍照。
  • 用户分享了手写照片 → 下面的主流程。
  • 用户贴了图但没有文件路径 → 你能看到,但 CLI 需要文件。让他们把图片文件拖进终端(会插入路径)或直接给路径。别凭记忆继续。
  • 用户想改本会话已建好的字体 → 见 Refine 节。

模板流程(最佳质量)

$DYF template -o template.pdf --charset minimal   # or: spanish

告诉用户:打印它,用深色笔(0.5mm+)每个格子写一个字符,让字母坐在实线上,然后在好光线下从正上方拍下每页,分享文件路径。网格印成浅灰,处理时会消失——只有他们的墨迹留下来。

主流程:照片 → 字体

1. 切分。 模板页和自由照片都适用:

$DYF segment photo1.jpg photo2.jpg -d work

2. 看,然后标注。 用 vision_analyze 加载 work/contact-1.png(每张照片一张):每个检测到的 blob 都有编号。这一步靠你的眼睛——检查:

  • 每个写过的字符是否恰好得到一个格子?用分开笔画画的字母可能出现两个格子(relabel 能处理:把主格子给该字符,碎片标 ""),两个挨在一起的字母可能共用一个格子(让用户只重拍那几个,或接受这个缺口)。
  • 垃圾格子(阴影、格线、污痕、纸边)→ 标 ""。

然后写 work/labels.json,把 blob 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. 交付前评判。 用 vision_analyze 加载 work/preview.png 和 work/glyphs.png,像艺术总监一样挑剔:

  • 字母破损或斑驳(描边差)→ 常是笔痕太淡;试 --weight 1,或只让用户重拍那个字母。
  • 整体太细/太粗 → 用 --weight 1 / --weight -1 重建。
  • 边缘锯齿 → 用 --smooth 1.5(最高 2)重建。
  • 字母位置错(例如 g 没下沉)→ 通常是标注错;改 labels.json 重建。
  • 字碗被填满(b、o、g 看起来实心):绝不该发生——若发生,是裁切沾污了;要求重拍。

重建很便宜,放心迭代。先自己能修的修掉;只有当源头墨迹本身是问题时才麻烦用户重拍。

5. 交付。 字体落在 <workdir>/<NameWithoutSpaces>.ttf(构建输出会打印确切路径)。给出该路径和安装方法:macOS —— 双击 → "Install Font";Windows —— 右键 → "Install"。说明缺了什么(构建会打印未覆盖的字母),并顺势(不强推)提供:

  • Web 格式 + CSS:用 --formats ttf,woff,woff2,css 重建。
  • 易读性报告(见下)。
  • 他们的下一张照片来补缺字:把所有照片(新旧)用 segment 重跑到一个新 workdir——$DYF segment p1.jpg p2.jpg -d work2——然后从新联系表重新标注(blob id 重新编号;旧 labels.json 不沿用),从新 workdir 构建。

微调(对话式迭代)

用户说做
"更平滑/更圆"build … --smooth 1.5(最高 2)
"更粗/更黑"build … --weight 1(最高 2)
"更细/更轻"build … --weight=-1(负数要用 = 形式)
"那个 g 不好看"给他们看那个字母的 work/crops/<id>.png;提供重拍或平滑
"字母错了"/要换改 labels.json,重建
"给我 woff2 / web"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),以及一两个具体修法(把这些字母写大点、多留间距)。说明展示用途(标题、便签)比段落正文宽容。绝不要用它卡交付——这是建议,不是阻断。

故障排查

切分得到的 blob 太多/太少、灰色引导线残留、阴影 blob、淡圆珠笔痕 → 见 references/troubleshooting.md。