---
updatedAt: 2026-09-03T15:45:37.000Z
agentTools:
  projectIndex: https://documentation.picsellia.com/llms.txt
---

# Attributes

An `Attribute` is a structured field that lets you capture information beyond a `Shape` or an entire `Asset`: a color, a severity level, a quality score, or any other property specific to your use case. Two kinds of `Attribute` coexist on Picsellia: `Shape Attribute`, attached to a `Label` and filled in per `Shape`, and `Asset Attribute`, attached to the whole `Asset`.

For Computer Vision teams, `Attribute` are what turn a `DatasetVersion` into more than a set of `Label`: they let you run structured quality control, filter or aggregate on criteria that a `Label` alone can't express, and capture business-specific information (severity, quality grade, condition) directly next to the `Shape` or `Asset` it describes, instead of relying on free-text notes or spreadsheets kept outside Picsellia.

## 1. `Shape Attribute`

A `Shape Attribute` is defined at the `Label` level and is filled in when annotating for each individual `Shape` using that `Label`.

It is created and defined from the `DatasetVersion` *Settings*, in the *Labels* page, using the *+ Add attribute* button next to a `Label`, as introduced [here](https://documentation.picsellia.com/docs/dataset-set-up-the-dataset#d-add-attribute-to-a-label).

<Image src="https://files.readme.io/2e2365dd2d29afcf2a1de0fe1f1a06819dbbab990f53954cb783e300663413d3-image.png" align="center" caption="Shape Attribute creation" border={true} />

Creating or editing a `Shape Attribute` lets you configure:

* A *name*.
* A *Type*: *String*, *Integer*, *Float*, or *Boolean*.
* Whether it is *Required*.
* Under *Advanced parameters*: a predefined list of *Choices* (not available for the *Boolean* type), *Allow multiple answers* to let several *Choices* be selected at once, and, for *Integer* or *Float*, a *Min* / *Max* bound.

<Image src="https://files.readme.io/73cdabc098f2b82f07dddd5c3a5679248649c1da949f82318142321d24a29070-image.png" align="center" caption="Definition of attribute Name, Type, and whether it is required" border={true} />

<br />

<Image src="https://files.readme.io/a8ce10fddeb6aa37b6a188053674484d17dc4c07885d3f25c540411502dc7712-image.png" align="center" caption="Advanced capabilities to define rules on the potential values based on the attribute type" border={true} />

Once all the `Shape Attributes` for the selected `Label` are properly defined, you can click on the *Create* button and potentially do the same for any other `Label` of the current `DatasetVersion` that needs `Shape Attributes`. The number of `Shape Attributes` defined per `Label` is then displayed in the *Labels* page as shown below:

<Image src="https://files.readme.io/8ad2b51b66c0017a93eeec3777628fd27e543d2c9387af7918502dd3792bf547-image.png" align="center" caption="Number of Shape Attributes defined per Label" border={true} />

You can edit or delete an existing `Shape Attribute` at any time, by clicking on the *...* button next to any `Label`.

<Image src="https://files.readme.io/1c1baf2547ed7de92e95b97de08d0eb9cf22e10102f4779c8f74ad353f556cdb-image.png" align="center" caption="Update / Delete Attributes" border={true} />

The *Delete Attributes* option will permanently delete all the `Shape Attributes` configuration and all the associated values for the selected `Label`.

By clicking on *Update Attributes*, you will have the possibility to edit the configuration (Name, Type, whether it is required, the Advanced Parameters) for each `Shape Attribute` of the selected `Label`. Once the changes are done, you simply need to click *Update* to take them into account. Please note that it won't affect the values already created in the *Annotation Tool* (or via SDK), only the to-be-created ones will be guided by the newly edited configuration.

<Image src="https://files.readme.io/9cf7b8e2f8b08494cfe651c2dd11673b46fd4ca7b2be123d5e2600dbc5a362e2-image.png" align="center" caption="Shape Attributes configuration update" border={true} />

From the *Shape Attributes* update form, you can also perform a soft delete of any `Shape Attributes`; rather than being completely deleted, a `Shape Attribute` can also be *archived*: it disappears from the annotation experience in the future while its already-recorded values are preserved, and an archived `Attribute` can no longer be *Required*. In that case, you need to click on *Delete config only*. If you want to delete the `Attribute` config and its associated value, click on *Delete config and values*.

<Image src="https://files.readme.io/9dfffe6723f80810357472e1d8760d74a16adb8b46b1f4df561c278d6714012f-image.png" border={true} />

## 2. `Asset Attribute`

An `Asset Attribute` uses the same configuration mechanism as a `Shape Attribute` (name, *Type*, *Required*, *Choices*, *Allow multiple answers*, *Min* / *Max*), but is attached directly to the `Asset` as a whole rather than to a single `Shape`. This lets you capture information that describes the entire `Asset` rather than one specific object within it, for instance the weather conditions or the acquisition device for an image, independently of how many `Shape` it ends up being annotated with.

Unlike a `Shape Attribute`, an `Asset Attribute` isn't attached to any particular `Label`. It is configured from the same `DatasetVersion` *Settings* *Labels* page, but through the *...* menu in the header of the `Label` table (next to the `Label` count), rather than through a specific `Label` row.

<Image src="https://files.readme.io/41d450308ff40a661108928285361ed0e7fdceb4bb20316932c2d4e4ede8a6f6-image.png" align="center" caption="Create an Asset attribute" border={true} />

The `Asset Attribute` creation form works the same way as `Shape Attributes`:

<Image src="https://files.readme.io/e7678d3147100747ef2fd79879ebdf97d60f7f22e7c1f562915b1fb8ef60ccc0-image.png" align="center" caption="Asset Attribute creation" border={true} />

Once created, it also works the exact same way as `Shape Attributes` to update the configuration or delete `Asset Attributes`, whether it is a complete deletion or an archiving of the values.

<Image src="https://files.readme.io/89508a809efefb50ebda1daaaeb0fcc5c930be28e167db6729704e8ef3901b72-image.png" align="center" caption="Update or Delete Asset Attributes" border={true} />

## 3. Fill in `Attribute` values

We now consider that all the necessary `Asset Attributes` and `Shape Attributes` have been defined as detailed in the previous paragraphs. It is time to check how to give values for these, for each `Asset` or `Shape`.

`Attribute` values are mainly filled in from the *Annotation tool* while annotating. In the Annotation Tool, you need to access the Selection tab accessible from the right-side floating menu as shown below:

<Image src="https://files.readme.io/c28bca5fa528c0c090b2bf20fd86f6b55841f46f2b1f66eff65edfb7358d4200-image.png" border={true} />

Here, either none or several `Shape` are selected; in that case, the `Asset Attributes` will be displayed, with the possibility for the user to fill in the available `Asset Attributes`.

<Image src="https://files.readme.io/cded00da314499c7ac4fda23437eae6fc5b44bf8566cf31ac27c3468e9fdf2cc-image.png" align="center" caption="Fill in Asset Attribute" border={true} />

Or only one `Shape` is selected; in that case, the *Selection* menu will display all the information that is related to this one, meaning `Label`, *Text* field, coordinates (for Bounding Boxes and Keypoints only), and the `Shape Attributes`. From that Selection menu you'll be able to fill in the different values (as defined in the configuration) for all the `Shape Attributes` that are related to the `Label` of the selected `Shape`.

<Image src="https://files.readme.io/bd629032123f3b74e2e4b81ece2ea2e407cd9e447fbaf354dc11e1fab6fe345d-image.png" align="center" caption="Fill in Shape Attributes" border={true} />

<Callout icon="🚧" theme="warn">
  ### Required Attributes

  If a `Shape` or an `Asset` is missing a value for a `Required` `Attribute`, a warning icon will be highlighted and the `Annotation` cannot be saved in the _Annotation tool_ until every Required `Attribute` is filled in.
</Callout>

## 4. Manipulation of `Attribute` (Annotation Import/Export, SDK, Fork..)

* When [forking](https://documentation.picsellia.com/docs/dataset-fork-a-dataset) a `DatasetVersion`, the existing `Attribute` configurations (`Asset` and `Shape`) and the associated values for the forked objects are kept.
* When [importing `Label` from another `DatasetVersion`](https://documentation.picsellia.com/docs/dataset-set-up-the-dataset#b-importing-them-from-another-datasetversion), each `Label`'s `Shape Attribute` configuration can be carried over along with it if the associated checkbox is ticked.

<Image src="https://files.readme.io/c6196bb8a00c8a521986295983e8470f961c608b4e0d507b09940eb87316b664-image.png" align="center" caption="Carry Attributes during Label import" border={true} />

* Exporting a `DatasetVersion` to a *COCO* annotation file includes an `attributes` key filled with the `Shape Attribute` and `Asset Attribute` values of your `Annotation`. Importing a *COCO* annotation file that contains such an `attributes` key saves those values back onto Picsellia.
* On video `Asset`, `Attribute` values are saved on the `Track` of an `Annotation`. They are not yet included in *COCO* exports.
* From the SDK, the `Attribute` configuration is managed with `get_attributes()` / `set_attributes()`, available on both `Label` (`Shape Attribute`) and `DatasetVersion` (`Asset Attribute`). `Attribute` values themselves are exposed through the `attributes` property, available on an `Annotation` (`Asset Attribute` values) and on every `Shape` type (`Shape Attribute` values).

## 5. Filter on `Attribute` values

Recording an `Attribute` value pays off when you can retrieve the `Asset` carrying it: isolate every `Asset` graded below a quality threshold before a review round, gather the `Shape` marked as occluded to check how the model behaves on them, or count how many `Asset` were captured in a given condition before forking a `DatasetVersion` out of them.

`Attribute` are not searched through the *Query Language*. Instead, from the *Assets overview* of a `DatasetVersion`, use the *Add filter* button next to the *Search Bar*, detailed [here](https://documentation.picsellia.com/docs/dataset-overview#3-exploration-modes-and-filtering), and choose what to filter on:

* An `Asset Attribute`, matched against the value carried by the `Asset` itself.
* A `Shape Attribute`, matched against the value carried by a `Shape` of its `Annotation`. Since a `Shape Attribute` is defined on a `Label`, you select the `Label` first, then one of the `Attribute` configured on it. An `Asset` matches as soon as one of its `Shape` satisfies the filter.

The comparison proposed depends on the `Attribute` *Type*: an exact value for *String* and *Boolean*, with the configured *Choices* offered as suggestions when there are any, and a range for *Integer* and *Float*.

Lets start by creating a first filter on a `Shape Attribute`  that is with the *Type String&#x20;*&#x61;nd for which values can only be *Red* or *Green* as defined in the configuration by the `Attribute` creator.

<Image src="https://files.readme.io/efbb5bb44ab16f5e8a020dff5da6250346e43ce170c707d3a4f04a3428a84adb-image.png" align="center" caption="Create Attribute filter" border={true} />

<Image src="https://files.readme.io/36369a08a20f8fc40363adb51b57d0b7ee8c24976c493686a1676ee44b8f3dc1-image.png" align="center" caption="Configure Shape Attribute filter" border={true} />

<Image src="https://files.readme.io/e1e2ea9075e21fcf1ad0d3ab026bcd45b6b1773a0d959c00aa62a16a5df0bf73-image.png" align="center" caption="Result of the Shape Attribute filter" border={true} />

Lets now add a second Attribute filter this time on an Asset Attribute that is an Integer:

<Image src="https://files.readme.io/206b966f5a4b913de6ebe2fdd995bcecb39ff6879602612c3b9679bcecdd8410-image.png" align="center" caption="Create a second Attribute filter on Asset Attribute" border={true} />

<Image src="https://files.readme.io/ccf57f80801cad87002931b6d51c4b56b8bd8165255974d51e6eb3dc5d695d34-image.png" align="center" caption="Asset Attribute filter configuration" border={true} />

<Image src="https://files.readme.io/a2459120eaad429294eb6251f66f5c2d22b2c5646f739e7dd6e94bf95495ccab-image.png" align="center" caption="Result of the Shape Attribute filter and Asset Attribute filter" border={true} />

Please note that the filters (whether they are configured on `Asset Attributes`, `Shapes Attributes` or *Custom Metadata*) can be used with the *SearchBar* to create advanced ways of filtering among your `DatasetVersion` .

<Callout icon="📘" theme="info">
  Filters are also available on `Deployment` and `Experiment`

  These filters are also available on the `PredictedAsset` of a `Deployment` and on the `Evaluation` of an `Experiment`, where they apply to the predicted and reviewed `Shape`.
</Callout>