Legacy thumbnail and preview paths mirror the source's relative path, so
a video's JPEG thumbnail lives at …/clip.mp4 and a RAW's at …/shot.arw. NamedFile guessed the content type from that name and
served JPEG bytes as video/mp4. Sniff JPEG/PNG magic bytes instead.
The circular-thumbnail path had the same root cause: image::open
picks the decoder from the extension, so it failed on those thumbs and
quietly fell back to the square one. Guess the format from the bytes.
Legacy thumbnail and preview paths mirror the source's relative path, so
a video's JPEG thumbnail lives at `…/clip.mp4` and a RAW's at
`…/shot.arw`. NamedFile guessed the content type from that name and
served JPEG bytes as `video/mp4`. Sniff JPEG/PNG magic bytes instead.
The circular-thumbnail path had the same root cause: `image::open`
picks the decoder from the extension, so it failed on those thumbs and
quietly fell back to the square one. Guess the format from the bytes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Legacy thumbnail and preview paths mirror the source's relative path, so
a video's JPEG thumbnail lives at `…/clip.mp4` and a RAW's at
`…/shot.arw`. NamedFile guessed the content type from that name and
served JPEG bytes as `video/mp4`. Sniff JPEG/PNG magic bytes instead.
The circular-thumbnail path had the same root cause: `image::open`
picks the decoder from the extension, so it failed on those thumbs and
quietly fell back to the square one. Guess the format from the bytes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
cameron
merged commit fca9a28cee into master2026-10-16 19:55:23 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Legacy thumbnail and preview paths mirror the source's relative path, so
a video's JPEG thumbnail lives at
…/clip.mp4and a RAW's at…/shot.arw. NamedFile guessed the content type from that name andserved JPEG bytes as
video/mp4. Sniff JPEG/PNG magic bytes instead.The circular-thumbnail path had the same root cause:
image::openpicks the decoder from the extension, so it failed on those thumbs and
quietly fell back to the square one. Guess the format from the bytes.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com