Index: src/middleware/render.js
===================================================================
--- src/middleware/render.js	(revision f79a471bf696cf519bf12755043ead300dd36476)
+++ src/middleware/render.js	(revision 99989f9fba023a32bcfaa01464bb0a172952ab1f)
@@ -20,4 +20,5 @@
 import { isPremium as isPremiumInstance, premiumEnabled, premiumUnlocked } from '../services/PatreonService.js';
 import ActivityPubService from '../services/ActivityPubService.js';
+import { imgProxyUrl } from '../services/ThumbnailService.js';
 import { audioEnabled as audioFeatureEnabled } from '../config/features.js';
 
@@ -165,4 +166,13 @@
       ? `/media/thumb/${w || 480}/${url.slice(7)}`
       : url,
+    // Crisp avatars: a local /media avatar goes through the local thumb route; a REMOTE
+    // (fediverse) avatar through the signed downscaling proxy. Same downscale, the remote
+    // one is just fetched first. Default 128px (covers feed 44px → profile ~120px).
+    avatar: (url, w) => {
+      if (!url || typeof url !== 'string') return url;
+      if (url.startsWith('/media/') && !url.startsWith('/media/thumb/')) return `/media/thumb/${w || 128}/${url.slice(7)}`;
+      if (/^https?:\/\//i.test(url)) return imgProxyUrl(url, w || 128);
+      return url;
+    },
     pageTitle: data.pageTitle || (data.site && data.site.title) || 'Klonkt',
     appVersion: APP_VERSION,
