Overview
From idea to export in six steps. This guide covers the complete video creation process - plan, build, review, ship. Works the same whether you’re using the REST API or MCP server.
The Video Creation Process
Plan Your Video
Define the structure, duration, and content for your video
Create a Project
Set up a project container to organize your work
Add Chapters
Break your video into logical segments
Create Content
Submit prompts to create video content for each chapter
Review & Refine
Iterate on content until you’re satisfied
Export
Render the final video for download
Step 1: Plan Your Video
Before creating anything, plan your video structure:
Define Your Goals
Purpose : What is this video for? (marketing, tutorial, social media, etc.)
Audience : Who will watch it?
Message : What’s the key takeaway?
Duration : How long should it be?
Create a Storyboard
Break your video into logical segments (chapters):
Example: Product Launch Video (90 seconds)
Intro (15s) - Hook the viewer, show logo
Problem (20s) - Present the pain point
Solution (25s) - Introduce your product
Features (20s) - Highlight key capabilities
CTA (10s) - Call to action
Gather Assets
Collect any media you’ll need:
Logos and branding assets
Product screenshots or videos
Music or sound effects
Testimonial photos or videos
Upload these using the Assets API before creating your video.
Step 2: Create a Project
Every video starts with a project:
curl -X POST https://api.babou.ai/api/v1/projects \
-H "Authorization: Bearer $BABOU_API_KEY " \
-H "Content-Type: application/json" \
-d '{
"name": "Product Launch Video",
"description": "90-second promo for Q4 launch"
}'
Use descriptive names and detailed descriptions to keep projects organized, especially when managing multiple videos.
Step 3: Add Chapters
Create chapters for each segment of your video:
const chapters = [
{ name: 'Intro' , duration: 15 },
{ name: 'Problem' , duration: 20 },
{ name: 'Solution' , duration: 25 },
{ name: 'Features' , duration: 20 },
{ name: 'CTA' , duration: 10 }
];
for ( const chapter of chapters ) {
const result = await fetch (
`https://api.babou.ai/api/v1/projects/ ${ project . id } /chapters` ,
{
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ( chapter )
}
). then ( r => r . json ());
console . log ( `✓ Created: ${ result . name } ( ${ result . duration } s)` );
}
Step 4: Create Content
Submit prompts to create video content for each chapter:
Writing Effective Prompts
Be specific about visual elements
Bad: Good: Create a professional intro with:
- Company logo centered, fade-in over 2 seconds
- Tagline "Innovation Simplified" appears below logo at 3s
- Background: Clean white with subtle blue gradient
- Logo zooms in slightly from 0-3s
- Smooth transition to next scene at 15s
Include timing and pacing
20-second problem statement:
- 0-5s: Show frustrated user struggling with current solution
- 5-10s: Text overlay: "Managing projects shouldn't be this hard"
- 10-15s: Multiple pain points flash on screen
- 15-20s: Transition to solution chapter
Style:
- Modern, minimalist design
- Corporate professional aesthetic
- Color scheme: Navy blue (#1E3A8A), white, light gray
- Sans-serif fonts, clean typography
- Smooth, elegant transitions
- Upbeat but professional tone
Reference assets and branding
Use our company logo (logo.png - already uploaded)
Apply our brand colors: Primary blue #1E3A8A, accent #3B82F6
Match the style from our website at company.com
Include the product screenshot (dashboard.png)
Submit Prompts
const prompts = {
'Intro' : `
Create a captivating intro:
- Fade in company logo from uploaded assets
- Display tagline "Innovation Simplified"
- Modern, clean aesthetic with blue branding
- Smooth zoom animation on logo
- 15 seconds total
` ,
'Problem' : `
Showcase the problem:
- Show busy professional overwhelmed with tools
- Text overlays highlighting pain points
- Frustrated expressions and cluttered screens
- Dark, chaotic visuals
- 20 seconds
` ,
'Solution' : `
Introduce the solution:
- Bright, clean transition from problem
- Product logo and name appear
- Smooth UI animation showing simplicity
- Confident, optimistic tone
- 25 seconds
`
// ... more chapters
};
// Get chapters
const chaptersResponse = await fetch (
`https://api.babou.ai/api/v1/projects/ ${ project . id } /chapters` ,
{
headers: { 'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` }
}
). then ( r => r . json ());
// Submit prompts
for ( const chapter of chaptersResponse . chapters ) {
if ( prompts [ chapter . name ]) {
await fetch (
`https://api.babou.ai/api/v1/projects/ ${ project . id } /chapters/ ${ chapter . id } /prompt` ,
{
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
content: prompts [ chapter . name ]
})
}
);
console . log ( `✓ Submitted prompt for: ${ chapter . name } ` );
// Wait 60 seconds for processing
await new Promise ( r => setTimeout ( r , 60000 ));
}
}
Step 5: Review & Refine
Check Chapter Status
Monitor the processing status:
async function checkChapterStatus ( projectId : string , chapterId : string ) {
const chapter = await fetch (
`https://api.babou.ai/api/v1/projects/ ${ projectId } /chapters/ ${ chapterId } ` ,
{
headers: { 'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` }
}
). then ( r => r . json ());
const latestPrompt = chapter . prompts [ chapter . prompts . length - 1 ];
return {
chapterName: chapter . name ,
status: latestPrompt ?. status || 'no_content' ,
promptContent: latestPrompt ?. content
};
}
Iterate on Content
If you want to refine a chapter, submit a new prompt:
// Update a chapter with new prompt
await fetch (
`https://api.babou.ai/api/v1/projects/ ${ projectId } /chapters/ ${ chapterId } /prompt` ,
{
method: 'POST' ,
headers: {
'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
content: 'Updated prompt with faster pacing and brighter colors' ,
force: true // Override previous prompt
})
}
);
Step 6: Export
Once all chapters are complete, export the final video:
// Start export
await fetch (
`https://api.babou.ai/api/v1/projects/ ${ projectId } /export` ,
{
method: 'POST' ,
headers: { 'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` }
}
);
// Poll for completion
async function waitForExport ( projectId : string ) {
while ( true ) {
const status = await fetch (
`https://api.babou.ai/api/v1/projects/ ${ projectId } /export` ,
{
headers: { 'Authorization' : `Bearer ${ process . env . BABOU_API_KEY } ` }
}
). then ( r => r . json ());
if ( status . status === 'completed' ) {
console . log ( '✓ Export complete!' );
console . log ( `Download: ${ status . download_url } ` );
return status ;
}
if ( status . status === 'failed' ) {
throw new Error ( 'Export failed' );
}
console . log ( `Status: ${ status . status } ...` );
await new Promise ( r => setTimeout ( r , 10000 )); // Wait 10s
}
}
await waitForExport ( projectId );
Best Practices
1. Start Simple
Begin with a simple structure and iterate:
1. Create project
2. Add 1-2 chapters
3. Test with basic prompts
4. Refine and expand
2. Use Templates
Create reusable templates for common video types:
const templates = {
productLaunch: [ 'Intro' , 'Problem' , 'Solution' , 'Features' , 'CTA' ],
tutorial: [ 'Introduction' , 'Setup' , 'Step-by-Step' , 'Conclusion' ],
testimonial: [ 'Hook' , 'Customer Story' , 'Results' , 'CTA' ]
};
function createFromTemplate ( template : string []) {
// Create chapters from template
}
3. Batch Process
For multiple similar videos, batch process:
templates = [
{ 'name' : 'Social Post 1' , 'topic' : 'Feature A' },
{ 'name' : 'Social Post 2' , 'topic' : 'Feature B' },
{ 'name' : 'Social Post 3' , 'topic' : 'Feature C' }
]
for template in templates:
# Create project
# Add chapters
# Submit prompts
# Export
4. Version Control
Keep track of iterations:
const projectName = `Product Video v ${ version } ` ;
// or
const projectName = `Product Video - ${ new Date (). toISOString (). split ( 'T' )[ 0 ] } ` ;
Common Patterns
Pattern 1: Rapid Prototyping
// Quick test of video concept
const project = await createProject ( 'Quick Test v1' );
const chapter = await addChapter ( project . id , 'Test' , 15 );
await submitPrompt ( project . id , chapter . id , 'Simple test content' );
Pattern 2: Progressive Enhancement
// Start basic, add detail
const project = await createProject ( 'Product Video' );
// V1: Basic structure
await addChapter ( project . id , 'Intro' , 10 );
await submitPrompt ( ... , 'Simple intro' );
// V2: Add more chapters
await addChapter ( project . id , 'Features' , 30 );
await submitPrompt ( ... , 'Feature showcase' );
// V3: Refine content
await submitPrompt ( ... , 'Enhanced intro with animations' , { force: true });
Pattern 3: Conditional Content
// Different content based on audience
const audience = 'technical' ; // or 'general'
const prompt = audience === 'technical'
? 'Detailed technical architecture overview with code examples'
: 'High-level benefits overview with simple visuals' ;
await submitPrompt ( projectId , chapterId , prompt );
Next Steps
Asset Management Learn how to upload and use custom assets
Error Handling Handle errors gracefully in your workflows
API Reference Complete API documentation
MCP Server Use MCP for conversational workflows