diff --git a/src/lib/iconify-mdi-subset.generated.json b/src/lib/iconify-mdi-subset.generated.json
index 826613b..0e39143 100644
--- a/src/lib/iconify-mdi-subset.generated.json
+++ b/src/lib/iconify-mdi-subset.generated.json
@@ -66,6 +66,9 @@
"printer-outline": {
"body": ""
},
+ "arrow-right": {
+ "body": ""
+ },
"download-outline": {
"body": ""
},
diff --git a/src/lib/rusty-image.ts b/src/lib/rusty-image.ts
index cab5609..170a655 100644
--- a/src/lib/rusty-image.ts
+++ b/src/lib/rusty-image.ts
@@ -153,6 +153,10 @@ const MARKDOWN_IMAGE_PARAMS: RustyImageTransformParams = {
const IMG_SRC_REGEX = /
]*?)src\s*=\s*["']([^"']+)["']([^>]*)>/gi;
+// Animated formats — skip transform, keep original URL so animation survives.
+// RustyCMS /api/transform decodes only the first frame.
+const ANIMATED_EXT_REGEX = /\.gif(\?|$)/i;
+
export async function processMarkdownHtmlImages(html: string, _baseUrl?: string, transformParams: RustyImageTransformParams = MARKDOWN_IMAGE_PARAMS): Promise {
const matches = [...html.matchAll(IMG_SRC_REGEX)];
const replacements: { index: number; length: number; newBlock: string }[] = [];
@@ -160,7 +164,8 @@ export async function processMarkdownHtmlImages(html: string, _baseUrl?: string,
const rawSrc = m[2];
const url = rawSrc.startsWith('//') ? `https:${rawSrc}` : rawSrc;
if (!url.startsWith('http')) continue;
- const transformedPath = getCmsImageUrl(url, transformParams);
+ const isAnimated = ANIMATED_EXT_REGEX.test(url);
+ const transformedPath = isAnimated ? url : getCmsImageUrl(url, transformParams);
const href = transformedPath;
const newImg = m[0].replace(rawSrc, transformedPath);
const newBlock = `${newImg}`;