mcpField
D
draw-your-font

draw-your-font

github.com/danilo-znamerovszkij设计与 UI839398 次安装12 周前更新
代码仓库

关于 draw-your-font

draw-your-font 可将手写照片制作为可安装字体,由 CLI 处理描摹与组装,使用者负责识别、标注和检查字符。

主要功能

  1. 01分割手写照片
  2. 02标注检测到的字形
  3. 03生成 TTF 字体
  4. 04调整字重与平滑度
  5. 05导出网页字体格式
  6. 06预览并评估可读性

适用场景

  1. 01根据模板纸制作字体
  2. 02将自由书写转换为字体
  3. 03构建后调整字形

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danilo-znamerovszkij/draw-your-font --skill draw-your-font

安装后在 Claude Code 中输入/draw-your-font确认已加载。

附带文件references/troubleshooting.mdscripts/resolve-cli.js

详细介绍

draw-your-font

将手写字母照片转换为 → 可安装的字体。由你来观察 (找出并标注字母、判断质量);CLI 负责所有几何处理(描摹、 度量、字体组装)。请勿自行编辑 SVG 路径或坐标。

设置(每个会话一次)

运行一次 node <skill-dir>/scripts/resolve-cli.js。它会输出要使用的 CLI 调用命令(例如 node /abs/path/src/cli.js)。在下文示例中看到 $DYF 时, 请替换为输出的命令——Shell 变量不会在不同工具调用之间保留,所以每次都要粘贴实际命令。

如果报错,请在提示的位置运行 npm install(或运行 npm i -g draw-your-font)并重试。需要 Node ≥ 18。所有操作均在本地运行; 不会上传任何内容。

选择流程

  • 用户还没有照片 → 提供模板:打印、书写、拍照。
  • 用户分享了手写字照片 → 使用下方的主要流程。
  • 用户粘贴了图片,但没有文件路径 → 你可以看到图片,但 CLI 需要文件。请让用户将图片文件拖入终端(这样会插入文件路径),或直接提供路径。不要凭记忆继续操作。
  • 用户想修改本次会话中生成的字体 → 查看“优化”部分。

模板流程(质量最佳)

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

告诉用户:打印模板,用深色笔(0.5 mm 或更粗)在每个方框内写一个字符,让字母落在实线上,然后在光线充足的地方从上方拍摄每一页,并分享文件路径。网格以浅灰色打印,在处理过程中会消失——只会保留用户写下的墨迹。

主要流程:照片 → 字体

1. 分割。 模板页和自由拍摄的照片都适用:

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

2. 查看,然后标注。 读取 work/contact-1.png(每张照片一张):每个 检测到的墨迹块都已编号。此时需要用眼睛检查:

  • 每个书写字符是否都恰好对应一个框?分开笔画绘制的字母可能会显示为两个框(重新标注即可处理:将主要框标为该字符,并将笔画片段标为 "");两个相连的字母也可能共用一个框(请用户只重拍这些字母,或接受这个缺口)。
  • 无用框(阴影、横线、污渍、页面边缘)→ 标为 ""。

然后编写 work/labels.json,将墨迹块 ID 映射到字符,例如: {"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. 交付前评估。 读取 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 - 右键 → “安装”。 说明缺少哪些字符(构建过程会打印未覆盖的字母),并主动提供以下选项,但不要强求:

  • Web 格式 + CSS:使用 --formats ttf,woff,woff2,css 重新构建。
  • 可读性检查(见下文)。
  • 用户拍摄下一张照片以补齐缺失字符:将所有照片(旧照片和新照片)重新分割到全新的工作目录中 - $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

请阅读并给出诚恳、友善的评价:正文使用评分(满分 10 分)、最容易混淆的 2–3 组字母组合(rn→m、cl→d、I/l/1、O/0),以及一两条具体的改进建议(把这些字母写得更大、增加间距)。请注意,与段落相比,用于展示(标题、注释)时的要求更宽松。绝不要以此为由拒绝交付——这只是建议,不是交付的前提。

故障排除

分割结果中斑点过多 / 过少、灰色辅助线残留、阴影斑点、淡色圆珠笔笔迹 → 请参阅 references/troubleshooting.md。

评论

支持 Markdown