Windows desktop app renders external Markdown images as placeholders
Codex Desktop Windows: external Markdown images render as placeholders
Environment
- App: OpenAI.Codex
- Version: 26.519.2081.0
- Package: OpenAI.Codex_26.519.2081.0_x64__2p2nqsd0c76g0
- OS: Windows x64
- Shell: PowerShell
Summary
In Codex Desktop on Windows, Markdown image links to external HTTPS images rendered as broken image placeholders in the chat UI. This happened even when most image URLs were reachable and returned valid image content from PowerShell.
Steps to reproduce
- In Codex Desktop on Windows, send an assistant response with Markdown image syntax using external HTTPS image URLs, for example:

- Observe the chat UI.
- Validate the URLs from PowerShell with
Invoke-WebRequest -Method Headorcurl.exe -L.
Expected behavior
Images whose URLs return HTTP 200 and an image content type should render inline in the chat UI.
Actual behavior
The UI displayed image placeholders instead of the images.
Troubleshooting performed
- Three tested image URLs returned HTTP 200 with
image/jpeg. - One source URL from Britannica returned HTTP 403, so that specific source was legitimately blocked.
- One GQ image returned HTTP 200 but stalled during a full sequential download; downloading it in byte ranges worked.
- Local copies of all images were saved and verified as valid JPEG files with normal dimensions.
- Because every external image showed as a placeholder, including URLs that returned valid image responses, this looks like a Codex Desktop Windows image-rendering/fetching issue rather than only bad image URLs.
Workaround
Download images into the workspace and provide a local HTML preview/gallery. This avoids depending on external image rendering inside the Codex chat UI.
Related issue
Possibly adjacent: https://github.com/openai/codex/issues/14576
2 Comments
This also reproduces on current Codex Desktop for macOS, so it does not appear to be Windows-only.
Environment
26.707.31428(build5059)0.144.0-alpha.4Reproduction
An assistant response contained external Markdown images such as:
The image did not render inline in the Codex conversation.
Validation
At the same time, the URL returned a valid image response:
The downloaded file was verified as a valid 256x256 RGBA PNG. A second URL on the same CDN also returned HTTP 200 and a valid 256x256 PNG. Requests with
Origin: app://codexreceived a matchingaccess-control-allow-origin: app://codex, so this does not look like an obvious dead URL or CORS rejection.The assistant had downloaded and validated local copies during the turn, but its final message contained only the external Markdown URLs; the remote bytes were not embedded as message attachments. No specific remote-image error was recorded in the desktop log at render time.
Expected behavior
External HTTPS Markdown images that return HTTP 200 with an image content type should render inline. If the renderer intentionally blocks or cannot fetch a remote image, it should expose a visible failure reason instead of only leaving a broken placeholder.
Current workaround: download the image to a stable local path and render/attach the local copy.
I reproduced this on macOS and traced the failure through the packaged desktop renderer and sanitized desktop logs. This adds a more specific reproduction condition and root-cause signal to the earlier macOS report.
Environment
26.707.31428(build5059)0.144.0-alpha.4Reproduction URL validation
The external Markdown image returned a valid response outside the renderer:
Renderer path
The packaged renderer handles an HTTP(S) Markdown image by calling:
Only when that response reports
safe: truedoes the component use the remote URL as the image source. Otherwise it renders theImage unavailableplaceholder.For this API-key-authenticated Codex session, the desktop main process attempted the request with authentication enabled, but no ChatGPT access token was available:
This occurred once for each external Markdown image. It explains why valid images from unrelated HTTPS hosts all become placeholders and why CORS/CDN checks do not identify the failure.
Likely product gap
Codex can be fully usable with API key authentication, but the Markdown remote-media safety path currently depends on a ChatGPT access token. The desktop auth cache correctly contains no ChatGPT token in API key mode, so
/ecosystem/url_safecannot authorize and the renderer has no alternate path.Suggested fix
Suggested regression coverage
The affected Markdown renderer and desktop fetch/auth bridge are in the packaged desktop frontend rather than the public Rust repository, so this likely needs an internal desktop change rather than an app-server-only patch.