Every agent that needs to read a screenshot, a chart, or a diagram today does something ugly: it routes the image to a vision-specific model, routes everything else to a cheaper text model, then stitches the results back together. Two models, two rate cards, a routing layer that breaks in the fallback path, and an extra failure mode every time the vision call times out.
DeepSeek just shipped a model that removes that routing for most teams. On August 21, 2026, DeepSeek pushed deepseek-v4-flash-vision-exp live: its first vision-capable entry in the V4-Flash line. The pitch is specific. Match V4-Flash on everything text-based, and close most of the multimodal gap to Anthropic’s Opus-4.8. No separate vision rate card.

What the model actually is
V4-Flash-Vision-Exp adds image understanding on top of the existing V4-Flash text, agent, and reasoning stack. It is not a new architecture bolted onto a vision encoder. It is the same model with image input enabled, which is why the text numbers barely move.
| Attribute | Value |
|---|---|
| Model ID | deepseek-v4-flash-vision-exp |
| Released | August 21, 2026 |
| Text vs V4-Flash | Matches it (same reasoning, agents, world knowledge) |
| Vision pricing | No surcharge, images bill as tokens at V4-Flash rates |
| API surfaces | Chat Completions, Anthropic Messages, OpenAI Responses |
| Harness | DeepSeek Harness 0.1.1 (same day) |
The “exp” in the name matters. This is an experimental release, not a GA model. DeepSeek iterates fast on these, and V4-Flash itself went through a 0731 revision before V4 Pro hit GA. Treat it as production-adjacent, not production-guaranteed.
The benchmarks tell one clean story
DeepSeek split its reporting into two groups, and the split is the evidence for the “text stays flat, vision jumps” claim.
Text-based agent evaluation (V4-Flash-Vision-Exp vs V4-Flash-0731 vs Opus-4.8):
| Benchmark | Vision-Exp | Flash-0731 | Opus-4.8 |
|---|---|---|---|
| Terminal Bench 2.1 | 83.9 | 82.7 | 85.0 |
| NL2Repo | 57.7 | 54.2 | 69.7 |
| Cybergym | 75.3 | 76.7 | 78.3 |
| DeepSWE | 59.3 | 54.4 | 58.0 |
| Toolathlon-Verified | 75.9 | 70.3 | 76.2 |
| DSBench-Hard | 63.6 | 59.6 | 71.7 |
On six of seven text benchmarks, Vision-Exp is within a point or two of V4-Flash-0731. DeepSeek did not trade text quality for vision.
Multimodal agent evaluation:
| Benchmark | Vision-Exp | Flash-0731 | Opus-4.8 |
|---|---|---|---|
| ApexBench (Pass@1) | 36.5 | 26.2* | 39.4 |
| Agents’ Last Exam | 27.3 | 25.2* | 25.7 |
| Chartography | 64.3 | - | 65.0 |
| ZeroBench (Pass@5) | 35.0 | - | 34.0 |
On the multimodal side, Vision-Exp beats Opus-4.8 on two of four benchmarks (Agents’ Last Exam and ZeroBench) and trails by a few points on the other two. The asterisk on Flash-0731 matters: on ApexBench and Agents’ Last Exam, the text-only model simply ignores the image and guesses from text alone, so those numbers are a baseline for what a blind model gets, not a fair vision comparison.
The benchmark categories are the useful signal. ApexBench, Agents’ Last Exam, Chartography, and ZeroBench are not image-captioning tests. They are agentic tasks that happen to require reading a screenshot, chart, or diagram as one step in a longer tool-use loop. That is the gap this model targets: a single model that combines visual understanding with the tool-calling stack it already has.
Sending images: three ways, same shape
The API mirrors the OpenAI-compatible image_url content block pattern:
- Inline base64: embed the image as a
data:URL directly in the request. Simplest for local files, but counts toward the 48 MiB request body limit. - External URL: pass a public http(s) link and DeepSeek downloads it server-side. Capped at 8,192 characters for the URL and 32 MiB for the fetched image, with a 60-second download timeout.
- Files API: upload once, then reference the returned
file_id. The only path that supports images up to 64 MiB, and it avoids re-uploading the same image across repeated calls.
from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")
response = client.chat.completions.create(
model="deepseek-v4-flash-vision-exp",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}},
],
},
],
)
print(response.choices[0].message.content)
An optional detail field controls preprocessing. low downsamples to 512x512 before inference (cheaper, faster, worse for fine detail). high, original, and auto keep the image at its original resolution.
The Anthropic-compatible and Responses API endpoints accept the same three image sources through their native image blocks, so teams standardized on Claude’s Messages format or OpenAI’s Responses format do not need a separate integration. A model that speaks three dialects removes the adapter layer in front of it.
Pricing: no vision surcharge, but a token cap
The most important pricing detail is what is absent. DeepSeek is not charging a separate rate for image tokens. Images bill at the existing V4-Flash per-million-token rate, with each image costing up to 384 tokens. No separate contract, no vision rate card, just a model-ID swap.
The limits worth knowing before you build against it:
| Limit | Value |
|---|---|
| Supported formats | JPEG, PNG, GIF, WebP |
| External URL length | 8,192 characters |
| Request body size | 48 MiB |
| Max single image (inline/URL) | 32 MiB |
| Max single image (Files API) | 64 MiB |
| Max images per request | 600 |
| Max image dimension | 8,192 px/side (4,096 at 15+ images) |
| Where images are allowed | User messages only |
That last restriction is the one to watch in a multi-model routing setup. If your fallback chain silently drops from the vision model to a text-only DeepSeek model on retry, the retry fails outright rather than degrading gracefully, because a plain-text model rejects any request carrying an image block.
Why this matters for the teams we talk to
The practical bar for adding vision to an agent just dropped to near zero. If you already run V4-Flash for text-agent work, adding vision costs nothing extra per token and needs no new rate card, no new contract, and no separate vision model with its own routing logic. One model, one token schedule, one retry path.
The caveat is the “exp” suffix. This is not a GA production model. Watch for a non-experimental follow-up, and run the numbers yourself before you depend on it for anything compliance-sensitive.
How this fits IndieRouter
IndieRouter serves DeepSeek V4-Flash on our own GPUs in India today. Vision is the capability we get asked about most from teams building on our API, and it is already on the roadmap alongside Qwen3.8-27B. When a stable, non-experimental vision model lands, our plan is to serve it the same way we serve everything else: OpenAI-compatible, on Indian GPUs, with prompts that never leave India and never get retained. Watch this space.