[BUG] Pasted/dropped images no longer expose a filesystem path — Claude can only "see" them, can't Read/Edit/upload (regression)

Resolved 💬 3 comments Opened May 9, 2026 by lashimao Closed May 13, 2026

Summary

When the user pastes or drags an image into the Claude Code input, the image is now passed in vision-only mode — Claude receives the pixels in its multimodal context but no filesystem path is exposed (not in the prompt, not in env, not in any TempDir Claude can list).

This is a regression. In earlier versions, the dropped/pasted image was saved to a session-local temp directory and Claude could read/operate on the bytes (Read, PIL via Bash, curl -F image=@path for multipart uploads, etc.). With current behavior, every workflow that requires the actual bytes is broken.

Steps to Reproduce

  1. Claude Code 2.1.119, macOS 26.4
  2. Paste / drag an image into the input box (e.g. a 1024×1024 PNG of an anime character)
  3. Ask: "Draw a red circle on the character's face."
  4. Watch Claude:
  • Read the image → only gets a downscaled visual rendering (e.g. 402×342 thumbnail), no path it can cv2.imread from
  • Try find ~/Downloads /tmp /var/folders -mmin -10 -name '*.png' → the image is nowhere on disk
  • Try to curl -F image=@<path> to an OpenAI-compatible /v1/images/edits endpoint → no path exists

The only way to actually edit / upload / process the bytes is for the user to manually save the file to disk first and then tell Claude the path. That defeats the point of drag-and-drop.

Expected Behavior

The pasted/dropped image should be persisted to a session-scoped temp dir (e.g. ~/.claude/projects/<slug>/attachments/<msg-id>/<n>.png) and the path should be made available to Claude as part of the message context, so:

  • Read <path> returns the actual bytes / full-resolution image
  • Bash tools (PIL/OpenCV/ImageMagick/ffmpeg) can read and rewrite it
  • curl -F image=@<path> works for multipart uploads to image-edit / vision APIs

Actual Behavior

  • Image is only available as a vision token in Claude's context
  • No path is exposed; nothing is written to \~/Downloads\, \/tmp\, \/private/var/folders/**/T\, \~/.claude/projects/**/\, or anywhere else discoverable
  • \Read\ on guessed paths returns unrelated files (because Claude has to guess from \~/Downloads\ mtimes and ends up reading the wrong PNG — a real failure mode that just bit me)

Workarounds

  • Tell the user to save the image to disk first and paste the path in plain text — but most users don't expect this; drag-and-drop visibly attaches the image and they assume Claude has the file

Impact

This breaks an entire class of "act on the user's image" workflows that used to just work:

  • "Annotate this screenshot" / "draw an arrow on X" / "redact the face"
  • "Send this image to my image-edit API as a reference for img2img"
  • "Run OCR / object detection on this photo"
  • "Convert / crop / compress this image"

Environment

  • Claude Code version: 2.1.119
  • OS: macOS 26.4 (Build 25E246)
  • Platform: Darwin (Apple Silicon)

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