Article
把 Kobo 畫線同步到 Obsidian:我做了一個 Kobo Note Sync 插件
Kobo 的閱讀畫線很適合沉澱成筆記,但匯出與整理流程常常斷在工具之間。這篇介紹我做的 Obsidian 插件 Kobo Note Sync:從本機 Kobo SQLite 讀取畫線與註記,轉成可自訂模板的 Markdown 筆記。
本文目錄

我想解決的不是「匯出」,而是閱讀流程的斷點
我用 Kobo 閱讀時,畫線本身不是終點。
真正重要的是:那些畫線之後能不能進入我的筆記系統,變成可以回顧、整理、引用、重新連結的材料。
但閱讀器和筆記系統之間常常有一個斷點:
- Kobo 裡有畫線與註記
- Obsidian 裡有我的長期筆記
- 中間缺少一個穩定、可重複、可客製的同步方式
- 如果每次都要手動複製、整理格式、補 metadata,最後很容易變成「有畫線,但沒有真正進入知識系統」。
所以我做了 Kobo Note Sync:一個把 Kobo highlights / annotations 匯入 Obsidian 的桌面插件。
Obsidian Community:https://community.obsidian.md/plugins/kobo-note-sync
這個插件做什麼
Kobo Note Sync 是一個 Obsidian community plugin,功能很單純:
從 Kobo 的本機 SQLite 資料庫讀取畫線與註記,然後在 Obsidian Vault 裡產生 Markdown 筆記。
目前支援兩種來源:
- Kobo Desktop App 的
Kobo.sqlite(適合已經用 Kobo Desktop App 同步雲端閱讀資料的人。) - 自行複製的 Kobo SQLite 檔案(例如從閱讀器裡複製出
.kobo/KoboReader.sqlite。)
大致流程像這樣:
Kobo 閱讀器 / App
→ Kobo 雲端
→ Kobo Desktop App
→ Kobo.sqlite
→ Kobo Note Sync
→ Obsidian Markdown 筆記或是:
Kobo 閱讀器
→ 複製 KoboReader.sqlite
→ Kobo Note Sync
→ Obsidian Markdown 筆記為什麼選擇讀本機 SQLite
我希望這個工具的資料流越單純越好。
閱讀資料其實很私密。你讀了什麼、在哪裡畫線、留下什麼註記,往往比一般瀏覽紀錄更能反映你的思考狀態。
所以這個插件的設計原則是:
- 只讀取你指定的本機 Kobo SQLite 資料庫
- 只寫入你的 Obsidian Vault
- 不需要外部帳號
- 不把閱讀資料送到任何外部伺服器
這也是為什麼它是 desktop-only plugin。它需要讀取本機檔案,而不是透過某個雲端 API 中轉。
匯入結果要是 Markdown,而不是另一個封閉資料庫
我不想把 Kobo 的畫線搬到另一個封閉系統裡。
對我來說,進入 Obsidian 的重點是:結果要是普通 Markdown。
Markdown 的好處是:
- 可以被 Obsidian 直接讀取
- 可以被 Git 備份
- 可以被其他工具處理
- 未來不依賴這個插件,也還能保留筆記內容
所以 Kobo Note Sync 匯入後,會在設定的輸出資料夾裡建立或更新 Markdown 檔案。預設資料夾是:Kobo Note Sync/
每本書可以是一份筆記,裡面包含該書的 metadata 與畫線內容。
模板是這個插件最重要的設計
每個人的筆記系統長得不一樣。
有些人想要 YAML frontmatter;有些人想要 Dataview-friendly fields;有些人只想要簡單的 quote list;也有人會把閱讀筆記接到自己的 MOC、書籍資料庫或 RAG workflow。
所以我不想把輸出格式寫死。
Kobo Note Sync 使用 Eta.js 作為模板系統,可以分開設定:
- 每本書的筆記模板
- 每條畫線的模板
例如筆記模板可以長這樣:
---
title: "<%= it.bookTitle %>"
author: "<%= it.bookAuthor %>"
publisher: "<%= it.publisher %>"
last_read: <%= it.lastRead %>
highlight_count: <%= it.highlightCount %>
source: Kobo
---
<%= it.highlights %>畫線模板可以長這樣:
*<%= it.dateCreated %>*<% if (it.chapter) { %> | <%= it.chapter %><% } %>
> <%= it.highlightText %>
<% if (it.annotation) { %>
**Note:** <%= it.annotation %>
<% } %>
---這樣我可以讓 Kobo 畫線融入自己的 Obsidian 結構,而不是被插件限制格式。
metadata 不是裝飾,是之後整理的入口
除了畫線文字本身,我也希望同步時保留足夠的 metadata。
Kobo Note Sync 目前提供:
- 23 個書籍變數
- 5 個畫線變數
書籍層級包含:
- 書名
- 作者
- 出版社
- ISBN
- 系列名稱與編號
- 語言
- 書籍描述
- 閱讀進度
- 閱讀狀態
- 頁數、字數
- 加入日期、最後閱讀日期、完成日期
- 畫線數量
畫線層級包含:
- 畫線原文
- 註記內容
- 畫線日期
- 章節名稱
- 章節內進度
這些欄位讓閱讀筆記之後可以被整理、搜尋、篩選,也可以接到自己的 PKM workflow。
例如我可以把一本書的閱讀狀態、最後閱讀日期、畫線數量放進 frontmatter,再用 Obsidian 的查詢或其他工具整理。
採用 append-only sync 的原因
Kobo Note Sync 採用 append-only sync 的思路。
也就是說:
即使某條畫線之後在 Kobo 上被刪除,Obsidian 裡已經匯入的紀錄仍會保留。
這是刻意的。
對閱讀筆記來說,我比較在意的是「不要不小心失去已經沉澱過的內容」。
Kobo 裡的畫線可能會因為重新同步、裝置狀態、書籍版本或操作習慣而變動;但一旦進入 Obsidian,它就變成我的筆記材料,不應該被外部狀態輕易刪掉。
所以這個插件不是做雙向同步,也不是試圖讓 Kobo 和 Obsidian 永遠完全一致。
它更像是一條單向管線:
閱讀器裡的材料 → 筆記系統裡的材料
使用方式
目前使用方式大致是:
- 安裝插件
- 在設定中選擇同步來源
- 確認 Kobo SQLite database path
- 設定輸出資料夾與模板
- 從 Command Palette 執行
Kobo Note Sync - 或點擊左側工具列的書本圖示同步
如果使用 Kobo Desktop App,macOS 預設資料庫路徑會是:
~/Library/Application Support/Kobo/Kobo Desktop Edition/Kobo.sqlite
Windows 則是:
%LOCALAPPDATA%\Kobo\Kobo Desktop Edition\Kobo.sqlite
如果使用自訂 SQLite 檔案,也可以指定自己複製出來的 KoboReader.sqlite。
在 macOS 或 Windows 的自訂 SQLite 模式下,插件也提供 Detect Kobo reader,可以嘗試自動偵測連接到電腦的 Kobo 閱讀器資料庫路徑。
目前支援的平台與語言
目前支援:
- macOS
- Windows
語言支援:
- English
- 繁體中文
插件會跟隨 Obsidian 的語言設定。
這個工具適合誰
我覺得它適合幾種人:
- 用 Kobo 閱讀,也用 Obsidian 做長期筆記的人
- 想把閱讀畫線變成 Markdown 資料的人
- 不想把閱讀資料交給第三方同步服務的人
- 想用自己的模板整理閱讀筆記的人
- 想把書籍 metadata 接到 Dataview / PKM / RAG workflow 的人
如果你只是偶爾匯出幾條畫線,手動整理可能也夠。
但如果閱讀和筆記是長期流程,那同步工具的重點就不是省幾分鐘,而是讓資料能穩定進入系統。
我接下來可能會改善的地方
這個插件目前已經能完成基本同步,但我覺得還有一些可以繼續打磨的方向:
- 更完整的安裝與使用教學
- 更多模板範例
- 對不同 Kobo 資料庫版本的相容性說明
- 更清楚的同步結果提示
- 更方便的 release / community plugin 安裝流程
- 更多和 Obsidian 工作流整合的範例,例如 Dataview、書籍索引、閱讀回顧
尤其是模板範例,我覺得很值得補。因為真正讓這個工具變好用的,不只是「可以同步」,而是同步後的 Markdown 能不能自然融入自己的筆記系統。
結語
Kobo Note Sync 對我來說不是一個大型工具,而是一個把閱讀流程接起來的小插件。
它做的事情很明確:
Kobo 的畫線與註記 → 本機 SQLite → Obsidian Markdown
我希望閱讀時留下的片段,不只停在閱讀器裡,而是能進入我真正會整理、搜尋、回顧和重新使用的地方。
如果你也使用 Kobo + Obsidian,可以在 Obsidian Community 或 GitHub 查看: