✅ Real-Time Progress - Optional progress modal with detailed feedback
✅ Flexible Paths - Support for relative paths and dynamic path variables
✅ Web Image Upload - Download and re-upload web images to your storage (optional)
Supported Storage Services (8 providers)
Service
Free Tier
Rating
Best For
Imgur
Limited
⭐⭐⭐
Personal blogs
GitHub
Unlimited
⭐⭐⭐⭐
Open source projects
Cloudflare R2
Pay-as-you-go
⭐⭐⭐⭐⭐
Professional use
AWS S3
Pay-as-you-go
⭐⭐⭐⭐
Enterprise
Aliyun OSS
Pay-as-you-go
⭐⭐⭐⭐
Chinese users
TencentCloud COS
Pay-as-you-go
⭐⭐⭐⭐
Chinese users
Qiniu Kodo
Pay-as-you-go
⭐⭐⭐⭐
Chinese users
ImageKit
Limited
⭐⭐⭐⭐
CDN optimization
Perfect for publishing to static sites like GitHub Pages or any platform requiring externally hosted images.
🛠️ Installation & Configuration
Step 1: Install Plugin
Open Obsidian Settings → Community Plugins
Search for "Image Upload Toolkit"
Click Install and Enable
Step 2: Basic Settings
Use image name as Alt Text: ✅ Recommended (uses filename as alt text)
Update original document: ❌ Suggested disabled (preserves original notes)
Ignore note properties: ✅ Recommended (removes frontmatter when publishing)
Show progress modal: ✅ Recommended (better user experience)
Upload web images: ❌ Optional (downloads and re-uploads web images to prevent link rot)
Step 3: Choose Storage Service
Select your preferred storage service from the dropdown. See Storage Service Configuration for detailed setup instructions.
📖 Usage Guide
Basic Usage
Open any note with local images
Use Command Palette (Ctrl/Cmd + P)
Type "Publish Page" and select the command
All local images will be uploaded to your configured storage
Updated markdown with new URLs is copied to clipboard
Advanced Usage
Custom Paths: Use variables like {year}/{mon}/{day}/{filename} in path settings
Relative Paths: Support for ./ and ../ relative path formats
Dynamic Attachments: Works with Obsidian's attachment folder settings
Web Image Upload: Enable in settings to automatically download and re-upload web images (http/https URLs) to your storage service. Images already hosted on your configured storage are automatically skipped.
🔧 Storage Service Configuration
Service Selection Guide
Personal Use: Imgur (simple and free)
Open Source: GitHub (version control integration)
Professional: Cloudflare R2 (high performance)
Enterprise: AWS S3 (full-featured)
Chinese Users: Aliyun OSS (optimized for China)
Detailed Configuration
Imgur (Recommended for Beginners)
1. Visit https://api.imgur.com/oauth2/addclient
2. Create application (select "OAuth 2 authorization without a callback URL")
3. Copy Client ID to plugin settings
4. No additional keys required
GitHub (Recommended for Developers)
1. Create Personal Access Token with 'repo' scope
2. Prepare a public repository for image storage
3. Configure repository information and access token
Note: Images are committed as regular files to the repository
Cloudflare R2 (Recommended for Professional Use)
1. Sign up at https://dash.cloudflare.com/sign-up
2. Enable R2 storage in your Cloudflare dashboard
3. Create an R2 bucket for images
4. Generate API credentials:
- Go to R2 → Overview → Manage R2 API Tokens
- Create token with read/write permissions
5. Configure in plugin:
- Access Key ID and Secret Access Key
- Endpoint: https://<account-id>.r2.cloudflarestorage.com
- Bucket Name: Your bucket name
- Custom Domain: Optional (R2.dev URL or custom domain)
AWS S3
1. Create AWS account at https://aws.amazon.com
2. Create S3 bucket with public read access
3. Generate IAM credentials with S3 permissions
4. Configure in plugin:
- Access Key ID and Secret Access Key
- Region: AWS region of your bucket
- Bucket Name: Your S3 bucket name
- Custom Domain: Optional CDN domain
Aliyun OSS (阿里云对象存储)
1. Create Alibaba Cloud account
2. Create OSS bucket with appropriate permissions
3. Generate AccessKey pair from RAM console
4. Configure in plugin:
- Access Key ID and Secret
- Region: e.g., oss-cn-hangzhou
- Bucket Name: Your OSS bucket
- Custom Domain: Optional CDN domain
ImageKit
1. Create account at https://imagekit.io/registration/
2. Get API credentials from dashboard
3. Configure in plugin:
- Public Key and Private Key
- URL Endpoint: https://ik.imagekit.io/your_imagekit_id/
- Folder: Optional organization folder
TencentCloud COS (腾讯云对象存储)
1. Create Tencent Cloud account
2. Create COS bucket with appropriate permissions
3. Generate SecretId and SecretKey from CAM console
4. Configure in plugin:
- Secret ID and Secret Key
- Region: e.g., ap-guangzhou
- Bucket Name: Your COS bucket
- Custom Domain: Optional CDN domain
Qiniu Kodo (七牛云存储)
1. Create Qiniu Cloud account
2. Create Kodo bucket
3. Generate Access Key and Secret Key
4. Configure in plugin:
- Access Key and Secret Key
- Bucket Name: Your Kodo bucket
- Custom Domain: Domain bound to your bucket
🔍 Troubleshooting
Common Issues
"Cannot locate image" Error
Cause: Incorrect image path configuration or missing files
Solution:
Check Obsidian's attachment folder settings
Verify image files exist at specified paths
Try using absolute paths for testing
Imgur Upload Failures
Cause: API limits or network issues
Solution:
Verify Client ID is correct
Wait a few minutes and retry (Imgur has rate limits)
Consider alternative storage services
Relative Paths Not Working
Cause: Plugin version or path resolution issues
Solution:
Update to latest version
Use relative paths starting with ./ or ../
Check Obsidian's attachment settings
Progress Modal Not Showing
Cause: Settings issue or plugin conflicts
Solution:
Verify "Show progress modal" setting is enabled
Restart Obsidian
Check for conflicting plugins
Upload Errors with Special Characters
Cause: Filename encoding issues
Solution:
Avoid special characters in filenames
Use only alphanumeric characters, hyphens, and underscores
Check filename encoding in your file system
Web Image Download Failures
Cause: Network issues, CORS restrictions, or authentication requirements
Solution:
Check your internet connection
Verify the web image URL is accessible
Some images may require authentication and cannot be downloaded
Disable "Upload web images" if you only want to process local images
📈 Best Practices
Workflow Recommendations
Backup Important Data - Always backup before uploading
Test Configuration - Use test images to verify setup
Choose Appropriate Storage - Match service to your use case