Live Image Editor

by britz
5
4
3
2
1
Score: 41/100

Description

Non-destructive image editing for Obsidian. Crop, rotate, flip, resize, and apply CSS filters — all live, without modifying the original file.

Reviews

No reviews yet.

Stats

1
stars
773
downloads
0
forks
4
days
5
days
5
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
2
total issues
1
open issues
1
closed issues
78
commits

Latest Version

6 days ago

Changelog

v0.6.17 — geometry-driven toolbar placement and position-exact post-processor mapping

[0.6.17] - 2026-08-11

Toolbar placement is geometry-driven again across every Live Preview host, Reading View remains editing-UI-free, and post-processor image mapping is now position-exact with the shared quote- and escape-aware attribute scanner. Version 0.6.16 was never published, so its completed fixes ship in this release.

  • Bug 134 — Toolbar placement no longer conflates host/layout type with image size. Cause: the v0.6.15 hover path reached Reading View and routed every wrapperless post-processor host through the tiny-image body toolbar; the older lie-float/offsetParent decision also coupled presentation to layout and measured an unreliable ancestor. Fix: Reading View is excluded from every editing entry point; each Live Preview owner gets the same static inset toolbar, and a pure decision switches to the existing body-level presentation only when the reflowed toolbar plus its 8px inset would cover more than 60% of the exact visible image height. Host type, inline/block/float layout and image position are never inputs. Presentation changes synchronize the one toolbar controller after reflow, while size/filter/crop/class sessions lock the current presentation so panels keep a connected owner. The fixed 24-journey host guard is 124/124 green across normal, tiny, table, callout and footnote hosts plus all Reading View negatives; 403 unit tests, build and lint are green.
  • Bug 133 — Post-processor attribute blocks now use the shared quote- and escape-aware scanner. The DOM cleanup's bespoke single-brace regex stopped at a quoted } and diverged from source parsing; Live Preview and Reading View now use scanAttributeBlock for the same boundary, with regression coverage for quoted } blocks.
  • Bug 131 — Repeated table-cell embeds now map position-exactly and fail closed. The Reading adapter's document-wide occurrence walk could count unrelated render copies and write an earlier same-file embed; each post-processor host now pairs only within its source-bounded render context against current-document addresses, with strict cardinality, order and source-identity checks and no basename/occurrence fallback. Real Obsidian table journeys cover same-file variants, writes and no-ops, mode transitions, and stability.

README file from

Github

Live Image Editor

Non-destructive image editing for Obsidian. Crop, rotate, flip, resize, and apply CSS filters — all live, without modifying the original file.

The Live Image Editor hover toolbar in action — rotate, crop, resize and filter an image live{ .lie-usage-gif }

Features

  • Toolbar on selection — appears when you click an image, same trigger as Obsidian's native resize handles
  • Crop with free rotation — fixed frame, freely move/rotate/scale the image underneath
  • CSS Filters — brightness, contrast, saturation, hue, blur, grayscale, sepia with a side panel and live histogram
  • Filter Presets — one-click looks (B&W, Vintage, Warm, Cool, Sepia, ...)
  • Resize — scale up/down, custom dimensions, or predefined size classes
  • Flip & Rotate — horizontal/vertical flip, 90° steps or free rotation via crop
  • Inline/Block toggle — switch between text-wrapping and standalone display
  • CSS class management — auto-detects classes from your vault's CSS snippets
  • Export — render all edits to a new image file (original stays untouched)
  • Editing Toolbar integration — optionally registers commands as buttons in Editing Toolbar
  • Multilingual — follows Obsidian's language setting

How it works

Edits are stored as a small, portable attribute block after the image embed — standard Markdown/wiki syntax, never the alt text or the file. The original image is never touched.

