Skip to content

Releases: xRyul/obsidian-image-converter

1.4.6

Choose a tag to compare

@github-actions github-actions released this 04 Aug 13:29

Fixed

  • Windows 260. Prevented dropped or pasted images from creating attachments with unsafe Windows paths. Image Converter now validates the final destination after all folder and filename variables are resolved. Paths reaching Windows' 260-character limit are blocked with a clear warning before any folder, file, or embed is created

1.4.5

Choose a tag to compare

@github-actions github-actions released this 31 Jul 22:53

This release restores reliable image clicking and resizing in Obsidian 1.13, with focused fixes for Live Preview tables, long notes, and popout windows.

Image clicking and resizing

  • Obsidian's native image controls stay hidden again. When Disable Obsidian image selection on click is enabled, the native outline, resize corner, and Zoom/Edit toolbar no longer overlap Image Converter's resize handles.
  • Clicking an internal image reveals its Markdown link at the configured front or back cursor position.
  • Images inside Live Preview tables now work correctly. Single-click Markdown reveal, drag resizing, and wheel resizing all use Obsidian's nested table-cell editor when needed.
  • Table syntax is preserved. Escaped pipes, captions containing pipes, width-only dimensions, and both Markdown and wikilink image formats remain intact. Resizing no longer adds a malformed trailing \| after an image embed.
  • Table resizing performs fewer editor updates. Drag dimensions are committed once when the interaction ends, while wheel dimensions are saved after scrolling settles. This avoids repeated table reconstruction and stale-document errors.

Performance

  • Image-link lookup in long notes is over 1,000× faster. In a real Obsidian benchmark using an 8,000-line note, p95 lookup time dropped from 3.36 seconds to around 3 milliseconds, reducing lookup latency by approximately 99.9%.
  • Each lookup now performs 8,000 line reads instead of 32,004,000, a roughly 4,000× reduction, without loading and splitting the entire note on every interaction.

Fixed

  • Fixed and improved image alignment in pop-out windows. Alignment classes are now removed from both the main window and popout window documents, preventing stale image alignment styling from lingering after unload/reload. DOM creation/events are now scoped to the UI element's owning document instead of the global document.
  • Fixed image alignment leaking across panes. When the same image appears in multiple open notes, applying a saved alignment now only affects panes showing the matching note, including popout windows. This prevents side-by-side notes that share an image from incorrectly inheriting another note's alignment.
  • Fixed image context menu stacking: repeatedly right-clicking an image no longer leaves multiple context menus open.
  • Fixed image resize handles not working in pop-out windows.
  • Fixed leftover resize handles/wrappers after unloading or switching views.

Settings

  • Changing Disable Obsidian image selection on click now shows a clear reminder to reload Obsidian so the change takes effect.

Full Changelog: 1.4.4...1.4.5

1.4.4

Choose a tag to compare

@github-actions github-actions released this 04 Jun 16:38

Bug fixes

  • Fixed intermittent image resizing not activating after opening or switching between Markdown notes/tabs.
    • The resize listeners now reattach on file-open and active-leaf-change instead of relying only on layout-change.
    • This should remove the need to manually switch notes or toggle Reading/Live Preview mode before drag/scroll resizing works.
  • Improved cleanup for image resize handles and view-scoped DOM listeners when the plugin unloads or the active Markdown view changes.

Reliability

  • Added regression coverage for delayed Markdown view attachment and active-leaf changes, so resize listeners stay attached to the current note.
  • Verified against plugin-testing-vault with the previously failing tab-switch scenario.

other

  • Cleaned up TypeScript initialization diagnostics in main.ts.
  • Migrated TypeScript module resolution config away from deprecated baseUrl/node settings for TypeScript 6 compatibility.

Full Changelog: 1.4.3...1.4.4

1.4.3

Choose a tag to compare

@github-actions github-actions released this 06 Apr 09:11
  • Fixed broken macOS info glyphs by replacing text-based help markers with proper info icons.

1.4.2

Choose a tag to compare

@github-actions github-actions released this 21 Mar 22:29

New: option to restore pre-Obsidian 1.12-style image click behavior in Live Preview

New Drag & scroll resize option: Disable Obsidian image selection on click

From 1.12 default Obsidian behaviour makes you click on image and only then resize it. To show the link you have to click on image and then another on "Edit" button. That's a multi click process.
Obsidian_y0l0QR1FCE

What new option allows you to do is simply bring back the old behaviour: Click on image to show link. It hides edit-block icon from image. Removes image outline, and corner resizing.
Obsidian_BoLHw3jdfW

  • Cursor placement. After clicking on image, it is possible to set where cursor is placed: at the front of the link or at the back. For that currently it reuses existing Cursor position after drop/paste setting.

New: Skip folders in Process current note

Added a new Skip folders option to Process current note, so you can exclude images in selected folders from conversion, compression, and resizing.

