Community图像github.com

文字转手写笔记

将任何内容(PDF、粘贴的文本、解答、网页、页面或白板的照片)转换为看起来像手写的页面,可以模拟真实笔记本页面的手机照片(方格纸、横线纸或Seyès纸),也可以生成干净的iPad页面,导出为PDF或PNG。支持内置默认手写体,或从用户已有的笔记照片中学习其个人笔迹。数学公式由手绘风格绘制(分数、求和、积分、根号、区间、希腊字母)。

文字转手写笔记 是什么?

本技能是一款基于Python脚本(`scripts/handnotes.py`)的工具,能将文本内容渲染为逼真的手写笔记页面。它支持多种输入格式(PDF、文本、图片、网页内容等),并允许用户选择两种输出风格:模拟真实笔记本页面的手机照片(含不均匀光线、条线偏移等效果)或干净的iPad风格页面。用户可使用内置的默认手写字体,或通过学习用户提供的笔记照片来生成其个人笔迹,并获得更自然的书写效果。该工具支持丰富的数学公式手绘渲染(包括分数、积分、求和、根号、希腊字母等),并提供了详细的页面布局标记语法(如标题、列表、待办事项、高亮、下划线等)。渲染过程可高度自定义:可选择纸张类型(方格、横线、点阵、空白等)、墨水颜色(蓝、黑、红、绿、紫、铅笔色)、页面尺寸(A4、Letter、iPad等),以及是否生成多页PDF或PNG图片。对于复杂的手写学习流程,技能提供了从照片切割、片段标注到笔迹模型构建的完整步骤,最终可以生成可复用的手写文件夹。该技能适用于ChatGPT和Claude的代码沙箱环境。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/yahyaraissouni/text-to-handwritten-notes-skill/tree/HEAD

Installed? Explore more 图像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

文字转手写笔记 是做什么的?

你可以将内容转换为看起来像手写的页面。渲染脚本是 scripts/handnotes.py。它只需要 Python 环境,以及 Pillow 和 numpy 库,这些库在 ChatGPT 和 Claude 的代码沙箱中已经预装。

默认结果: 手机拍摄的方格纸笔记本页面照片,蓝色墨水,使用内置的默认手写体。如果用户没有特别要求,就以此为准。

步骤 0:确定使用谁的笔迹

简单询问一次:“请尽可能多地发送您自己手写的照片(任何您已经写过的页面:笔记、作业均可)。否则,我将使用默认的手写体。”

  • 没有照片: 使用默认手写体。无需再次询问。
  • 有照片: 首先学习它们(请参阅下方的 从照片学习笔迹 部分),然后使用 --hand their-hand 参数进行渲染。提供的照片越多,每个字母的样本就越多,最终效果也越自然。3 到 6 页是比较合适的数量。

步骤 1:读取输入内容

  • PDF: 使用 pypdf、pdftotext 或你自己的阅读器提取文本。如果是扫描版 PDF,请查看页面图像。
  • 照片、截屏、白板: 请利用你的视觉能力自行读取内容。不要运行 OCR 库。
  • 文本、解题过程、网页: 直接使用原始内容。

步骤 2:编写页面内容

分为两种情况。

  • 课堂笔记: 写出一个好学生应记的内容。使用简短的句子、关键词,保留原文的结构,篇幅约为原文的 15% 到 30%。
  • 用户给出的解题过程或作业: 保留每一个步骤和每一个数字。按照学生在纸上书写的方式书写:使用 1/、a) 和 b) 作为标签,每个公式占一行,步骤之间用 => 连接。不要添加 AI 风格的装饰:不要出现“提示:”,不要到处高亮,不要加粗。只有当用户会这样做时,才在最终结果下划下划线或加上 !!。

保留用户原有的语言。确保数字、名称和公式完全准确。

书写标记语法:

# 标题                  ## 主标题                ### 副标题(下划线)
- 项目符号(缩进两个空格表示更深一级)                1. 编号列表
-> 箭头行               !! 重要行(红色)   > 边注(强调墨水颜色)
[ ] 待办事项   [x] 已完成(打勾)   --- 分隔符        空行 = 跳过一行
行内:==高亮==  **加粗**  __下划线__  ~~删除线~~  {red}彩色墨水{/}  ->  (绘制箭头)
\$  = 美元符号      $...$ 行内公式      $$...$$ 单独一行 = 独立公式

