> For the complete documentation index, see [llms.txt](https://docs.imerit.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.imerit.net/core-concepts/idle-time-detection-and-time-tracking.md).

# Idle Time Detection & Time Tracking

Ango Hub keeps track of the time annotators and reviewers spend on their tasks.

This page explains time tracking in the standard Ango Hub labeling editor and how to configure Idle Time Detection in your projects.

## Terminology

### Tabs and Windows

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FCriVZNA5zNMGUmog7zHZ%2Fimage.png?alt=media&amp;token=a9196af7-5991-4871-915f-c5d9f614005c" alt="Browser tabs and windows"><figcaption></figcaption></figure>

### Time Categories

There are two types of time shown in Ango Hub: *active* and *idle*.

| Type   | Description                                                                                                                                                                                               |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Active | Time while the activity timer is running, including the period between the last detected interaction and the idle timeout. Activity does not have to change an annotation.                                |
| Idle   | Time after the idle timeout has been reached, until activity resumes. A tab visibility change can also switch the timer to idle without waiting for the timeout; see the tab-switching limitations below. |

The editor detects mouse movement, mouse clicks, keyboard input, scrolling, touch interactions, and focus events within its page. Activity in another application or the browser's address bar does not count as activity in the editor.

Reading an asset, watching a video, or listening to audio without interacting with the page can reach the idle timeout. The timer measures detected activity, not whether you are making annotation changes.

{% hint style="info" %}
Active and idle durations are separate values. The idle timeout is a grace period: time before the threshold remains active time and is not reclassified as idle afterward.
{% endhint %}

## How Time is Tracked

Timing starts when a task loads in the editor. When you click *Save* <img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FdeNhVeiQI9iQqhxBsfPH%2Fimage.png?alt=media&amp;token=34a9ba0f-a9b6-4801-b149-538600ee6e95" alt="Save icon" data-size="line"> and the save succeeds, the active and idle time recorded since the last timer reset is added to the task's saved current-stage durations. The timer then resets and starts again.

When you submit a labeling task, or accept or reject a review task, the recorded durations are sent with the update. When the task moves to its next workflow stage, its current-stage durations are added to its totals and the current-stage counters reset to zero. Saving alone keeps the task in its current stage.

The *Skip* and *Skip & Unassign* actions also send the recorded durations with the task update.

{% hint style="info" %}
Leaving a task without saving, submitting, or skipping does not save the time recorded since the last save. Time from earlier successful saves is retained. You do not need to add or edit an annotation for a Save or Submit action to record time.
{% endhint %}

The green dot in the top right of the editor indicates that the activity timer is running:

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FjtyFxWqnfWAFbrzvtoiI%2Fimage.png?alt=media&amp;token=1bea44fb-1806-42ad-b823-2d35511fbb3d" alt="Green active-time indicator"><figcaption></figcaption></figure>

After no activity is detected for the project's *Idle Timeout* (300 seconds by default), active timing stops, idle timing begins, and the dot turns gray:

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FtczglgwImF8zIPh2ivtX%2Fimage.png?alt=media&amp;token=c9fbf61c-aef8-490a-a8b7-d56bc3dc24ed" alt="Gray idle-time indicator"><figcaption></figcaption></figure>

Detected activity resumes active timing. The indicator can take a fraction of a second to turn green again. The idle setting controls when timing changes; it does not display a separate inactivity dialog.

### Switching Tabs or Applications

When the timer is active, switching to another browser tab normally starts idle timing immediately, without the usual grace period. Returning to the task and interacting with the page resumes active timing.

Switching to another application is different if the task's browser tab remains visible: losing window focus alone does not immediately start idle timing. The normal idle timeout applies if the editor receives no further activity. Minimizing or otherwise hiding the page can produce a tab visibility change instead.

{% hint style="warning" %}
Not all background-tab time is guaranteed to be counted as idle. In the current client, switching tabs after the timer is already idle can restart active timing for up to one idle-timeout interval, even while the task tab is hidden. A tab switch immediately after another input event can also be missed, leaving the normal timeout to detect inactivity.
{% endhint %}

## Changing the Idle Time Threshold

To change when your project members are considered idle, navigate to **Settings > General** and set **Idle Timeout** in seconds. The field accepts values from **5 to 10,000 seconds**. The default for a new project is **300 seconds** (5 minutes).

{% hint style="info" %}
The Idle Timeout setting is available for standard Ango Hub projects. 3D MSFT projects do not show this setting.
{% endhint %}

<figure><img src="https://3895963154-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTcOUG6rfWxqGM0N4db2P%2Fuploads%2FG1qIuS99LiXhws6DpQ44%2Fimage.png?alt=media&amp;token=052afe69-5265-4780-a4fc-2bf99f763cc3" alt="Idle Timeout in project settings"><figcaption></figcaption></figure>

Click **Save** to apply the setting.

## Idle Detection Examples

These examples assume a **5-second idle timeout**, a task with no previously recorded time, and regular detected activity during each active period. Durations are approximate and omit loading, saving, and input-event delays. The tab-switch example assumes the visibility change is detected while the timer is active.

| Scenario                                                                                                                                                                        | Recorded durations                                                                                                                                                                 |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Work actively for 15 seconds, then save and leave.                                                                                                                              | Current stage: **15s active**, **0s idle**.                                                                                                                                        |
| Work actively for 15 seconds and save. Reopen and leave without saving. Reopen again, work actively for 10 seconds, and save.                                                   | Current stage: **25s active**, **0s idle**. The unsaved visit is not included.                                                                                                     |
| Work actively for 10 seconds, switch to another browser tab for 30 seconds, return and work actively for 10 seconds, then save.                                                 | Current stage: **20s active**, **30s idle**.                                                                                                                                       |
| Work actively for 10 seconds, do nothing in the visible task tab for 30 seconds, resume activity for 10 seconds, then save.                                                     | Current stage: **25s active**, **25s idle**. The first 5 seconds without activity count as active time.                                                                            |
| Work actively for 10 seconds and save. Reopen, interact with the page for 10 seconds without changing any annotations, then submit to the next stage.                           | Task total: **20s active**, **0s idle**. The new stage starts at zero.                                                                                                             |
| Work actively for 10 seconds, switch to another application for 30 seconds while the task tab remains visible and receives no input, resume activity for 10 seconds, then save. | Current stage: **25s active**, **25s idle**, including the 5-second grace period.                                                                                                  |
| Follow the previous scenario but submit instead of saving. Review actively for 5 seconds, then accept the review to advance to the next stage.                                  | Task total: **30s active**, **25s idle**. Stage history contains **25s active / 25s idle** for labeling and **5s active / 0s idle** for review. The new stage's counters are zero. |

## Inspecting time spent on tasks

Open a task and select **Task Info** in the right sidebar. Under **Task Information**, two tabs show saved durations:

* **Stage Duration:** Active and Idle time saved in the current stage.
* **Total Duration:** Active and Idle time accumulated from stages the task has already left. Time saved in the current stage is added to these totals when the task advances.

These values are not live counters. After saving, click the refresh icon next to **Task Information** to load the latest saved values. Unsaved time from the current session is not shown in these fields. Blur time is not displayed.

### Exporting Time Data

In an Ango-format export, `duration` is the current-stage active duration and `totalDuration` is the active duration accumulated across stages the task has already left. Stage-history entries contain the active duration for each recorded stage visit. These raw duration values are in **milliseconds**.

To include idle-time data, enable **Idle Durations** under **Fields > Include** in the export options. Enable **Stage History** as well if you need the per-visit breakdown. See [Exporting Annotations](/data/importing-and-exporting-annotations/exporting-annotations.md).

For CSV reports grouped by task, stage visit, assignee, or date, use [TPT Export](/plugins/first-party-ango-plugins/tpt-export.md). Its documentation explains the report columns and plugin-specific limitations.
