Skip to content

Releases: xRyul/obsidian-image-converter

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.

1.3.9

27 Feb 11:59

Choose a tag to compare

NEW:

New Option for cursor placement during "Drag or Scroll-wheel resize": 1 line below the image

My reasoning for this option was a combination of multiple things, but mainly comes down to main 3 benefits:

  1. Prevents scroll reset in large notes
    • By default when opening into the note, Obsidian sets cursor position to the 1st line of the NOTE. After finishing resizing it would always scroll back to the active cursor position. Which makes Don't move cursor option quite painful to use. Which means, if you opened into a very large note, scroll all the way to the bottom, resize the image at the bottom - Obsidian would reset view to the top of the note. Which is very bad UX, and makes resizing nearly unusable in large notes. 1 line below the image tries to combat that, allowing to keep cursor close to the image, thus preventing that shift/jump.
  2. Reduces layout shifts and jitter
    • When resizing an image, the image link might appear above it, causing unexpected rendering issues like jitter or jumpiness.
    • Placing the cursor below the image ensures that resizing does not interfere with the layout.
  3. Prevents breaking Callouts
    • In Callouts, setting the cursor before or after the image link can make the link visible and break the Callout rendering.
    • 1 line below the image keeps the cursor outside the Callout, preserving its formatting.