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:
- Save the image locally (default behavior)
- 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:
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:
curl -s -X POST \ -H "Authorization: Bearer sk_live_YOUR_KEY" \ -F "file=${filename}" \ https://api.picora.com/v1/imagesThis 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:
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:
- Find an image (screenshot, download, etc.)
- Copy it to clipboard (or drag the file)
- Paste into Typora (
Cmd+V/Ctrl+V) - Typora shows a brief upload indicator
- The image appears in your document with a CDN URL
The resulting Markdown looks like:
That URL is permanent and loads fast worldwide from Cloudflare’s CDN.
Troubleshooting
”Test Failed” message
Check these in order:
- Is
curlavailable? Runcurl --versionin Terminal - Is
python3available? Runpython3 --versionin Terminal - 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.