After hacking my own RSS feed for my Obsidian Publish site, it is now time to try some ideas. The first one is automating my blog posts via Mastofeed. I just created a rule that will compose a Mastodon post using the Title, Summary, Link, and Image from my RSS feed.
This first post/test has two goals. Make sure the automation is working and understand what will happen if one of the items, in this case an image, is not present in the original feed.
If you are fed up with Obsidian Publish's limited RSS, here's how I hacked a better feed.
If you’re an Obsidian Publish user, you’ve probably stumbled upon its default RSS feed by adding /rss.xml
to your domain. And if you’re like me, you quickly realized how incredibly limited it is – so limited, in fact, that it’s practically unusable for serious blogging.
I completely get the problem here. As Obsidian Publish doesn’t offer a standard blog feature, there isn’t an actual blog feed. However, that hasn’t stopped us users from hacking our way to a solution. So, I decided to also hack a better RSS feed.
The Problem
As I write this, the official RSS feed is not time-based and doesn’t even have a description for each item, even though there is a “description” property that Obsidian-Publish can read. Anyway, I understand the hurdle of going beyond the simplicity of the meta-information available on our notes, especially if one doesn’t use properties.
What I never got, though, is why it doesn’t display the items chronologically, matching the date a note was posted as a web page. I can’t share something like this with people willing to follow my blog posts.
However, even if I avoid sharing it, many modern feed readers look for and find the feed for the user. So, the two problems I have to solve are:
- Having a better RSS feed.
- Making the current
/rss.xml
address point to that better feed.
I’m not a specialist in any of the fields below. I’m sharing the steps I went through as a way to inspire you. Please do your own research and remember to always make backups of your work before trying the directions below.
How an RSS Feed is Created
I’m not a developer, but along the way I was, let’s say, forced to learn some things. When I started podcasting back in 2005—yes, yes, you read that right—I had to learn how to write a feed. Back then there was no such thing as a tool or AI.
The way I see it, a feed is split into two parts. The top part is like the ‘header’ of your blog, containing essential details like its title, overall description, and your website’s address.
Take a look at mine below, and you’ll notice that it’s easy to guess what is what.
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title>vladcampos Blog</title>
<link>https://vladcampos.com</link>
<description>Thoughts and articles from one enthusiast to another.</description>
<language>en-us</language>
<lastBuildDate>Tue, 17 Jun 2025 10:12:00 GMT</lastBuildDate>
<atom:link href="https://social.vladcampos.com/rss.xml" rel="self" type="application/rss+xml"/>
<image>
<url>https://social.vladcampos.com/favicon-196x196.png</url>
<title>vladcampos Blog</title>
<link>https://vladcampos.com/blog</link>
</image>
Below this header are the individual entries, or ‘items,’ for each of your blog posts. Think of each item as a mini-summary of a single post, including its title, a brief description, a link to the full post, and the publication date.
<item>
<title>📃 Things you should know about Obsidian Publish —my struggles and how I'm dealing with them.</title>
<link>https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</guid>
<description>Obsidian Publish has been a game-changer for my online presence, but like any powerful tool, it comes with its quirks. Here are the hurdles I’ve faced and how I’m jumping them.</description>
<pubDate>Tue, 16 Jun 2025 11:32:00 GMT</pubDate>
</item>
<item>
<title>📃 Turning Bluesky into Instagram - my unexpected workflow.</title>
<link>https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</guid>
<description>Apps like Pinksky transform your Bluesky feed into a visual, Instagram-style experience, but there's a catch.</description>
<pubDate>Sun, 15 Jun 2025 10:31:00 GMT</pubDate>
<media:content url="https://publish-01.obsidian.md/access/54a5cde44e33737dbd9582dc8b12cf1f/vladcampos.com/_files/2025-06-14-pinksky-post-cover-art.png" medium="image" type="image/png"/>
</item>
</channel>
</rss>
Basically, every time there’s a new post in the blog, a new item representing it needs to added ti the feed. And that’s it; whatever software is reading that feed will see that new item.
Building my RSS Feed
This is where the magic happens and where my struggles with manual updates finally ended! I partnered with Gemini to create a simple web app I’m calling the RSS Item Generator.
For that I created another website and assign a subdomain to it using a GitHub repository. It’s a free and easy way to host static websites and you can learn all about it here and here. All I had to do after that was use that space to manually write and publish my own feed. I post frequently, but not that much per week. “It will be fine,” the naive me thought.
It is, indeed, kind of fine, since all I had to do was copy the last content inside <item></item>
, paste it at the top of the previous one, and replace the old information with the new one. However, after a few manual updates, I quickly realized how prone to errors this approach was. I searched for a basic app that could generate new items but couldn’t find one.
Like I said, I’m not a developer, but since forever I’ve been having these ideas that I could never put into practice. Until now!
That’s when I turned to Gemini. I explained my needs in detail and asked for help creating a web app to automate the process. The first version was not exactly there but super close to what I envisioned. So, I kept chatting with it, and we came up with what I’m calling an RSS Item Generator.
How it Works
First, you need an RSS file, which is a fancy name for a text file with a .xml
extension. Usually rss.xml
. Copy the initial section of the RSS code (the ‘header’ part) to a new text document and replace my blog/site information with your own.
Below that, you need to start building the items list. Go to my RSS Item Generator, fill in the blanks with the information from your latest blog post, and click on Generate RSS Item. Now copy that and paste it to the rss.xml
file. The most recent <item></item>
should be at the top of the list. Make sure it looks like the example below.
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title>vladcampos Blog</title>
<link>https://vladcampos.com</link>
<description>Thoughts and articles from one enthusiast to another.</description>
<language>en-us</language>
<lastBuildDate>Tue, 17 Jun 2025 10:12:00 GMT</lastBuildDate>
<atom:link href="https://social.vladcampos.com/rss.xml" rel="self" type="application/rss+xml"/>
<image>
<url>https://social.vladcampos.com/favicon-196x196.png</url>
<title>vladcampos Blog</title>
<link>https://vladcampos.com/blog</link>
</image>
<item>
<title>📃 Things you should know about Obsidian Publish —my struggles and how I'm dealing with them.</title>
<link>https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</guid>
<description>Obsidian Publish has been a game-changer for my online presence, but like any powerful tool, it comes with its quirks. Here are the hurdles I’ve faced and how I’m jumping them.</description>
<pubDate>Mon, 16 Jun 2025 11:32:00 GMT</pubDate>
</item>
<item>
<title>📃 Turning Bluesky into Instagram - my unexpected workflow.</title>
<link>https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</guid>
<description>Apps like Pinksky transform your Bluesky feed into a visual, Instagram-style experience, but there's a catch.</description>
<pubDate>Sun, 15 Jun 2025 10:31:00 GMT</pubDate>
<media:content url="https://publish-01.obsidian.md/access/54a5cde44e33737dbd9582dc8b12cf1f/vladcampos.com/_files/2025-06-14-pinksky-post-cover-art.png" medium="image" type="image/png"/>
</item>
</channel>
</rss>
But there’s a final touch. Each post item has the publication data inside <pubDate></pubDate>
. If you take a look at the top of the feed, there’s also a date inside the <lastBuildDate></lastBuildDate>
. That date and time has to be the same as or after the last post you added to the list. So, remember to always copy the date section of the last post published and paste it to the top of the feed.
That’s it. All you have to do from now on is keep adding the new <item></item>
code blocks and updating the date at <lastBuildDate></lastBuildDate>
.
Publishing the RSS Feed
But an RSS feed is only useful if the entire web can see it. So, you need to publish it.
Remember the GitHub repository I mentioned above? That’s where you’ll do it, and to make both of our lives easier, I suggest watching the video below where I go through each step.
Redirecting the /rss.xml
The last item in our list is to redirect the /rss.xml
address to the new feed address. You have to do this because there’s no way to unpublish that rss page created by Obsidian Publish. At least I never figured out how.
The redirect will make sure everyone gets the correct feed, including feed aggregators trying to guess it. In my case, it is a redirect from vladcampos.com/rss.xml
to social.vladcampos.com/rss.xml
. If your website is powered by Obsidian Publish, you are probably using CloudFlare for your domain.
As for the address, share whatever is best for you. I’ll keep sharing vladcampos.com/rss.xml
because it is easier to remember. As for aggregators trying to figure out your site’s feed, as long as you have the redirect running, they will always land at the one you’ve created.
One thing to keep in mind is that you’ll need to manually update your rss.xml
file with each new post using the generator. While not fully automated, it’s a small price to pay for a fully functional blog feed.
Things you should know about Obsidian Publish — my struggles and how I'm dealing with them.
Obsidian Publish has been a game-changer for my online presence, but like any powerful tool, it comes with its quirks. Here are the hurdles I’ve faced and how I’m overcoming them.
A few days ago, I converted my blog to the Timeline System. If you are interested in more details, there’s a walk-around video that you can watch.
Photos Page
The “Photos page” was inspired by how Micro.blog handles our pictures. When there’s a JPG image in a post, that image will be displayed in a Photos page with a link back to the post.
My solution is more manual, like many other things on the website, but that’s okay. As all this AI buzz grows, I’m trying to find comfort in actually doing things with my type of AI in mind: Attention & Intention.
But don’t get me wrong, I use AI, the other type, all the time. For example, I had this long conversation with Gemini to help me come up with the CSS responsible for the /photos
page layout.
Obsidian Publish Limitations
I am delighted with the progress I have made thus far. However, I have also encountered a few bugs and issues during the process.
Since I came back to Obsidian-Publish, I’ve been working hard on creating this mix of a blog and learning center. It has to be something useful for you, but, at the same time, I need a system that will make my life easy. Otherwise, I’ll just stop sharing.
You know that thumbnail when people share posts on social media? There’s a way to set an image to do that on Obsidian Publish. Although it’s a fairly straightforward setting, I never found it to be successful. And because of all the other work going on in the process of building my website, I never took the time to report this and investigate the matter.
Yesterday, I finally reported it on Obsidian’s official forum, which ended up leading me to mxstbr’s post about it.
The problem is some sort of incompatibility with the Permalink setting. I tested it on my website, and he is right. So, let’s hope the Obsidian team comes up with a fix to this.
The other issue is a site behavior that, in my opinion, doesn’t make any sense. As you already know, formatting notes in Obsidian is done with Markdown. But it’s also possible to use regular HTML.
What I found out is that any link that points to an external site will open that site in a new tab. First, I thought that I could solve that using a HTML link, but it keeps opening on another tab even if I use target="_self"
, which is a way to force the link to open on the same page.
After almost going crazy, I decided to inspect my website code, and, to my amazement, Obsidian Publish replaced the target="_self"
with target="_blank"
, which is how we tell the browser to open the site on a new page.
Why? That doesn’t make any sense. We, the site owners, should be the ones deciding where the page should open.
Anyway, there’s also a complaint about this on the forum. So, let’s hope they fix it. For now, be aware that that’s the reason you’ll be sent to another tab when you click on one of my pictures on the Photos page.
No rel=“me”
This is another HTML attribute that is used by Mastodon and other services to make sure the owner of the website is the same person claiming to be that owner on another site.
It’s such a simple and easy setting, but because of the way Obsidian Publish code works, the rel="me"
is not visible, and services cannot use it to verify ownership.
I’ve been complaining about this for a long time, but after being ignored for so long, I decided to come up with a workaround. Because I also needed a Linktree-style page, I created social.vladcampos.com on GitHub and that’s where I included the rel="me
code.
Not everyone has time or knowledge to do this, not to mention that it’s not ideal. An official way to solve this would be to provide us with access to the <head>
of the site via a file, just like we can do with the publish.css
and publish.js
files.
That, by the way, would address another issue. The Author Attribution verification. For that, regrettably, I could never come up with a workaround.
The Terrible RSS Feed
Finally, there’s the terrible RSS feed. I can relate to the challenges here, but there is already a feed, which, unfortunately, doesn’t make any sense. For starters, I don’t understand what the criteria used to order the notes are. If they could at least make it ordered by last created note, it would already be at least usable.
The workaround I came up with was to |manually create my feed. Unbelievable, right? It’s 2025! Anyway, I’ll do it again on my GitHub page and share the link on my Obsidian site and on the Linktree-style page.
But, please, don’t get me wrong; I’m thrilled with what Obsidian Publish is enabling me to do. It’s something I have tried and failed on so many other platforms, and it’s now a fascinating work in progress.
Turning Bluesky into Instagram - my unexpected workflow.
Apps like Pinksky transform your Bluesky feed into a visual, Instagram-style experience, but there’s a catch.
When creating a Pinksky account, you have the option to either subscribe using your current Bluesky account or create a new profile. There are advantages and disadvantages to both options. In my case, I have decided to use my current account.
If that’s what you choose to do, remember to create a specific App Password to protect your Bluesky account.
I went with that route because of my experience with another decentralized protocol, the ActivityPub. In addition to my Mastodon account, I ended up creating profiles for Flipboard, Pixelfed, PeerTube, and many others. Long story short, it was a big mess, and, after a while, I had to invest some time reorganizing everything.
That said, the problem with using my current Bluesky account is that the Pinksky feed will include every single image people post. However, an image is not always equivalent to a picture. For example, news profiles usually include a cover image with the link to the article they are posting.

