This project automates the conversion of handwritten notes exported from Boox e-ink devices into structured Markdown summaries suitable for Obsidian. It uses GPT-4o for summarization and runs continuously in the background, monitoring a synced folder for new PDFs.
- Boox Sync: Notes exported from your Boox device are saved to
~/Dropbox/BooxNotes/Raw/ - Folder Watcher: A launchd-managed Python script (
boox-watcher.py) detects new PDFs - Processing Pipeline:
- Converts PDF pages to images (via
poppler) - Sends images to OpenAI's GPT-4o API
- Receives a structured Markdown summary
- Outputs a Markdown file to
~/Dropbox/BooxNotes/Processed - Moves the original PDF to
~/Dropbox/BooxNotes/Archive
- Converts PDF pages to images (via
- Persistent Logging and macOS notifications provide transparency
---
title: Systems
tags: [boox, notes]
---
Summary of my handwritten notes on complex systems theory...(Structured output generated by GPT-4o)
Scripts/BooxNotes/
├── boox_parser.py # PDF-to-summary processor
├── boox-watcher.py # Folder watcher with notification/logging
├── .env # API key (excluded from Git)
├── processed.json # Tracks processed PDFs (excluded from Git)
├── boox-watcher.log # stdout log (excluded from Git)
├── boox-watcher-error.log # stderr log (excluded from Git)
- Python 3.11+
- openai >= 1.0
- watchdog
- python-dotenv
- poppler (pdftoppm must be in PATH)
brew install poppler
pip install -r requirements.txt
Create a .env file in the same directory:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxx
A launchd job (via com.readist.booxwatcher.plist) ensures boox-watcher.py runs continuously, even after reboot.
cp com.readist.booxwatcher.plist ~/Library/LaunchAgents/
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.readist.booxwatcher.plist
tail -f ~/Scripts/BooxNotes/boox-watcher.log
.env processed.json *.log
This script is currently running as a persistent background service. All new Boox-synced handwritten PDFs are automatically summarized and moved to your Obsidian-ready folder structure.
- YAML frontmatter enrichment (e.g., date, tags from note)
- Optional OCR fallback
- Multiple vault support