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

# Install Presenton

> Install Presenton with Docker, Docker Compose, the desktop app, or an NVIDIA GPU setup.

Choose the installation that matches where Presenton will run.

| Installation       | Best for                                               | Data location                        |
| ------------------ | ------------------------------------------------------ | ------------------------------------ |
| Docker Run         | The fastest self-hosted setup                          | A host folder mounted at `/app_data` |
| Docker Compose     | Repeatable servers and environment-based configuration | `./app_data` beside the Compose file |
| Desktop app        | A native app without managing containers               | The application data directory       |
| GPU-enabled Docker | Local AI workloads that use an NVIDIA GPU              | A host folder mounted at `/app_data` |

<Info>
  The default self-hosted URL is [http://localhost:5001](http://localhost:5001). Port `5001` on the host maps to port `80` in the container.
</Info>

## Option 1: Docker Run

Install Docker Desktop or Docker Engine, then start the current `v0.9.0-beta` image.

<Tabs>
  <Tab title="Linux and macOS">
    ```bash theme={null}
    mkdir -p app_data

    docker run -it --name presenton \
      --publish 5001:80 \
      --volume "./app_data:/app_data" \
      ghcr.io/presenton/presenton:v0.9.0-beta
    ```
  </Tab>

  <Tab title="Windows PowerShell">
    ```powershell theme={null}
    New-Item -ItemType Directory -Force app_data

    docker run -it --name presenton `
      --publish 5001:80 `
      --volume "${PWD}\app_data:/app_data" `
      ghcr.io/presenton/presenton:v0.9.0-beta
    ```
  </Tab>
</Tabs>

The versioned tag keeps this guide reproducible. Replace it with `ghcr.io/presenton/presenton:latest` when you intentionally want the newest published image.

### Publish only the ports you need

| Port mapping | Required when                                                    |
| ------------ | ---------------------------------------------------------------- |
| `5001:80`    | Always for the default browser, REST API, and MCP URL            |
| `1455:1455`  | Only when signing in with an existing ChatGPT/Codex subscription |

To use **Sign in with ChatGPT**, publish the OAuth callback port and select the Codex provider:

```bash theme={null}
docker run -it --name presenton \
  --publish 5001:80 \
  --publish 1455:1455 \
  --env LLM=codex \
  --env CODEX_MODEL=gpt-5.5 \
  --volume "./app_data:/app_data" \
  ghcr.io/presenton/presenton:v0.9.0-beta
```

The browser returns authentication to `http://localhost:1455/auth/callback`. Without `1455:1455`, ChatGPT/Codex sign-in cannot complete inside the Docker container. API-key providers do not need this extra port.

### Run in the background

Add `--detach` to the command, then manage the container with:

```bash theme={null}
docker logs --follow presenton
docker stop presenton
docker start presenton
```

### Use another host port

Change only the value before the colon. This example opens Presenton at `http://localhost:8080`:

```bash theme={null}
docker run -it --name presenton \
  --publish 8080:80 \
  --volume "./app_data:/app_data" \
  ghcr.io/presenton/presenton:v0.9.0-beta
```

## Option 2: Docker Compose

Clone the source repository when you want a repeatable deployment with a `.env` file and the repository's production profiles.

```bash theme={null}
git clone https://github.com/presenton/presenton.git
cd presenton
```

Create a `.env` file beside `docker-compose.yml`:

```dotenv theme={null}
PRESENTON_HTTP_HOST_PORT=5001
AUTH_USERNAME=admin
AUTH_PASSWORD=replace-with-a-long-password

LLM=openai
OPENAI_API_KEY=replace-with-your-key
OPENAI_MODEL=gpt-4.1

IMAGE_PROVIDER=pexels
PEXELS_API_KEY=replace-with-your-key
CAN_CHANGE_KEYS=false
```

Start the production service:

```bash theme={null}
docker compose up production
```

Run it in the background with `docker compose up --detach production`. To use port `8080` without editing `.env`:

```bash theme={null}
PRESENTON_HTTP_HOST_PORT=8080 docker compose up production
```

The repository provides four services:

| Service           | Purpose                                        |
| ----------------- | ---------------------------------------------- |
| `production`      | Normal self-hosted deployment                  |
| `production-gpu`  | Production deployment with NVIDIA GPU access   |
| `development`     | Source-mounted development environment         |
| `development-gpu` | Development environment with NVIDIA GPU access |

<Note>
  Compose already publishes `1455:1455` for the Codex OAuth callback. This is what lets users select **Sign in with ChatGPT** and use an eligible existing ChatGPT/Codex subscription without an OpenAI API key.
</Note>

## Option 3: Desktop app

Use the desktop application when you want a native installation and do not need to expose the REST API or MCP server to other tools.

| Platform            | Package          |
| ------------------- | ---------------- |
| macOS Apple Silicon | `.dmg` for arm64 |
| Windows             | `.exe` for x64   |
| Linux               | `.deb` for x64   |

<Card title="Install the desktop app" icon="display" href="/open-source/v0.9.0-beta/tutorials/install-desktop-app">
  Download the correct package, complete the operating-system prompts, and connect a provider.
</Card>

<Warning>
  The Electron desktop app does not expose the MCP server. Use Docker or another web deployment when you need MCP or a remotely accessible API.
</Warning>

## Option 4: NVIDIA GPU

Install the NVIDIA driver and NVIDIA Container Toolkit, confirm `docker run --gpus all` works, then use either the GPU Compose service or `--gpus=all`.

```bash theme={null}
docker run -it --name presenton \
  --gpus=all \
  --publish 5001:80 \
  --env LLM=ollama \
  --env OLLAMA_MODEL=llama3.2:3b \
  --volume "./app_data:/app_data" \
  ghcr.io/presenton/presenton:v0.9.0-beta
```

Or with Compose:

```bash theme={null}
docker compose up production-gpu
```

GPU access helps compatible local workloads; it does not make hosted API providers run locally.

## Complete the first-run setup

<Steps>
  <Step title="Open Presenton">
    Visit [http://localhost:5001](http://localhost:5001), or the host port you selected. For a remote server, use its HTTPS address.
  </Step>

  <Step title="Choose the text model">
    Select the provider that creates outlines, slide content, and AI edits. You can configure it in Settings or with environment variables.
  </Step>

  <Step title="Choose images and search">
    Connect a stock or generated-image provider. Enable web search only when the presentation needs current public information.
  </Step>

  <Step title="Verify persistence">
    Create a small presentation, restart the container, and confirm the presentation remains available. If it disappears, inspect the `/app_data` mount.
  </Step>

  <Step title="Secure shared deployments">
    Configure the single admin account, use HTTPS through a reverse proxy, and keep secrets in a protected `.env` file or secret manager.
  </Step>
</Steps>

## Verify the installation

```bash theme={null}
docker ps --filter name=presenton
docker logs --tail 100 presenton
```

Open the UI and generate a short two-slide test deck. A successful test confirms that the application, selected text provider, image configuration, and persistent storage are working together.

<Warning>
  Keep the `/app_data` mount when replacing or upgrading a container. Starting a new container without it creates an empty instance and makes the existing presentations and settings appear missing.
</Warning>

<CardGroup cols={2}>
  <Card title="Configure the instance" icon="sliders" href="/open-source/v0.9.0-beta/configuration">
    Add providers, authentication, search, memory, and storage settings.
  </Card>

  <Card title="Create your first presentation" icon="presentation-screen" href="/open-source/v0.9.0-beta/tutorials/create-first-presentation">
    Generate, edit, and export a complete deck.
  </Card>
</CardGroup>

<Card title="Configure by goal" icon="list-check" href="/open-source/v0.9.0-beta/configuration/recipes">
  See exactly which ports and variables enable ChatGPT/Codex sign-in, local models, images, web search, API access, MCP, authentication, and external storage.
</Card>
