Skip to content

Releases: xRyul/obsidian-image-converter

1.3.19

05 Jan 09:06

Choose a tag to compare

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

1.3.18

14 Sep 16:35

Choose a tag to compare

This release focuses on robustness, correctness, and testability of the image processing pipeline. It hardens error handling, makes MIME detection more reliable, fixes resize semantics, and prevents hanging processes during external tool execution (FFmpeg/pngquant).

Changes

  • Unified failure policy: unexpected conversion/decoding errors now return original bytes (no uncaught exceptions).
  • MIME detection: More reliable MIME detection from file headers (magic bytes), with safe fallback to original bytes when detection fails.
    • Corrected byte position checking (bytes 8-11) for WEBP files, resolving issues where some WEBP images weren't being detected properly.
    • Improved fallback to Blob.type when header detection fails completely.
  • JPEG EXIF: On EXIF failure, returns JPEG without EXIF instead of failing. Orientation tag is removed before re-applying EXIF to avoid unexpected rotations.
  • TIFF/HEIC handling: Return original bytes when decoding fails (unsupported environment or malformed input).
  • Resize semantics and quality:
    • FILL mode now produces an output canvas of exactly desiredWidth × desiredHeight via center-crop.
    • Crop offsets now use integer math to avoid sub-pixel artifacts and cross-platform rendering differences.
    • Resize-only (format = NONE) now respects the Quality setting for lossy formats (JPEG/WebP). PNG remains lossless.
      • If your Quality is below the browser’s default (JPEG ~0.92; WebP varies by browser): outputs will be smaller and slightly more compressed than before.
      • If your Quality is above the default: outputs will be larger and higher quality than before.
      • If your Quality is near the default: you likely won’t notice much difference.
  • FFmpeg: Added timeout handling and cleanup for FFmpeg operations to prevent hanging.

Potentially Impactful Behavior Changes

  • Fill outputs exact requested dimensions with center-crop (may differ from prior aspect-fit behavior). If you depended on previous Fill or Reduce behavior, review your presets and expected outputs.
  • Header-based MIME detection may choose different code paths vs. relying solely on file.type.
  • Resize-only operations (format = NONE) now respect the quality setting for lossy formats. Previously, resize-only used browser defaults; now it applies your configured quality value, which may produce different file sizes.

Other

  • Updated Typescript from 4.7.4 to 5.9.2 with ES2024 target.
  • Updated ESlint from v5.29 to v8.42 with flat configuration format. Applied consistent code style rules across all TypeScript files.
  • Updated ESBuild from 0.17.3 to 0.25.9.
  • Updated @types/node from v16 to v24.
  • Added Vitest 3.2.4 for testing.

1.3.17

06 Sep 09:31

Choose a tag to compare

Make sure plugin doesn't react to Excalidraw embeds: disable drag/scroll resize, disable context menu

1.3.16

04 Sep 18:52

Choose a tag to compare

Fix: Image stretch and distort when resized beyond the editor's content width. Now images should respect the editor's max width and maintain proper aspect ratio.

1.3.15

18 Jun 09:37

Choose a tag to compare

image

Some UI/UX adjustments to the modal which shows up on drop/paste. Which can be found and enabled at: Image Converter plugin settings -> Show window -> Always show

  • Folder and filename inputs are now always visible. They are no longer hidden behind preset selections. Select the preset to auto-populate the input field. Any modifications to the input field will be preserved for the next time you drop/paste the image - it will not overwrite the selected-preset itself. 3 default preset will show empty input fields.
  • Filename field is pre-selected by default. This is for those times when you want to quickly rename dropped image into any custom name you desire.
Obsidian_1lFuoQl0Xp.mp4

Added variable search and ability to copy variables into clipboard by clicking on them.

Variable search feature with a list of filtered variables

Obsidian_CDDdjDro9g.mp4

1.3.14

09 Jun 07:32

Choose a tag to compare

  • Merged PR #273 , variables like {YYYY} and {yyyy} , {MM} vs {mm} now work as distinct variables. This fixes issues where if both variables were used at the same time in a single template e.g. Month_{MM}_minute_{mm} it would incorrectly return current month for both. This fixes most of the moment.js variables which are accessible via {date:xxxxxx} Thanks @martenlienen ! #291 #268 #301
  • Fixed {notepath} Variable: Now returns path without .md extension (e.g., "Documents/Photos/MyNote" instead of "Documents/Photos/MyNote.md")
  • Fixed {vaultpath} Variable: Now returns actual filesystem path using adapter.basePath (e.g., "C:/Users/username/Documents/Obsidian/MyVault")
  • Removed sanitization of parentheses () and square brackets [] - these characters will now be allowed in filenames and thus follows Obsidian defaults more closely. #285

1.3.13

06 Jun 09:15

Choose a tag to compare

EXIF Metadata Preservation during JPEG conversion e.g.: preserves camera info, GPS data, timestamps etc. #296 Many thanks @EzraMarks

1.3.12

05 Jun 07:48

Choose a tag to compare

Aspect Ratio Lock

New toggle to lock aspect ratio when resizing images. Now, you can drag any corner to resize without stretching or distorting the image.

Thanks to @semisenioritis for contribution #248!

Obsidian_3PuCSrkrH3.mp4

How to Enable:

  1. Go to Settings.
  2. Navigate to Drag & Scroll resize.
  3. Toggle on Lock the aspect ratio when dragging.
Settings toggle for aspect ratio lock

1.3.11

04 Jun 13:29

Choose a tag to compare

New Variables {grandparentfolder} and {notename_nospaces} #244 Thanks @NullString1

1. {grandparentfolder}

Access to the parent's parent folder name (grandparent folder), but excludes the vault root.

File path: `/Projects/Work/note.md` → Returns: "Projects"
File path: `/Projects/Work/Current/note.md` → Returns: "Work"

Edge Case Handling:

  • Note in root folder: Variable validation will show error message: "Cannot use {grandparentfolder} - the current note has no grandparent folder. Please modify your template."
  • Note one level deep: Same error message as above
  • Grandparent is vault root: Returns the parent folder name instead of empty string

2. {notename_nospaces}

The current note name with spaces removed or replaced; Leading/trailing spaces are trimmed.

Note name: "Meeting Notes" → Returns: "Meeting_Notes"
Note name: "Project Update 2024" → Returns: "Project_Update_2024"
Note name: " Spaced Name " → Returns: "Spaced_Name" (trimmed)

1.3.10

14 Mar 20:01

Choose a tag to compare

  • New option to change caption and size dimensions via right-click input fields. Supports both single width (e.g., 300) and width x height (e.g., 300x200) formats.
Untitled.Project.mp4
  • Currently there is a bug:
    • If there is no size or caption present, it will set both sizing and the caption at the same time.
    • There is no any re-render mechanism, so results might not always be visible live. Thus you need to switch back and forth between views or notes for changes to appear visually.