class lamindb.ULabel(name: str, description: str | None = None, reference: str | None = None, reference_type: str | None = None)

Bases: Registry, HasParents, CanValidate, TracksRun, TracksUpdates

Universal labels (valid categories).

  • namestr A name.

  • descriptionstr A description.

  • referencestr | None = None For instance, an external ID or a URL.

  • reference_typestr | None = None For instance, "url".

A ULabel record provides the easiest way to annotate an artifact or collection with a label: "My project", "curated", or "Batch X":

>>> my_project = ULabel(name="My project")
>>> collection.ulabels.add(my_project)

In some cases, a label is measured within an artifact or collection a feature (a Feature record) denotes the column name in which the label is stored. For instance, the collection might contain measurements across 2 organism of the Iris flower: "setosa" & "versicolor".

See Tutorial: Features & labels to learn more.


If you work with complex entities like cell lines, cell types, tissues, etc., consider using the pre-defined biological registries in bionty to label artifacts & collections.

If you work with biological samples, likely, the only sustainable way of tracking metadata, is to create a custom schema module.

See also


Dimensions of measurement for artifacts & collections.


Label manager of an artifact or collection.


Create a new label:

>>> my_project = ln.ULabel(name="My project")

Label a artifact without associating it to a feature:

>>> ulabel = ln.ULabel.filter(name="My project").one()
>>> artifact = ln.Artifact("./myfile.csv")
>>> artifact.ulabels.add(ulabel)
>>> artifact.ulabels.list("name")
['My project']

Organize labels in a hierarchy:

>>> ulabels = ln.ULabel.lookup()  # create a lookup
>>> is_project = ln.ULabel(name="is_project")  # create a super-category `is_project`
>>> ulabels.my_project.parents.add(is_project)

Query by ULabel:

>>> ln.Artifact.filter(ulabels=project).first()


created_at DateTimeField

Time of creation of record.

created_by ForeignKey

Creator of record, a User.

run ForeignKey

Last run that created or updated the record, a Run.

updated_at DateTimeField

Time of last update to record.

id AutoField

Internal id, valid only in one DB instance.

uid CharField

A universal random id, valid across DB instances.

name CharField

Name or title of ulabel (required).

description TextField

A description (optional).

reference CharField

A reference like URL or external ID.

reference_type CharField

Type of reference, e.g., donor_id from Vendor X.

previous_runs ManyToManyField

Sequence of runs that created or updated the record.

parents ManyToManyField

Parent labels, useful to hierarchically group labels (optional).


classmethod from_values(values, **kwargs)

Bulk create validated records by parsing values for an identifier (a name, an id, etc.).

  • values (List[str] | Series | array) – A list of values for an identifier, e.g. ["name1", "name2"].

  • field – A Registry field to look up, e.g.,

  • organism – An Organism name or record.

  • public_source – A PublicSource record.

Return type:



A list of validated records. For bionty registries, also returns knowledge-coupled records.


For more info, see tutorial: Manage biological registries.


Bulk create from non-validated values will log warnings & returns empty list:

>>> ulabels = ln.ULabel.from_values(["benchmark", "prediction", "test"], field="name")
>>> assert len(ulabels) == 0

Bulk create records from validated values returns the corresponding existing records:

>>>[ln.ULabel(name=name) for name in ["benchmark", "prediction", "test"]])
>>> ulabels = ln.ULabel.from_values(["benchmark", "prediction", "test"], field="name")
>>> assert len(ulabels) == 3

Bulk create records from public reference:

>>> import bionty as bt
>>> records = bt.CellType.from_values(["T cell", "B cell"], field="name")
>>> records