2D to 3D
The Youzu 3D Lens Component Transforms 2D product images into interactive 3D models.
API
The 2D to 3D API allows you to convert 2D product images into interactive 3D models. This is an asynchronous process that requires polling for job completion.
Authentication
Use the Authorization: Bearer YOUR_TOKEN header with a single-use token obtained from /api/v1/token. Generate a 2d-to-3d:create token for creation and a new 2d-to-3d:read token for every status request.
Create 2D to 3D Conversion
Endpoint: POST /api/v1/2d-to-3d
Convert 2D images to 3D models. Supports uploading multiple images of the same product from different angles for better results.
curl -X POST "https://platform.youzu.ai/api/v1/2d-to-3d" \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "images=@product-front.jpg" \
-F "images=@product-side.jpg" \
-F "images=@product-back.jpg"
// Convert 2D images to 3D model using token
const formData = new FormData();
formData.append('images', document.getElementById('image1').files[0]);
formData.append('images', document.getElementById('image2').files[0]);
fetch('https://platform.youzu.ai/api/v1/2d-to-3d', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_TOKEN'
},
body: formData
})
.then(response => response.json())
.then(data => {
console.log('Conversion started:', data);
// Poll for completion using data.id
})
.catch(error => {
console.error('Error:', error);
});
import requests
# Convert 2D images to 3D model using token
url = 'https://platform.youzu.ai/api/v1/2d-to-3d'
headers = {
'Authorization': 'Bearer YOUR_TOKEN'
}
files = [
('images', open('product-front.jpg', 'rb')),
('images', open('product-side.jpg', 'rb'))
]
response = requests.post(url, headers=headers, files=files)
if response.status_code == 200:
job = response.json()
print('Conversion started:', job)
# Poll for completion using job['id']
else:
print('Error:', response.status_code, response.text)
Get Conversion Status
Endpoint: GET /api/v1/2d-to-3d/{id}
Check the status of a 2D to 3D conversion job.
curl -X GET "https://platform.youzu.ai/api/v1/2d-to-3d/YOUR_JOB_ID" \
-H "Authorization: Bearer YOUR_TOKEN"
// Check conversion status using token
fetch('https://platform.youzu.ai/api/v1/2d-to-3d/YOUR_JOB_ID', {
method: 'GET',
headers: {
'Authorization': 'Bearer YOUR_TOKEN'
}
})
.then(response => response.json())
.then(data => {
console.log('Job status:', data.status);
if (data.status === 'COMPLETED') {
console.log('3D model URL:', data.outputUrls[0]);
}
})
.catch(error => {
console.error('Error:', error);
});
import requests
# Check conversion status using token
url = 'https://platform.youzu.ai/api/v1/2d-to-3d/YOUR_JOB_ID'
headers = {
'Authorization': 'Bearer YOUR_TOKEN'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
job = response.json()
print('Job status:', job['status'])
if job['status'] == 'COMPLETED':
print('3D model URL:', job['outputUrls'][0])
else:
print('Error:', response.status_code, response.text)
SDK
Props
| Property | Attribute | Description | Type | Default |
|---|---|---|---|---|
alt |
alt |
The alt text for the image | string | '' |
height |
height |
The height of the component | string | undefined |
modelSrc |
model-src |
The 3D model URL (.gib file) | string | undefined |
showLoader |
show-loader |
Manually control the loading state (for demo purposes) | boolean | false |
src |
src |
The source URL of the image | string | undefined |
width |
width |
The width of the component | string | undefined |
Events
| Event | Description | Type |
|---|---|---|
viewChange |
Event emitted when view mode changes (2D to 3D or vice versa) | CustomEvent<ViewChangeEventData> |
Methods
| Method | Parameters | Return Type | Description |
|---|---|---|---|
switchTo3D |
options?: LensOptions |
Promise<void> |
Switch to 3D view |
toggleView |
Promise<void> |
Toggle between 2D and 3D views |