> ## 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.

# Configure by goal

> Choose a feature, then set the exact ports and environment variables it requires.

Use this page when you know what you want Presenton to do but do not yet know which settings make it happen.

## Quick decision table

| Goal                               | Required ports                                         | Main settings or actions                                           |
| ---------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------ |
| Open the browser application       | `5001:80` by default                                   | Mount `/app_data`; select a text provider                          |
| Use a ChatGPT/Codex subscription   | `5001:80` and `1455:1455`                              | `LLM=codex`, `CODEX_MODEL`; complete **Sign in with ChatGPT**      |
| Use an API-key provider            | `5001:80`                                              | `LLM`, provider API key, and provider model                        |
| Use the REST API                   | `5001:80`                                              | `AUTH_USERNAME`, `AUTH_PASSWORD`; HTTP Basic auth                  |
| Use MCP                            | `5001:80`                                              | Admin credentials, login bearer token, client URL ending in `/mcp` |
| Use Ollama on the Docker host      | `5001:80`; Ollama must be reachable from the container | `LLM=ollama`, `OLLAMA_URL`, `OLLAMA_MODEL`                         |
| Enable stock or generated images   | `5001:80`                                              | `IMAGE_PROVIDER` plus its credentials or endpoint                  |
| Generate without images            | `5001:80`                                              | `DISABLE_IMAGE_GENERATION=true`                                    |
| Enable web research                | `5001:80`                                              | `WEB_GROUNDING=true`, `WEB_SEARCH_PROVIDER`, optional provider key |
| Lock provider settings             | `5001:80`                                              | `CAN_CHANGE_KEYS=false`                                            |
| Persist presentations and settings | No extra port                                          | Mount durable storage at `/app_data`                               |
| Use an external database           | Database must be reachable from the container          | `DATABASE_URL`, `MIGRATE_DATABASE_ON_STARTUP`                      |
| Disable anonymous telemetry        | No extra port                                          | `DISABLE_ANONYMOUS_TRACKING=true`                                  |

## Use an existing ChatGPT or Codex subscription

Choose the Codex provider when you want to sign in with a free or paid ChatGPT account instead of supplying an OpenAI API key.

The OAuth redirect is fixed to:

```text theme={null}
http://localhost:1455/auth/callback
```

Therefore Docker must publish both ports:

* `5001:80` for the Presenton browser application.
* `1455:1455` for the ChatGPT/Codex OAuth callback.

```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
```

Then open Presenton, go to the text-provider settings, select **Sign in with ChatGPT**, complete authentication in the browser, and choose a supported Codex model.

<Warning>
  If `1455:1455` is missing, the OpenAI sign-in page may open, but the redirect cannot reach the callback server inside the container. This port is not needed for normal API-key providers.
</Warning>

The current `v0.9.0-beta` application accepts `gpt-5.5`, `gpt-5.4`, `gpt-5.4-mini`, and `gpt-5.3-codex-spark` as Codex model identifiers. Availability can still depend on the signed-in account.

### Docker Compose

The repository's `production`, `production-gpu`, `development`, and `development-gpu` services already map `1455:1455`.

```dotenv theme={null}
LLM=codex
CODEX_MODEL=gpt-5.5
```

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

### Remote Docker host

Because the browser redirect targets `localhost:1455`, `localhost` means the machine running the browser. When Presenton runs on another host, use an approved network arrangement that makes both Presenton and the callback available locally. For an SSH-accessible server, one option is local port forwarding:

```bash theme={null}
ssh -L 5001:localhost:5001 -L 1455:localhost:1455 user@presenton-server
```

While the tunnel is active, open `http://localhost:5001` and complete the ChatGPT sign-in from that browser session.

<Note>
  Port `1455` is for Codex OAuth, not MCP. MCP uses the normal Presenton web port and `/mcp` path.
</Note>

## Use OpenAI with an API key

This path uses API billing and does not require port `1455`.

```bash theme={null}
docker run -it --name presenton \
  --publish 5001:80 \
  --env LLM=openai \
  --env OPENAI_API_KEY=YOUR_OPENAI_API_KEY \
  --env OPENAI_MODEL=gpt-4.1 \
  --env IMAGE_PROVIDER=dall-e-3 \
  --env DALL_E_3_QUALITY=standard \
  --env CAN_CHANGE_KEYS=false \
  --volume "./app_data:/app_data" \
  ghcr.io/presenton/presenton:v0.9.0-beta
```

