
CaptureMD
Project Links
How do you capture a URL into a PKM while making sure to keep the relevant metadata?
I've been trying to solve this problem for years, and I've never really fully cracked it. Every solution I've built has been functional—but never quite right. CaptureMD is my latest attempt.
It started as bash script ran on a Qutebrowser or on Termux for Android to evolved into org-capture rules and even more complex services that used Notion as a storage backend.
The Platform Problem
Here's the thing about capturing URLs: you need it to work everywhere. Desktop, mobile, browser, etc.
You also want it to reduce the overhead from obvious flow. For instane: starring something into feed and then going through that list to add where it makes sense.
CaptureMD does all that:
- goes through your FreshRSS instance and process all the starred items
- sync things between your note folder and your Wallabag instance
- takes a url and capture its metadata in a dedicated note (youtube, github, reddit, hackernews etc)
And because I know that regardless how complete our mobile writing experience gets, we will still always take notes as new tab in the browser, Capturemd also supports that.
If the url shared into capturemd/wallabag is a Google query url, it will take that query and add it as a task in a dedicated note to show up in my inbox.
The syntax of the frontmatter looks verbose if you read the raw markdown, but that's somewhat intentional.
The markdown becomes your database—queryable through Dataview, parseable by scripts.
I use this same data to power both my HTML dashboard and TUI dashboard.
How I Actually Use It
On mobile:
- Share a URL to Wallabag, and it gets captured with extracted metadata
- Star articles in my RSS reader (Read You or Newsboat + FreshRSS), and those get picked up too
On desktop:
- Or in Firefox with Tridactyl: press
,bto capture the current page,,Bto capture a selected link
Cron jobs
Then every N hours, I have script going over my freshrss, my wallabag, my unparsed notes and filling everything out before re-running my dataview queries.
Finally once a day, I have a large job that cache all the youtube videos overnight.
You can use the CLI as well but at this point I used CaptureMD dozens of times a day without even realizing it.
Final word
Is it perfect? No. I still want two-way sync with remote services, smarter YouTube cache invalidation, and probably a separate PVR-like app for the media routing logic. But it's getting better.
The next step would probably be to integrate it better with the PKM such as I don't have to manually read/write notes.