Goodbye Imgur — Images on My Own NAS with MinIO
Translated with the help of AI.
Series
Self-hosting · Part 2

The previous post covered my move from Evernote to Obsidian. The benefit of moving my old files is that everything is now stored as markdown on my own hardware, so I no longer worry about the platform’s long-term future or whether the file format will stay readable. But a new problem appeared. Evernote’s idea is to put everything in it, so my files had lots of attachments and images, and my Obsidian vault became quite large.
Obsidian’s design keeps text files, attachments and images together in one vault, with the attachments and images linked inside the text files. Obsidian Sync works per vault, and within a vault you can choose which file types to sync. On mobile devices, Obsidian Sync can skip large attachments and images. That avoids slow syncing on slower networks away from home, and stops Obsidian from taking up too much storage on the device.
Obsidian Sync already solves the network and storage problems on mobile, but I still wanted to store text files separately from attachments and images. In the long run that keeps the vault a reasonable size and easy to sync. So I decided to put non-essential attachments and images in another “place” outside the text files, and put their link addresses in the text files.
My first arrangement was this: important attachments went on OneDrive, with links in the text files, and less important ones (mostly images) went on Imgur, because Imgur had a handy Obsidian plugin. But after weighing long-term storage, backups and privacy risks, I decided to “migrate” once more and keep the images on my own hardware too. This is part 2 of the self-hosting series: how my images moved from Imgur to a MinIO server on a Synology NAS.
What the move had to do
The Imgur plugin works like this: when you paste an image into an Obsidian note, the plugin uploads it automatically and puts the image’s Imgur address into the note. So the move had to meet two needs: a “home” for the image files, and a way to do “upload and paste the address” automatically.
The Synology NAS was the first choice for a home. It is in my own hands, and I already use Synology Photos for daily photo backup. But Synology Photos can’t meet the second need. It took about half a year to solve that one.
Two failures first (January to April 2026)
The overall architecture is not complicated: set up the storage on the NAS, install an upload plugin in Obsidian, and get “upload and paste the address” when an image is pasted into a note. But not every Obsidian plugin is as straightforward as the Imgur one.
First, in January and February, I set up Picsur, a dedicated self-hosted image library. The interface was nice and uploading was easy, but I never got the Obsidian upload integration working (images could be uploaded to the NAS, just not directly from Obsidian). Then in April I tried an image API gateway built specifically for Obsidian, but that failed too (I still don’t know which step went wrong). So MinIO became my third attempt.
The working setup
Picsur and the API gateway focus on image handling, and connecting them to Obsidian is not a common project. MinIO is a widely used object store, and there is much more discussion and many more tutorials online on connecting it to upload plugins, backup tools and so on.
Here are the steps I took, for your reference:
- Portainer on the Synology: a web UI for managing Docker containers on the NAS. One-time setup, and every later experiment (including the failed ones) is installed by pasting a “stack” into its editor.
- MinIO as a Docker stack: the official image, a folder on the NAS, credentials in an env file. The whole configuration is one compose file.
services:
minio:
image: quay.io/minio/minio:latest
command: server --console-address ":9090"
environment:
- "MINIO_CONFIG_ENV_FILE=/etc/config.env"
ports:
- 9001:9000
- 9090:9090
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
volumes:
- /volume2/docker/minio/data:/mnt/data
- /volume2/docker/minio/.env:/etc/config.env
- A bucket anyone can read single files from: the bucket for the image files, with a rule set through MinIO’s
mctool: anyone may read one file at a time (s3:GetObject), but nobody may list what’s in the bucket (uploads still need keys). This is the only deliberately “public” setting in the whole design. (Careful: MinIO’s ready-made “download” setting also lets anyone list every file.) - An access key for the plugin: a service account generated inside MinIO, so the Obsidian plugin does not hold the admin password.
- The Obsidian MinIO uploader plugin: fill in the endpoint, bucket and key, and switch on “upload on paste”.
- Remote management: at first I used NetBird to solve remote access. Later, once I had my own domain name (part 3), it truly replaced Imgur’s role in this workflow.
What it changed
Since then, every image I paste into a .md note is stored on my NAS automatically, and its NAS address goes into the note automatically too. And with years of text files separated from their attachments and images, the vault itself got much lighter: the backup size of my Obsidian vault dropped by about 70%.
This series has now completed two kinds of move: years of writing converted to .md and moved from the cloud to my computer (part 1), and now the images moved from the cloud or the Obsidian vault onto the NAS (part 2). The next step is moving the blog off WordPress, which is part 3.