There’s a filter in the top-left corner of the screen (a) where you can choose the option to see only photos, but that will not do it. At least it didn’t change anything on my feed, probably because of what I explained in the paragraph above.

Ideally, I would appreciate it if Pinksky had a setting to allow us to hide some profiles from our feed there, and I did send a suggestion to the developer. But you know me, I had to come up with an Unexpected Workflow, right? So this is what I did.
On Bluesky, I created a new List, which I titled Pinksky Feed, and added some of the people I follow. Specifically, the ones who frequently post pictures I like. Since Pinksky will only show me their posts with pictures, the next step was to set that list as my feed on Pinksky.
If you need help creating a List, check the video below. If you already know how to do it, keep reading to learn how to select it as your default feed on Pinksky.
On Pinksky, tap on the hashtag icon at the top right-corner of the screen (b). Now, at the bottom of the screen, you can see all the ones you created on Bluesky. In my case, one of the options is the Pinksky Feed, which is the one I’ve chosen. The hashtag icon at the top right-corner of the screen (b) now has a small blue dot on it, as a reminder that you are seeing pictures from a specific feed.
And that’s it! From now on, as I go about my Bluesky browsing, I’ll simply add any cool, photo-focused accounts I find to that list.
How to create a specific Bluesky password for each App
By creating a specific password for each app, you not only avoid sharing your Bluesky password, but you can also easily revoke access if you need to.
Go to Settings and then click on Privacy & Security. The option we are looking for is App Passwords. Click on it, and if it’s your first time there, you’ll only see the Add App Password button (1). However, as shown in the image below, in my case, there are already some passwords that can be revoked by clicking the trashcan icon (2).
To create a password, click on the Add App Password button and type a name in the box. I always type the name of the app where I’m using that password. It will help me remember where you used that password, in case I want to revoke it in the future.
There’s also a box to Allow access to your direct message . This is precisely what it says, and that’s why I prefer to never check that box. But, of course, it’s up to you.
Caliban's War
When was the last time I read a fiction book as quickly as Leviathan Wakes I don’t even remember. Even before finishing it I bought Caliban’s War, which I’m also enjoying very much. But this time I’m reading it on my Supernote.

