zengyincen64 downloadsPaste images, upload to GitHub or your image host, and insert customizable CDN links.
One plugin. Every screen.
Pastepic brings the same automatic image-upload workflow to Obsidian on desktop, tablet, and mobile.
Install in Obsidian · 3-minute setup · CDN path · 简体中文 · English
Paste an image once; Pastepic uploads it, replaces the placeholder with a standard remote Markdown image link, and keeps the note usable if an upload fails. The desktop segment above is a real capture from Obsidian 1.12.7 using the published plugin workflow. Watch the sharper 1080p MP4.
The tablet and phone cards describe verified compatibility paths—not simulated device footage. Mobile support is backed by the same browser-safe uploader code, clipboardData.items fallback tests, isDesktopOnly: false, and an Obsidian 1.12.4 minimum version. Real device clips can be added separately without presenting a mockup as proof.
Screenshots, web images, and design exports can make an Obsidian vault grow quickly. Manually opening an image host, uploading, copying a URL, and returning to the note also breaks the writing flow.
Pastepic does one thing well: it catches an image that is pasted, dropped, or newly inserted as a local Obsidian link, uploads it, and puts the remote Markdown image link back in the same place. Every upload gets a unique placeholder. A failed upload restores the local image link instead of leaving a broken error link.
Desktop, tablet, or phone—the workflow stays the same. Configure Pastepic once in your synced vault and keep the same GitHub or image-host destination, CDN path, and paste-to-upload experience on every screen.
| Capability | Details |
|---|---|
| Automatic paste upload | Paste multiple images and replace each independent placeholder asynchronously |
| Drag-and-drop upload | Optionally upload images dropped into the Markdown editor |
| Inserted-image detection | Upload local image links newly inserted by Obsidian or another plugin |
| GitHub image hosting | GitHub Contents API with branches, date paths, and commit-message templates |
| Generic image-host API | POST multipart/form-data with custom headers, file field, and extra form fields |
| CDN / proxy acceleration | Enter an image-directory base URL; the plugin appends the filename and extension |
| Multilingual settings | Simplified Chinese, English, Japanese, Korean, Italian, Spanish, German, and French |
| Native fallback | Leaves Obsidian untouched when there is no image, mixed file types, or missing configuration |
| Every screen | One image workflow across desktop, tablet, and mobile Obsidian |
| Mobile-ready paste | Clipboard-items fallback for iOS, Android, and mobile WebViews |
You can also open the listing directly: Install Pastepic in Obsidian.
Pastepic is listed in the official Obsidian plugin directory. Version 0.4.15 supports Obsidian Mobile 1.12.4 and Desktop 1.12.7 or later.
Open the latest Release.
Download main.js, manifest.json, and styles.css.
Create the plugin directory in your vault:
<your-vault>/.obsidian/plugins/obsipastepic/
Put the three downloaded files in that directory. The color icon is bundled into main.js, so no additional asset file is required.
Restart Obsidian and enable Pastepic under Settings → Community plugins.
The user-facing name is Pastepic. The plugin ID and installation directory remain
obsipastepicto preserve existing installations and settings.
git clone https://github.com/zengyincen/Obsidian-PastePic.git
cd Obsidian-PastePic
npm install
npm test
npm run build
Pastepic's settings page now treats only three values as required. The branch defaults to main; repository path and CDN can stay empty.
| Required now | Already handled for you |
|---|---|
| GitHub owner | Branch defaults to main |
| Image repository | Repository path defaults to empty/root |
| Fine-grained token | CDN defaults to GitHub Raw |
Open Advanced options (skip for now) only when you need another branch, a fixed repository folder, custom filenames, or CDN acceleration. Use jsDelivr fills the CDN base directory automatically from the current owner, repository, branch, and path.
The repository path is empty by default, so images are uploaded to the repository root. You can instead enter a fixed directory such as images; when using a custom CDN, point its base URL to the same directory.
The settings page defaults to Simplified Chinese and can be switched to English, Japanese, Korean, Italian, Spanish, German, or French at any time.
Pastepic supports Obsidian across desktop computers, tablets, and phones, including iOS and Android. Pasting an image from the system clipboard uploads it through the configured GitHub repository or image host, including mobile WebViews that expose the image through clipboard items instead of a file list. Mobile operating systems do not provide the same drag-and-drop interaction as desktop, so use paste or insert the image into the note; the optional drop setting remains available for platforms that provide drop events.
| Platform | Supported workflow | Current evidence |
|---|---|---|
| Desktop | Paste, drop, and inserted local image | Real Obsidian 1.12.7 capture in the demo above |
| Tablet | Paste and inserted local image; drop where the OS provides it | Browser-safe runtime plus mobile clipboard-item fallback tests |
| Phone | Paste and inserted local image | Browser-safe runtime plus mobile clipboard-item fallback tests |
Pastepic uses no Electron or Node runtime APIs and declares isDesktopOnly: false. The test suite covers mobile WebViews that expose pasted images through DataTransfer.items. Device-specific clipboard behavior can still vary by OS/app source; please include the device, OS, Obsidian version, and source app in a mobile compatibility report.
Filename strategies:
The default commit message is Upload from Pastepic. Custom messages can also use {filename} and {path}.
There are no template variables. Enter the URL of the final image directory and Pastepic appends the uploaded filename and extension automatically.
For a repository directory named images and an uploaded filename 1730000000-note.png:
| Use case | Base directory in settings | Final URL |
|---|---|---|
| GitHub Raw | Leave empty | A complete Raw URL is generated automatically |
| jsDelivr | https://cdn.jsdelivr.net/gh/zengyincen/image-bed@main/images/ |
…/images/1730000000-note.png |
| Statically | https://cdn.statically.io/gh/zengyincen/image-bed/main/images/ |
…/images/1730000000-note.png |
| Custom proxy/CDN | https://cdn.example.com/xx/xx/ |
https://cdn.example.com/xx/xx/1730000000-note.png |
The settings screen displays the complete URL preview. A custom base must point to the same directory as “Repository path.”
Raw and public CDN links generally cannot read private GitHub repositories anonymously. Uploads may succeed while images remain unavailable. Use an authenticated proxy or a public image repository.
Custom mode sends images as POST multipart/form-data:
POST /upload
Content-Type: multipart/form-data
file=<image bytes>
album=obsidian
| Setting | Example |
|---|---|
| Endpoint | https://img.example.com/upload |
| File field | file, image, or source |
| Header JSON | {"Authorization":"Bearer token"} |
| Extra field JSON | {"album":"obsidian"} |
| Response URL path | data.url or data.images[0].url |
| CDN / proxy base directory | https://cdn.example.com/xx/xx/; leave empty to use the host response URL |
Services that require custom signatures, chunked uploads, or an interactive browser login need a dedicated uploader implementation.
 Markdown, without < > around the URL.[Github upload error]() or an HTML error comment.[Github upload error]() markers are removed automatically on editor changes.data.json. Use a single-repository, least-privilege, revocable token.npm run typecheck # TypeScript type checking
npm test # Vitest unit tests
npm run build # Build main.js
Tests cover base-directory joining, angle-bracket-free Markdown, path encoding, file naming, local image insertion detection, legacy error-marker cleanup, JSON response paths, and settings migration.
| Asset | File | Intended use |
|---|---|---|
| App Icon | assets/icon.svg |
Avatar, app icon, compact identity |
| Banner | assets/banner.svg |
Repository header and social banner |
| Hero | assets/hero.svg |
README and product overview |
The visual system uses restrained gradients, layered glass, and generous spacing. It contains no Apple trademark or official Apple artwork.
Pastepic is an independently implemented MIT-licensed project. The following projects provided valuable references for events, uploader abstractions, GitHub image hosting, and UX:
obsidian-image-auto-upload-plugin is a fork of obsidian-imgur-plugin; thanks to both maintainers for advancing this plugin family.
Thank you to Obsidian for the plugin API, and to every maintainer who publishes code and documentation openly.
MIT © 2026 zengyincen