title: “Draw Your Font — Turn a handwriting photo into an installable TTF font” sidebar_label: “Draw Your Font” description: “Turn a handwriting photo into an installable TTF font”
{/* 本页面由 website/scripts/generate-skill-docs.py 根据技能对应的 SKILL.md 文件自动生成。请直接编辑源文件 SKILL.md,而非此页面。 */}
绘制字体
将手写照片转换为可安装的 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 内容
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 需要的是文件路径。请让用户将图像文件拖入终端(这样即可自动获取路径),或直接提供路径。切勿凭记忆继续操作。
- 用户希望修改当前会话中生成的字体 → 转至“优化”部分。
模板处理流程(最佳质量)
$DYF template -o template.pdf --charset minimal # or: spanish
请告知用户:将其打印出来,使用粗头笔(0.5毫米及以上)在每个方格中填写一个字符,确保字母位于实线上,然后在光线充足的情况下从上方拍摄每一页,并分享文件路径。网格线会以浅灰色显示,在处理过程中会消失——仅有字符的墨迹会保留下来。
主要流程:照片 → 字体
1. 分割。 该步骤既适用于模板页面,也适用于自由格式的照片:
$DYF segment photo1.jpg photo2.jpg -d work
2. 先识别,再标注。 使用 vision_analyze 工具加载 work/contact-1.png 文件(每张照片处理一张):系统会为每个检测到的字符块编号。这一步需要仔细观察——请检查以下内容:
- 每个文字字符是否都被准确标记为一个框?若某个字母由多笔笔画构成,可能会被拆分为两个框(可通过重新标注功能解决:将主要部分标记为该字符,再将碎片部分标记为
"");而两个相邻的字母则可共享一个框(可选择让用户重新拍摄这些部分,或直接接受这种间隔)。 - 干扰项框(如阴影、横线、污渍、页面边缘等)→ 应将其标注为
""。
随后编写 work/labels.json 文件,将字符块编号与对应字符建立映射关系,例如:{"0": "A", "1": "B", "7": "", "8": "a"}:
- 模板页面:顺序需遵循模板上标注的字符集顺序——建议对照实际文档进行验证,而不要盲目信赖模板。最基础的顺序为:A–Z、a–z、0–9,之后是
.,;:!?'"-()@#&+/$;西班牙语版本还会追加ÑñÁÉÍÓÚáéíóúü¿¡。 - 自由输入页面:需从拍摄的文档中逐个识别字符。对于形状相似的字母(如 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系统双击文件后选择“安装字体”;Windows系统右键点击后选择“安装”。同时指出仍有缺失的字母(生成结果会列出未处理的字母),并在不强行要求的情况下提供解决方案。
- 网页格式 + CSS:使用
--formats ttf,woff,woff2,css重新生成。 - 可读性检测(见下文)。
- 用下一张照片填补缺失的字符:将所有照片(旧图和新图)放入新的工作目录中重新运行该处理步骤——即
$DYF segment p1.jpg p2.jpg -d work2——然后根据新的联系表重新标记文件名(数据块编号会重置;旧的 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 文件。