I started reading it using the Supernote’s ePub reader, but after learning about the amazing BookFusion plugin for Obsidian, I had to install the BookFusion app on my Supernote, and that’s where I’m currently reading it. By the way, a video about all these tech adventures is coming soon.
ep.4 - How I save Obsidian notes for the future
There are situations where we need to save information for the future and have no exact idea when we’ll need it. In today’s episode, I’m sharing a strategy I used this past weekend.
3 o’clock podcast
Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.
ep.3 - My preferred method of notification is proactivity
When it comes to tasks in Obsidian or elsewhere, I prefer a more proactive approach rather than relying on notifications. As with everything else in the Timeline System, I’m looking for direction; the specifics of what and when I’ll do it depend on the situation at hand.
Resources and References
- How I’m using the Homepage plugin in Obsidian (2025)
- Mastering my To-Do’s (Obsidian Tasks—Part 1)
- How to delete done tasks automatically (Obsidian Tasks—Part 2)
- What’s new to my Obsidian Tasks system and other updates
3 o’clock podcast
Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.
What is Syncthing-Fork
After the Syncthing Foundation decided to discontinue the Android client, I’ve been using Syncthing-Fork, which is non-official open-source version based on the original Syncthing for Android.
Leviathan Wakes
I don’t remember what was the last time I couldn’t stop reading a book. Fortunately, when I was reading Leviathan Wakes, the first book in The Expanse series, it was comforting to know that I would be able to keep enjoying more stories set in that universe.

