[BUG] Image perception incorrectly renders HEIC-converted JPEGs as upside down
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
When using the Read tool to view a JPEG file that was converted from HEIC via sips -s format jpeg, Claude consistently perceives the image as upside down (180 degrees rotated), even though the image displays correctly in all other applications (Finder, Preview, browser, Next.js <Image>).
This leads to a destructive loop where Claude repeatedly applies sips -r 180 to "fix" the orientation, actually breaking a correctly-oriented image each time. The user has to intervene to stop the cycle.
What Should Happen?
Claude should perceive the converted JPEG in the same orientation as it renders in standard image viewers (Finder, Preview, browsers). The EXIF orientation tag should be respected during image ingestion.
Error Messages/Logs
No error messages. Claude confidently but incorrectly describes the image as upside down and suggests rotating it. After rotating with sips -r 180, the image is now actually broken for all other viewers, but Claude may still perceive it as flipped.
Steps to Reproduce
- Take an HEIC image from an iPhone that displays correctly in Preview/Finder
- Convert it to JPEG: sips -s format jpeg input.HEIC --out output.jpg
- Ask Claude Code to read the image using the Read tool
- Claude describes the image as upside down
- If you let Claude "fix" it with sips -r 180, the image is now actually upside down in all viewers
- Reading again, Claude may still see it as flipped, leading to repeated rotations
Note: The root cause appears to be that sips preserves EXIF orientation metadata from the HEIC, and Claude's image processing pipeline ignores or misinterprets this tag.
Claude Model
Opus
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.29
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Encountered during a session building a Next.js website with many HEIC-to-JPEG conversions. The bug is particularly problematic because Claude is very confident about its incorrect perception, making it hard to break the rotate-check-rotate loop without the user explicitly telling Claude to stop.
Workaround: Don't let Claude rotate. The converted image is correct for all consumers (browsers, Next.js Image component, etc.). Tell Claude to ignore its visual assessment of orientation.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