← Back to Blog
tutorialtyporasetup

Complete Typora Image Host Setup Guide

Configure Typora to automatically upload every pasted image to Picora. One-time setup, zero manual work forever after.

Typora is a distraction-free Markdown editor that many writers swear by. Its image upload feature is one of its best — properly configured, you paste an image and Typora automatically uploads it and replaces the path with a CDN URL.

This guide shows you how to configure Typora with Picora as the backend.

How Typora Image Upload Works

When you paste, drag, or insert an image in Typora, it can:

  1. Save the image locally (default behavior)
  2. Run a custom command and use the output as the URL

We’ll use option 2. Typora will run a shell command that uploads the image to Picora’s API and prints the URL. Typora then replaces the local path with that URL automatically.

Prerequisites

Before you start, make sure you have:

  • Typora installed (typora.io)
  • curl available (pre-installed on macOS and Linux; on Windows, install Git Bash or use WSL)
  • python3 available (pre-installed on macOS; install from python.org on Windows)
  • A Picora API key (create one at app.picora.com → Integration → + Create Key)

Configuration

1. Open Typora Preferences

  • macOS: Typora menu → Preferences → Image tab
  • Windows/Linux: File menu → Preferences → Image tab

2. Configure the Upload Service

Under “Image Upload Setting”:

  • When Insert: Select Upload Image
  • Upload Service: Select Custom Command

3. Enter the Upload Command

Paste this command (replace sk_live_YOUR_KEY with your actual key):

macOS / Linux:

Terminal window
curl -s -X POST -H "Authorization: Bearer sk_live_YOUR_KEY" -F "file=${filename}" https://api.picora.com/v1/images | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['url'])"

Windows (Command Prompt):

curl.exe -s -X POST -H "Authorization: Bearer sk_live_YOUR_KEY" -F "file=${filename}" https://api.picora.com/v1/images | python3 -c "import sys,json;print(json.load(sys.stdin)['data']['url'])"

4. Test the Configuration

Click “Test Uploader” — Typora will upload a small test image. You should see a success message with the URL.

If the test passes, you’re done. Every image you paste from now on will automatically upload to Picora.

Understanding the Command

The command is a pipeline of two tools:

curl uploads the file:

Terminal window
curl -s -X POST \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-F "file=${filename}" \
https://api.picora.com/v1/images

This sends the image to Picora’s API with your API key for authentication. Picora responds with JSON:

{"success": true, "data": {"url": "https://img.picora.com/xK9mR2pQ7vB.webp", ...}}

python3 extracts just the URL:

Terminal window
python3 -c "import sys,json;print(json.load(sys.stdin)['data']['url'])"

This reads the JSON from stdin and prints only the URL. Typora reads that URL from stdout and inserts it into your document.

Workflow After Setup

Once configured, your workflow becomes:

  1. Find an image (screenshot, download, etc.)
  2. Copy it to clipboard (or drag the file)
  3. Paste into Typora (Cmd+V / Ctrl+V)
  4. Typora shows a brief upload indicator
  5. The image appears in your document with a CDN URL

The resulting Markdown looks like:

![Screenshot](https://img.picora.com/xK9mR2pQ7vB.webp)

That URL is permanent and loads fast worldwide from Cloudflare’s CDN.

Troubleshooting

”Test Failed” message

Check these in order:

  1. Is curl available? Run curl --version in Terminal
  2. Is python3 available? Run python3 --version in Terminal
  3. Is your API key correct? Try the curl command manually in Terminal

Command not found on Windows

If you get “curl is not recognized”, try curl.exe instead of curl. If you get python errors, use python instead of python3.

Images upload but the path stays local

Make sure “When Insert” is set to “Upload Image” (not “Copy to custom folder”). The upload service must be “Custom Command” with the correct command.

401 Unauthorized

Your API key is wrong or revoked. Log in to app.picora.com → Integration, create a new key, and update the command.


Questions? Drop us an email at support@picora.com or check the full docs.

Create your free Picora account →