New
- Added session-scoped AI usage metering with per-model token/image tracking, a new "Session token usage" settings button with Markdown export, and an "AI Usage: input/output" button in ExcaliAI next to Run for quick access to the same breakdown.
- Added an explicit opt-in for executing
cmd://links from drawings. Command links are now blocked by default, with a security warning prompt on first use and a dedicated setting under Excalidraw Automate. - Replaced the dropped-link title resolver from Iframely with an HTTPS oEmbed endpoint.
- Hardened data URL embeddables: HTML loaded through
data:text/htmlnow renders in a sandboxed iframe with a defensive CSP to keep interactive content contained inside the embeddable.
Fixed
- Fixed Taskbone OCR, which broke in 2.23.0.
- Fixed inline link suggester in MindMap Builder failing when filenames included the "." (dot) character. #2772
New in ExcalidrawAutomate
- Added
getPathForImageFileId(fileId: FileId): string | null— returns the vault path for an image element identified by its Excalidraw fileId. Note: Excalidraw does not maintain a persistent index of fileIds to paths; the path is only available for images that have appeared in an open drawing during the current Obsidian session. - Gemini image models now expose provider-correct size presets in AI settings and ExcaliAI, with Google image requests automatically translating presets into Gemini aspect ratio and image size parameters.
- Added three new ExcalidrawAutomate methods for AI token usage.
/**
* Returns accumulated AI token usage for the current Obsidian session.
* Usage is keyed by model identifier. Data is not persisted and resets on restart.
*/
public getAIUsage(): AIUsageData;
/**
* Opens a modal showing per-model AI token usage for the current session.
* Includes a "Copy as Markdown" button.
*/
public showAIUsageModal(): void;
/**
* Returns a compact label string: "AI Usage: 355k/23k" (input/output tokens).
* Appends image generation count when present, e.g. "+ 3 imgs".
*/
public formatAIUsageLabel(): string;
/**
* Returns the vault path for an image file identified by its Excalidraw fileId.
* Only available for images seen in an open drawing during the current session.
* @param {FileId} fileId - The Excalidraw fileId of the image.
* @returns {string | null} The vault path, or null if not cached in this session.
*/
getPathForImageFileId(fileId: FileId): string | null;