Wrong-model image handling: Codex passes through images when active model is text-only
Open 💬 0 comments Opened Jun 30, 2026 by elfenlieds7
Per source inspection (verified 2026-06-30):
codex-rs/core/src/image_preparation.rs::prepare_image()handles oversized images well — it downsamples client-side viaHIGH_DETAIL_LIMITS{max_dimension: 2048, max_patches: 2500}(orORIGINAL_DETAIL_LIMITS{6000, 10000}), and on resize-failure substitutes a text placeholder.- But there's no equivalent check for wrong-model: if the user has a text-only model active and attaches an image, Codex forwards the image to the API and lets it bounce back as an error.
This is an inconsistent UX across backends — sudocode (open-source CLI we maintain) and Qwen Code both handle the wrong-model case by routing through a designated vision model and splicing a text description back into the user turn.
Two asks in order of preference:
- Transparent VLM-route (Qwen Code's approach —
packages/core/src/services/visionBridge/vision-bridge-service.tsis the reference): when active model is text-only, call a configured vision model (e.g.gpt-4o-mini), splice description back as text in the same turn. - At minimum — advertise via ACP
_meta.imageCapabilitywhether Codex handles the case, so cross-backend ACP hosts (like sudowork) know whether to wrap with their own VLM-route fallback. See the ACP spec discussion.
Full design: https://s.shareone.vip/s/image-handling-non-user-facing
— sudowork-win-pc-0