Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Cloud Image Uploader

huakaifanghuakaifang19 downloads

Upload pasted or dropped images and attachments to Alibaba Cloud OSS.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates1

Cloud Image Uploader is a desktop-first Obsidian plugin that uploads pasted and dropped attachments to Alibaba Cloud OSS and inserts the resulting Markdown embed at the cursor.

简体中文

Features

  • Paste images directly into a note and upload them to OSS.
  • Drag images, video, audio, or PDF files into the editor.
  • Keep files in the local vault instead of OSS when desired.
  • Configurable object paths such as obsidian/{year}/{month}/{day}/{filename}.
  • Original, timestamped, random, and UUID filename strategies.
  • Public OSS URLs, custom-domain/CDN URLs, and temporary signed URLs.
  • Multipart upload progress for large files and exponential retry for transient failures.
  • Safe duplicate handling: rename, overwrite, or skip.
  • Migrate local image embeds in the current note without deleting files by default.
  • Per-note frontmatter overrides.
  • Obsidian Keychain integration: plugin data stores only secret references.
  • Optional last-reference cleanup for plugin-managed OSS objects, with a full-vault safety check.
  • Deleted notes retain their unreferenced cloud objects for 30 days by default before a second safety check and cleanup.

Installation

Manual installation

  1. Download cloud-image-uploader.zip from the release.
  2. Extract the cloud-image-uploader folder into <Vault>/.obsidian/plugins/.
  3. In Obsidian, open Settings → Community plugins.
  4. Reload installed plugins and enable Cloud Image Uploader.

The plugin folder must contain main.js, manifest.json, and styles.css.

Alibaba Cloud OSS setup

  1. Create an OSS bucket in the region closest to you.
  2. Create a dedicated RAM user or obtain temporary STS credentials. Do not use the Alibaba Cloud root-account AccessKey.
  3. Grant only the object permissions needed by the configured prefix: oss:PutObject, oss:GetObject, and optionally oss:DeleteObject for cleanup. The connection test uploads a tiny object and then tries to delete it.
  4. Decide how readers will access uploads:
    • Public-read objects/bucket and Public OSS URL.
    • A bound CDN/custom domain and Custom domain.
    • A private bucket and Temporary signed URL (links expire, so this is not ideal for permanent notes).
  5. Enter the AccessKey ID, secret, region (for example oss-cn-hangzhou), and bucket name in plugin settings.
  6. Select Test connection.

Remote cleanup

Enable Delete remote file when its last link is removed only after granting oss:DeleteObject for the configured object prefix. This operation is irreversible on OSS.

  • The plugin waits five seconds after a link edit, then scans every Markdown note. It deletes only a remote object previously uploaded and registered by this plugin, and only when no reference remains.
  • Deleting an entire note does not delete its cloud files immediately. They enter a persisted retention queue for 30 days by default. At expiry—or the next time Obsidian opens after expiry—the vault is scanned again before deletion.
  • Restoring the note or referencing the same URL elsewhere prevents deletion. A scan or network failure also leaves the object intact for a later check.
  • Tracking starts with uploads made by version 0.2.0; older OSS objects are intentionally not adopted automatically.
  • OSS folders are key prefixes rather than normal directories. If the plugin did not create a folder-marker object, deleting the last object makes the empty date prefix disappear automatically.

The desktop build uses the Node.js transport from ali-oss, so browser CORS rules are normally not involved. If a proxy, custom endpoint, or future mobile/browser build changes the transport, configure OSS CORS for the exact origin and required methods instead of using a broad wildcard policy.

Target path

The default target is:

obsidian/{year}/{month}/{day}/{filename}

On 2026-09-08, figure.png becomes an object such as:

obsidian/2026/09/08/20260908123456-a1b2c3.png

Supported tokens include {year}, {month}, {day}, {hour}, {minute}, {second}, {filename}, {basename}, {ext}, {originalName}, {noteName}, {random}, and {uuid}.

Per-note overrides

Credentials are never read from note properties. The following frontmatter can override behavior for one note:

---
cloudImageUploader: true
uploadOnPaste: true
uploadOnDrag: true
uploadTarget: aliyun
remotePath: research/{year}/{month}/{filename}
---

Use cloudUpload: false to disable automatic uploading for a note.

Commands

  • Upload image from clipboard
  • Upload local file
  • Upload all local images in current note
  • Test OSS connection
  • Copy last uploaded URL
  • Toggle automatic upload