`CAN_CHANGE_KEYS=false` hides and locks provider credentials in the UI. Leave it `true` or unset for a personal instance where settings should remain editable.

## Use Google for text and images

One Google API key can supply the Gemini text and image modes:

```dotenv theme={null}
LLM=google
GOOGLE_API_KEY=replace-with-your-key
GOOGLE_MODEL=models/gemini-2.0-flash
IMAGE_PROVIDER=gemini_flash
CAN_CHANGE_KEYS=false
```

Use `LLM=vertex` and the Vertex-specific authentication settings when you need Google Cloud project controls instead of the direct Gemini API.

## Run text generation locally with Ollama

Run Ollama on the Docker host, pull the model there, and point Presenton at the host gateway:

```bash theme={null}
ollama pull llama3.2:3b
```

```dotenv theme={null}
LLM=ollama
OLLAMA_URL=http://host.docker.internal:11434
OLLAMA_MODEL=llama3.2:3b
START_OLLAMA=false
```

`START_OLLAMA=false` means Presenton does not start its own Ollama service. If `host.docker.internal` is unavailable on your Linux Docker setup, provide an equivalent reachable host gateway or run both services on the same Docker network.

To avoid sending image prompts to an external provider:

```dotenv theme={null}
DISABLE_IMAGE_GENERATION=true
```

For a more complete local visual workflow, configure ComfyUI instead of disabling images.

## Use local text with stock images

Text and images do not need to use the same provider:

```dotenv theme={null}
LLM=ollama
OLLAMA_URL=http://host.docker.internal:11434
OLLAMA_MODEL=llama3.2:3b

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

This keeps text generation local while sending image searches to Pexels.

## Enable current-information web research

For supported OpenAI, Google, and Anthropic configurations, `auto` uses the provider's native search behavior:

```dotenv theme={null}
WEB_GROUNDING=true
WEB_SEARCH_PROVIDER=auto
WEB_SEARCH_MAX_RESULTS=5
```

For other text providers, choose an external search provider explicitly:

```dotenv theme={null}
WEB_GROUNDING=true
WEB_SEARCH_PROVIDER=searxng
SEARXNG_BASE_URL=http://searxng:8080
WEB_SEARCH_MAX_RESULTS=5
```

Set `WEB_GROUNDING=false` when current public information is unnecessary or external research is not allowed.

## Enable the REST API and MCP

Both interfaces use the normal web port. Configure the admin account first:

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

* REST API: `http://localhost:5001/api/v1`, authenticated with HTTP Basic.
* MCP: `http://localhost:5001/mcp`, authenticated with a bearer token returned by `/api/v1/auth/login`.

No additional MCP port is required. The Electron desktop app does not expose MCP.

<CardGroup cols={2}>
  <Card title="Generate with the API" icon="brackets-curly" href="/open-source/v0.9.0-beta/tutorials/generate-with-api">
    Upload documents and generate PPTX or PDF output over REST.
  </Card>

  <Card title="Connect MCP" icon="plug" href="/open-source/v0.9.0-beta/tutorials/connect-mcp">
    Request a bearer token and configure local or remote clients.
  </Card>
</CardGroup>

## Improve document extraction

LiteParse defaults are suitable for most documents:

```dotenv theme={null}
LITEPARSE_DPI=120
LITEPARSE_NUM_WORKERS=1
```

Increase `LITEPARSE_DPI` when scanned or image-heavy documents need clearer OCR. Increase workers only when the host has enough CPU and memory for concurrent parsing.

## Use an external database

Without `DATABASE_URL`, Presenton uses SQLite under `/app_data`. For an external database:

```dotenv theme={null}
DATABASE_URL=postgresql://presenton:password@postgres:5432/presenton
MIGRATE_DATABASE_ON_STARTUP=true
```

The database hostname must be reachable from the container. Continue mounting `/app_data`; presentations, uploads, templates, exports, authentication state, and memory are not all replaced by the external database.

## Apply configuration changes

Environment changes require a container restart or recreation:

```bash theme={null}
docker compose up --detach --force-recreate production
docker compose logs --tail 100 production
```

After every provider or networking change, generate a short test presentation and verify the browser, API, export, and MCP paths that your deployment intends to support.
