Pasterly
approvedby easternkite
Automatically upload clipboard images to Firebase Storage and insert them as markdown links!
Pasterly
Pasterly is an Obsidian plugin that automatically uploads clipboard images to cloud storage and generates markdown links. Supports Firebase Storage, Google Cloud Storage, and S3-compatible storage such as AWS S3 and Cloudflare R2.
Features
- π· Automatically uploads clipboard images to cloud storage
- β³ Shows
![Uploading...]()placeholder during upload - π Converts to markdown image link upon successful upload
- βοΈ Multiple storage providers: Firebase Storage, Google Cloud Storage, and S3-compatible storage
- π Auto-authentication via
gcloud CLI(no manual token refresh!) - π CDN URL support for faster image delivery
- π΄ Falls back to default paste behavior when offline
Setup
Option 1: Firebase Storage
- Create a project in Firebase Console
- Enable Storage service
- Get your bucket URL (e.g.,
gs://your-bucket.appspot.com) - In Pasterly settings:
- Storage Provider:
Firebase Storage - Firebase Storage Bucket URL: Your bucket URL
- Storage Provider:
Important: Ensure WRITE permission is enabled in your Firebase bucket rules.
Option 2: Google Cloud Storage (Recommended)
Prerequisites
- Install Google Cloud SDK
- Authenticate with your Google account:
gcloud auth login - Verify authentication works:
gcloud auth print-access-token
Configure CORS (Required)
# Create cors.json
cat > cors.json << 'EOF'
[
{
"origin": ["*"],
"method": ["PUT", "POST", "GET"],
"responseHeader": ["Content-Type"],
"maxAgeSeconds": 3600
}
]
EOF
# Apply CORS configuration
gcloud storage buckets update gs://YOUR-BUCKET-NAME --cors-file=cors.json
Plugin Settings
| Setting | Value | Description |
|---|---|---|
| Storage Provider | Google Cloud Storage | Select GCS as provider |
| GCS Bucket Name | your-bucket-name | Bucket name without gs:// prefix |
| Use gcloud CLI | β Enabled | Auto-refresh token using gcloud CLI |
| CDN Base URL | https://cdn.example.com | (Optional) CDN URL for image links |
Authentication Methods
Method 1: Auto-authentication via gcloud CLI (Recommended)
- Enable "Use gcloud CLI for authentication" toggle
- Plugin will automatically run
gcloud auth print-access-tokenon each upload - No manual token refresh needed!
Method 2: Manual Access Token
- Disable the gcloud CLI toggle
- Paste access token from:
gcloud auth print-access-token - β οΈ Token expires after ~1 hour, requires manual refresh
Option 3: S3-compatible Storage (AWS S3 / Cloudflare R2)
Use this option for AWS S3 and providers exposing an S3-compatible API.
Plugin Settings
| Setting | AWS S3 Example | Cloudflare R2 Example | Description |
|---|---|---|---|
| Storage Provider | S3-compatible Storage (AWS S3 / R2) | S3-compatible Storage (AWS S3 / R2) | Select S3-compatible mode |
| S3 Bucket Name | my-images | my-images | Bucket name |
| S3 Region | ap-southeast-1 | auto | Region for AWS or provider-specific region |
| S3 Endpoint | (leave blank) | https://<accountid>.r2.cloudflarestorage.com | Custom endpoint for non-AWS providers |
| Access Key ID | AKIA... | ... | Access key with write access |
| Secret Access Key | ... | ... | Secret key |
| Session Token | (optional) | (optional) | Temporary credentials if needed |
| Public Base URL | https://my-images.s3.ap-southeast-1.amazonaws.com | https://pub-<id>.r2.dev or your custom domain | Public URL inserted into markdown |
| Use path-style URLs | Off | Off | Enable only if your provider requires path-style access |
Notes
- Buckets must allow uploads from your credentials.
- Markdown links should point to a public URL. For R2, set Public Base URL to your
r2.devdomain or custom domain. - If your provider requires path-style URLs, enable Use path-style URLs.
How to Use
- Copy an image to clipboard (screenshot or image file)
- Paste into Obsidian editor (
Cmd+V/Ctrl+V) - Image will be automatically uploaded and converted to a markdown link
- When offline, images will be pasted using Obsidian's default behavior
Troubleshooting
"gcloud: command not found"
The plugin automatically searches for gcloud in common paths:
/opt/homebrew/bin/gcloud(macOS Apple Silicon)/usr/local/bin/gcloud(macOS Intel)/usr/bin/gcloud(Linux)
If gcloud is installed elsewhere, check your installation path with:
which gcloud
"Failed to upload to GCS"
- Verify bucket permissions allow writes
- Ensure CORS is configured correctly
- Check that
gcloud auth loginwas successful
"Failed to upload to S3-compatible storage"
- Verify access key, secret key, and optional session token are correct
- Confirm the bucket exists in the configured region
- If using R2 or another S3-compatible provider, verify the endpoint is correct
- Set a valid Public Base URL if your object URLs are not publicly accessible by default
Credits
- Built using the Obsidian Plugin Template
- Uses Firebase SDK under Apache License 2.0
License
Copyright 2025 easternkite
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.