Depth Anything V3 Image API Documentation
Playground
Try it on WaveSpeedAI!Depth Anything V3 Image estimates a sharp, detailed depth map from a single image, ready for depth-conditioned generation, relighting, 3D and compositing workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Depth Anything V3 Image estimates a detailed depth map from a single image using Depth Anything V3. It captures fine scene structure and object boundaries, handles sky regions more cleanly, and returns the depth map at the input image resolution.
Use grayscale output for depth-conditioned generation and compositing workflows, or choose inferno or turbo when you want a colorized depth visualization.
Why Choose This?
-
Detailed depth estimation
Capture fine structures such as hair, foliage, thin objects, edges, and architectural details. -
Sky-aware depth handling
Place sky regions at the far end of the depth range instead of producing noisy depth values. -
Control-workflow ready
Use the default grayscale output directly in depth-conditioned generation and ControlNet-style pipelines. -
Multiple colormaps
Choosegrayscalefor depth workflows orinfernoandturbofor visualized depth maps. -
Input-resolution output
The generated depth map matches the resolution of the source image. -
Broad image support
Works with photos, renders, illustrations, indoor scenes, and outdoor scenes.
Parameters
| Parameter | Required | Description |
|---|---|---|
| image | Yes | Input image provided as a URL or upload. |
| colormap | No | Depth-map visualization: grayscale, inferno, or turbo. Default: grayscale. In grayscale mode, near surfaces are white and far surfaces are black. |
| output_format | No | Output image format: jpeg, png, or webp. Default: jpeg. |
How to Use
- Provide an input image — Upload an image or provide its URL.
- Choose a colormap optional — Use
grayscalefor generation and compositing workflows, orinferno/turbofor color visualization. - Choose output format optional — Select
jpeg,png, orwebp. - Submit — Generate and retrieve the depth map.
Pricing
Pricing is fixed at $0.005 per image.
| Output | Cost |
|---|---|
| One generated depth map | $0.005 |
colormap and output_format do not add separate charges.
Best Use Cases
- Depth-conditioned generation — Preserve the composition of a reference image while changing its content or visual style.
- ControlNet-style workflows — Use grayscale depth as structural guidance for downstream generation.
- Relighting — Use scene depth to support depth-aware lighting workflows.
- Depth of field — Create foreground and background separation for portrait blur and focus effects.
- Fog and atmospheric effects — Apply depth-based haze or environmental effects.
- 2.5D parallax — Use the depth map as a displacement source for parallax animation.
- 3D-aware editing — Use estimated scene depth for spatial edits and prototyping.
- Compositing — Create depth-based masks and layered scene effects.
Pro Tips
- Use
grayscalewhen the depth map will be passed into another model or compositing workflow. - Use
pngwhen you want to avoid lossy compression in downstream depth processing. - Use
infernoorturbowhen the depth map is primarily for visualization. - In grayscale mode, white represents surfaces closer to the camera and black represents surfaces farther away.
- Treat the result as relative depth, not real-world metric distance.
- Use images with clear scene structure when you want easier foreground and background separation.
Notes
imageis required.colormapdefaults tograyscale.- Supported colormaps are
grayscale,inferno, andturbo. output_formatdefaults tojpeg.- Supported output formats are
jpeg,png, andwebp. - Output resolution matches the input image resolution.
- Depth is relative rather than metric.
- In grayscale mode, near surfaces are white and far surfaces are black.
Related Models
- Depth Anything Image — Generate grayscale depth maps from individual images.
- Depth Anything Video — Generate depth maps from video input.
- Depth Anything V3 Image — Generate detailed image depth maps with Depth Anything V3.
- Depth Anything V3 Video — Generate video depth maps with the Depth Anything V3 workflow.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
"colormap": "grayscale",
"output_format": "jpeg"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/depth-anything-v3/image" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| image | string | Yes | - | The URL of the input image to estimate depth for. | |
| colormap | string | No | grayscale | grayscale, inferno, turbo | How depth is rendered. grayscale is the standard depth map (near = white, far = black) used by depth-conditioned generation and ControlNet-style workflows; inferno and turbo are color visualizations. |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output depth map. |
| enable_base64_output | boolean | No | false | - | If set to `true`, the prediction's `output` strings are returned as **naked base64** (no `data:<mime>;base64,` prefix). When `false` (default), outputs are returned as URLs pointing to our CDN. |
| enable_sync_mode | boolean | No | false | - | If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |