fix(thumbnails): skip ffmpeg for animated remote WebP/GIF (serve original)
getRemoteThumbnail ran ffmpeg on every remote image, but ffmpeg-static can't
decode an animated WebP → the downscale failed for every animated remote cover,
logging '[thumb-remote] downscale failed' and wasting a fetch+write+ffmpeg per
cache-miss. It then fell back to the original anyway. Now detect an animated
WebP/GIF from the fetched buffer (same check as the local isAnimatedSrc) and
return null up front → the route serves the ORIGINAL, keeping the animation,
without the doomed ffmpeg call or the error log.
- src/services/ThumbnailService.js — isAnimatedBuf() guard in getRemoteThumbnail
Co-Authored-By: Claude <noreply@…>