跳到主要内容

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 包 [email protected] — 通过 npx 运行 (需要 Node ≥ 18,无需全局安装):

npx -y [email protected] --help

下文示例中凡是出现 $DYF 的地方,都改用 npx -y [email protected]。shell 变量在工具调用之间不会保留,因此每次都要粘贴完整命令。一切都在本地运行;用户的手写内容绝不会离开本机。

照片会以消息中的文件路径或通过网关图片缓存到达 Hermes — 请将实际文件路径用于 CLI。当对话中出现一张照片但没有任何路径时,向用户索要文件 (CLI 需要真实文件,而不是你记忆中的图像)。

视觉步骤(联系表、预览、字形表)请通过 vision_analyze 加载 PNG 来完成。

决定流程​

  • 用户还没有照片 → 提供模板:打印、书写、拍照。
  • 用户分享了一张或多张手写照片 → 走下方主流程。
  • 用户粘贴了图像但没有文件路径 → 你能看到它,但 CLI 需要一个文件。请让用户将该图像文件拖入终端 (这会插入其路径) 或直接给出路径。不要凭记忆继续。
  • 用户想要修改本次会话中构建的字体 → 参见精修部分。

模板流程(最佳质量)​

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

告诉用户:将其打印,用深色笔 (0.5 mm 以上) 在每个方框中写一个字符,让字母坐在实线上,然后在光线充足的环境下从正上方拍摄每一页,并分享文件路径。网格以浅灰色打印,并在处理过程中消失 — 只有他们的墨迹会保留下来。

主流程:照片 → 字体​

1. 分割。 同样适用于模板页和自由形式的照片:

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

2. 观察,然后标注。 用 vision_analyze 加载 work/contact-1.png (每张照片一个):每个检测到的斑块都有编号。这一步是你的眼睛发挥作用的地方 — 检查:

  • 每个写下的字符是否都恰好得到一个方框?由分离笔画绘制的字母可能显示为两个方框 (重新标注可处理:给主方框标注该字符,并将碎片标记为 ""),而两个相邻的字母可能共用一个方框 (请用户仅针对这些重新拍摄,或接受这个缺口)。
  • 垃圾方框 (阴影、横线、污渍、页面边缘) → 将其标注为 ""。

然后编写 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. 交付前先评判。 用 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. 交付。 字体生成在 <工作目录>/<去除空格的名称>.ttf (构建输出会打印出准确路径)。给出该路径以及安装方法: macOS — 双击 → "Install Font";Windows — 右键点击 → "Install"。 说明缺失的内容 (构建会打印出未覆盖的字母),并在不强推的情况下提供:

  • Web 格式 + 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 / 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

阅读并给出诚实、友善的评价:针对正文使用的十分制评分,最可能让人混淆的 2–3 组字母对 (rn→m、cl→d、I/l/1、O/0),以及一两条具体改进建议 (将那些字母写得更大、间距更宽)。注意展示用途 (标题、笔记) 比段落正文更宽容。切勿以此作为交付的前提 — 这是建议,而非阻碍。

故障排查​

分割找到的斑块过多/过少、灰色辅助线残留、阴影斑块、圆珠笔笔迹过淡 → 参见 references/troubleshooting.md。