Qwen Image Edit Multiple Angles
Playground
Try it on WavespeedAI!Generate specific camera angles from a single image using a 96-pose camera system. Control horizontal rotation, vertical tilt, and zoom to create front, side, back views and more. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Qwen-Image-Edit Multiple Angles | AI Multi-View Image Generation
Qwen-Image-Edit Multiple Angles transforms a single input image into any camera angle using an advanced 96-pose camera system. Generate front views, side profiles, back views, bird’s-eye shots, and dramatic low angles — all from one photo.
Perfect for e-commerce product photography, 3D asset creation, character design, virtual try-on, and creative content generation.
Why Choose Multiple Angles?
-
Single Image to Multi-View Upload one photo and generate any angle — no need for multiple photo shoots or 3D modeling.
-
96-Pose Camera System 8 horizontal angles × 4 vertical angles × 3 distance levels = comprehensive viewpoint coverage.
-
Intuitive Angle Control Specify angles in degrees — the system automatically optimizes for the best results.
-
Production-Ready API No cold starts, fast inference, and predictable pricing for seamless integration.
Camera System Reference
Horizontal Angle (Azimuth) — Rotate Around Subject
| Angle | View |
|---|---|
| 0° | Front view |
| 45° | Front-right quarter |
| 90° | Right side profile |
| 135° | Back-right quarter |
| 180° | Back view |
| 225° | Back-left quarter |
| 270° | Left side profile |
| 315° | Front-left quarter |
Accepts any value 0-359° and rounds to the nearest optimal angle.
Vertical Angle (Elevation) — Camera Height
| Angle | Shot Type |
|---|---|
| -30° | Low-angle (looking up) |
| 0° | Eye-level (standard) |
| 30° | Elevated (slightly above) |
| 60° | High-angle (looking down) |
Accepts any value -30° to 60° and rounds to the nearest optimal angle.
Distance — Zoom Level
| Value | Shot Type |
|---|---|
| 0 | Close-up |
| 1 | Medium shot |
| 2 | Wide shot |
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| images | array | Yes | - | Input image(s). Up to 3 images. |
| horizontal_angle | integer | No | 0 | Rotation around subject (0-359°). |
| vertical_angle | integer | No | 0 | Camera height (-30° to 60°). |
| distance | integer | No | 1 | Zoom level (0, 1, or 2). |
| prompt | string | No | - | Optional guidance prompt. |
| seed | integer | No | -1 | Random seed (-1 for random). |
| output_format | string | No | ”jpeg" | "jpeg”, “png”, or “webp”. |
Use Cases
E-Commerce Product Views
Generate 360° product views from a single photo for online stores.
{
"images": ["https://example.com/product.jpg"],
"horizontal_angle": 90,
"vertical_angle": 0,
"distance": 1
}Character Design & Concept Art
Create character turnarounds for animation and game development.
{
"images": ["https://example.com/character.jpg"],
"horizontal_angle": 180,
"vertical_angle": 0,
"distance": 1
}Dramatic Photography Effects
Generate cinematic angles for creative content.
{
"images": ["https://example.com/portrait.jpg"],
"horizontal_angle": 45,
"vertical_angle": -30,
"distance": 0
}Aerial & Bird’s-Eye Views
Create top-down perspectives for real estate or product layouts.
{
"images": ["https://example.com/scene.jpg"],
"horizontal_angle": 0,
"vertical_angle": 60,
"distance": 2
}Best Practices
- Use clear, well-lit input images for best multi-angle results.
- Start with eye-level (0°) vertical angle for natural-looking outputs.
- Use medium distance (1) as baseline, then adjust for tighter or wider framing.
- Add prompts for additional style guidance beyond angle transformation.
- Test with 90° or 180° horizontal rotations first to understand subject handling.
Pricing
$0.025 per generated image
Related Models
- Qwen Image Edit 2511 — General-purpose AI image editing.
- Qwen Image Edit Plus — High-fidelity image editing with enhanced detail retention.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
# Submit the task
curl --location --request POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/qwen-image/edit-multiple-angles" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
--data-raw '{
"horizontal_angle": 0,
"vertical_angle": 0,
"distance": 1,
"seed": -1,
"output_format": "jpeg",
"enable_base64_output": false,
"enable_sync_mode": false
}'
# Get the result
curl --location --request GET "https://api.wavespeed.ai/api/v3/predictions/${requestId}/result" \
--header "Authorization: Bearer ${WAVESPEED_API_KEY}"
Parameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| images | array | Yes | [] | 1 ~ 3 items | The input images. A maximum of 3 reference images can be uploaded. |
| horizontal_angle | integer | No | - | 0 ~ 359 | Horizontal rotation angle (azimuth) in degrees. Controls the camera's horizontal position around the subject. Values are rounded to the nearest valid angle: 0 (front), 45 (front-right), 90 (right), 135 (back-right), 180 (back), 225 (back-left), 270 (left), 315 (front-left). |
| vertical_angle | integer | No | - | -30 ~ 60 | Vertical tilt angle (elevation) in degrees. Controls the camera's vertical position. Values are rounded to the nearest valid angle: -30 (low angle), 0 (eye level), 30 (elevated), 60 (high angle). |
| distance | integer | No | 1 | 0 ~ 2 | Camera distance/zoom level. 0 = close-up, 1 = medium shot, 2 = wide shot. |
| prompt | string | No | - | Optional additional prompt to guide the generation. This is appended to the angle prompt. | |
| size | string | No | - | 256 ~ 1536 per dimension | The size of the generated media in pixels (width*height). |
| seed | integer | No | -1 | -1 ~ 2147483647 | The random seed to use for the generation. -1 means a random seed will be used. |
| output_format | string | No | jpeg | jpeg, png, webp | The format of the output image. |
| enable_base64_output | boolean | No | false | - | If enabled, the output will be encoded into a BASE64 string instead of a URL. This property is only available through the API. |
| enable_sync_mode | boolean | No | false | - | If set to true, the function will wait for the result to be generated and uploaded before returning the response. It allows you to get the result directly in the response. This property is only available through the API. |
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 | Array of URLs to the generated content (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.has_nsfw_contents | array | Array of boolean values indicating NSFW detection for each output |
| 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, the ID of the prediction to get |
| data.model | string | Model ID used for the prediction |
| data.outputs | string | Array of URLs to the generated content (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 |