![A caption](https://raw.githubusercontent.com/britz/obsidian-live-image-editor/HEAD/photo.png){rotate=90 width=420}
![[photo.png]]{align=left filter="sepia(0.8)"}
![square](https://raw.githubusercontent.com/britz/obsidian-live-image-editor/HEAD/photo.png){transform="translate(-50%,-50%) scale(2)" aspect-ratio=1/1 width=260 .rounded}

The block uses bare keys (align, width, rotate, flip, transform, filter, aspect-ratio, .class) — the same portable format MkDocs-Material / Python-Markdown / Pandoc understand. Open the note without the plugin and the image still shows: align/width carry through any renderer, and the rest fall back to the original, untransformed image. Obsidian's native wiki-link size (![[image.png|300]]) continues to work and is preserved.

Example vault

vault-image-toolbar/ is a self-contained Obsidian vault that demonstrates every feature on synthetic, committable images (corner labels A/B/C/D + a TOP marker make rotate/flip obvious). To try it:

  1. In Obsidian, Open folder as vault → pick the vault-image-toolbar/ directory.
  2. Enable Live Image Editor in Settings → Community plugins (install it first if needed — see Installation).
  3. Open 00 — Start here and work through the numbered pages (Rotate & flip, Crop, Size, Filters, Layout, Captions, Classes). Hover an image to reveal the toolbar and edit away.

Two features ship opt-in — turn them on from Settings → Live Image Editor: Show image captions and Install example snippets (the latter is already installed and enabled in this vault).

Documentation

📖 Documentation site — the user guide, the demo vault (with images rendered live by the plugin's runtime) and the design docs, published from docs/ via ProperDocs + MaterialX (the maintained MkDocs / Material forks).

  • User guide — how to use every feature, with screenshots.
  • vault-image-toolbar/ — a demo vault that shows each feature on real images (open it as a vault with the plugin enabled; start at 00 — Start here).
  • Development docs — the design docs (requirements, architecture, plan, tests, the bug & lesson registry) and the developer workflow: building from source, the dev/debug loop, and previewing this docs site locally.

Installation

From the community directory (recommended). Live Image Editor is published in Obsidian's community plugin directory: https://community.obsidian.md/plugins/live-image-editor. In Obsidian, open Settings → Community plugins → Browse, search for Live Image Editor, install and enable it.

Manual install.

  1. Download the latest release from Releases
  2. Extract into your vault's .obsidian/plugins/live-image-editor/ directory
  3. Enable the plugin in Settings > Community Plugins

Development & Release compliance

Building the plugin from source, the watch / dev-install loop, live debugging in Obsidian (CDP), and previewing the docs site locally are all covered in the Development docs — everything builds inside the devcontainer.

Release compliance. The plugin is accepted into the community directory (https://community.obsidian.md/plugins/live-image-editor). Before each submission it is audited against Obsidian's Developer policies, Plugin guidelines and Submission requirements. All R1–R30 rules are met — the former open items were closed in the v0.4.2 release-compliance pass. The v0.6.x automated review (eslint-plugin-obsidianmd + a CSS scan) is reproduced locally (npm run lint:obsidian / npm run lint:css, separate from the shipped linter — T9) and reports 0 errors; the kept warnings (architecturally-required :has, justified !important, the 1.12.7-floor API deprecations) and the false positives (the dev-only CDP bridge, the standalone runtime bundle) are documented with their rationale there. The full audit + submission checklist live in Release compliance.

File system access & platform support

File system access. Almost everything the plugin does stays inside your vault and is fully non-destructive — the original image file is never modified. The one exception is the Export as image action: on desktop it opens your operating system's native Save dialog, so you can write the rendered (transformed/filtered) copy to any location you choose, including outside the vault. Nothing is written outside the vault without you picking that location in the dialog. On mobile (no native dialog) export falls back to an in-app prompt that writes a copy inside the vault.

Platform support (isDesktopOnly: false). The plugin runs on both desktop and mobile. Two features use Electron/Node APIs that only exist on desktop, and both degrade gracefully on mobile: the export save dialog (mobile writes into the vault instead) and the macOS two-finger trackpad rotate gesture in the crop editor (the on-screen rotate handle is always available as the fallback). The access is dynamic and feature-detected, so core editing — rotate, flip, crop, resize, filters, classes — works on mobile too.

Reporting cross-platform issues. Development and testing happen on macOS, so that's the best-exercised platform; Windows, Linux, iOS and iPadOS should work but see less testing. If something misbehaves on a non-macOS system — especially native-OS behaviour such as the crop trackpad rotate gesture or the save dialog / file menu — please open a GitHub issue with screenshots; platform-specific problems are far easier to pin down that way.

License

MIT