Automatically sync your Twitter bookmarks to Google NotebookLM for AI-powered analysis.
# Run sync (extracts new bookmarks and uploads to NotebookLM)
npm run sync
# Or use Electron app with GUI
npm start- β YouTube auto-transcription β - Videos from tweets automatically transcribed in NotebookLM
- β Incremental sync - Only extracts NEW bookmarks (6 seconds!)
- β Twitter Lists support - Multi-select lists, 24-hour filter
- β Smart duplicate detection - Never uploads the same bookmark twice
- β Rich content extraction - Threads, quoted tweets, images, PDFs (URLs)
- β t.co link expansion - Follows Twitter shortened URLs to real destinations
- β Automatic NotebookLM upload - Hands-free integration
- β Separate notebooks per list - Organized by topic
- β Clean minimal UI - Focus on core actions
- β Daily auto-sync - Set it and forget it
- β Local database - All your bookmarks stored in SQLite
- Node.js 16+
- Twitter/X account with bookmarks
- Google account for NotebookLM
# Install dependencies
npm install
# First run (extracts all bookmarks)
npm run syncnpm run syncWhat it does:
- Opens Twitter in automated browser
- Extracts NEW bookmarks (incremental)
- Saves to local database
- Uploads to NotebookLM automatically
- Done in ~30 seconds!
npm startFeatures:
- System tray icon
- "Sync Bookmarks" button
- "Sync Lists" button
- Enable daily auto-sync (8 AM)
- System notifications
Step 1: Open Settings
npm startClick "Settings" button in the app
Step 2: Discover Lists (One-time) In Settings page:
- Click "Discover Lists"
- Browser opens and finds all your Twitter Lists
- Returns to Settings showing all lists with checkboxes
Step 3: Select Lists to Sync
- β Check the lists you want to sync
- β Uncheck lists you want to skip
- Set "Days Back" (default: 1 day = last 24 hours)
- Set "Max Tweets" (default: 50)
- Click "Save Settings"
Step 4: Sync Go back to main page and click "Sync Lists"
Result: Each enabled list creates a separate NotebookLM notebook:
BrainBrief - AI Leaders #2 of 2 - 2025-10-18
BrainBrief - Gauntlet AI Cohort 1 - 2025-10-18
BrainBrief - Solana Influencers - 2025-10-18
Performance:
- 1-day filter (24 hours): ~15-30 seconds per list β‘ (default)
- 3-day filter: ~45 seconds per list
- 7-day filter: ~90 seconds per list
- All time: 2-5 minutes per list (not recommended)
- Tweet text
- Author
- URL
- Timestamp
Auto-Uploaded to NotebookLM:
- β
YouTube Videos - Fully automated!
- Finds videos in Twitter cards
- Expands t.co shortened links
- Uploads each video as separate source
- NotebookLM auto-transcribes full video
- Searchable video content
Extracted (in markdown, not auto-uploaded):
- PDF Links - URLs saved for reference (manual add to NotebookLM)
- Google Docs - URLs saved for reference (use Google Drive integration)
- Images - Direct links to tweet media (excludes profile pics)
- Twitter Videos - URLs extracted (file size limitations)
- Quoted Tweets - Full original tweet context
- Threads - Multi-tweet content preserved
brainbrief/
βββ data/
β βββ brainbrief.db # Your bookmarks database
β βββ exports/ # Markdown exports to NotebookLM
βββ browser-data/ # Saved login sessions
βββ src/
β βββ automation/ # Twitter & NotebookLM automation
β βββ db/ # Database operations
β βββ utils/ # Logger, helpers
βββ run-sync.js # CLI entry point
- All data stored locally in SQLite
- No cloud services (except Twitter & NotebookLM)
- Browser sessions saved for convenience (can be deleted)
- No analytics or tracking
Problem: Browser lock file preventing sync
Quick Fix:
npm run fixManual Fix:
- Close the Electron app:
pkill -f "electron.*brainbrief" - Remove lock file:
rm -f browser-data/SingletonLock - Run sync:
npm run sync
Prevention: Don't run Electron app and CLI sync at the same time
Solution: Run sync once, log in manually in the browser window
Solution: App will create a new dated notebook automatically
## Bookmark 42
**Author:** John Doe
**URL:** https://x.com/johndoe/status/123
**Date:** 2025-10-18T12:00:00.000Z
**Content:**
Check out my latest video on AI automation!
**YouTube Videos:**
- https://www.youtube.com/watch?v=abc123
**Images:**
- https://pbs.twimg.com/media/G3U849.jpg
**Quoted Tweet:**
> Author: Jane Smith
> This is the original tweet being quotedYour bookmarks appear in a notebook named:
BrainBrief - Twitter Bookmarks - 2025-10-18
You can ask NotebookLM:
- "Show me YouTube videos"
- "Summarize the threads"
- "What PDFs are included?"
- "Find tweets about AI automation"
Edit src/main/index.js:
cronExpression: '0 8 * * *' // Change to your preferred timeEdit src/automation/twitter.js:
const MAX_NEW_BOOKMARKS = 500; // Max per sync
const BATCH_SIZE = 20; // Tweets per batch- CHANGELOG.md - Version history
- CONVENTIONS.md - Code style guide
- ARCHITECTURE.md - System design
This is a personal automation tool, but feel free to fork and customize!
MIT
Status: β
Production Ready
Version: 1.0.0
Last Updated: 2025-10-18