Examples:

  • images, /images, or /images/ → skips that folder and everything inside it
  • images/* → skips only files directly inside that folder
  • images/** → skips that folder and all nested subfolders

The new option supports plain folder paths, glob patterns, and regex matching. It also includes folder suggestions/autocomplete based on existing vault folders, it should make it easier to select valid paths and avoid typos.

Other

  • Improved image annotation undo behaviour so arrow drawing creates a single undo step instead of multiple - #168
  • Some new defaults when installing plugin from fresh:
    • Global preset Webp 75 will be the new default: this simply makes any new drop/pasted image to be converted into Webp format, and file naming will be set to {notename}-{timestamp}. The location where images are saved is not affected, your Obsidian defaults are still followed. It only affects fresh installs.
    • Captions are now disabled by default. Captions input field is no longer showing up inside Context menu when Caption is disabled.
    • "Lock the aspect ratio when dragging" is now ON by default.

Full Changelog: 1.4.1...1.4.2

1.4.1

Choose a tag to compare

@github-actions github-actions released this 23 Jan 23:43

NEW

Untitled Project
image

  • Added UI field for “Minimum compression savings (KB)” under settings. New option to avoid “compressing” when the size reduction is trivial and might degrade quality disproportionately. E.g.: sometimes file size might reduce only by 3kb, but visual degradation is significant - in such cases it might be better to simply keep original uncompressed file - #119 - Thanks @Moyf for PR #385

Improve

  • Drag and scroll-wheel resizing: added guards to an edge case where image resize operations could write |0x0 dimensions during transient re-rendering e.g.: when reflow or retendering is triggered by other plugins #361

Full Changelog: 1.4.0...1.4.1

1.4.0

Choose a tag to compare

@github-actions github-actions released this 21 Jan 22:40

Features

  • AVIF “Auto-detect FFmpeg” button in settings. Press the button to let plugin automatically find ffmpeg executable on your system.

  • AVIF hardware acceleration with auto encoder detection and software fallback. *

  • AVIF "Detect encoder" button in settings. After providing path to ffmpeg . Press the button to auto-detect the best encoder for your system. If anything fails, it automatically detects hardware encoder failures and falls back to software encoders. For example: : For each encoder found, it runs a quick test encode e.g.:: ffmpeg -f lavfi -i color=c=black:s=64x64 -frames:v 1 -c:v av1_nvenc -f null -. If av1_nvenc fails (Cannot load nvcuda.dll) → Try next encoder. Find libaom-av1 → Test it → Success! ✅ → Report: "✓ Working encoder: libaom-av1 (software)"
    Obsidian_XRDRi2OIgV

    • Windows: Priority is as follows: av1_nvenc (NVIDIA) > av1_qsv (Intel) > av1_amf (AMD) > av1_mf (MediaFoundation)
    • Linux gets VAAPI support.
    • Software fallback uses libsvtav1 (faster) > libaom-av1 (reference)
  • Each encoder has different CRF ranges. If supported encoder is identified on your system, the input field for CRF values will change accordingly:

    • libaom-av1, libsvtav1: 0-63
    • av1_nvenc, av1_qsv: 0-51
    • av1_amf, av1_vaapi: 0-255
    • av1_mf: 0-100
  • Encoder-Specific preset names - the dropdown now dynamically changes based on the detected encoder too. Presets are applied only for encoders that support it. Hardware encoders (QSV, AMF, VideoToolbox, VAAPI) don't use presets. Automatically selects the middle preset for each encoder (balanced speed/quality).

Encoder Preset Options Default Notes
libaom-av1 0, 1, 2, 3, 4, 5, 6, 7, 8 4 Uses -cpu-used  (0=slowest/best, 8=fastest)
libsvtav1 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 6 Uses  -preset  (0=slowest/best, 13=fastest/lowest)
av1_nvenc p1, p2, p3, p4, p5, p6, p7 p4 p1=fastest, p7=slowest/best quality
av1_qsv (hidden) - Hardware encoder, no preset support
av1_amf (hidden) - Hardware encoder, no preset support
av1_vaapi (hidden) - Hardware encoder, no preset support

Fixes

  • Frontmatter mime/type values are now validated against supported MIME types. Invalid values are ignored.
  • {vaultpath} now correctly returns the filesystem path on desktop.
  • {MD5:fullpath} and {sha256:fullpath} now hash the full image path (not just the filename).
  • Settings preview now works even in empty vaults (uses sample data as fallback). In the past it would throw an error: "Failed to generate preview."
  • Rare edge case that could cause image processing to hang.
  • AVIF/FFmpeg path handling normalized across platforms (quotes, env/tilde expansion, OS path normalization).
  • AVIF conversion stability improvements when using FFmpeg - Closes #363, #349, #382
  • Image Alignment cache migration now moves from .obsidian to the vault config folder.
  • Image Annotation modal resize handle no longer shows a double icon.
  • Removed Quality parameter from AVIF presets.

Improvements

  • Better compatibility with Obsidian 1.11 - closes #376
  • Image Converter settings now reserve scrollbar space to prevent layout jumping.
  • Preset and modal FFmpeg paths now stay in sync.
  • Alignment with obsidianmd/eslint-plugin - https://github.com/obsidianmd/eslint-plugin

* I have limited access to hardware, if you encounter any issues, or it throws error please open up a new issue, and I will be happy to work with you to get it resolved 💖

Full Changelog: 1.3.21...1.4.0

1.3.21

Choose a tag to compare

@github-actions github-actions released this 14 Jan 11:06

Improvements

  • Use FileManager.trashFile instead of direct deletion so that Obsidian's file deletion settings are honored (e.g., "Move to system trash" vs "Permanently delete"). This ensures the plugin behaves consistently with the user's configured deletion preferences for files in the vault.

Bug Fixes

  • Image Alignment: Fix image alignment checkmark persisisting in context menu after toggle-off.
  • Image Alignment: Fixed alignment changes not rendering after switching view modes (Live Preview ↔ Reading), quick alignment changes fail until view mode switches again.
  • Context Menu: Fix width dimension appearing under captions input field.
  • Resize Presets: Fixed "Fit Editor" preset showing undefined for max width value. Default is now 100%.
  • Fix #274 - Backslash added to image label when inserted into a table.

Full Changelog: 1.3.20...1.3.21

1.3.20

Choose a tag to compare

@github-actions github-actions released this 08 Jan 23:31

✨ New Feature: Default Alignment for Images

You can now set a default alignment (None / Left / Center / Right) for newly inserted images.

Settings → Image alignment → Default alignment for new images

When set, images will automatically receive the chosen alignment when you drop or paste them into a note. Set to "None" to disable (default behavior).

Thanks @SiriYep for the PR #379 (closes #127)

🖼️ Improved: Crop Modal Panning

Added middle mouse button (MMB) panning during crop process.

Obsidian Image Converter - 1 3 20 - crop panning

  • MMB (middle mouse button): Pan/move the image
  • LMB (left mouse button): Draw selection area
  • Pan resets on ESC/Reset

Thanks @talraash - PR #331

🔧 Fixes

  • Fixed typo in regex pattern description for image processing settings (Thanks @cksapp - PR #341, #340)

Full Changelog: 1.3.19...1.3.20

1.3.19

Choose a tag to compare

@github-actions github-actions released this 05 Jan 09:06

Batch Image Processing

  • Fixed #280, #212: More reliable link updates after processing. The fix ensures link updates use the correct original path, avoiding broken links when rename operations occur during batch processing.
  • Improved: Batch processing now gracefully handles errors - failed images are rolled back and no longer break the entire batch
Scenario Before After
Processing fails mid-way File left renamed but with wrong/corrupt content, broken links File reverted to original name, other images continue
One image fails in batch Could crash or silently fail entire batch Only that image fails, user sees specific error notice
Link update fails Potential crash, batch stops Caught gracefully, user notified, batch continues
  • Canvas support for folder-level batch processing: When processing images linked in notes within a folder, image references in .canvas files are now properly updated (previously only .md files were updated). Note: Canvas link updates for "Process All Vault" and "Process Current Note" have been available since 1.3.0
  • Performance: Batch operations now check upfront whether processing is actually needed. If all your images are already in the target format (or in skip list) with no resize/compression configured, you'll get an instant notification instead of waiting for a no-op loop.
  • Performance: De-duplicate files by path, so the same image referenced multiple times is processed once. This doesn’t reduce the number of link replacements in the note; it just prevents redundant processing.
  • fix: Previously, when batch processing images with "Keep original format" selected alongside compression or resizing, files would be incorrectly renamed to a .original extension (e.g., photo.png → photo.original), breaking links and file recognition. Files now retain their original extension while still being compressed/resized.

Image Resizing

  • Fixed duplicate event listeners accumulating when switching between markdown views, potentially affecting performance
  • Improved: Scroll-wheel resize modifier (Shift/Ctrl/Alt) now applies immediately when changed in settings
  • Fixed: Resize handles sometimes stopped responding after switching notes
  • Fixed: Visual glitches when quickly hovering over images
  • Improved: More consistent cursor feedback during resize

Context Menu

  • Fixed memory leak where event listeners accumulated each time the image context menu was opened

Image Cropping

  • Improved responsiveness: crop selection and keyboard shortcuts now work immediately without waiting for image load

Image Annotation

  • Fixed export failing in certain environments by adding toDataURL() fallback when toBlob() is unavailable
  • Fixed export failing with invalid dimensions by implementing canvas size fallback. Edge cases where "Save" did nothing or threw an error are now handled gracefully. Most users wouldn't have hit this, but those who did would have lost their annotation work.

Image Alignment

  • Ensure more consistent cleanup of classes

This release includes significantly expanded automated test coverage to prevent regressions.

Full Changelog: 1.3.18...1.3.19