Skip to main content

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

1

Plan Your Video

Define the structure, duration, and content for your video
2

Create a Project

Set up a project container to organize your work
3

Add Chapters

Break your video into logical segments
4

Create Content

Submit prompts to create video content for each chapter
5

Review & Refine

Iterate on content until you’re satisfied
6

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)
  1. Intro (15s) - Hook the viewer, show logo
  2. Problem (20s) - Present the pain point
  3. Solution (25s) - Introduce your product
  4. Features (20s) - Highlight key capabilities
  5. 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

Bad:
Create an intro
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
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
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