const API_KEY = 'YOUR_API_KEY';
const API_BASE = 'https://api.pictory.ai/pictoryapis';
// Step 1: Create storyboard preview
async function createPreview() {
const response = await fetch(`${API_BASE}/v2/video/storyboard`, {
method: 'POST',
headers: {
'Authorization': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
videoName: 'my_video',
voiceOver: {
enabled: true,
aiVoices: [{ speaker: 'Brian', speed: 100 }]
},
scenes: [{
story: 'Welcome to our product demo. We will show you amazing features.',
createSceneOnEndOfSentence: true
}]
})
});
const data = await response.json();
return data.data.jobId;
}
// Step 2: Wait for preview to complete
async function waitForJob(jobId) {
while (true) {
const response = await fetch(`${API_BASE}/v1/jobs/${jobId}`, {
headers: { 'Authorization': API_KEY }
});
const data = await response.json();
if (data.data.status === 'completed') {
console.log('Preview ready!');
return data.data;
}
if (data.data.status === 'failed') {
throw new Error('Job failed');
}
await new Promise(resolve => setTimeout(resolve, 5000));
}
}
// Step 3: Render final video from preview
async function renderFromPreview(storyboardJobId) {
const response = await fetch(`${API_BASE}/v2/video/render/${storyboardJobId}`, {
method: 'PUT',
headers: {
'Authorization': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({
webhook: 'https://your-server.com/video-complete'
})
});
const data = await response.json();
return data.data.jobId;
}
// Execute workflow
async function main() {
// Create preview
const previewJobId = await createPreview();
console.log('Preview Job ID:', previewJobId);
// Wait for preview
await waitForJob(previewJobId);
// Render final video
const renderJobId = await renderFromPreview(previewJobId);
console.log('Render Job ID:', renderJobId);
// Wait for render
const result = await waitForJob(renderJobId);
console.log('Video URL:', result.videoURL);
}
main();