September 30, 2026 · 4 min read

How to upload Typora images to S3 or Cloudflare R2

Typora saves pasted images next to your Markdown file by default. That's fine until you publish the document, paste it into GitHub or send it to someone: the images stay behind on your computer. Uploading them to your own bucket as you write keeps the Markdown portable, and the links point at storage you control.

Install and connect the aktar command

Typora's custom uploader runs a command with the image paths and reads the links it prints. aktar does exactly that, using the destinations you already set up in Aktar for Mac or Windows.

brew install getaktar/tap/aktar-cli    # or: npm install -g @getaktar/cli
  1. In Aktar, open Settings > Integrations, turn on Allow local connections and copy the token.
  2. Run aktar login in a terminal and paste it.
  3. Check it with aktar upload some-image.png. It should print a link.

Set aktar as Typora's image uploader

  1. Open Typora's settings (Typora > Settings… on a Mac, File > Preferences… on Windows) and go to Image.
  2. Under Image Uploader, choose Custom Command.
  3. Enter the command with its full path. On a Mac with Homebrew that's:
/opt/homebrew/bin/aktar upload

Run which aktar (on Windows, where aktar) to see where yours is. Typora doesn't always see your terminal's PATH, which is why the full path is safer than just aktar.

  1. Click Test Uploader. Typora uploads two small test images and shows the links it got back.

Upload images automatically as you paste them

In the same Image settings, set When Insert… to Upload Image. From then on, pasting or dragging an image into a document uploads it and writes the bucket link into the Markdown.

For a document that already has local images, use Format > Image > Upload All Local Images.

Choose where the images go

By default, images go to the destination selected in Aktar's menu bar, named with its path template. To send Typora images somewhere else, add options to the command:

/opt/homebrew/bin/aktar upload -d Blog              # a destination named "Blog"
/opt/homebrew/bin/aktar upload --folder docs/images # keep file names, in one folder

Keep the output as plain URLs (the default): Typora writes the Markdown itself, so don't add --format or --json here.

If Test Uploader fails

  • Command not found, or node not found: use the full path from which aktar. The Homebrew version brings its own path to Node, so it works from Typora as is; with an npm install, run it as /path/to/node /path/to/aktar upload.
  • Not connected to Aktar: run aktar login in a terminal, and make sure Aktar is running with Allow local connections on.
  • The link opens with Access Denied: the upload worked, but the bucket isn't public at its public URL. See Access Denied errors.

Common questions

Does this work with Cloudflare R2, Backblaze B2 and MinIO?

Yes. aktar uploads to whatever destination Aktar has, including Amazon S3, Cloudflare R2, Backblaze B2, DigitalOcean Spaces and MinIO. See the setup guides.

Do I need PicGo or a plugin?

No. Typora's built-in Custom Command option runs aktar directly.

Can uploaded images expire?

Yes, add --expires 30 to the command to have the bucket delete them after 30 days. For images in documents you publish, you'll usually want to keep them.