Depth Anything Image API Documentation
Playground
Try it on WaveSpeedAI!Depth Anything Image turns a single image into a detailed grayscale depth map for depth-conditioned generation, relighting, 3D and compositing workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Depth Anything Image converts a single input image into a grayscale depth map for depth-conditioned generation, relighting, compositing, 2.5D effects, and 3D workflows.
The generated depth map preserves the input image resolution and represents relative scene depth, with nearby surfaces appearing lighter and distant surfaces appearing darker.
Why Choose This?
-
Single-image depth estimation
Generate a detailed depth map directly from one input image. -
Clear depth structure
Preserve object boundaries and scene layering for downstream image and 3D workflows. -
Input-resolution output
The generated depth map matches the resolution of the source image. -
Grayscale depth representation
Nearby surfaces appear lighter, while distant surfaces appear darker. -
Multiple output formats
Export the depth map asjpeg,png, orwebp. -
Simple image workflow
Provide an image URL, choose the output format, and generate the depth map.
Parameters
| Parameter | Required | Description |
|---|---|---|
| image | Yes | URL of the input image used for depth estimation. |
| 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 output format optional — Select
jpeg,png, orwebp. - Submit — Run the model to generate the grayscale depth map.
- Use the result — Apply the depth map in generation, relighting, compositing, parallax, or 3D workflows.
Pricing
Pricing is fixed at $0.005 per image.
| Output | Cost |
|---|---|
| One generated depth map | $0.005 |
output_format does not add a separate charge.
Best Use Cases
- Depth-conditioned generation — Use depth maps in image-generation or ControlNet-style workflows.
- Relighting — Estimate scene depth to support depth-aware lighting adjustments.
- Depth of field — Create foreground and background separation for focus effects.
- Fog and atmospheric effects — Apply depth-dependent haze or environmental effects.
- Compositing — Use depth information to improve layering and spatial placement.
- 2.5D parallax — Create depth-based camera movement from a still image.
- 3D prototyping — Use relative depth as a starting point for displacement or scene reconstruction workflows.
Pro Tips
- Use
pngwhen you want to avoid lossy compression in downstream depth workflows. - Use images with clear foreground and background separation for easier depth interpretation.
- Treat the result as relative depth, not real-world metric distance.
- Lighter areas represent surfaces estimated to be closer to the camera.
- Darker areas represent surfaces estimated to be farther from the camera.
- Use Depth Anything V3 Image when you need the newer image-depth workflow.
Notes
imageis required.output_formatdefaults tojpeg.- Supported output formats are
jpeg,png, andwebp. - Output resolution matches the input image resolution.
- The generated depth map represents relative rather than metric depth.
- Nearby surfaces appear lighter and distant surfaces appear darker.
Related Models
- Depth Anything Image — Generate grayscale depth maps from individual images.
- Depth Anything Video — Generate depth information from video input.
- Depth Anything V3 Image — Generate image depth maps with the newer Depth Anything V3 workflow.
- Depth Anything V3 Video — Generate depth maps from video using Depth Anything V3.
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",
"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/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. | |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output depth map. |
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 |