font + tokenizer → token-space font,其中每个 token 等宽

试试看!

The quick brown fox ate the load-bearing strawberry You have nothing to lose but your chains of thought I hope this helps the user gain empathy for the assistant

在上方输入或粘贴你的文本。编译新字体会将此预览切换到该字体。

编译你自己的

下载字体·CSS·构建报告

你的文件保留在此浏览器中。大型 tokenizer 可能需要几分钟。

在 Discord 中通过 Vesktop 使用

主题字体:DeepSeek V4.1 Flash × Inter

Discord 用户 ID(可选)
留空则应用于所有消息。我们强烈建议输入特定 em 的 ID,这样只有它的消息会使用 token 字体。

设置说明
  1. 要使用 gg sans,请选择gg sans (Discord),选择一个 tokenizer 预设或上传,然后点击编译字体。主题下载始终与预览中当前的字体匹配。
  2. 下载字体并在 Font Book 中打开 TTF。点击安装。安装编译后的字体,即使你已经拥有普通的 gg sans。
  3. 我们强烈建议在上方输入特定 em 的 Discord ID;留空则应用于所有消息。下载.theme.css文件。要查找 ID,请启用 Discord 的设置 → 高级 → 开发者模式,然后右键点击该用户并选择复制用户 ID。
  4. 如果你输入了 ID,请打开 Vesktop 的设置 → Vencord → 插件并启用ThemeAttributes。如有提示请重启。
  5. 打开设置 → Vencord → 主题 → 本地主题 → 打开主题文件夹。将下载的.theme.css文件移动到该文件夹。返回主题,如有需要点击加载缺失的主题,然后启用该主题。
  6. 用⌘Q完全退出 Vesktop 并重新打开,以便它识别已安装的字体。

将 Vencord Location 保持当前设置。这是一个主题,因此不需要自定义 Vencord 构建或 UserFonts 插件。如果同一用户的旧字体主题发生冲突,请禁用它们。

如果消息看起来没有变化,请检查编译后的字体是否已安装,以及此主题是否已启用。如果针对的是某个 ID,还要检查 ThemeAttributes 是否已启用,以及该 ID 是否正确。代码块保留 Discord 的常规等宽字体。额外的 token 间距默认为零;行高和词间距遵循 Discord。

在 Slack 中使用它

Slack 字体:DeepSeek V4.1 Flash × Inter

智能体显示名称或成员 ID

使用每个智能体消息上方显示的准确显示名称,或使用 Slack 成员 ID,例如 U012345678。每行一个。只有匹配的消息才会改变。

设置说明
  1. 下载上面的字体,并在你阅读 Slack 的设备上安装其 TTF。
  2. 输入智能体的 Slack 显示名称或成员 ID,然后下载.user.js文件。
  3. 将该文件导入浏览器中的用户脚本管理器,启用它,然后重新加载网页版 Slack。

该用户脚本会读取页面中的发送者标签,并为匹配的消息文本设置样式,包括新消息和线程。它不发起网络请求,也不修改消息文本。代码块保留等宽字体。如果你编译了其他字体,请一并下载并安装该字体及其新生成的用户脚本。如果较旧的 Token Mono Slack 脚本针对的是同一个智能体,请将其禁用。

这适用于在带有用户脚本管理器的浏览器中使用网页版 Slack。浏览器 shaping 会运行,格式化 span 可能会改变 token 边界。

哪些功能可用?

列出的预设使用特定于 tokenizer 的编译器路径。这些包括 DeepSeek、OpenAI、Kimi、Qwen、GLM、Llama 3、Trinity 和 Laguna;Gemma 和 Gemini 具有实验性的空格标记/字节回退支持。ctok 使用单独的最小成本后端。也接受 Raw ByteLevel BPE,配合use_regex: false和add_prefix_space: false。上传的 pipeline 必须匹配受支持的 profile;任意 normalizer、WordPiece 和 Unigram 通常不受支持。被接受并不意味着对每个输入都能精确 tokenize。

输出是单个 TTF,分词器内置于其字形整形规则中。显示它不需要分词器脚本。它使用你字体的默认变体和字符覆盖范围。缺失字符可能使用缺字形轮廓或系统回退,除非你启用回退字体,后者会将选定的回退轮廓嵌入同一个 token 字体中。覆盖范围仍取决于所选的来源。Noto Emoji 是默认的 emoji 回退;Mutant Standard 是可选的彩色来源,有单独的许可要求。预编译的 DeepSeek + Inter 预览已包含 Noto Emoji。

在受支持的整形运行中,每个输出的 token 占 3 em。额外的 token 间距默认为零,上限为 0.5 em。生成的 CSS 不改变词间距和行高。浏览器制表位、硬换行和空白处理的行为与普通 token 单元格不同。

注意:浏览器整形运行、换行、规范化和复杂文字系统可能会改变结果。受支持的水平字距对调整会保留,但上下文整形并非普遍保留。这是一个 token 字体,不是精确的整条消息 token 计数器。

已知差异与实验性功能

