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

# Custom Dashboards

> Create personalized dashboards to organize and monitor the metrics that matter most

Custom dashboards let you build focused views of your experiment data. Instead of scrolling through every metric, you can curate sections with only the charts, images, and files you care about.

## Overview

Dashboards are created at the **project level** and are shared across your organization. Each dashboard is organized using **folders**, **sections**, and **widgets**:

* **Folders** — Optional top-level containers that can hold sections, widgets, or both.
* **Sections** — Collapsible containers that hold widgets. Sections can live at the top level or inside a folder.
* **Widgets** — The individual visualizations (line charts, histograms, images, videos, audio, console logs). Widgets can live inside sections or directly inside folders.

<img src="https://mintcdn.com/trainy/110C0XtRepKYeipL/images/pluto/dashboard-example.png?fit=max&auto=format&n=110C0XtRepKYeipL&q=85&s=5e91a70e71e0f9ab5397a598479a6cbd" alt="Dashboard example" width="1858" height="1660" data-path="images/pluto/dashboard-example.png" />

## Creating a Dashboard

1. Navigate to any project's **Compare** tab
2. Click the **Dashboards** dropdown in the toolbar
3. Select **Create New Dashboard**
4. Enter a name for your dashboard and click **Create**

You can also import an existing dashboard configuration via the **Import JSON** tab. Once created, your dashboard appears in the Dashboards dropdown. Switch between the default **Charts** view and any custom dashboard at any time.

## Editing a Dashboard

Click **Edit Dashboard** to enter edit mode. In edit mode you can:

* Add, remove, and reorder sections via **drag and drop** — grab the grip handle on any section header and drag it to a new position. A blue drop indicator shows where the section will be placed.
* Add widgets to sections
* **Copy and paste widgets** — Right-click any widget to access **Copy Widget** in the context menu. A **Paste Widget** button then appears in section headers, letting you duplicate widgets across sections.
* **Move widgets** — Right-click any widget and select **Move to...** to move it to a different section. The submenu lists all non-dynamic sections, including those inside folders.
* Choose between **Grid** and **Free** layout modes
* **Save** or **Cancel** your changes

### Auto-Save and Draft Recovery

Dashboard edits are automatically saved as drafts to your browser. If you navigate away with unsaved changes, a confirmation dialog warns you before leaving. If you close the tab accidentally, your draft is preserved — a recovery dialog appears the next time you enter edit mode, letting you restore your work.

<img src="https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/images/pluto/leave-unsaved-dashboard.png?fit=max&auto=format&n=l_Z-YzGUiwLATp8A&q=85&s=a54771cfa7420216525b029a56250603" alt="Leave Unsaved Dashboard Changes" width="1290" height="354" data-path="images/pluto/leave-unsaved-dashboard.png" />

<img src="https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/images/pluto/restore-unsaved-dashboard.png?fit=max&auto=format&n=l_Z-YzGUiwLATp8A&q=85&s=313f7d082524be47c716dfd578e5f75b" alt="Restore Unsaved Dashboard Changes" width="1290" height="354" data-path="images/pluto/restore-unsaved-dashboard.png" />

### Concurrency Control

When editing a dashboard, Pluto polls for remote changes every 30 seconds. If another user modifies the dashboard while you are editing, a stale warning appears with two options:

* **Save as new** — Save your changes as a new dashboard
* **Override** — Overwrite the remote changes with your version

## Folders

Folders provide an optional top-level grouping layer for organizing related content. A folder can contain child sections, widgets, or both. Sections do not need to be inside folders — they can also live at the top level of a dashboard on their own. Similarly, folders can hold widgets directly without any child sections.

### Creating a Folder

Click **New Folder** in the dashboard toolbar to create a folder. Give it a name and it will appear as a top-level container with a folder icon and a tinted border to distinguish it from regular sections.

<img src="https://mintcdn.com/trainy/110C0XtRepKYeipL/images/pluto/create-folder-dialog.png?fit=max&auto=format&n=110C0XtRepKYeipL&q=85&s=9ccbb19ab398e21329cca05dbca86ee9" alt="Create folder dialog" width="862" height="522" data-path="images/pluto/create-folder-dialog.png" />

<img src="https://mintcdn.com/trainy/110C0XtRepKYeipL/images/pluto/empty-folder.png?fit=max&auto=format&n=110C0XtRepKYeipL&q=85&s=719ea7707de9aa5828c976823c80eb45" alt="Empty folder" width="1714" height="512" data-path="images/pluto/empty-folder.png" />

### Adding Sections to Folders

There are two ways to add sections to a folder:

