> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://summarize.martino.im/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://summarize.martino.im/_mcp/server.

# Webapp

The Streamlit GUI runs at `http://localhost:8501` and provides a point-and-click interface to all summarizer features.

```bash
python -m streamlit run app.py
```

## Supported Inputs

| Type        | Examples                                                                        |
| ----------- | ------------------------------------------------------------------------------- |
| Video files | `.mp4`, `.mp3`, `.wav`, `.m4a`, `.webm`                                         |
| Text files  | `.txt`, `.md`, `.vtt`, `.srt`, `.csv`, `.log`, `.rst`, `.html`, `.xml`, `.json` |
| URLs        | YouTube, Instagram, TikTok, Twitter/X, Reddit, Facebook, Google Drive, Dropbox  |

Text files bypass audio processing entirely and go straight to summarization.

After running a source, switch between **OUTPUT** and **TRANSCRIPT**. The transcript tab shows the complete cached transcript when available (not the passages selected by JEV). **DOWNLOAD**, **COPY TO CLIPBOARD**, and **PUBLISH AND SHARE WITH TINYPASTE** use whichever tab is selected. If no transcript is available for a result, the transcript actions are hidden. Summaries restored from disk do not include their transcripts.

## Job Lifecycle

Each run executes on a background thread, so rerunning the page replays progress instead of restarting the work. Finished runs are stored in history, rendered in the summary panel, and can be copied, downloaded, or published.

```mermaid
stateDiagram-v2
  [*] --> Idle
  Idle --> Running: start thread
  Running --> Running: log, and replay on rerun
  Running --> Done: summary returned
  Running --> Failed: exception
  Done --> Panel: store, history, render
  Failed --> Panel: show traceback
  Panel --> Idle: copy, download, or publish
```

## Sidebar Controls

* **Provider** — Choose from configured providers in `summarizer.yaml`
* **Prompt type** — Select summary style from `prompts.json`
* **Chunk size** — Characters per text chunk (minimum 1000)
* **Playback speed** — Speed for audio preprocessing or visual-mode video (reduces transcription cost, may reduce accuracy)
* **Language** — Auto, English, Spanish, French, German, Italian, Portuguese, Chinese, Japanese, Korean
* **Transcription** — Cloud Whisper or Local Whisper (Whisper-based)
* **Visual mode** — Toggle video-direct mode
* **Use JEV prefiltering** — Reveals the scoring provider and **I want to include only…** / **I want to exclude…** fields. See [JEV Prefiltering](jev-prefiltering).

## History

The sidebar keeps the last 10 summaries. By default, history is **in-memory only** and is lost on page refresh.

Persist summaries to disk so they survive refreshes and container restarts:

```yaml
defaults:
  keep-history: true
  output-dir: summaries
```

Or set `SUMMARIZER_KEEP_HISTORY=true` when the YAML key is omitted (Docker Compose does this by default).

Docker deployments copy `summarizer.docker.yaml`, which enables `keep-history` out of the box. Summaries are written to `./summaries/` when using the default bind mount.

## Mermaid Diagrams

When a summary contains ` ```mermaid ` blocks, the webapp renders them as interactive diagrams with:

* **Wheel zoom** — Scroll to zoom in/out
* **Drag pan** — Click and drag to move around
* **Fullscreen** — Expand to full screen
* **Theme-aware** — Adapts to dark/light mode

## Clipboard

Copy the selected output or full cached transcript to the system clipboard with a single button. Works in both secure and non-secure browser contexts.

## Themes

Switch between **Dark**, **Light**, and **System** modes. The theme applies to the entire UI including Mermaid diagrams.