Kiang26 downloadsUpload images to cloud storage (R2/S3) with automatic compression. Paste or drag images to get a Markdown link instantly.
Paste or drag an image — upload to the cloud or save to vault, your choice.
English | 简体中文
Features • Installation • Configuration • Usage • Roadmap • Feedback
EzImage for Obsidian solves the fundamental pain point of image management in Obsidian: pasted images pollute your vault with local binary files, or worse, reference paths that break across machines. EzImage intercepts every paste and drop event and either uploads the image to your cloud storage (inserting a clean Markdown URL) or saves it to the vault via a wikilink — whichever mode you prefer, switchable at any time from the status bar.
 link is inserted. Zero local files, zero broken paths.![[wikilink]]. Fully managed by Obsidian's native structure.EzImage: Toggle Local Save Mode). The status bar always shows the current mode at a glance.browser-image-compression. Images are converted to WebP and resized before upload, reducing file size without visible quality loss. EXIF metadata is stripped automatically during conversion.{yyyy} {MM} {dd} {timestamp} {random} {name} {ext}.main.js and manifest.json from GitHub Releases.<your-vault>/.obsidian/plugins/ezimage/.Open Settings → EzImage and fill in your credentials and preferences.
| Field | Description |
|---|---|
| Account ID | Found on the right sidebar of your Cloudflare dashboard |
| Access Key ID | R2 API token — requires Object Read & Write permission |
| Secret Access Key | Paired secret for the access key |
| Bucket Name | The R2 bucket to upload images into |
| Public URL | Your bucket's public URL, e.g. https://pub-xxx.r2.dev or a custom domain |
| Option | Default | Description |
|---|---|---|
| Compress Images | on |
Convert to WebP before upload — also strips EXIF automatically |
| Strip EXIF Metadata | on |
Remove GPS, device info, and other metadata. Only applies when compression is off (compression already strips EXIF via WebP conversion) |
| Max Width | 1920 |
Resize if wider than this (px). 0 = no limit |
| Quality | 85 |
WebP quality (1–100) |
| Max File Size (MB) | 20 |
Files larger than this are rejected before upload. 0 = no limit |
| Path Template | {yyyy}/{MM}/{timestamp}-{random}.{ext} |
Upload path pattern — live preview shown in Settings |
Template variables: {yyyy} {MM} {dd} {hh} {mm} {ss} {timestamp} {random} {name} {ext}
| Option | Default | Description |
|---|---|---|
| Default to Local Save mode | off |
When enabled, images are saved to your vault by default instead of being uploaded. Can be toggled at any time via the status bar. |
| Language | Auto |
Language used in the settings panel. Options: Auto (follow Obsidian), English, 中文. |
| Action | How |
|---|---|
| Paste image | Copy any image → paste in editor — processed automatically based on current mode |
| Drag & drop | Drag image file(s) from your file manager into the editor |
| Upload from file | Command Palette → EzImage: Upload Image from File |
| Upload clipboard | Command Palette → EzImage: Upload Clipboard Image |
| Toggle mode | Settings toggle, or Command Palette → EzImage: Toggle Local Save Mode |
| Context menu | Right-click in editor → EzImage options |
The status bar item is a read-only indicator of the current mode:
| Display | Mode |
|---|---|
☁ EzImage (dimmed) |
Upload mode — images go to R2 |
🖴 Local Save (bright) |
Local Save mode — images go to vault |
To switch modes, use the Settings toggle or Command Palette → EzImage: Toggle Local Save Mode (bindable to a hotkey). The tooltip follows your configured language.
Note: EzImage only intercepts paste/drop events when R2 is configured. If credentials are missing, Obsidian's default behaviour (local save) is preserved regardless of mode.
Found a bug or have a feature request? Please open an issue.
Pull requests are welcome. See the development setup below.
git clone https://github.com/keepwonder/ezimage-obsidian.git
cd ezimage-obsidian
npm install
# Watch mode (outputs main.js)
npm run dev
# Production build
npm run build
Copy main.js and manifest.json into your vault's plugin folder to test locally.
Scan the QR code below to add the author on WeChat, please mention "EzImage":
Scan to get technical support
If EzImage has improved your workflow, feel free to buy me a coffee!
WeChat Pay |
Alipay Pay |
Developed with ❤️ by Kiang