---
title: "Create Presentations from CSV using AI"
description: "Step-by-step guide to generating presentations from a CSV file"
---

In this tutorial, we will generate personalized student report presentations using self hosted Presenton's API and a Python script.

This tutorial extends [Generate a PPT via API in 5 Minutes](./generate-presentation-over-api) and shows you how to automate the creation of personalized student report presentations from a CSV file using Python.

So, do check it before continuing with this and make sure you have Presenton running locally or any server and you are able to generate presentations with it.

---

## 1. Prepare Your CSV File

Save your student data as `students.csv`:

```csv
Name,Final Grade,ECA Participation,Sports Involvement,Quiz Scores,Class Behavior,Comment
Anaya Sharma,88,High,Moderate,92,Excellent,"Balanced performer with high curiosity"
Rohan Mehta,73,Low,None,75,Good,"Needs motivation beyond academics"
Meera Kapoor,94,Moderate,High,96,Excellent,"Academic excellence and team spirit"
Aarav Patel,62,None,None,58,Average,"Struggling across areas, needs focused help"
```

---

## 2. Install Python Requirements

You’ll need the `requests` and `pandas` libraries:

```bash
pip install requests pandas
```

---

## 3. Write the Python Script

Let’s build the script step by step.

### a. Import Libraries

```python
import os
import pandas as pd
import requests
```

### b. Creat presentations directory

```python
os.makedirs('presentations', exist_ok=True)
```

### c. Load the CSV

```python
df = pd.read_csv("students.csv")
```

### d. Define a Function to Build the Prompt

```python
def build_prompt(row):
    return (
        f"Student Name: {row['Name']}\n"
        f"Final Grade: {row['Final Grade']}\n"
        f"ECA Participation: {row['ECA Participation']}\n"
        f"Sports Involvement: {row['Sports Involvement']}\n"
        f"Quiz Scores: {row['Quiz Scores']}\n"
        f"Class Behavior: {row['Class Behavior']}\n"
        f"Teacher's Comment: {row['Comment']}\n\n"
        "Generate a parent-friendly presentation summarizing this student's academic and extracurricular performance, "
        "highlighting strengths, areas for improvement, and any special notes from the teacher."
    )
```

### e. Loop Over Each Student and Generate a Presentation

```python
for idx, row in df.iterrows():
    print(f"Generating presentation for {row['Name']}")
    prompt = build_prompt(row)
    data = {
        "prompt": prompt,
        "n_slides": "8",
        "language": "English",
        "theme": "light",
        "export_as": "pdf"
    }
    response = requests.post(
        "http://localhost:5000/api/v1/ppt/generate/presentation",
        data=data
    )
    if response.ok:
        result = response.json()
        print("Downloading presentation...")
        # Prepend the host to the path
        download_url = f"http://localhost:5000{result['path']}"
        filename = f"presentations/{result['path'].split('/')[-1]}"
        # Download and save the file
        file_response = requests.get(download_url)
        if file_response.ok:
            with open(filename, 'wb') as f:
                f.write(file_response.content)
            print(f"Presentation for {row['Name']} saved as {filename}")
        else:
            print(f"Failed to download presentation for {row['Name']}: {file_response.status_code}")
    else:
        print(f"Failed to generate presentation for {row['Name']}: {response.text}")
```

Generated presentations will be saved in `presentations` directory.

You may change the URL `http://localhost:5000` to the URL of your Presenton instance.

---

## 4. Run the Script

Save your script as `generate_reports.py` and run:

```bash
python generate_reports.py
```

Each student will get a personalized presentation, and you’ll see the download path for each file in your terminal.

---

## 5. How It Works

- The script reads each row from your CSV.
- It builds a detailed prompt for Presenton’s API (see [API Reference](./generate-presentation-over-api)).
- It sends a POST request to generate a presentation for each student.
- The API returns a download path for each generated PPTX.
- The presentation file is downloaded and saved in `presentations` folder.

---

## 6. Next Steps

- You can customize the prompt or number of slides as needed.
- For more on API options, see [Generate a PPT via API in 5 Minutes](./generate-presentation-over-api).
- For advanced configuration (e.g., using Ollama or GPU), see [Environment Variables](../configurations/environment-variables), [Using GPU](../configurations/using-gpu), and [Using Ollama Models](../configurations/using-ollama-models).

<Info>
  Need help? See the [full documentation](./index) or open an issue on GitHub.
</Info>