{/* 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 |
| 相关 skill | pixel-art |
参考:完整 SKILL.md
以下是 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。