Minicpm V Image
Playground
Try it on WaveSpeedAI!MiniCPM-V 4.5 is the latest, most capable MiniCPM-V image model for accurate AI image understanding and analysis across visual tasks. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
MiniCPM-V Image is an efficient AI-powered image understanding model that analyzes and describes images based on your prompts. Upload an image, choose a preset or write a custom prompt, and get detailed descriptions, analysis, or answers about the visual content.
Why It Stands Out
- Image understanding: Analyzes visual content and provides detailed descriptions.
- Preset prompts: Quick access to common tasks like “describe” for instant use.
- Custom prompts: Ask specific questions or request particular analysis.
- Ultra-affordable: High-quality image understanding at just $0.005 per image.
- Reproducibility: Use the seed parameter to recreate exact results.
Parameters
| Parameter | Required | Description |
|---|---|---|
| image | Yes | Image to analyze (upload or public URL). |
| preset_prompt | No | Preset task: describe, etc. (default: describe). |
| custom_prompt | No | Custom question or instruction about the image. |
| seed | No | Set for reproducibility; -1 for random. |
How to Use
- Upload your image — drag and drop a file or paste a public URL.
- Select a preset prompt — choose “describe” or other presets for quick analysis.
- Or write a custom prompt — ask specific questions about the image.
- Click Run and receive the analysis.
Example Use Cases
Using preset “describe”:
- Get a detailed description of the image content, subjects, and scene.
Using custom prompts:
- “What objects are in this image?”
- “Describe the mood and atmosphere of this photo.”
- “What text is visible in this image?”
- “Count the number of people in this photo.”
- “What is the main subject doing?”
Best Use Cases
- Image Captioning — Generate descriptions for images in your content.
- Content Analysis — Understand and categorize visual content at scale.
- Accessibility — Create alt text and descriptions for visually impaired users.
- Data Extraction — Extract information from images like text, objects, or scenes.
- Quality Control — Analyze images for specific attributes or content.
Pricing
| Output | Price |
|---|---|
| Per image | $0.005 |
Pro Tips for Best Quality
- Use preset prompts for common tasks like general description.
- Write specific custom prompts when you need particular information.
- For OCR-style tasks, ask directly: “What text is in this image?”
- Combine with other models for workflows like image-to-text-to-video.
Notes
- Ensure uploaded image URLs are publicly accessible.
- Processing time varies based on current queue load.
- Please ensure your content complies with usage guidelines.
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",
"preset_prompt": "describe",
"seed": -1
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/minicpm-v/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=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi
# 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) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| image | string | Yes | - | Image to be analyzed. | |
| preset_prompt | string | No | describe | describe, caption | Preset prompt for image analysis. |
| custom_prompt | string | No | - | - | Custom prompt for image analysis. |
| seed | integer | No | -1 | - | The random seed to use for the generation. |
| 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.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| 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.urls.get | string | URL to poll for the prediction result |
| data.status | string | Status: created, processing, completed, or failed |
| 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 |