I developed a more in-depth understanding of the characters, and the most delightful aspect of this was that it occurred naturally as I was enveloped in the adventure narrative. It’s time to find out if the next books are as good as this one. However, if you like the TV show, you should probably read at least this first book.
I purchased it in paperback while on a recent trip to Ireland, but I chose to go digital for the second book, Calvin’s War. And I’m not using a Kindle or Kobo device or apps. This reading is |happening in my Supernote.
ep.2 - My Obsidian Templates—going beyond basic notes to stay organized
I love that Obsidian notes are just text files, but this can sometimes make organizing things a bit difficult. It took me a while, but I now have a group of Templates with the right Properties that are really helping me sort through all the information I have in the app. Will this change in the future. Maybe, but I’m okay for now.
Resources and References
- Auto Template Trigger plugin (how-to)
- Obsidian Publish (Permalinks)
- How to Auto-Date Your Obsidian Notes (how-to)
- Obsidian Map View Plugin (how-to)
3 o’clock podcast
Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.
ep.1 - If you are doing, it should be an Action Container
One thing that was constantly on my mind when I was developing the Timeline System was that it needed to be intuitive. In simpler terms, it should not generate any friction; otherwise, people would abandon it.
3 o’clock podcast
Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.
ep.0 - Hi there 👋
I’m at a point in my Timeline System where I’m starting to get more and more questions about it. The idea for this podcast it to produce short episodes inspired by the conversations I have with clients, friends, and you guys about the system.
For now, I don’t have plans for the frequency, so you can expect episodes whenever I have something to share.
That’s it for this one. Talk to you soon. Very soon.
3 o’clock podcast
Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.
I seriously need to use the bathroom…
“… anyway, what time is it?”
I am aware that I should not have done so, but I pressed the upper-left button on my Garmin to illuminate its display.
Every time this happens, there are two possible outcomes. When I see that it is about 2 or 3 in the morning, it’s so difficult to fall asleep again. Yes, I know, that’s why we should never check the time. Anyway, when it is past 5 a.m., I magically sleep seconds after checking the time or coming back from the bathroom. Our brains are so weirdly wired.
But this time I got a strong beam of light coming from the watch. Everything in the display was gone, but a flashlight icon. I had no idea this feature existed, but the moment I saw that, my brain went like: “wow, I can use this instead of turning on the bathroom light. Cool.”
Yes, that was a neat feature, but none of the buttons on the watch worked anymore.
“Okay, how do I turn this off?”
Because there are so many features on this watch, a long time ago I had created a shortcut to bring the display back to the main screen. Well, you guessed it. Holding the bottom-left button for a few seconds didn’t do anything either.
I was already back in my sheets at that point, wide awake and still trying to figure out what to do. “How do I turn off this beam of light coming out of my wrist? I can’t believe I’ll have to get up and look this up online.”
I don’t sleep with my phone nearby, so I would have to go get it in the other room. Then, my dog would wake up and want to play with me. “Definitely a terrible idea.”
“And, what time is it?”
Click, click, click, and it was finally dark again. “How did I do that?” In any case, I could finally check the time. “Two something in the morning! Oh, no!”. But, it immediately clicked when I pressed the upper-left button to turn on the screen. “I bet it turns on and off by double-clicking the light button. I must have done that accidentally earlier.”
“Cool, that’s it. Now, all I need is a way to double-click to turn myself off.”
Pebble fe504504 error
Yesterday I charged my old Pebble 2, and it seems to want to work. But before troubleshooting this error message, I have to fix the completely melted plastic buttons. And, of course, there’s a 3D file available to solve this. Pebble resurrection project here we go!
My super simple Google Calendar hack for Obsidian
Having both Obsidian and Google Calendar constantly open, was driving me a little crazy because of all the back and forth. Now, one click and I’m there. So simple, so helpful.
Yes, I’m aware of the calendar plugins, but, after trying several options, I’m not happy with any of them. So, I came up with a temporary solution that, to be honest, I’m using for a while and, at least for the moment, it made me stop pursuing other alternatives.
Despite its simplicity, it’s been a game-changer for me, and that’s why I decided to share this hack with.
What I did was use the relatively new Web View feature to open Google Calendar inside Obsidian. But there’s more. I also set the Google-Calendar tab as pinned, which makes it always open when I open Obsidian. And because I use Obsidian in dark mode, I also set Google Calendar to dark mode, and it now blends perfectly as if it is an integral part of Obsidian.
If you are having a hard time visualizing all this, you can watch the video below. In my case, I had to also change some setting on another plugin, the ‘Hompage’, which I also explain why and show in the video.
I freed my Kindle library and have it synchronized with all my devices
First, I converted the books to ePub using Calibre. Next, they joined my Obsidian Timeline System for automatic sync across all devices, Supernote included.
Like many other modern conveniences, the Kindle ecosystem is built to keep us locked in. As you know, I’ve been taking down walls around digital goods I won, and now it’s time to do it with my books. This project has been on my list for a long time, but it was a recent feature removal from Amazon that motivated me to finally pull the trigger.
We used to be able to go to Amazon.com and download our Kindle books, but that’s not possible anymore. A while ago, when Amazon announced the policy change, I downloaded all my books. If you haven’t done that, I believe you can still have access to them by connecting your Kindle to a computer and manually coping the books.
But having the books is just part of the process, as the majority of them are linked to your account via what’s called DRM. Additionally, Amazon uses a proprietary format instead of ePub, which is the more widely adopted by e-book readers. In other words, it’s like having your books locked in a box that is locked in another box.
Calibre is the master key that can help us with all of these locks. Additionally, it works as a library management software, keeping all the books in a folder on our computer. That’s just perfect for the Digital Caveman project, right?
When you are first installing the app, it will suggest a folder for your library, but you can change it to what better suits you. In my case, I created a new Static Container (folder) called ‘eBooks’. And because the files in my Timeline System structure synchronize with multiple devices, my library is now widely available. But I’m getting ahead of myself.
As a tip, you can also move the library to a different folder in the future. Just click on the ‘eBooks’ button on the toolbar to choose a new location.

