> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.
# Multimodal Model Serving
Dynamo supports multimodal inference across multiple LLM backends, enabling models to process images, video, and audio alongside text.
**Security Requirement**: Multimodal processing must be explicitly enabled at startup. See the relevant backend documentation ([vLLM](multimodal-vllm.md), [SGLang](multimodal-sglang.md), [TRT-LLM](multimodal-trtllm.md)) for the necessary flags. This prevents unintended processing of multimodal data from untrusted sources.
```mermaid
---
title: Sample flow for an aggregated VLM serving scenario
---
flowchart TD
A[Request] --> B{KV cache hit?}
B -->|Yes| C[Use KV]
B -->|No| D{Embedding cache hit?}
D -->|Yes| E[Load embedding]
D -->|No| F[Run encoder]
F --> G[save to cache]
G --> H["PREFILL (image tokens + text tokens โ KV cache)"]
E --> H
C --> I[DECODE]
H --> I
I --> J[Response]
```
## Key Features
Dynamo provides support for improving latency and throughput for vision-and-language workloads through the following features, that can be used together or separately, depending on your workload characteristics:
| Feature | Description |
|---------|-------------|
| **[Embedding Cache](/dynamo/v1.1.0/user-guides/multimodal/embedding-cache)** | CPU-side LRU cache that skips re-encoding repeated images |
| **[Encoder Disaggregation](/dynamo/v1.1.0/user-guides/multimodal/encoder-disaggregation)** | Separate vision encoder worker for independent scaling |
| **[Multimodal KV Routing](/dynamo/v1.1.0/user-guides/multimodal/multimodal-kv-routing)** | MM-aware KV cache routing for optimal worker selection |
## Support Matrix
| Stack | Image | Video | Audio |
|-------|-------|-------|-------|
| **[vLLM](https://github.com/ai-dynamo/dynamo/blob/v1.1.0/docs/features/multimodal/multimodal-vllm.md)** | โ
| ๐งช | ๐งช |
| **[TRT-LLM](https://github.com/ai-dynamo/dynamo/blob/v1.1.0/docs/features/multimodal/multimodal-trtllm.md)** | โ
| โ | โ |
| **[SGLang](https://github.com/ai-dynamo/dynamo/blob/v1.1.0/docs/features/multimodal/multimodal-sglang.md)** | โ
| ๐งช | โ |
**Status:** โ
Supported | ๐งช Experimental | โ Not supported
## Security: URL Validation
All multimodal loaders route remote fetches through a shared URL policy
(`dynamo.common.multimodal.url_validator`). Only
`https://` and `data:` URLs are allowed by default, private / internal IPs are blocked,
and local file access is disabled. Every HTTP redirect hop is re-validated
against the policy.
Two environment variables loosen the defaults for non-public deployments:
| Variable | Default | Effect |
|----------|---------|--------|
| `DYN_MM_ALLOW_INTERNAL` | `0` | Set to `1` to allow `http://`, private / internal IPs, and explicit ports. Intended for on-prem or local-dev setups where media lives on an internal network. |
| `DYN_MM_LOCAL_PATH` | *(empty)* | Absolute directory prefix. When set, `file://` URIs and bare paths are allowed if they resolve inside this prefix. |
**Never set `DYN_MM_ALLOW_INTERNAL=1` on public-facing deployments.** It opens SSRF paths to cloud metadata endpoints (AWS IMDS, GCE, Azure) and other internal services.
## Example Workflows
Reference implementations for deploying multimodal models:
- [vLLM multimodal examples](https://github.com/ai-dynamo/dynamo/tree/v1.1.0/examples/backends/vllm/launch) (image, video)
- [TRT-LLM multimodal examples](https://github.com/ai-dynamo/dynamo/tree/v1.1.0/examples/backends/trtllm/launch)
- [SGLang multimodal examples](https://github.com/ai-dynamo/dynamo/tree/v1.1.0/examples/backends/sglang/launch)
## Backend Documentation
Detailed deployment guides, configuration, and examples for each backend:
- **[vLLM Multimodal](https://github.com/ai-dynamo/dynamo/blob/v1.1.0/docs/features/multimodal/multimodal-vllm.md)**
- **[TensorRT-LLM Multimodal](https://github.com/ai-dynamo/dynamo/blob/v1.1.0/docs/features/multimodal/multimodal-trtllm.md)**
- **[SGLang Multimodal](https://github.com/ai-dynamo/dynamo/blob/v1.1.0/docs/features/multimodal/multimodal-sglang.md)**
> Deploy multimodal models with image, video, and audio support in Dynamo
## Docs
- [Embedding Cache](https://docs.nvidia.com/dynamo/v1.1.0/user-guides/multimodal/embedding-cache.md): Cache vision encoder embeddings to skip re-encoding repeated images
- [Encoder Disaggregation](https://docs.nvidia.com/dynamo/v1.1.0/user-guides/multimodal/encoder-disaggregation.md): Separate vision encoding into a dedicated worker for independent scaling
- [Multimodal KV Routing](https://docs.nvidia.com/dynamo/v1.1.0/user-guides/multimodal/multimodal-kv-routing.md): Route multimodal requests to workers with the best KV cache overlap