> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pictory.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# PowerPoint to Video with Animated Slides

> Convert PowerPoint presentations into videos with AI-generated slide animations and motion graphics

This guide shows you how to convert PowerPoint presentations into dynamic videos with AI-generated animations. Instead of static slide images, the AI analyzes each slide and creates motion graphics — zoom, pan, and fade effects — that bring your slides to life.

## What You Will Learn

<CardGroup cols={2}>
  <Card title="Animated Slides" icon="wand-magic-sparkles">
    AI generates motion graphics for each slide
  </Card>

  <Card title="Multilingual Support" icon="globe">
    Generate narration in 14 languages
  </Card>

  <Card title="Combined Features" icon="layer-group">
    Mix animations with speaker notes and language options
  </Card>

  <Card title="Auto Processing" icon="sparkles">
    Automatic animation generation per slide
  </Card>
</CardGroup>

## Before You Begin

Make sure you have:

* A [Pictory API key](https://app.pictory.ai/api-access)
* Node.js or Python installed on your machine
* PowerPoint file accessible via public URL

<CodeGroup>
  ```bash npm theme={null}
  npm install axios
  ```

  ```bash pip theme={null}
  pip install requests
  ```
</CodeGroup>

## How Animated Slides Work

When you enable `animatePPT`:

1. **File Processing** - Your PPT file is accessed and parsed
2. **Slide Extraction** - Each slide becomes a video scene
3. **AI Analysis** - The AI analyzes each slide's visual content
4. **Animation Generation** - Motion graphics prompts are generated per slide (zoom, pan, fade effects)
5. **Narration** - Voice-over text is generated (from slide text or speaker notes)
6. **Video Rendering** - Final video combines animated slides with narration

<Note>
  The `animatePPT` option uses AI to generate animation prompts for each slide. This works for slides with image backgrounds. Video-based slides are not animated.
</Note>

## Complete Example — Animated PPT

<CodeGroup>
  ```javascript Node.js theme={null}
  import axios from "axios";

  const API_BASE_URL = "https://api.pictory.ai/pictoryapis";
  const API_KEY = "YOUR_API_KEY";

  const PPT_URL = "https://pictory-static.pictorycontent.com/sample_ppt.pptx";

  async function createAnimatedPptVideo() {
    try {
      console.log("Creating animated video from PowerPoint...");

      const response = await axios.post(
        `${API_BASE_URL}/v2/video/storyboard/render`,
        {
          videoName: "animated_ppt_video",
          scenes: [
            {
              pptUrl: PPT_URL,
              animatePPT: true,            // Enable AI slide animations
            }
          ],
          voiceOver: {
            enabled: true,
            aiVoices: [
              {
                speaker: "Brian",
                speed: 100,
                amplificationLevel: 0,
              },
            ],
          },
        },
        {
          headers: {
            "Content-Type": "application/json",
            Authorization: API_KEY,
          },
        }
      );

      const jobId = response.data.data.jobId;
      console.log("Job ID:", jobId);

      // Poll for completion
      let jobCompleted = false;
      while (!jobCompleted) {
        const statusResponse = await axios.get(
          `${API_BASE_URL}/v1/jobs/${jobId}`,
          { headers: { Authorization: API_KEY } }
        );

        const status = statusResponse.data.data.status;
        console.log("Status:", status);

        if (status === "completed") {
          jobCompleted = true;
          console.log("Video URL:", statusResponse.data.data.videoURL);
        } else if (status === "failed") {
          throw new Error("Video creation failed");
        }

        await new Promise(resolve => setTimeout(resolve, 10000));
      }
    } catch (error) {
      console.error("Error:", error.response?.data || error.message);
      throw error;
    }
  }

  createAnimatedPptVideo();
  ```

  ```python Python theme={null}
  import requests
  import time

  API_BASE_URL = 'https://api.pictory.ai/pictoryapis'
  API_KEY = 'YOUR_API_KEY'

  PPT_URL = "https://pictory-static.pictorycontent.com/sample_ppt.pptx"

  def create_animated_ppt_video():
      try:
          print("Creating animated video from PowerPoint...")

          response = requests.post(
              f'{API_BASE_URL}/v2/video/storyboard/render',
              json={
                  'videoName': 'animated_ppt_video',
                  'scenes': [
                      {
                          'pptUrl': PPT_URL,
                          'animatePPT': True            # Enable AI slide animations
                      }
                  ],
                  'voiceOver': {
                      'enabled': True,
                      'aiVoices': [
                          {
                              'speaker': 'Brian',
                              'speed': 100,
                              'amplificationLevel': 0
                          }
                      ]
                  }
              },
              headers={
                  'Content-Type': 'application/json',
                  'Authorization': API_KEY
              }
          )
          response.raise_for_status()

          job_id = response.json()['data']['jobId']
          print(f"Job ID: {job_id}")

          # Poll for completion
          job_completed = False
          while not job_completed:
              status_response = requests.get(
                  f'{API_BASE_URL}/v1/jobs/{job_id}',
                  headers={'Authorization': API_KEY}
              )
              status_response.raise_for_status()

              status = status_response.json()['data']['status']
              print(f"Status: {status}")

              if status == 'completed':
                  job_completed = True
                  print(f"Video URL: {status_response.json()['data']['videoURL']}")
              elif status == 'failed':
                  raise Exception("Video creation failed")

              time.sleep(10)

      except requests.exceptions.RequestException as error:
          print(f"Error: {error}")
          raise

  if __name__ == '__main__':
      create_animated_ppt_video()
  ```
</CodeGroup>

## Multilingual PPT Video — Translate Decks at Render Time

<Note>
  **You do not need to translate your PowerPoint deck before submitting it.** Pass the `language` field with a target language code and Pictory generates the narration directly in that language, reading from your original slide text or speaker notes. One source deck can ship as videos in 14 different languages without you maintaining translated copies.
</Note>

Use the top-level `language` parameter to render the video in a language different from the one your deck is written in. The AI reads each slide (or speaker notes, if `useSpeakerNotes: true`) and generates narration directly in the target language — translation happens at render time.

**Example:** the request below submits an English-language PowerPoint deck but produces a German video.

<CodeGroup>
  ```javascript Node.js theme={null}
  {
    videoName: "german_ppt_video",
    language: "de",                        // Generate narration in German
                                           // (even if the deck is in English)
    scenes: [
      {
        pptUrl: "https://storage.example.com/presentation.pptx",
        animatePPT: true                   // Optional: add animations
      }
    ],
    voiceOver: {
      enabled: true,
      aiVoices: [{
        speaker: "Wilbur",                 // Default German voice
        speed: 100,
        amplificationLevel: 0
      }]
    }
  }
  ```

  ```python Python theme={null}
  {
      'videoName': 'german_ppt_video',
      'language': 'de',                       # Generate narration in German
                                              # (even if the deck is in English)
      'scenes': [
          {
              'pptUrl': 'https://storage.example.com/presentation.pptx',
              'animatePPT': True              # Optional: add animations
          }
      ],
      'voiceOver': {
          'enabled': True,
          'aiVoices': [{
              'speaker': 'Wilbur',            # Default German voice
              'speed': 100,
              'amplificationLevel': 0
          }]
      }
  }
  ```
</CodeGroup>

<Tip>
  To ship the same deck in multiple languages, submit one render request per target language with the same `pptUrl` and a different `language` value. Each render is independent — you can fan them out in parallel from your code.
</Tip>

### Supported Languages

| Code | Language          |
| ---- | ----------------- |
| `en` | English (default) |
| `zh` | Chinese           |
| `nl` | Dutch             |
| `fr` | French            |
| `de` | German            |
| `hi` | Hindi             |
| `it` | Italian           |
| `ja` | Japanese          |
| `ko` | Korean            |
| `mr` | Marathi           |
| `pt` | Portuguese        |
| `ru` | Russian           |
| `es` | Spanish           |
| `ta` | Tamil             |

## Understanding the Parameters

### Main Request Parameters

| Parameter   | Type   | Required | Description                                        |
| ----------- | ------ | -------- | -------------------------------------------------- |
| `videoName` | string | Yes      | A descriptive name for your video project          |
| `language`  | string | No       | Language for AI-generated narration. Default: `en` |
| `scenes`    | array  | Yes      | Array of scene objects                             |
| `voiceOver` | object | No       | Voice-over configuration                           |

### Scene Parameters

| Parameter         | Type    | Required | Description                                                                                       |
| ----------------- | ------- | -------- | ------------------------------------------------------------------------------------------------- |
| `pptUrl`          | string  | Yes      | Public URL to the PowerPoint file                                                                 |
| `animatePPT`      | boolean | No       | Enable AI-generated slide animations. Only valid with `pptUrl`. Default: `false`                  |
| `useSpeakerNotes` | boolean | No       | Use speaker notes for narration instead of slide text. Only valid with `pptUrl`. Default: `false` |

## Common Use Cases

### Animated with Speaker Notes

```javascript theme={null}
{
  videoName: "animated_with_notes",
  scenes: [{
    pptUrl: "https://storage.example.com/visual-deck.pptx",
    animatePPT: true,
    useSpeakerNotes: true
  }],
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Emma",
      speed: 100,
      amplificationLevel: 0
    }]
  }
}
```

**Result:** Animated slides with narration from speaker notes. The AI generates animation prompts while using your speaker notes for the voice-over.

### Multilingual Animated Presentation

```javascript theme={null}
{
  videoName: "french_animated_ppt",
  language: "fr",
  scenes: [{
    pptUrl: "https://storage.example.com/product-deck.pptx",
    animatePPT: true
  }],
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Celine",
      speed: 100,
      amplificationLevel: 0
    }]
  }
}
```

**Result:** The AI reads your slides and generates French narration with animated slide transitions.

### Japanese Training Video

```javascript theme={null}
{
  videoName: "japanese_training",
  language: "ja",
  scenes: [{
    pptUrl: "https://storage.example.com/training.pptx",
    useSpeakerNotes: true
  }],
  voiceOver: {
    enabled: true,
    aiVoices: [{
      speaker: "Mizuki",
      speed: 95,
      amplificationLevel: 0
    }]
  }
}
```

**Result:** Training video with Japanese narration generated from speaker notes.

## Feature Combinations

| `animatePPT` | `useSpeakerNotes` | `language` | Behavior                                                       |
| ------------ | ----------------- | ---------- | -------------------------------------------------------------- |
| `false`      | `false`           | `en`       | Standard PPT to video — slide text used as-is for narration    |
| `false`      | `true`            | `en`       | Speaker notes used for narration, no animations                |
| `true`       | `false`           | `en`       | AI generates animations + uses slide text for narration        |
| `true`       | `true`            | `en`       | AI generates animations only, speaker notes used for narration |
| `false`      | `false`           | `de`       | AI generates German narration from slide content               |
| `true`       | `false`           | `de`       | AI generates German narration + slide animations               |
| `true`       | `true`            | `de`       | AI generates animations, speaker notes used for narration      |

<Tip>
  When both `animatePPT` and `useSpeakerNotes` are `true`, the AI focuses on generating animation prompts and uses your speaker notes as the narration source rather than generating new text.
</Tip>

## Best Practices

<AccordionGroup>
  <Accordion title="Optimize Slides for Animation">
    Get the most out of AI animations:

    * **Clear Visual Layout**: Simple, well-structured slides produce better animations
    * **High Quality Images**: Use high-resolution images for smooth motion effects
    * **Minimal Text Overlay**: Slides with large visuals animate more effectively
    * **Consistent Design**: Similar slide designs produce cohesive animation styles
  </Accordion>

  <Accordion title="Choose the Right Language Voice">
    Match your voice to the language:

    * Use language-native AI voices for the best pronunciation
    * Browse available voices with the [Get Voiceover Tracks](/api-reference/voiceovers/get-voiceover-tracks) API
    * Test with a short presentation before converting a full deck
    * Adjust voice speed for the target language (some languages are naturally faster/slower)
  </Accordion>

  <Accordion title="When to Use Animations">
    `animatePPT` works best for:

    * **Image-heavy slides**: Photos, charts, and diagrams come alive with motion
    * **Marketing presentations**: Add visual energy to product decks
    * **Social media content**: Animated slides are more engaging for short-form video
    * **Training materials**: Motion helps maintain viewer attention

    Skip animations for:

    * **Text-heavy slides**: Motion can distract from reading
    * **Data tables**: Complex tables are better shown static
    * **Short presentations**: 2–3 slides may not benefit much from animation
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Standard PPT Narration" icon="microphone" href="/guides/presentation-to-video/powerpoint-ai-voiceover">
    Basic PowerPoint to video conversion
  </Card>

  <Card title="Speaker Notes" icon="note-sticky" href="/guides/presentation-to-video/powerpoint-speaker-notes">
    Use speaker notes for narration
  </Card>

  <Card title="Background Music" icon="music" href="/guides/advanced-features/background-music">
    Add music to your presentation video
  </Card>

  <Card title="Brand Settings" icon="palette" href="/guides/branding-customization/brand-settings">
    Apply consistent branding
  </Card>
</CardGroup>

## API Reference

For complete technical details, see:

* [Render Storyboard Video](/api-reference/videos/render-storyboard-video) - Full API specification
* [Create Storyboard Preview](/api-reference/videos/create-storyboard-preview) - Preview before rendering
* [Get Voiceover Tracks](/api-reference/voiceovers/get-voiceover-tracks) - List available AI voices