数学公式。 将每个公式都放在 $...$ 内,即使是像 $x^2$ 或 $E_2$ 这样的短公式。支持的语法包括: \frac{a}{b},\sum_{k=1}^{n},\prod,\int_a^b,\lim_{n \to +\infty},\sqrt{x},\sqrt[3]{x},x^{n+1},x_i,\left( ... \right),\binom{n}{k},\vec{u},\bar{x},\mathbb{R},\text{...},\mid,希腊字母,\in \subset \cup \cap \emptyset \forall \exists \leq \geq \neq \approx \pm \times \cdot \infty \to \implies \iff,以及空格 \, \; \quad。

数字的写法应与原始内容一致(如 0,81 或 0.81),大数字在公式中应写为 50\,000。区间的写法应与阅读习惯一致:如 $[0, 1[$。将较大的公式单独放在 $$...$$ 行。如果公式在页面上过宽,会自动缩小以适应,但如果将长公式在 = 处拆分成两行,看起来会更自然。

将页面保存为 notes.md。

步骤 3:渲染

python scripts/handnotes.py render notes.md -o notes.pdf

这将生成默认效果:笔记本照片风格,方格纸,蓝色墨水,默认手写体。仅在用户有特定要求时才修改以下选项:

选项取值
--stylenotebook(手机拍摄的真实页面照片:不均匀光线,条线轻微偏移,纸张倾斜,圆珠笔油墨) · ipad(独立引擎:字母笔触实心平滑,类似 Apple Pencil 在干净页面上的效果)
--papersquared(笔记本风格)或 grid(iPad 风格),横线(lines),college,Seyès,点阵(dots),空白(blank)
--handdefault,或由 build-hand 或 learn 命令生成的文件夹路径
--font使用手写字体替代:caveat, kalam, patrick, gochi, indie, playpen
--inkblue(笔记本风格)或 black(iPad 风格),red, green, purple, pencil
--pagea4, letter, ipad, ipad-landscape
--seed N每次渲染使用相同的随机种子;更改 N 值可获得不同的随机效果

使用 -o notes.png 可以输出图片(notes-1.png、notes-2.png 等),而不是 PDF。

步骤 4:检查,然后交付

查看第一页(如果你无法浏览 PDF,可以渲染成 PNG 格式)。确保没有行超出页面边界或重叠在一起,并且每个数字都与原始内容一致。确认无误后,将文件交给用户。

从照片学习笔迹

此功能适用于用户已写好的任何页面。他们不需要填写任何额外的内容。

  1. 切割: python scripts/handnotes.py segment p1.jpg p2.jpg p3.jpg -o hand-work 此命令会移除笔记本的印刷线条,切割出每个墨迹片段,并将它们保存为按顺序编号的子页 hand-work/sheet-pageN-K.png。

  2. 标注: 查看每个子页。你能够阅读原始照片的内容,因此你知道这些页面上写了什么。编写 hand-work/labels.json 文件(页码按照照片的顺序排列):

    {"1": {"12": "a", "13": "(", "40": "the", "41": "7"}, "2": {"5": "é", "9": "dy"}}
    
    • 只标注你有把握的片段。跳过任何不清晰的、被切一半的、与相邻片段粘连的、被划掉的,或仅仅是线条片段的子页。
    • 一个包含多个连接字母的片段可以标注为对应的单词或字母组合(如 "the"、"le"、"qu")。当该序列再次出现时,会重新使用这个片段,这样看起来非常自然。
    • 目标是为每个小写字母和每个数字至少提供 2 到 3 个样本。
  3. 构建: python scripts/handnotes.py build-hand hand-work hand-work/labels.json -o their-hand 此命令会规范化大小和墨水浓度,丢弃切割不佳的样本,并从书写者自己的笔画中(例如从 n 生成 u,从两个 n 生成 m,从两个 v 生成 w,以及 r、q)构建缺失的字母。重音符号(é è à ê ç ë)会绘制在相应的无重音字母上。它将打印出字体仍然代表的字母。

  4. 检查一次渲染效果。 查看一个页面,并放大任何看起来变形或太淡的字母。在 their-hand/glyphs 目录(记录在 their-hand/hand.json 中)中找到该字母的样本,删除对应子页的错误标注,然后重新构建。

请保留 their-hand 文件夹:这是用户的笔迹。你可以将其打包成 zip 文件,方便用户下次重复使用。

另有一个模板路径(先运行 template,再运行 learn):用户会填写一片 2 页的方框网格。这样得到的效果更干净,但对用户来说工作量更大,所以仅在用户更喜欢这种方式时提供。

相关技能