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