NotaBene converts Kindle highlights (My Clippings.txt) into an Anki .apkg deck, with filtering, dedupe, triage, and optional LLM-assisted card suggestions.
From raw highlights to export:
- Open review queue.
- Triage (
keep,manual,discard). - Run AI suggestion (
Suggest Best) when useful. - Edit card fields inline.
- Export
.apkg.
| Card front | Card back |
|---|---|
![]() |
![]() |
- Parses Kindle clippings into structured highlights.
- Removes malformed, duplicate, and low-value snippets.
- Generates card candidates (
cloze,qa,apply). - Lets you review/edit decisions in terminal or a local web UI.
- Exports selected notes to Anki package format.
- Parse
My Clippings.txt. - Run dedupe + quality filters + triage scoring.
- Review in terminal (
--review) or web (--review-web). - Optionally run AI suggestions in the web review UI.
- Save progress and export to
.apkg.
python -m venv .venv
source .venv/bin/activate
pip install .nota-bene "/path/to/My Clippings.txt" out.apkgUseful flags:
--verbosefor pipeline stats--on-duplicate skip|update|keep-both--skip-book "Book Title"(repeatable)
Terminal review:
nota-bene --review "/path/to/My Clippings.txt" out.apkgWeb review:
nota-bene --review-web "/path/to/My Clippings.txt" out.apkgOr with make (builds web/dist if needed, then starts web review):
make web-review CLIPPINGS="/path/to/My Clippings.txt" OUT="out.apkg"If your project Python is not .venv/bin/python, override it:
make web-review PYTHON=/path/to/python CLIPPINGS="/path/to/My Clippings.txt" OUT="out.apkg"The web review UI supports:
- triage queue (swipe/keyboard/buttons)
- keep/manual/discard/duplicate decisions
- per-book rules (visibility + preferred card type)
- inline note editing and undo
- AI suggestion actions (
Suggest Best, format-specific suggestions)
| Review queue | Book rules |
|---|---|
![]() |
![]() |
| Inline edit | AI suggestion |
|---|---|
![]() |
![]() |
| Export result |
|---|
![]() |
Save:- Persists current review edits/state (
notes, rules, settings). - Does not produce a deck file.
- Persists current review edits/state (
Export:- Persists state and runs final export pipeline.
- Produces the final
.apkgdeck and sidecar artifacts.
Use Save while iterating, Export when you want an importable deck.
By default, the backend proxies /api/llm to a local OpenAI-compatible endpoint (for example LM Studio).
Server-side env vars:
K2A_LLM_API_URL(default:http://127.0.0.1:1234/v1/chat/completions)K2A_LLM_MODEL(default:gemma-3-12B-it-QAT-Q4_0.gguf)K2A_LLM_CONNECT_TIMEOUT(default:1.5seconds, quick availability check)K2A_LLM_REQUEST_TIMEOUT(default:60seconds, upstream request timeout)
When LM Studio is down/unreachable, requests fail quickly with a clear 502 proxy error instead of hanging for a long time.
Client-side env vars:
VITE_LLM_API_URL(optional, bypasses proxy; may hit CORS)VITE_LLM_MODEL(model field sent from UI)
Build once for local serving via Python:
cd web
npm install
npm run buildDev server (separate terminal):
cd web
VITE_API_BASE=http://127.0.0.1:38435 npm run devCommon generated artifacts:
out.apkgexported Anki deck*.review.jsonreview-state JSON*.review.rules.jsonsaved rule decisions*.review.settings.jsonsaved settings*.dedupe.jsondedupe report*.feedback.jsonfeedback examples
These are ignored by .gitignore by default.
NotaBene is for readers who already collect Kindle highlights and want high-quality Anki cards with a local-first review workflow. It is not a hosted sync service; you run it locally and import the final deck into Anki.
- Clippings are processed locally by default.
- The web UI and review backend run on
127.0.0.1. - LLM use is optional but encouraged.
- If
K2A_LLM_API_URLis set, requests go to that endpoint.
- Chapter/section extraction is limited by source clipping metadata.
- Card quality still depends on highlight quality and review choices.
- LLM suggestions may require manual edits.
- Anki import is a separate final step after
.apkgexport.
nota_bene/cli.pyentrypoint and command wiringnota_bene/pipeline.pyend-to-end processing pipelinenota_bene/clippings.pyKindle parsingnota_bene/dedupe.pyduplicate detection/reportingnota_bene/triage.pyscoring and card-worthiness logicnota_bene/review_web.pylocal review API + web servingnota_bene/anki_export.pyfinal.apkgexportweb/src/React review UItests/parser/pipeline/quality/triage test coverage






