关于 draw-your-font
draw-your-font 可将手写照片制作为可安装字体,由 CLI 处理描摹与组装,使用者负责识别、标注和检查字符。
主要功能
- 01分割手写照片
- 02标注检测到的字形
- 03生成 TTF 字体
- 04调整字重与平滑度
- 05导出网页字体格式
- 06预览并评估可读性
适用场景
- 01根据模板纸制作字体
- 02将自由书写转换为字体
- 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。