* **Create a new section** — Click the **Add Section** button to create a new section directly inside the folder.
* **Move an existing section** — Move a top-level section or a section from another folder into the folder. You can do this in two ways:
  * **Drag and drop** — Drag any section by its grip handle and drop it into the folder. An indicator shows the drop target.
  * **Move to... menu** — Use the ••• dropdown menu on a section header and select **Move to...** to pick the destination folder.

### Adding Widgets to Folders

Widgets can be added directly to a folder without needing a child section. There are two ways:

* **Create a new widget** — Click **Add Widget** on the folder itself to open the widget type picker.
* **Move an existing widget** — Use the ••• dropdown menu on an existing widget and select **Move to...** to pick the folder as the destination.

## Sections

Sections are collapsible containers that hold widgets. They can live at the top level of a dashboard or inside a folder. Each section has a name, can be collapsed or expanded, and can optionally use a [dynamic pattern](#dynamic-content) to auto-populate its widgets.

### Creating a Section

Click **New Section** to create a section. Each section has a name that appears in the section header.

<img src="https://mintcdn.com/trainy/110C0XtRepKYeipL/images/pluto/create-section-dialog.png?fit=max&auto=format&n=110C0XtRepKYeipL&q=85&s=9ad1568339fe4de084b6e8ba736fa759" alt="Create section dialog" width="1358" height="630" data-path="images/pluto/create-section-dialog.png" />

<img src="https://mintcdn.com/trainy/110C0XtRepKYeipL/images/pluto/folder-with-section.png?fit=max&auto=format&n=110C0XtRepKYeipL&q=85&s=9af5d6eb0b91ce65193a8f9aded9883f" alt="Section inside a folder" width="1710" height="822" data-path="images/pluto/folder-with-section.png" />

### Adding Widgets to Sections

There are two ways to add widgets to a section:

* **Create a new widget** — Click **Add Widget** inside the section to open the widget type picker.
* **Move an existing widget** — Use the ••• dropdown menu on an existing widget and select **Move to...** to pick the section as the destination.

## Widgets

Widgets are the individual visualizations inside sections or folders. There are two types of widgets: **Metrics** and **Files**.

### Creating a Widget

Click **Add Widget** inside any section or folder to open the widget type picker:

<img src="https://mintcdn.com/trainy/UWUvH-32rxkx62eZ/images/pluto/add-widget-dialog.png?fit=max&auto=format&n=UWUvH-32rxkx62eZ&q=85&s=c9fb80a3dfd63a5565608c474d100f20" alt="Add widget dialog" width="1280" height="800" data-path="images/pluto/add-widget-dialog.png" />

### Metrics Widgets

Select **Metrics** to create a line chart widget. You can:

* **Select multiple metrics** to plot them on a single chart — each metric gets a distinct dash pattern for differentiation
* **Search** for metrics using fuzzy text search or glob patterns (e.g., `train/*`)
* Switch to **Regex** mode for precise pattern matching
* Configure the **X-Axis** (Step, Relative Time, Absolute Time, or any custom metric), **Aggregation** (Last, Min, Max, Mean), and **Y-Axis Scale** (Linear or Log)

<img src="https://mintcdn.com/trainy/UWUvH-32rxkx62eZ/images/pluto/add-metric-widget.png?fit=max&auto=format&n=UWUvH-32rxkx62eZ&q=85&s=b55faa46c77f730d501b9323f6aa8a47" alt="Add metric widget" width="1280" height="800" data-path="images/pluto/add-metric-widget.png" />

When you select multiple metrics, each one is differentiated using distinct **dash patterns** (solid, dashed, dotted, etc.), making it easy to distinguish between them even in grayscale. This is useful for comparing known, related metrics (e.g., `train/loss` and `val/loss` on the same axis).

Manually selected metrics are **static** — the chart always shows exactly the metrics you picked, regardless of what new data appears. For automatic discovery of new metrics, see [Dynamic Content](#dynamic-content) below.

### File Widgets

Select **Files** to add widgets for non-numeric data:

* **Histograms** — Distribution visualizations with step navigation
* **Images** — Training visualizations, sample outputs, etc.
* **Videos** — Recorded training episodes or generated content
* **Audio** — Audio samples or generated speech
* **Console Logs** — Stdout/stderr from your runs with search and ANSI color support

### Searching Widgets

Use the search bar at the top of the dashboard to filter widgets by name. Matches against widget titles and metric names with substring matching.

<img src="https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/images/pluto/dashboard-widget-search.png?fit=max&auto=format&n=l_Z-YzGUiwLATp8A&q=85&s=6fffe67f74132fb5958a6de8d22399b4" alt="Dashboard widget search" width="2218" height="1210" data-path="images/pluto/dashboard-widget-search.png" />

## Dynamic Content

Sections and widgets can be made **dynamic**, meaning they use a glob or regex pattern to automatically discover and display matching data. When new metrics or files appear that match the pattern, they are included automatically.

### Dynamic Sections

Toggle **Dynamic section** when creating a section to auto-populate it with widgets from a pattern. A dynamic section creates **one widget per match**, automatically choosing the correct widget type for each.

<img src="https://mintcdn.com/trainy/UWUvH-32rxkx62eZ/images/pluto/dynamic-section-dialog.png?fit=max&auto=format&n=UWUvH-32rxkx62eZ&q=85&s=a432b5664041a0984af532701b810ace" alt="Dynamic section dialog" width="1280" height="800" data-path="images/pluto/dynamic-section-dialog.png" />

Dynamic sections are **cross-data-type** — a single pattern can match both metrics and files. For example, suppose you have the following logged data under the `data/` prefix:

* `data/loss` (metric)
* `data/accuracy` (metric)
* `data/sample_audio` (audio file)
* `data/confusion_matrix` (histogram)
* `data/predictions` (video)

A dynamic section with the pattern `data/*` will create **5 separate widgets** — one for each match — automatically choosing the correct widget type (line chart, audio player, histogram, video player) for each.

As new data appears under the matched pattern, the section updates automatically. For example, if a new run logs `data/f1_score`, a 6th widget appears without any manual configuration.

### Dynamic Widgets

When you use a glob pattern like `train/*` in a widget, the widget becomes **dynamic** — it automatically includes any matching data on a single widget. Unlike manually selecting multiple metrics (which is static), a dynamic widget will pick up new data as it appears.

<img src="https://mintcdn.com/trainy/UWUvH-32rxkx62eZ/images/pluto/dynamic-widget-pattern.png?fit=max&auto=format&n=UWUvH-32rxkx62eZ&q=85&s=70b829e98167340ae42e30c285c452e9" alt="Dynamic widget pattern" width="1482" height="1016" data-path="images/pluto/dynamic-widget-pattern.png" />

For example, suppose you have 5 metrics, `train/loss1` through `train/loss5`, logged across your runs. A dynamic Metrics widget with the pattern `train/*` will plot all 5 metrics on **one chart**. If a new metric like `train/loss6` is logged, it is automatically added to the same chart when the corresponding run is selected as visible.

Because widgets are separated by data type, a dynamic Metrics widget only matches numeric time-series data. If you also have files under the same prefix, you would need a separate dynamic Files widget to display those.

### Dynamic Sections vs Dynamic Widgets

Both use glob/regex patterns to automatically include matching data, but they differ in how matches are displayed:

|                | Dynamic Section                               | Dynamic Widget                               |
| -------------- | --------------------------------------------- | -------------------------------------------- |
| **Layout**     | One widget **per match** (separate charts)    | All matches in **one widget** (single chart) |
| **Data types** | Cross-type — metrics and files in one section | Single type — metrics or files, not both     |
| **Use case**   | Overview of everything under a prefix         | Comparing related metrics on one axis        |

**Example:** You have `train/loss`, `train/accuracy`, `train/sample_image`, and `train/audio_clip`.

* A **dynamic section** with `train/*` creates **4 widgets** — a line chart for loss, a line chart for accuracy, an image widget, and an audio widget
* A **dynamic Metrics widget** with `train/*` creates **1 chart** with loss and accuracy plotted together (the image and audio are not shown — you'd need a separate dynamic Files widget for those)

## Constraints

**Folders**

* Folders **cannot be nested** — you cannot place a folder inside another folder.
* Folders **cannot be dynamic** — only sections can use dynamic patterns to auto-populate widgets.

**Folders and Sections**

* The dashboard search bar only searches **widgets** — folders and sections cannot be searched by name.

**Widgets**

* Widgets **cannot be dragged** outside their parent section or folder. To move a widget to a different section or folder, use the ••• dropdown menu and select **Move to...**.
* Each line chart widget has a configurable **max series** limit (default: 500). When exceeded, a warning is displayed instead of the chart. This can be adjusted in the [line chart settings](/pluto/visualizations/lines#performance).

## Saving and Loading

Click **Save** to persist your dashboard. Dashboards are saved per-project and shared across all members of your organization. Anyone with access to the project can view and edit dashboards.

Switch between dashboards using the **Dashboards** dropdown in the toolbar.

Click **Charts** to return to the default view showing all metrics grouped automatically.

## Exporting a Dashboard

Click the dashboard menu and select **Export JSON** to download the full dashboard configuration as a JSON file. Share exported JSON files with teammates or keep them as backups. To import, use the **Import JSON** tab when creating a new dashboard.

<img src="https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/images/pluto/dashboard-export-menu.png?fit=max&auto=format&n=l_Z-YzGUiwLATp8A&q=85&s=50dc80613162b10f9055d323cb774777" alt="Dashboard export menu" width="195" height="110" data-path="images/pluto/dashboard-export-menu.png" />