Next, we need to prepare Calibre to be able to remove the DRM from our books. This is done in two parts. First, we need to install and set up a plugin. It’s only after doing this that we’ll be able to tell Calibre to remove the DRM and convert the books to ePub.
Preparing Calibre
- First you have to find you Kindle serial number.
- Then you can follow this instructions to instal the DeDRM_tools plugin
Converting to ePub
With all the above done, go to Calibre’s main window and click on the ‘Add books’ buttons. Select one or more books, and they will be added to your library’s folder.
Next, select one or more books in the list and click on the ‘Convert books’ option. You’ll see a new window with countless details that you can tweak on each book. There are even several formats available in addition to ePub, which is the pre-selected on. In my case, I kept everything as it was and clicked on the button to convert.
The Supernote
To understand how my books are being automatically sent to my Supernote, I suggest watching the video below.
But remember, the books are in my Obsidian Vault. And looking at how Calibre creates folders for each author, I’m already having insights about making those folders somehow connected to other content I have in Obsidian. Specially, the ‘Knowledge Base’ notes, which share a strong relationship with the books I read. And that’s one of the reasons I chose to set the ‘eBooks’ folder as a Static Container.
The Digital Caveman Project
There are plenty of details I still would like to adjust, but all the digital content I create and own is now local first and free from walled gardens. In other words, 100% under my control.
In addition to my notes and website being created in Obsidian, my music, photos, now my books, every single file I use for my personal life and work, and even my passwords, are on my computer first. I even have my own ‘cloud’ system and a backup strategy.
🪨 I did it!
How to instal the DeDRM_tools plugin
Download the DeDRM_tools plugin, unzip the folder and set it apart. Next, go to the ‘Preferences’ under the ‘Calibre’ menu option. At the bottom of the page, you’ll see the ‘Plugins’ button. Click on it. Next, click on the button ‘Load plugin from file’.

Navigate to the ‘DeDRM_tools’ folder on your computer, find and select the ‘DeDRM_plugin.zip’ file. Click on ‘Open’, and you’ll see a dialog box asking if you are sure. Click on ‘Yes’ and in the next dialog box, also on ‘OK’.
Now we need to provide the plugin with your Kindle serial number. There are many plugins already installed, so if for some reason, you can’t see the one we just installed, simply search for ‘DeDRM’. Select it and click on the ‘Customize Plugins’ button and then on ‘Kindle eink ebooks’.
You be asked for your Kindle Serial Number. Add the serial number to the box and that’s it.