No description
Find a file
Ali Irani 928caa7449 release 0.1.2: drop async onload + remove fetch-based blob preload
ObsidianReviewBot flags on PR #12468:
- onload was async with no await; dropped the modifier
- preloadImageBlob used fetch (forbidden in plugins; should use
  requestUrl). Removed the preload optimization entirely — the
  vault-read path on copy is fast enough on its own.
- catch (e) bindings tightened.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 18:25:39 -07:00
docs docs: add demo gif 2026-05-01 17:27:38 -07:00
src release 0.1.2: drop async onload + remove fetch-based blob preload 2026-05-01 18:25:39 -07:00
.editorconfig initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
.gitignore initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
.npmrc initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
esbuild.config.mjs initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
eslint.config.mts initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
LICENSE initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
manifest.json release 0.1.2: drop async onload + remove fetch-based blob preload 2026-05-01 18:25:39 -07:00
package-lock.json initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
package.json release 0.1.2: drop async onload + remove fetch-based blob preload 2026-05-01 18:25:39 -07:00
README.md docs: add demo gif 2026-05-01 17:27:38 -07:00
styles.css initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
tsconfig.json initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
version-bump.mjs initial commit: scaffold plugin from obsidian-sample-plugin 2026-05-01 15:12:26 -07:00
versions.json release 0.1.2: drop async onload + remove fetch-based blob preload 2026-05-01 18:25:39 -07:00

Copy Image Hotkey

Cmd+C (or Ctrl+C) copies the actual image to your clipboard when an image embed is selected in an Obsidian note — instead of copying the wikilink text.

Why

By default, selecting ![[my-photo.png]] in source mode and pressing Cmd+C copies the literal text ![[my-photo.png]]. If you want to paste the image into another app (Slack, Mail, Figma, etc.), you have to right-click and "Copy image" from the rendered preview, which breaks flow.

This plugin makes Cmd+C just work: select the image embed, copy, paste anywhere.

Demo

demo

How it works

The plugin listens for the system copy event. When the current selection is either:

  1. text matching ![[filename.ext]] (source mode), or
  2. a rendered <img> element (Live Preview),

it intercepts the copy, reads the image binary from your vault, and writes it to the clipboard as the correct MIME type. SVGs are written as text. Everything else is written as Blob.

Supported formats: PNG, JPG/JPEG, GIF, BMP, TIFF, WebP, SVG.

Install

From the Obsidian community plugins (post-approval)

  1. Settings → Community Plugins → Browse
  2. Search for "Copy Image Hotkey"
  3. Install and enable

Pre-approval (via BRAT)

While the plugin is awaiting community-plugin approval, install via BRAT:

  1. Install and enable BRAT from the community plugin browser
  2. BRAT settings → "Add Beta plugin"
  3. Paste: aliir74/copy-image-hotkey
  4. Enable Copy Image Hotkey under Settings → Community Plugins

Manual install

  1. Download main.js, manifest.json, and styles.css from the latest release
  2. Drop them into <your-vault>/.obsidian/plugins/copy-image-hotkey/
  3. Reload Obsidian → Settings → Community Plugins → enable Copy Image Hotkey

Notes

  • Desktop-only (uses the navigator.clipboard.write API with ClipboardItem).
  • The plugin doesn't bind a custom hotkey — it intercepts the existing system copy. If you've remapped copy elsewhere, the plugin will still trigger off whichever key fires the copy event.

License

MIT — see LICENSE.