Security

  • Use a dedicated, least-privilege RAM user or short-lived STS credentials.
  • AccessKey Secret and STS token are stored through Obsidian SecretStorage (Keychain); data.json contains only their secret IDs.
  • Debug logs redact fields whose names indicate secrets, tokens, credentials, authorization data, or signed URLs.
  • Temporary signed URLs contain an expiring access signature. They are inserted into the note and recent-upload history by design; treat both as sensitive until the link expires.
  • data.json, .env*, and release output are ignored by Git.
  • Never place credentials in note frontmatter or source code.
  • Automatic remote cleanup requires delete permission and permanently removes qualifying objects after its checks and retention rules.
  • Please report suspected vulnerabilities privately as described in SECURITY.md.

Network and privacy disclosure

  • The plugin requires an Alibaba Cloud account and sends only attachments you paste, drop, select, or explicitly migrate to the OSS bucket you configure.
  • Alibaba Cloud OSS usage may incur storage, request, and network-transfer charges under your Alibaba Cloud plan.
  • The plugin has no telemetry, analytics, advertising, or developer-operated relay service.
  • Local-vault fallback writes only inside the active vault. Migration reads only attachment files referenced by the current note.

FAQ

Upload succeeded but the image is not visible. Check bucket/object read permission, custom-domain binding, HTTPS, and whether a signed URL has expired.

AccessDenied. Confirm that the RAM identity can access the exact bucket and prefix. Automatic remote cleanup and connection-test cleanup require oss:DeleteObject.

SignatureDoesNotMatch. Recheck the secret, region, endpoint, HTTPS choice, and system time.

NoSuchBucket. The bucket name or region is wrong.

Why does the plugin save a local file after a cloud error? Local fallback is enabled by default so a pasted image is not lost. It can be disabled in settings.

More help is available in Chinese troubleshooting.

Development

npm ci
npm run check
npm run package

npm run package creates release/cloud-image-uploader/ and release/cloud-image-uploader.zip.

Credits

The user experience was inspired by S3 Image Uploader, an MIT-licensed Obsidian plugin. Cloud Image Uploader uses a new Alibaba OSS-first implementation and architecture. See reference analysis.

License

MIT

Support

Cloud Image Uploader is free and open source. If it saves you time, you can optionally buy me a coffee through Alipay or WeChat Pay. Donations never unlock features and are not required to use the plugin.

Alipay payment QR code WeChat Pay QR code

Open Alipay · Open WeChat Pay

HealthExcellent
ReviewSatisfactory
About
Upload pasted or dropped images, videos, audio, or PDFs to Alibaba Cloud OSS and insert the resulting Markdown embed at the cursor. Choose local-vault retention, configurable object paths and filename strategies, public/CDN/temporary URLs, multipart upload with retries, safe duplicate handling, per-note overrides, and Obsidian Keychain secret storage.
AttachmentsIntegrations
Details
Payments
Optional
Current version
0.2.0
Last updated
2 weeks ago
Created
2 weeks ago
Updates
1 release
Downloads
19
Compatible with
Obsidian 1.11.4+
Platforms
Desktop only
License
MIT
Report bugRequest featureReport plugin
Sponsor
Support
Author
huakaifanghuakaifang
GitHubhuakaifang
  1. Community
  2. Plugins
  3. Attachments
  4. Cloud Image Uploader

Related plugins

Image auto upload

Upload images from your clipboard by PicGo.

BRAT

Easily install a beta version of a plugin for testing.

LanguageTool Integration

Advanced grammar and spell checking, powered by LanguageTool.

Self-hosted LiveSync

Sync vaults securely to self-hosted servers or WEBRTC.

Fast Note Sync

Real-time sync of your vaults across server, mobile, and web; shareable with anyone; supports REST and MCP integrations to build your personal AI knowledge base.

Custom Frames

Turn web apps into panes using iframes with custom styling. Also comes with presets for Google Keep, Todoist and more.

Local REST API with MCP

Unlock your automation needs by interacting with your notes over a secure REST API.

Share Note

Instantly share/publish a note, with the full theme and content exactly like you see in Obsidian. Data is shared encrypted by default, and only you and the person you send it to have the key.

Maps

Adds a map layout to bases so you can display notes as an interactive map view.

Google Drive Sync

Syncs a vault into Google Drive for cross-platform use (works for iOS).