3LC Version 2.2 Release Notes#

3LC Version 2.2.3#

  1. March 2024

Enhancements and Fixes#

tlc Python Package#

  • Made deriving project and dataset portions of URLs for Runs and Tables more robust

  • Added serialization version number to 3LC files to allow for compatibility checks

  • Improved support for using the object service with NGrok

  • Added public SegFormer example demonstrating integration with Pytorch Lightning


  • Improved support for using the Dashboard with NGrok

  • Significantly improved performance of Tp/Fp/Fn Operations

  • Added keyboard shortcut to toggle camera/paint

3LC Version 2.2.2#

  1. March 2024

Enhancements and Fixes#

tlc Python Package#

  • Made Table row access immutable to prevent unsupported modifications to the in-memory representation of the Table, which could then get cached to disk.

  • Significantly improved performance of TableFromCoco

  • Made it so exporters write unaliased URLs

  • Made Warning the default log level

  • Mapped thread ID for log messages to lower numbers to avoid errors in the Dashboard


  • Added support for rendering image masks

    • Support image RGB remapping from value map

    • Support rendering multiple images on top of each other

  • Introduced new operations to cluster by distance threshold and check if a sample is the primary element in a cluster, which can be used to e.g. cluster samples with identical images then ignore all but one in subsequent training.

  • Fixed an issue where charts did not show the correct data after creating a subset table

  • Reintroduced use of cookies to specify object service URL

3LC Version 2.2.1#

  1. February 2024

Enhancements and Fixes#

tlc Python Package#

  • Renamed predicted bounding box labels from “label_predicted” to “label”. This fixes a bug where in the Dashboard, adding or assigning a prediction would lead to no labels being written for the new box. This also caused the visualization of all boxes to break after committing such a change.

    • NOTE: This fix does not retroactively fix existing tables with the old “label_predicted” bounding box labels.

  • Updated Hugging Face datasets integration

    • Renamed the Hugging Face integration from tlc.integration.huggingface to tlc.integration.hugging_face

    • Added Table.from_hugging_face that is similar to the other Table.from_* methods

    • Removed load_dataset; Table.from_hugging_face should be used instead

  • Made various fixes and additions to sample types and schemas

  • Made various improvements to type hinting and removed many uses of Any, which disabled type checking


  • Made Run constants visible by default

  • Made it so that a default column is chosen for the color property when a chart is created without specifying which column should provide the color. In most cases, this means that a label column will be chosen if one is available.

  • Made it possible to provide object_service URL as a URL parameter to specify the object service to use for the current session

3LC Version 2.2.0#

  1. February 2024

We proudly present 3LC Version 2.2!

This release is for early adopters of 3LC, to be deployed in their own environment. It makes a significant change in the way that 3LC data is organized, including the introduction of a Project concept and the packaging of 3LC objects into self-contained folders, which makes them easier to share and perform other operations on. The Dashboard now presents projects on its start screen and shows per-Run charts for the selected project.

Enhancements and Fixes#

tlc Python Package#

  • Changed 3LC data organization to have project at the top-level, with settings for project root and project scan URLs instead of the previous settings for tables and runs. Projects contain runs and datasets, runs contain metrics, and datasets contain tables.

  • Made it so that 3LC objects (Tables, Runs, etc.) are packaged into self-contained folders, which makes them easier to share and perform other operations on

  • Added support for deleting indexed Runs and Tables

  • Added support for copying and renaming indexed Runs and Tables

  • Made it possible to add/remove/modify value maps for Tables

  • Enhanced samplers so that samples with zero weight can optionally be excluded during sampling and/or when collecting metrics

  • Refactored various parts of the API to be more flexible, usable, and consistent, including tlc.init, table.from_*, and TableWriter


  • Updated start screen to allow user to select a project

  • Made it so that per-Run graphs are shown for the selected project

  • Made it possible to delete and rename Runs

  • Made it so that unfiltered results are shown behind filtered results when doing on-the-fly reduction in a chart

  • Made a number of optimizations, including to the editing of large Tables and to chart filtering/reduction

  • Made it so that the previous spherical point rendering is now opt-in via a setting and the default point rendering is simpler and faster, improving rendering framerate for charts with many points


The 3LC documentation is now publicly available at docs.3lc.ai


This release is provided to enterprise clients, who have been given access to install it from our private CloudRepo Python repository. Clients will be able to locally install Python wheels which contain the notebook API, the 3LC Dashboard, and documentation from Python packages.

In addition to the credentials to access the private CloudRepo, clients will also need a license key in order to use the software.

Supported Platforms#

  • Python 3.8 - Python 3.11

    • Both Conda and “vanilla” Python environments should work

  • Microsoft Windows 10 and 11 (x86)

  • macOS 13 and newer (M series)

  • Ubuntu 20.04 (x86-64) is our supported Linux platform

    • Most other GLibc based Linux distributions are expected to work, but these are untested and unsupported.

  • Chrome and Edge web-browsers, with GPU acceleration enabled

Known Issues#

  • Tables for dataset revisions are currently always stored at a location next to the input table, and it is not possible to override that behavior. This means, for example, that writing a dataset revision with an input table stored in a read-only location (on disk, in cloud storage, etc.) is not supported.

  • The Table object in the tlc Python API is designed to represent immutable columnar data, but it currently returns objects by reference when iterating or indexing. Consequently, it is possible to modify the in-memory representation of the Table, which could then get cached to disk. In general, users of the API should not make such modifications.

  • The tlc Python package does not detect, handle, or support NaN (Not-a-Number) values in tlc.Table, and their presence may lead to unpredictable behavior or inconsistencies within the system.

  • The order of columns in the Dashboard filter panel does not follow the order in the tables panel, where the columns are more logically ordered. This will be addressed in an upcoming release.

  • When renaming a Run in the Dashboard, the old name is sometimes still shown alongside the new name in the Table panel for a short time.