Repolode
enpts

enpts/sho

浏览器中的毛笔书法渲染引擎,依据点列表模拟笔毫、墨色与飞白效果逐笔书写。

Star
12
Fork
0
未关闭 Issue
0
最近提交
前天

这是什么?

sho.js 是一个在浏览器中运行的毛笔书法渲染引擎。每一笔用一组点来描述,每个点可以设置位置、压力、笔锋角度、速度和停顿,引擎会在纸面画布上逐笔绘制。

引擎模拟毛笔的物理行为,包括单根笔毫的运动、沿笔画逐渐耗尽的墨量、速度较快时出现的飞白,以及停笔处的墨汁积聚和淡墨的晕染。勾、挑等笔法通过点的排布实现,而不是单独的预设。输出是确定性的,相同的数据和参数总会得到相同的画面。

它支持增量输入,因此可以把 LLM 的输出一行行实时写到纸上。项目只包含一个脚本和一张纸张图片,没有外部依赖,以全局对象 Sho 的形式加载,并附带演示页面和示例系统提示词。

核心功能

  • 01每一笔由带压力、角度、速度和停顿的点列表定义。
  • 02模拟笔毫、墨量消耗、飞白和停笔积墨。
  • 03淡墨支持 capillary 与 ring 两种晕染方式。
  • 04根据笔画坐标确定性渲染,可动画播放或即时绘制。
  • 05通过 StreamParser 支持 LLM 流式输出的实时书写。
  • 06无依赖,仅需一个脚本和一张纸张图片。

适用场景

  • 在网页或演示中展示逐笔书写的书法动画。
  • 让 LLM 以毛笔形式书写文字,用于视觉实验。
  • 生成确定性的书法图片并导出为 PNG。
  • 研究如何在 canvas 中近似模拟毛笔的物理效果。

快速上手

  1. 1

    将 sho.js 和 paper.webp 复制到同一文件夹

  2. 2

    在 HTML 页面中加载该脚本

    <script src="sho.js"></script>
  3. 3

    在画布上创建引擎并加入一笔

    const engine = new Sho.Engine(document.getElementById('paper'), { pxPerUnit: 1 });

使用前须知

  • 没有 npm 包或 ES 模块版本,只能作为普通脚本加载。
  • 仅在 Chrome 中测试,需要支持 canvas 和 DOM 的浏览器。
  • 项目处于早期阶段,星标较少(9 个),社区规模较小。

标签

#calligraphy#canvas#javascript#generative-art#brush-simulation#llm-streaming

常见问题

sho 是什么?
浏览器中的毛笔书法渲染引擎,依据点列表模拟笔毫、墨色与飞白效果逐笔书写。 sho.js 是一个在浏览器中运行的毛笔书法渲染引擎。每一笔用一组点来描述,每个点可以设置位置、压力、笔锋角度、速度和停顿,引擎会在纸面画布上逐笔绘制。
sho 可以免费使用吗?用的什么许可证?
sho 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
sho 还在维护吗?
活跃维护中。sho 最近一次提交是在 2026年11月5日。
sho 适合用来做什么?
在网页或演示中展示逐笔书写的书法动画。 让 LLM 以毛笔形式书写文字,用于视觉实验。 生成确定性的书法图片并导出为 PNG。 研究如何在 canvas 中近似模拟毛笔的物理效果。
sho 怎么安装和运行?
将 sho.js 和 paper.webp 复制到同一文件夹 在 HTML 页面中加载该脚本: <script src="sho.js"></script> 在画布上创建引擎并加入一笔: const engine = new Sho.Engine(document.getElementById('paper'), { pxPerUnit: 1 });
在哪里获取 sho?
源代码和安装说明在 GitHub 上:https://github.com/enpts/sho

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目