# Vision

Send HTTPS images or data URLs with model-specific context, pixel, output, and capacity limits.

Vision is available through Chat Completions on models whose `input_modalities` includes `image`.

```json
{
  "model": "qwen/qwen3.8-27b",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Describe the chart and identify its trend."},
      {"type": "image_url", "image_url": {"url": "https://example.com/chart.png"}}
    ]
  }],
  "max_completion_tokens": 500
}
```

`image_url.url` accepts a public HTTPS URL or a base64 `data:` URL. Data URLs support JPEG, PNG, and WebP. Remote URLs are checked against private, loopback, link-local, and otherwise unsafe destinations to reduce server-side request forgery risk.

## Upload constraints

- At most **8 new images** are accepted in the last user message.
- Data URL payloads for those new images are limited to approximately **20 MB combined**, not per image.
- Decoded images have a safety limit and can be rejected if malformed or unreasonably large.
- Images can be downscaled in memory to the selected model's processor pixel budget.

The combined byte and image-count rules describe router-wide validation. Context, pixel, longest-edge guidance, output cap, and reasoning behavior remain model-specific and appear on each model page.

## Context and output

A model may publish a smaller vision context than its text context. Vision requests can also have a lower completion cap. Do not copy a number from one model to another; read `modality_context_lengths` and `vision` in the model catalog.

## Capacity

Vision capacity can be separate from text capacity. A saturated vision pool returns `429`, `Retry-After`, and sanitized capacity metadata. Retry after the stated delay with jitter. A model with text capacity available can still have no vision slot available.
