babarot32 downloadsUpload images to any API endpoint on drag & drop or paste, and insert the public URL as Markdown.
An Obsidian plugin that uploads images to any API endpoint when you drag & drop or paste them, and inserts the public URL as Markdown.
![Uploading...]() placeholder while uploadingImages: .jpg, .jpeg, .png, .gif, .webp, .svg, .avif, .ico
Documents: .pdf (opt-in via settings)
Images are inserted as . PDF handling is controlled by the PDF handling setting:
[filename](url)Unsupported file types are left to Obsidian's default behavior.
| Setting | Description |
|---|---|
| API Endpoint | The URL to POST the image to |
| File Field Name | The multipart/form-data field name for the file (e.g. file, image) |
| Image URL Path | Dot-notation path to extract the URL from the JSON response (e.g. url, data.link) |
| PDF handling | Choose how PDFs are handled: save locally (default), always upload, or ask each time |
| HTTP Headers | Key-value pairs sent with the request (e.g. X-API-Key, Authorization) |
| Setting | Value |
|---|---|
| API Endpoint | https://example.com/api/upload |
| File Field Name | file |
| Image URL Path | url |
| Headers | X-API-Key = your-api-key |
Response: {"url": "https://example.com/files/image.png", "size": 204800}
| Setting | Value |
|---|---|
| API Endpoint | https://api.imgur.com/3/image |
| File Field Name | image |
| Image URL Path | data.link |
| Headers | Authorization = Client-ID your-client-id |
This plugin is inspired by Image Uploader but addresses several limitations:
| Image Uploader to API | Image Uploader | |
|---|---|---|
| Drag & Drop | Yes | No (paste only) |
| Multiple images at once | Yes (parallel upload) | No (single file only) |
| Header configuration | Key-value UI | Raw JSON textarea |
| HTTP client | Obsidian requestUrl (no CORS issues) |
axios |
| PDF upload support | Yes (configurable) | No |
| External dependencies | None | axios, object-path, compressorjs |
This plugin sends image files over the network to the API endpoint you configure in the settings. No data is sent to any service unless you explicitly set an endpoint. The plugin itself does not collect any telemetry or analytics.
main.js, manifest.json, and styles.css from the latest releaseimage-uploader-to-api in your vault's .obsidian/plugins/ directorynpm install
npm run dev # watch mode
npm run build # production build