diff --git a/invisible/.vitepress/config.mts b/invisible/.vitepress/config.mts index f343e0b3e..9b68401e4 100644 --- a/invisible/.vitepress/config.mts +++ b/invisible/.vitepress/config.mts @@ -127,6 +127,7 @@ let theme_config_additions = { items: [ { text: "Projects", link: "/pupil-cloud/projects/" }, { text: "Workspaces", link: "/pupil-cloud/workspaces/" }, + { text: "Offset Correction", link: "/pupil-cloud/offset-correction/" }, ], }, { @@ -145,6 +146,10 @@ let theme_config_additions = { text: "Face Mapper", link: "/pupil-cloud/enrichments/face-mapper/", }, + { + text: "Manual Mapper", + link: "/pupil-cloud/enrichments/manual-mapper/", + }, ], }, { diff --git a/invisible/data-collection/wearers/index.md b/invisible/data-collection/wearers/index.md index 42048335d..5c69967d9 100644 --- a/invisible/data-collection/wearers/index.md +++ b/invisible/data-collection/wearers/index.md @@ -1,5 +1,5 @@ # Wearers -Wearers are the people wearing the Pupil Invisible Glasses. In a typical study, each subject would be a wearer. Every recording you make is assigned to a wearer to help you organize your recordings. You can create new wearers on the fly in the Pupil Invisible Companion app or in advance using [Pupil Cloud](/pupil-cloud/). +Wearers are the people wearing the Pupil Invisible Glasses. In a typical study, each subject would be a wearer. Every recording you make is assigned to a wearer to help you organize your recordings. You can create new wearers on the fly in the Pupil Invisible Companion app or in advance using [Pupil Cloud](/pupil-cloud/). It is also possible to change the assigned wearer in a recording post hoc in Pupil Cloud. Simply select *Change Wearer* from the context menu of a recording! Every wearer is assigned a unique ID, such that you can edit the name and profile picture at any time without mixing up your recordings. diff --git a/invisible/pupil-cloud/enrichments/manual-mapper/image_1_mapper.png b/invisible/pupil-cloud/enrichments/manual-mapper/image_1_mapper.png new file mode 100644 index 000000000..5b2f0e8ae Binary files /dev/null and b/invisible/pupil-cloud/enrichments/manual-mapper/image_1_mapper.png differ diff --git a/invisible/pupil-cloud/enrichments/manual-mapper/image_2_mapper.png b/invisible/pupil-cloud/enrichments/manual-mapper/image_2_mapper.png new file mode 100644 index 000000000..7c112da34 Binary files /dev/null and b/invisible/pupil-cloud/enrichments/manual-mapper/image_2_mapper.png differ diff --git a/invisible/pupil-cloud/enrichments/manual-mapper/index.md b/invisible/pupil-cloud/enrichments/manual-mapper/index.md new file mode 100644 index 000000000..8165e5d39 --- /dev/null +++ b/invisible/pupil-cloud/enrichments/manual-mapper/index.md @@ -0,0 +1 @@ + diff --git a/invisible/pupil-cloud/enrichments/manual-mapper/manual_mapper_header.png b/invisible/pupil-cloud/enrichments/manual-mapper/manual_mapper_header.png new file mode 100644 index 000000000..f1d09c3a2 Binary files /dev/null and b/invisible/pupil-cloud/enrichments/manual-mapper/manual_mapper_header.png differ diff --git a/invisible/pupil-cloud/offset-correction/index.md b/invisible/pupil-cloud/offset-correction/index.md new file mode 100644 index 000000000..e16874e73 --- /dev/null +++ b/invisible/pupil-cloud/offset-correction/index.md @@ -0,0 +1,19 @@ +# Offset Correction on Pupil Cloud + +For some subjects, you may find a constant offset in their gaze estimates. This gaze offset can be [compensated for in the Invisible Companion app](/data-collection/offset-correction/) before starting a recording, or post hoc in Pupil Cloud as shown below. Click on the gaze offset icon to start the gaze offset correction. + +![Offset correction on Cloud header image](./offset-cloud-timeline.png) + +Once you enter the `Edit Gaze Offset` view, simply drag the gaze circle to apply the correction. See the video below for reference. + +- The grey circle indicates the raw gaze estimate provided by the gaze estimation pipeline of Pupil Invisible. +- The red circle indicates the gaze position with the current offset applied. +- The blue circle indicates the offset correction applied in the Invisible Companion app. + + + +::: tip +Modifying the gaze offset impacts all downstream data, such as fixations, mapped gaze from enrichments, and visualizations. Where possible, data is updated instantly. If not, the respective data will be deleted, requiring (partial) re-computation of enrichments or visualizations. In that case, the enrichment or visualization will be shown as *Not Started* and you need to re-run them. +::: \ No newline at end of file diff --git a/invisible/pupil-cloud/offset-correction/offset-cloud-timeline.png b/invisible/pupil-cloud/offset-correction/offset-cloud-timeline.png new file mode 100644 index 000000000..b39aaa52a Binary files /dev/null and b/invisible/pupil-cloud/offset-correction/offset-cloud-timeline.png differ diff --git a/invisible/pupil-cloud/offset-correction/offset-correction.mp4 b/invisible/pupil-cloud/offset-correction/offset-correction.mp4 new file mode 100644 index 000000000..31318df9c Binary files /dev/null and b/invisible/pupil-cloud/offset-correction/offset-correction.mp4 differ diff --git a/landing-page/index.md b/landing-page/index.md index 5fb03556a..1a53702b7 100644 --- a/landing-page/index.md +++ b/landing-page/index.md @@ -9,7 +9,7 @@ hero: products: - title: Neon details: Neon is our most powerful eye tracker. It features research-grade gaze and pupil diameter estimation, industry-leading robustness in real-world applications, and a pleasant calibration-free user experience. - image: "/neon-family.webp" + image: "/neon-docs_overview_card-v3.webp" link: { text: "Enter Documentation", href: "/neon/" } - title: Pupil Invisible details: Pupil Invisible was the world's first calibration-free eye tracker and set new standards for robustness in real-world applications. It is now deprecated and replaced by Neon. diff --git a/landing-page/public/neon-docs_overview_card-v3.webp b/landing-page/public/neon-docs_overview_card-v3.webp new file mode 100644 index 000000000..5cf317933 Binary files /dev/null and b/landing-page/public/neon-docs_overview_card-v3.webp differ diff --git a/neon/.vitepress/config.mts b/neon/.vitepress/config.mts index f16b69cb3..f66c04b77 100644 --- a/neon/.vitepress/config.mts +++ b/neon/.vitepress/config.mts @@ -155,6 +155,7 @@ let theme_config_additions = { items: [ { text: "Projects", link: "/pupil-cloud/projects/" }, { text: "Workspaces", link: "/pupil-cloud/workspaces/" }, + { text: "Offset Correction", link: "/pupil-cloud/offset-correction/" }, ], }, { @@ -173,6 +174,10 @@ let theme_config_additions = { text: "Face Mapper", link: "/pupil-cloud/enrichments/face-mapper/", }, + { + text: "Manual Mapper", + link: "/pupil-cloud/enrichments/manual-mapper/", + }, ], }, { diff --git a/neon/data-collection/wearers/index.md b/neon/data-collection/wearers/index.md index ad892e3b9..38e730c0c 100644 --- a/neon/data-collection/wearers/index.md +++ b/neon/data-collection/wearers/index.md @@ -1,5 +1,5 @@ # Wearers -Wearers are the people wearing Neon. In a typical study, each subject would be a wearer. Every recording you make is assigned to a wearer to help you organize your recordings. You can create new wearers on the fly in the Neon Companion app or in advance using [Pupil Cloud](/pupil-cloud/). +Wearers are the people wearing Neon. In a typical study, each subject would be a wearer. Every recording you make is assigned to a wearer to help you organize your recordings. You can create new wearers on the fly in the Neon Companion app or in advance using [Pupil Cloud](/pupil-cloud/). It is also possible to change the assigned wearer in a recording post hoc in Pupil Cloud. Simply select *Change Wearer* from the context menu of a recording! Every wearer is assigned a unique ID, such that you can edit the name and profile picture at any time without mixing up your recordings. diff --git a/neon/index.md b/neon/index.md index 08a422f9a..0f271bf80 100644 --- a/neon/index.md +++ b/neon/index.md @@ -6,7 +6,7 @@ title: Home hero: title: "Neon" tagline: Everything you need to know about Neon & Pupil Cloud to power your eye tracking application! - image: "/neon/neon-family.webp" + image: "/neon/neon-docs_overview_card-v3.webp" actions: - theme: brand text: Getting Started diff --git a/neon/public/neon-docs_overview_card-v3.webp b/neon/public/neon-docs_overview_card-v3.webp new file mode 100644 index 000000000..4a66d089d Binary files /dev/null and b/neon/public/neon-docs_overview_card-v3.webp differ diff --git a/neon/pupil-cloud/enrichments/face-mapper/index.md b/neon/pupil-cloud/enrichments/face-mapper/index.md index bc96c9520..580a48c5f 100644 --- a/neon/pupil-cloud/enrichments/face-mapper/index.md +++ b/neon/pupil-cloud/enrichments/face-mapper/index.md @@ -33,7 +33,7 @@ This file contains all the individual face detections. | **mouth left x [px]** | X coordinate of the left mouth corner in image coordinates in pixels. | | **mouth left y [px]** | Y coordinate of the left mouth corner in image coordinates in pixels. | | **mouth right x [px]** | X coordinate of the right mouth corner in image coordinates in pixels. | -| **mouth right y [px]** | Y coordinate of the right mouth corner in image coordinates in pixels. | +| **mouth right y [px]** | Y coordinate of the right mouth corner in image coordinates in pixels. | ### gaze_on_face.csv This file indicates which gaze samples are on faces (within the bounding box of detected faces). @@ -42,7 +42,7 @@ This file indicates which gaze samples are on faces (within the bounding box of | -------- | -------- | | **section id** | Unique identifier of the corresponding section. | | **recording id** | Unique identifier of the recording this sample belongs to. | -| **timestamp [ns]** | UTC timestamp in nanoseconds of the sample. Equal to the timestamp of the corresponding gaze sample. | +| **timestamp [ns]** | UTC timestamp in nanoseconds of the sample. Equal to the timestamp of the corresponding gaze sample. | | **gaze on face** | Boolean indicating whether the gaze point is on a face. | ### fixations_on_face.csv @@ -54,5 +54,5 @@ This file indicates which fixations are on faces (within the bounding box of det | **recording id** | Unique identifier of the recording this sample belongs to. | | **fixation id** | Identifier of the fixation. The counter starts at the beginning of the recording. | | **start timestamp [ns]** | UTC timestamp in nanoseconds of the start of the fixation. | -| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | -| **fixation on face** | Boolean indicating whether the fixation is on a face. | +| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | +| **fixation on face** | Boolean indicating whether the fixation is on a face. | diff --git a/neon/pupil-cloud/enrichments/manual-mapper/image_1_mapper.png b/neon/pupil-cloud/enrichments/manual-mapper/image_1_mapper.png new file mode 100644 index 000000000..5b2f0e8ae Binary files /dev/null and b/neon/pupil-cloud/enrichments/manual-mapper/image_1_mapper.png differ diff --git a/neon/pupil-cloud/enrichments/manual-mapper/image_2_mapper.png b/neon/pupil-cloud/enrichments/manual-mapper/image_2_mapper.png new file mode 100644 index 000000000..7c112da34 Binary files /dev/null and b/neon/pupil-cloud/enrichments/manual-mapper/image_2_mapper.png differ diff --git a/neon/pupil-cloud/enrichments/manual-mapper/index.md b/neon/pupil-cloud/enrichments/manual-mapper/index.md new file mode 100644 index 000000000..fe76582d9 --- /dev/null +++ b/neon/pupil-cloud/enrichments/manual-mapper/index.md @@ -0,0 +1,37 @@ +# Manual Mapper + +![Manual Mapper header image](./manual_mapper_header.png) + +The Manual Mapper offers a simple interface for manually mapping fixations to a reference image, aiding gaze data visualization and analysis. Click on the reference image to map a fixation and the recording auto-advances to the next one. Fixations outside the image can be marked by clicking beyond the image boundary. + +## Setup + +- **Upload a Reference Image:** Upload the image you want to map fixations on. +- **Map Fixations:** Begin mapping the recorded fixations onto the reference image by clicking the corresponding location on the image. If a fixation does not fall on the reference image, use the keyboard shortcut S. + - The field `Fixation` shows the ID of the current fixation. + - The field `Recording Mapping Progress` indicates how many fixations have been mapped within the specified enrichment section. + +In the example below, we manually map the fixations detected between the `epoch_start` and `epoch_end` events. This section includes 44 fixations in total, and we currently map the fixation with ID 72. + +![Manual Mapper image one](./image_1_mapper.png) + +You will see all fixations and their durations visualized in the timeline below. + +![Manual Mapper image two](./image_2_mapper.png) + + +## Export Format + +### fixations.csv +This file contains fixation events detected in the gaze data stream and mapped to the reference image. + +| Field | Description | +| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **section id** | Unique identifier of the corresponding section. | +| **recording id** | Unique identifier of the recording this sample belongs to. | +| **fixation id** | Identifier of fixation within the section. The id corresponds to the fixation id of the raw unmapped data. | +| **start timestamp [ns]** | UTC timestamp in nanoseconds of the start of the fixation. | +| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | +| **duration [ms]** | Duration of the fixation in milliseconds. | +| **fixation status** | `True` if the fixation was mapped inside the reference image, `False` if it was marked as outside of the reference image, and `Not mapped` if the fixation was not mapped at all.| + diff --git a/neon/pupil-cloud/enrichments/manual-mapper/manual_mapper_header.png b/neon/pupil-cloud/enrichments/manual-mapper/manual_mapper_header.png new file mode 100644 index 000000000..f1d09c3a2 Binary files /dev/null and b/neon/pupil-cloud/enrichments/manual-mapper/manual_mapper_header.png differ diff --git a/neon/pupil-cloud/enrichments/marker-mapper/index.md b/neon/pupil-cloud/enrichments/marker-mapper/index.md index 58bd6094d..2e98dbb37 100644 --- a/neon/pupil-cloud/enrichments/marker-mapper/index.md +++ b/neon/pupil-cloud/enrichments/marker-mapper/index.md @@ -60,7 +60,7 @@ This file contains all the mapped gaze data from all sections. The coordinate sy | **section id** | Unique identifier of the corresponding section. | | **recording id** | Unique identifier of the recording this sample belongs to. | | **timestamp [ns]** | UTC timestamp in nanoseconds of the sample. Equal to the timestamp of the original gaze sample before mapping. | -| **gaze detected on surface** | Boolean indicating whether or not the gaze point was inside or outside of the surface. | +| **gaze detected on surface** | Boolean indicating whether the gaze point was inside or outside of the surface. | | **gaze position on surface x [normalized]** | Float value representing the x-coordinate of the mapped gaze point in surface coordinates. If the surface was not localized this value is empty. | | **gaze position on surface y [normalized]** | Same as gaze position on surface x [normalized] but for y-coordinate. | | **fixation id** | If this gaze sample belongs to a fixation event, this is the corresponding id of the fixation. Otherwise, this field is empty. | @@ -75,10 +75,10 @@ This file contains fixation events detected in the gaze data stream and mapped t | **section id** | Unique identifier of the corresponding section. | | **recording id** | Unique identifier of the recording this sample belongs to. | | **fixation id** | Identifier of fixation within the section. The id corresponds to the fixation id of the raw unmapped data. | -| **start timestamp [ns]** | UTC timestamp in nanoseconds of the start of the fixation. | -| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | +| **start timestamp [ns]** | UTC timestamp in nanoseconds of the start of the fixation. | +| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | | **duration [ms]** | Duration of the fixation in milliseconds. | -| **fixation detected on surface** | Boolean indicating whether or not the fixation was inside or outside of the surface. | +| **fixation detected on surface** | Boolean indicating whether the fixation was inside or outside of the surface. | | **fixation x [normalized]** | Float value representing the x-coordinate of the fixation in surface coordinates. This position is the average of all mapped gaze samples within the fixation. | | **fixation y [normalized]** | Same as "fixation x [normalized]" but for the y-coordinate. | @@ -89,7 +89,7 @@ This file contains the surface locations in the scene images for all sections. | Field | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **section id** | Unique identifier of the corresponding section. | -| **timestamp [ns]** | UTC timestamp in nanoseconds of the sample. Equal to the timestamp of the scene camera frame the marker detection was executed on. | +| **timestamp [ns]** | UTC timestamp in nanoseconds of the sample. Equal to the timestamp of the scene camera frame the marker detection was executed on. | | **detected markers** | A list of the markers detected in the corresponding scene camera frame. Markers are represented by their ID and the list is separated by `;`. Added in version 2 of this enrichment. | | **tl x/y [px]** | x or y coordinate respectively of the **t**op **l**eft corner. Empty in case the surface could not be localized. Added in version 2 of this enrichment. | | **tr x/y [px]** | x or y coordinate respectively of the **t**op **r**ight corner. Empty in case the surface could not be localized. Added in version 2 of this enrichment. | diff --git a/neon/pupil-cloud/enrichments/reference-image-mapper/index.md b/neon/pupil-cloud/enrichments/reference-image-mapper/index.md index a7aa6e550..c006e6bdd 100644 --- a/neon/pupil-cloud/enrichments/reference-image-mapper/index.md +++ b/neon/pupil-cloud/enrichments/reference-image-mapper/index.md @@ -171,7 +171,7 @@ This file contains all the mapped gaze data from all sections. | **section id** | Unique identifier of the corresponding section. | | **recording id** | Unique identifier of the recording this sample belongs to. | | **timestamp [ns]** | UTC timestamp in nanoseconds of the sample. Equal to the timestamp of the original gaze sample before mapping. | -| **gaze detected in reference image** | Boolean indicating whether or not the gaze point was detected inside or outside of the reference image. | +| **gaze detected in reference image** | Boolean indicating whether the gaze point was detected inside or outside of the reference image. | | **gaze position in reference image x [px]** | Float value representing the x-coordinate of the mapped gaze point in pixel coordinates. If the reference image was not detected in the scene at the given time this value is empty. | | **gaze position in reference image y [px]** | Same as "gaze position in reference image x [px]" but for the y-coordinate. | | **fixation id** | If this gaze sample belongs to a fixation event, this is the corresponding id of the fixation. Otherwise, this field is empty. | @@ -190,10 +190,10 @@ This file contains fixation events detected in the gaze data stream and mapped t | **section id** | Unique identifier of the corresponding section. | | **recording id** | Unique identifier of the recording this sample belongs to. | | **fixation id** | Identifier of fixation within the section. The id corresponds to the fixation id of the raw unmapped data. | -| **start timestamp [ns]** | UTC timestamp in nanoseconds of the start of the fixation. | -| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | -| **duration [ms]** | Duration of the fixation in milliseconds. | -| **fixation detected in reference image** | Boolean indicating whether or not the fixation was inside or outside of the reference image. | +| **start timestamp [ns]** | UTC timestamp in nanoseconds of the start of the fixation. | +| **end timestamp [ns]** | UTC timestamp in nanoseconds of the end of the fixation. | +| **duration [ms]** | Duration of the fixation in milliseconds. | +| **fixation detected in reference image** | Boolean indicating whether the fixation was inside or outside of the reference image. | | **fixation x [px]** | Float value representing the x-coordinate of the fixation in reference image coordinates. This position is the average of all mapped gaze samples within the fixation. | | **fixation y [px]** | Same as "fixation x [px]" but for the y-coordinate. | diff --git a/neon/pupil-cloud/offset-correction/index.md b/neon/pupil-cloud/offset-correction/index.md new file mode 100644 index 000000000..321a498e6 --- /dev/null +++ b/neon/pupil-cloud/offset-correction/index.md @@ -0,0 +1,19 @@ +# Offset Correction on Pupil Cloud + +For some subjects, you may find a constant offset in their gaze estimates. This gaze offset can be [compensated for in the Neon Companion app](https://docs.pupil-labs.com/neon/data-collection/offset-correction/) before starting a recording, or post hoc in Pupil Cloud as shown below. Click on the gaze offset icon to start the gaze offset correction. + +![Offset correction on Cloud header image](./offset-cloud-timeline.png) + +Once you enter the `Edit Gaze Offset` view, simply drag the gaze circle to apply the correction. See the video below for reference. + +- The grey circle indicates the raw gaze estimate provided by Neon’s gaze estimation pipeline. +- The red circle indicates the gaze position with the current offset applied. +- The blue circle indicates the offset correction applied in the Neon Companion app. + + + +::: tip +Modifying the gaze offset impacts all downstream data, such as fixations, mapped gaze from enrichments, and visualizations. Where possible, data is updated instantly. If not, the respective data will be deleted, requiring (partial) re-computation of enrichments or visualizations. In that case, the enrichment or visualization will be shown as *Not Started* and you need to re-run them. +::: \ No newline at end of file diff --git a/neon/pupil-cloud/offset-correction/offset-cloud-timeline.png b/neon/pupil-cloud/offset-correction/offset-cloud-timeline.png new file mode 100644 index 000000000..b39aaa52a Binary files /dev/null and b/neon/pupil-cloud/offset-correction/offset-cloud-timeline.png differ diff --git a/neon/pupil-cloud/offset-correction/offset-correction.mp4 b/neon/pupil-cloud/offset-correction/offset-correction.mp4 new file mode 100644 index 000000000..31318df9c Binary files /dev/null and b/neon/pupil-cloud/offset-correction/offset-correction.mp4 differ diff --git a/neon/pupil-cloud/visualizations/areas-of-interest/index.md b/neon/pupil-cloud/visualizations/areas-of-interest/index.md index bbb24806e..19520d809 100644 --- a/neon/pupil-cloud/visualizations/areas-of-interest/index.md +++ b/neon/pupil-cloud/visualizations/areas-of-interest/index.md @@ -1,12 +1,12 @@ # Areas of Interest (AOIs) -The AOI Editor allows you to draw areas of interest (AOIs) on top of the reference image or surface. You can draw anything from simple polygons to multiple disconnected shapes. This tool is available for use after a [Reference Image Mapper](https://docs.pupil-labs.com/neon/pupil-cloud/enrichments/reference-image-mapper/) or a [Marker Mapper](https://docs.pupil-labs.com/neon/pupil-cloud/enrichments/marker-mapper/) enrichment is completed. +The AOI Editor allows you to draw areas of interest (AOIs) on top of the reference image or surface. You can draw anything from simple polygons to multiple disconnected shapes. This tool is available for use after a [Reference Image Mapper](/pupil-cloud/enrichments/reference-image-mapper/), a [Marker Mapper](/pupil-cloud/enrichments/marker-mapper/), or a [Manual Mapper](/pupil-cloud/enrichments/manual-mapper/) enrichment is completed. ## Setup ### AOI Editing and Drawing -Upon completion of the Reference Image Mapper or Marker Mapper enrichment, access the main view of the enrichment by navigating to the **`Enrichments`** tab and selecting **`Edit AOIs`** under the section **`Tools`**. +Upon completion of the enrichment, access the main view of the enrichment by navigating to the **`Enrichments`** tab and selecting **`Edit AOIs`** under the section **`Tools`**. ![Edit AOIs](./AOI_enrichment_view.png) diff --git a/neon/pupil-cloud/visualizations/heatmap/index.md b/neon/pupil-cloud/visualizations/heatmap/index.md index eb1ea8fb7..59a398342 100644 --- a/neon/pupil-cloud/visualizations/heatmap/index.md +++ b/neon/pupil-cloud/visualizations/heatmap/index.md @@ -1,6 +1,6 @@ # Heatmap -The output of the [Reference Image Mapper](https://docs.pupil-labs.com/neon/pupil-cloud/enrichments/reference-image-mapper/) and [Marker Mapper](https://docs.pupil-labs.com/neon/pupil-cloud/enrichments/marker-mapper/) Enrichments can be visualized as a traditional Heatmap. This shows you which parts of your reference image or surface were gazed at more often by an observer. +The output of the [Reference Image Mapper](/pupil-cloud/enrichments/reference-image-mapper/), [Marker Mapper](/pupil-cloud/enrichments/marker-mapper/), and [Manual Mapper](/pupil-cloud/enrichments/manual-mapper/) enrichments can be visualized as a traditional heatmap. This shows you which parts of your reference image or surface were gazed at more often by an observer. For example, below and to the left is a view of a kitchen that was used as a reference image. On the right, you can see the output of the Heatmap Visualization for a recording that was made while the observer was preparing ingredients.