Taking notes is a basic aspect of my job as a researcher and as a student. More than that, for a long time I have wanted these notes to be a tool for discovering relations between concepts, leading to new insights. Using a collection of .txt files arranged by date or by subject does not quite cut it, so I’ve been searching for the right note-taking tools.

Over the years I’ve gone from using a MySQL database to mindmaps (mostly Freeplane) to TiddlyWiki. When I got to Evernote I felt things were starting to come together, but something was still missing.

Back in 2020 I started using Roam Research, and my note-taking needs were almost fulfilled. But not quite. Roam is subscription software, not open-source, and stores your data remotely. I’m against all that, but Roam treated me well. So well, that for 3 years I was in denial, paying every month.

But behold the goodness of Logseq!

Logseq provides all the functionality I need from Roam, and more. It is free, open-source, and locally stored. The only thing that stopped me was the pain of migrating 3 years worth of notes. Luckily, migrating from Roam Research to Logseq was not terrible. Still, it had a couple of challenges. A bothersome one was that I had uploaded a large number of images and PDF files into my Roam graph. When I exported the graph from Roam and imported it to Logseq all those files were still in some remote server.

Luckily, my Logseq graph is stored as Markdown files, which can be easily manipulated. I wrote a Python script (in a Jupyter notebook) to download all external PDF and image files in a Logseq graph to a local folder, and change the links accordingly in the Markdown files.

The script is here. Perhaps it will be useful to someone out there.