InVerse2k downloadsLoad local fonts (TTF/OTF/WOFF/WOFF2) straight from your vault. Manage UI, text, code, and math fonts separately. Support cross-device font presets.
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español
Obsidian Local Font Loader is a powerful plugin for Obsidian that allows you to load and manage custom fonts directly from your local vault. Say goodbye to relying on external CDNs or system fonts — keep everything local, private, and under your control.
main.js, manifest.json, and styles.css to your vault's plugins folder:<vault>/.obsidian/plugins/obsidian-local-font-loader/
Organize Your Fonts: Create a folder in your vault (e.g., Fonts/) and organize fonts by family:
Fonts/
├── MyFont/
│ ├── MyFont-Regular.ttf
│ ├── MyFont-Bold.ttf
│ ├── MyFont-Italic.ttf
│ └── MyFont-BoldItalic.ttf
└── AnotherFont/
└── AnotherFont-Regular.otf
Configure Plugin: Open Settings → Local Font Loader
Apply Fonts:
[!warning] Font Rendering Performance Avoid mixing too many languages in a single line of text. Dense multilingual mixing (e.g., Chinese + Japanese + Korean + Arabic + Russian in one line) can trigger font fallback mechanisms that may freeze the rendering engine.
Recommendation: Keep different language content in separate paragraphs or sections for optimal performance.
| Setting | Description |
|---|---|
| Font Source Directory | Path to your font families folder |
| Auto-load on Startup | Automatically apply fonts when Obsidian starts |
| Latin Font Separation | Use separate fonts for Latin vs CJK characters |
| Latin Font Scope | Fine-tune which character ranges use the Latin font |
The plugin works entirely offline: it makes no network requests, and nothing about you or your vault leaves the machine. There is no telemetry of any kind.
It does read three things about the device it runs on, all of them only to tell your devices apart in the device list and to pick a translation:
| What | Where it is read | Why |
|---|---|---|
The machine hostname (os.hostname()) |
Desktop only | Names the entry this machine gets in the device list |
The platform's app-scoped device identifier (ANDROID_ID on Android, identifierForVendor on iOS) |
Mobile only, when the Capacitor Device bridge is available | Helps retain identity across local storage changes. The identifier is hashed before storage; the raw value is never written anywhere. Without this bridge, the plugin uses a locally stored random ID |
| The app language | Everywhere | Chooses which bundled translation to use |
What is stored lives in data.json inside the plugin's own folder: the device display names, the
recorded model/OS/hostname, when each device was first and last seen, and the hashed mobile
identifier. That file is synced only by whatever you use to sync .obsidian — it is never sent to
the plugin's author or to anyone else.
Mobile device identity can change after a factory reset, reinstall or local data loss. The settings show this limitation on desktop as well, because desktop users also manage mobile device entries. Identical models and hostnames do not prove that two entries belong to the same physical device. The plugin keeps those identities separate instead of automatically merging them.
An unassigned device inherits a preset when devices with the same platform, OS and Android model (or hostname) have exactly one explicit preset assignment between them. Conflicting assignments are left unchanged. Generic iPhone/iPad families are not sufficient to match devices. Manual assignments, including a selection of the global preset, take priority over inheritance. A preset name such as “Mobile” does not create an assignment rule by itself.
This project is licensed under the MIT License.
InVerse
This plugin was developed with the assistance of Claude (Anthropic), an AI assistant that helped with architecture design, code implementation, and documentation. The project represents a collaborative effort between human requirements and AI technical execution.
If you encounter any issues or have feature requests, please open an issue on GitHub.
The plugin is built with Bun. main.js at the repository root is a build
artifact — edit the modules under src/ and rebuild, never the bundle itself.
bun run build # bundle src/ into main.js
bun run dev # rebuild on change
bun run typecheck # tsc --noEmit over src/
bun run sync-version # copy the version from package.json into manifest.json
| Path | Contents |
|---|---|
src/main.ts |
entry point — exports the plugin class |
src/plugin.ts |
the plugin class: font scanning, conversion, device identity, CSS generation |
src/types.ts |
the data model: settings, fonts, presets, devices, MathJax metrics |
src/ui/settings-tab.ts |
settings tab shell — lifecycle, shared helpers, section order |
src/ui/settings/device-preset.ts |
device and preset management section |
src/ui/settings/directory-application.ts |
directory configuration and font application section |
src/ui/settings/font-status.ts |
font file status section |
src/ui/settings/fallback.ts |
fallback and maintenance section |
src/ui/settings/styles.ts |
settings stylesheet |
src/ui/modals.ts |
modal dialogs |
src/i18n.ts |
translations and locale helpers |
src/constants.ts |
default settings |
src/font-metadata.ts |
OpenType / TrueType name-table reader |
The sources are TypeScript; Bun strips the types when bundling, so nothing is emitted for them at runtime. obsidian is kept external.
Releasing: add a CHANGELOG.md section for the version, set it in package.json, run
bun run sync-version, then push a tag. CI builds main.js from src/ and publishes the
release with the changelog section as its body.
Obsidian 本地字体加载器 是一个强大的 Obsidian 插件,允许你直接从本地仓库加载和管理自定义字体。不再依赖外部 CDN 或系统字体——所有内容都保持本地化、私密化并完全由你掌控。
main.js、manifest.json 和 styles.css 解压到仓库的插件文件夹:<仓库>/.obsidian/plugins/obsidian-local-font-loader/
整理字体: 在仓库中创建文件夹(如 Fonts/),按字体家族组织:
Fonts/
├── MyFont/
│ ├── MyFont-Regular.ttf
│ ├── MyFont-Bold.ttf
│ ├── MyFont-Italic.ttf
│ └── MyFont-BoldItalic.ttf
└── AnotherFont/
└── AnotherFont-Regular.otf
配置插件: 打开 设置 → 本地字体加载器
应用字体:
[!warning] 字体渲染性能 避免在单行内混合过多语言文字。 密集的多语言混排(例如在同一行内混合中文+日文+韩文+阿拉伯文+俄文)可能触发字体回退机制,导致渲染引擎卡死。
建议:将不同语言的内容分段显示,以获得最佳性能。
| 设置项 | 说明 |
|---|---|
| 字体源目录 | 字体家族文件夹的路径 |
| 启动时自动加载 | Obsidian 启动时自动应用字体 |
| 拉丁字体分离 | 为拉丁字符和 CJK 字符使用不同字体 |
| 拉丁字体作用范围 | 精细调整哪些字符范围使用拉丁字体 |
本项目采用 MIT 许可证。
InVerse
本插件在 Claude(Anthropic)的协助下开发完成,Claude 参与了架构设计、代码实现和文档编写。本项目代表了人类需求与 AI 技术执行的协作成果。
如遇到问题或有功能需求,请在 GitHub 提交 issue。
Obsidian 本機字型載入器 是一個強大的 Obsidian 外掛程式,讓你可以直接從本機儲存庫載入和管理自訂字型。不再依賴外部 CDN 或系統字型——所有內容都保持本地化、私有化並完全由你掌控。
main.js、manifest.json 和 styles.css 解壓縮到儲存庫的外掛程式資料夾:<儲存庫>/.obsidian/plugins/obsidian-local-font-loader/
整理字型: 在儲存庫中建立資料夾(如 Fonts/),按字型家族組織:
Fonts/
├── MyFont/
│ ├── MyFont-Regular.ttf
│ ├── MyFont-Bold.ttf
│ ├── MyFont-Italic.ttf
│ └── MyFont-BoldItalic.ttf
└── AnotherFont/
└── AnotherFont-Regular.otf
設定外掛程式: 開啟 設定 → 本機字型載入器
套用字型:
[!warning] 字型渲染效能 避免在單行內混合過多語言文字。 密集的多語言混排(例如在同一行內混合中文+日文+韓文+阿拉伯文+俄文)可能觸發字型回退機制,導致渲染引擎凍結。
建議:將不同語言的內容分段顯示,以獲得最佳效能。
| 設定項目 | 說明 |
|---|---|
| 字型來源目錄 | 字型家族資料夾的路徑 |
| 啟動時自動載入 | Obsidian 啟動時自動套用字型 |
| 拉丁字型分離 | 為拉丁字元和 CJK 字元使用不同字型 |
| 拉丁字型作用範圍 | 精細調整哪些字元範圍使用拉丁字型 |
本專案採用 MIT 授權。
InVerse
此外掛程式在 Claude(Anthropic)的協助下開發完成,Claude 參與了架構設計、程式碼實作和文件編寫。本專案代表了人類需求與 AI 技術執行的協作成果。
如遇到問題或有功能需求,請在 GitHub 提交 issue。
Obsidian ローカルフォントローダー は、Obsidian 用の強力なプラグインで、ローカル Vault から直接カスタムフォントを読み込んで管理できます。外部 CDN やシステムフォントに依存する必要はありません。すべてをローカルでプライベートに、完全にコントロールできます。
main.js、manifest.json、styles.css を Vault のプラグインフォルダに展開:<vault>/.obsidian/plugins/obsidian-local-font-loader/
フォントを整理: Vault 内にフォルダ(例:Fonts/)を作成し、ファミリーごとに整理:
Fonts/
├── MyFont/
│ ├── MyFont-Regular.ttf
│ ├── MyFont-Bold.ttf
│ ├── MyFont-Italic.ttf
│ └── MyFont-BoldItalic.ttf
└── AnotherFont/
└── AnotherFont-Regular.otf
プラグインを設定: 設定 → Local Font Loader を開く
フォントを適用:
[!warning] フォントレンダリングのパフォーマンス 1行に複数の言語を混在させすぎないでください。 密度の高い多言語混在(例:1行に中国語+日本語+韓国語+アラビア語+ロシア語)は、フォントフォールバックメカニズムをトリガーし、レンダリングエンジンがフリーズする可能性があります。
推奨:異なる言語のコンテンツは別々の段落またはセクションに分けて、最適なパフォーマンスを確保してください。
| 設定項目 | 説明 |
|---|---|
| フォントソースディレクトリ | フォントファミリーフォルダのパス |
| 起動時に自動読み込み | Obsidian 起動時にフォントを自動適用 |
| ラテン文字フォント分離 | ラテン文字と CJK 文字に異なるフォントを使用 |
| ラテン文字フォントスコープ | どの文字範囲にラテン文字フォントを使用するかを微調整 |
このプロジェクトは MIT ライセンス の下で公開されています。
InVerse
このプラグインは Claude(Anthropic)の支援を受けて開発されました。Claude はアーキテクチャ設計、コード実装、ドキュメント作成に貢献しました。本プロジェクトは人間の要求と AI の技術実行の協力の成果を表しています。
問題が発生した場合や機能リクエストがある場合は、GitHub で issue を開いてください。
Obsidian 로컬 폰트 로더는 로컬 보관함에서 직접 커스텀 폰트를 로드하고 관리할 수 있는 강력한 Obsidian 플러그인입니다. 외부 CDN이나 시스템 폰트에 의존할 필요 없이 모든 것을 로컬에서 비공개로 완전히 제어할 수 있습니다.
main.js, manifest.json, styles.css를 보관함의 플러그인 폴더에 압축 해제:<vault>/.obsidian/plugins/obsidian-local-font-loader/
폰트 정리: 보관함에 폴더(예: Fonts/)를 만들고 패밀리별로 정리:
Fonts/
├── MyFont/
│ ├── MyFont-Regular.ttf
│ ├── MyFont-Bold.ttf
│ ├── MyFont-Italic.ttf
│ └── MyFont-BoldItalic.ttf
└── AnotherFont/
└── AnotherFont-Regular.otf
플러그인 구성: 설정 → Local Font Loader 열기
폰트 적용:
[!warning] 폰트 렌더링 성능 한 줄에 너무 많은 언어를 혼합하지 마세요. 밀집된 다국어 혼합(예: 한 줄에 중국어+일본어+한국어+아랍어+러시아어)은 폰트 폴백 메커니즘을 트리거하여 렌더링 엔진이 정지될 수 있습니다.
권장사항: 최적의 성능을 위해 서로 다른 언어의 콘텐츠를 별도의 단락이나 섹션으로 분리하세요.
| 설정 | 설명 |
|---|---|
| 폰트 소스 디렉토리 | 폰트 패밀리 폴더 경로 |
| 시작 시 자동 로드 | Obsidian 시작 시 폰트 자동 적용 |
| 라틴 폰트 분리 | 라틴 문자와 CJK 문자에 다른 폰트 사용 |
| 라틴 폰트 범위 | 라틴 폰트를 사용할 문자 범위 세밀 조정 |
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다.
InVerse
이 플러그인은 Claude(Anthropic)의 지원을 받아 개발되었습니다. Claude는 아키텍처 설계, 코드 구현 및 문서 작성에 기여했습니다. 이 프로젝트는 인간의 요구 사항과 AI 기술 실행의 협력 결과를 나타냅니다.
문제가 발생하거나 기능 요청이 있는 경우 GitHub에서 issue를 열어주세요.
Obsidian Local Font Loader es un potente complemento para Obsidian que te permite cargar y administrar fuentes personalizadas directamente desde tu bóveda local. Olvídate de depender de CDNs externos o fuentes del sistema: mantén todo local, privado y bajo tu control.
main.js, manifest.json y styles.css a la carpeta de complementos de tu bóveda:<bóveda>/.obsidian/plugins/obsidian-local-font-loader/
Organiza tus Fuentes: Crea una carpeta en tu bóveda (por ejemplo, Fonts/) y organiza las fuentes por familia:
Fonts/
├── MyFont/
│ ├── MyFont-Regular.ttf
│ ├── MyFont-Bold.ttf
│ ├── MyFont-Italic.ttf
│ └── MyFont-BoldItalic.ttf
└── AnotherFont/
└── AnotherFont-Regular.otf
Configurar Complemento: Abre Configuración → Local Font Loader
Aplicar Fuentes:
[!warning] Rendimiento de Renderizado de Fuentes Evita mezclar demasiados idiomas en una sola línea de texto. La mezcla densa de múltiples idiomas (p. ej., chino + japonés + coreano + árabe + ruso en una línea) puede activar mecanismos de respaldo de fuentes que pueden congelar el motor de renderizado.
Recomendación: Mantén el contenido de diferentes idiomas en párrafos o secciones separadas para un rendimiento óptimo.
| Ajuste | Descripción |
|---|---|
| Directorio de Origen de Fuentes | Ruta a tu carpeta de familias de fuentes |
| Carga Automática al Inicio | Aplica automáticamente las fuentes cuando se inicia Obsidian |
| Separación de Fuentes Latinas | Usa fuentes separadas para caracteres latinos vs CJK |
| Ámbito de Fuente Latina | Ajusta qué rangos de caracteres usan la fuente latina |
Este proyecto está licenciado bajo la Licencia MIT.
InVerse
Este plugin fue desarrollado con la asistencia de Claude (Anthropic), un asistente de IA que ayudó con el diseño de arquitectura, implementación de código y documentación. El proyecto representa un esfuerzo colaborativo entre requisitos humanos y ejecución técnica de IA.
Si encuentras algún problema o tienes solicitudes de funciones, por favor abre un issue en GitHub.