把 Kobo 畫線同步到 Obsidian:我做了一個 Kobo Note Sync 插件
我做了一個 Obsidian 插件 **Kobo Note Sync**,用來把 Kobo 電子書裡的畫線與註記匯入 Obsidian。它讀取本機的 Kobo SQLite 資料庫,不把閱讀資料送到外部服務;匯入結果是 Markdown,並且可以用 Eta.js 自訂每本書與每條畫線的輸出模板。

我想解決的不是「匯出」,而是閱讀流程的斷點
我用 Kobo 閱讀時,畫線本身不是終點。
真正重要的是:那些畫線之後能不能進入我的筆記系統,變成可以回顧、整理、引用、重新連結的材料。
但閱讀器和筆記系統之間常常有一個斷點:
- Kobo 裡有畫線與註記
- Obsidian 裡有我的長期筆記
- 中間缺少一個穩定、可重複、可客製的同步方式
如果每次都要手動複製、整理格式、補 metadata,最後很容易變成「有畫線,但沒有真正進入知識系統」。
所以我做了 Kobo Note Sync:一個把 Kobo highlights / annotations 匯入 Obsidian 的桌面插件。
Obsidian Community:https://community.obsidian.md/plugins/kobo-note-sync
GitHub:https://github.com/KennKyou/obsidian-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.sqliteWindows 則是:
%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 查看:
覺得這篇文章有幫助嗎?可以分享給朋友。
相關文章
如何在 Kobo 電子書閱讀器安裝自訂字型
身為 Kobo 使用者,一定要學會的自訂字型小技巧!內建字型看膩了?跟著這份筆記,把帶有手寫筆觸的「芫荽」字型裝進閱讀器裡。簡單、免費且不傷效能,讓你的每一本電子書都像精心排版過的實體書一樣順眼。
如何自訂 Kobo 電子書閱讀器的待機畫面
告別單調的預設書封!只要簡單幾步驟,就能把喜歡的圖片變成 Kobo 閱讀器的待機桌布。本文提供各機型解析度對照表與 Mac/Windows 顯示隱藏資料夾教學,讓你每次合上閱讀器都能看到最愛的風景。
AI 時代的個人知識庫:Obsidian、RAG 與 Agent 該怎麼分工?
Obsidian、RAG 與 AI Agent 常被放在一起討論,但它們其實負責不同任務。本文從個人知識管理的角度,拆解 Obsidian 如何保存筆記、RAG 如何檢索資料、Agent 如何把內容轉成可執行的工作流。
用 LQIP 讓圖片載入不再跳來跳去
用 LQIP 技術搭配三層圖片載入策略,讓照片牆從進場到開啟大圖的每個階段都不會出現空白或版面跳動。
把模糊想法變成可執行工作:我的 Supekku Workflow 設計
AI Agent 協作的問題不只是 prompt,而是脈絡如何被保存。Supekku Workflow 是我用來把模糊想法整理成可執行工作的方式:先透過對話釐清意圖、範圍與成功標準,再把需要保存的內容轉成 proposal、criteria、reasoning、actions 與 verification。