最新的空白审计对照本地分词器参考,比较了六个可用字体二进制文件中的 17,904 项 BPE 检查和 2,355 个 ctok 用例。浏览器检查覆盖了 60 种宽度和 20 个换行样本。这些是针对性测试,并非对所有文本的保证;失败和覆盖/容量限制仍保留在报告中。

  • DeepSeek 空白:U+001C–U+001F 控制字符被错误地归类为空白。例如,两个空格后跟 U+001C 会合并为一个空格 token。定向审计在 2,984 项检查中发现了 59 个 ID 不匹配。普通的孤立空白运行和 CRLF 用例通过了;控制分隔符 bug 仍未修复。
  • GLM-5.3 和 Llama 3:实验性预设使用仅字体正则边界、排序 BPE 和整段快捷方式。测试过的 Gutenberg 段落以及覆盖的散文、代码、空白和标点模糊用例均通过。其他片段有 64 字节 / 32 轮限制,并显示[BPE limit]如果超出。新的定向空白审计在 353 个 GLM 和 354 个 Llama 检查中达到该限制,各自共 2,984 项;其他检查通过。浏览器 shaping、源字形覆盖和格式边界仍是限制。
  • Trinity Large Thinking 和 Laguna M.1:实验性预设保留原始预处理流水线和有序合并。编译器验证这些配置文件,而不是将它们简化为原始 BPE。两者均通过了全部 2,984 项定向空白检查。浏览器 shaping、源字形覆盖和格式边界仍是限制;特殊 token 和自动消息框架被排除。
  • Hugging Face 链接和上传的 tokenizer:接受文件并不代表与每个 tokenizer 流水线兼容。不支持的预 tokenizer、normalizer 和模型类型可能被拒绝;任意上传尚未接受预设特定的审计。
  • Claude / ctok:ctok 是非官方近似,并非 Claude tokenizer 的经过验证的实现。完整的 ctok 词表现在可以容纳,但随附的最小成本后端对每个连通分量有 256 步搜索限制,并显示[limit]溢出时。长换行文本仍可能渲染缓慢。零宽空格、词连接符、BOM 和软连字符等不可见字符会抑制词边界并增加一个 token。v3/v4.7 还存在引号框定和前导空格归一化错误。每个版本 785 个定向用例中,v3 有 29 个计数/宽度和 45 个仅语义失败;v4.7 有 25 个和 49 个;v4.8 有 16 个和 8 个。普通空白和最长 257 个字符的连续串通过。仅计数相等可能掩盖不正确的归一化。这些失败仍未修复;通过 ctok 比较并不能确立与 Claude 的一致性,且本次审计未调用 Claude。
  • 归一化与 Unicode:渲染器可以在字体看到文本之前对其进行归一化,从而改变 token 边界。一般组合序列仍然受限。Qwen 的 NFC 支持在分解后最多处理八个连续非起始字符,并显示[NFC limit]超出该范围。浏览器和原生编译器的 Unicode 版本对于新分配字符也可能不同。
  • 渲染与字体覆盖:字体无法跨独立的整形运行进行分词。格式、链接、脚本切换、双向文本、回退字体和硬换行都可能拆分这些运行。缺失的源字体字形和回退可能破坏相等的 token 宽度;复杂脚本整形、连字和标记定位并非普遍保留。单运行测试不能保证在每个浏览器或应用中结果相同。
  • 浏览器空白与换行:前导空格可能形成独立的整形运行,在pre-wrap或break-spaces下。在 24px 时, Hello world实测为 216px,而非整段运行的 144px。在 60 次宽度比较中,43 次匹配,15 次因制表符/换行布局而不同,还有两次暴露了那个前导空格边界。测试了尾随/重复空格、NBSP、窄 NBSP 和表意空格,均与整段运行的宽度匹配。先前重复 token 换行的例子在检查的 180px/320px 截图中没有复现,尽管换行可能改变分词。这并不能确立在所有浏览器中都正确。
  • Emoji 和不可见字符:当前默认的 Noto 字体通过了 5,250 项受支持 emoji 检查,涵盖 token 身份、间距和绘制。缺失的美术字形、私用区字符以及 emoji/文本运行边界仍是局限。上传的 emoji 源中的空格和控制字符现在被排除在 emoji 连接之外,修复了错误的 emoji 分类和字形数量虚增。非 emoji 的拆分字节文本和复杂文字仍受限。
  • 消息计数:特殊 token、聊天模板、多模态内容和自动消息开销并未被普遍表示。空文本无法绘制出框架 token。这些字体可视化的是普通文本,而非精确的 API 计费计数。

参见空白审计,ctok 复现,以及详细差异追踪器,了解测试结果、已修复问题和剩余局限。

本地使用Pyodide和fontTools编译。Inter 许可证。Noto Emoji 许可证。可选 Mutant Standard emoji 由 Caius Nocturne 提供:CC BY-NC-SA 4.0。

1如果你对字体的工作原理有更多专业知识,我鼓励你正确地实现这个项目。