Releases: lightly-ai/lightly-studio
Releases · lightly-ai/lightly-studio
v0.4.6
[0.4.6] - 2025-12-16
Added
- Added metadata section to video and video frame details.
- Added tag support for videos and video frames in the GUI.
- Introduced navigation between video details.
- Enabled video and video frames filtering.
- Added text search for videos.
- Added plugins: This is the initial version for plugins. It supports the execution of operators.
- Added cloud storage support for video frames.
- Added export for image captions.
- Added semantic search by adding perception encoder core as embeddings model.
- Added
VideoSampleclass.
Changed
- Renamed
lightly_studio.core.sample.SampletoImageSample.
What's Changed
- Modify the video frame endpoint to support filtering by @LeonardoRosaa in #234
- Implement annotation count for video frames by @LeonardoRosaa in #242
- Implement the video fields filtering within the GUI by @LeonardoRosaa in #239
- Fixed annotations menu icon by @LeonardoRosaa in #248
- Add endpoint to retrieve video frame fields bounds by @LeonardoRosaa in #243
- Add video frame annotations filtering to GUI by @LeonardoRosaa in #244
- Add video annotations filtering to GUI by @LeonardoRosaa in #246
- Run captions e2e tests from CI by @michal-lightly in #238
- Removed dataset_id from AnnotationBaseTable by @horatiualmasan in #236
- Video Embedding: Add perception encoder vendor model by @JonasWurst in #251
- Refresh header after annotation/caption creation by @LeonardoRosaa in #254
- Update counter samples information in GUI for the video and video frames by @LeonardoRosaa in #247
- Prevent video playback when not hovering by @LeonardoRosaa in #257
- Operator Dialog by @JonasWurst in #249
- Add metadata filters for videos frames. by @LeonardoRosaa in #253
- Use tags for video samples in GUI by @horatiualmasan in #250
- Video Embedding: Download from lightly hosted s3 by @JonasWurst in #256
- VideoEmbeddingGenerator Protocol + EmbeddingManager refactor by @JonasWurst in #259
- Make Dataset generic by @lukas-lightly in #260
- Add captions e2e test - sample details page by @michal-lightly in #245
- Add metadata section for video and video frames by @LeonardoRosaa in #255
- Rename Sample to ImageSample by @lukas-lightly in #263
- Allow filter by video frame number by @LeonardoRosaa in #252
- Embedding Manager: Add Video Embed + tests by @JonasWurst in #262
- Exclude unused annotation labels from annotations counts endpoint by @LeonardoRosaa in #267
- Apply filter for video frame details navigation by @LeonardoRosaa in #266
- Add video details navigation by @LeonardoRosaa in #264
- Perception Encoder Embedding Generator: Text + Image by @JonasWurst in #265
- Split responsibilities in export samples dialog by @michal-lightly in #268
- Add e2e tests for the captions page by @michal-lightly in #261
- Make Export always available by @JonasWurst in #269
- Perception Encoder Emb Gen: add video embedding by @JonasWurst in #270
- Introduce a new endpoint to fetch annotations and support multiple samples by @LeonardoRosaa in #273
- Enable video frame view cloud support by @horatiualmasan in #276
- Add tags to video frames by @horatiualmasan in #258
- Introduce endpoint to fetch dataset details for dashboard by @mihnea-necsulescu in #272
- Update changelog for cloud video frame support by @horatiualmasan in #279
- Export for image captions from GUI by @michal-lightly in #271
- Annotation grid: implement new data structure for images by @LeonardoRosaa in #278
- Add our own log formatter by @lukas-lightly in #277
- Do not print uvicorn access log by default by @lukas-lightly in #281
- annotations: adjustment to support multiple sample types by @LeonardoRosaa in #280
- Introduce ImageSample.sample_table by @lukas-lightly in #283
- Add embedding to video dataset by @JonasWurst in #274
- Create an abstract
Sampleclass by @lukas-lightly in #284 - annotation grid: introduce video support by @LeonardoRosaa in #282
- Video embedding model: add text search bar for videos by @JonasWurst in #287
- Redirect to proper sample type based on dataset by @mihnea-necsulescu in #289
- annotations: add a new endpoint to retrieve annotation by id by @LeonardoRosaa in #285
- Remove Duplicated slider by @JonasWurst in #293
- Pass dataset_id to embedText API endpoint by @michal-lightly in #288
- Update the header component in preparation for multiple datasets support by @mihnea-necsulescu in #291
- Introduce video frame annotation details by @LeonardoRosaa in #290
- Pass datasetId with embbedings2d endpoint request by @michal-lightly in #297
- Add VideoSample class by @lukas-lightly in #294
- Pass datasetId to list samples endpoint by @michal-lightly in #298
- Enable video frame annotations filtering by @LeonardoRosaa in #292
- Eagerly load annotation tags when listing images by @horatiualmasan in #299
- Pass dataset_id to get_dataset_hierarchy endpoint by @michal-lightly in #301
- Update the breadcrumb components in preparation for multiple datasets by @mihnea-necsulescu in #302
- Plugins Docs by @JonasWurst in #295
- Order datasets by creation date for overview by @mihnea-necsulescu in #307
- Bump version to 0.4.6 by @michal-lightly in #308
Full Changelog: v0.4.5...v0.4.6
v0.4.5
[0.4.5] - 2025-12-02
Added
- Added reading and updating of captions to the
Sampleclass. - Added export functionality for image datasets with captions to the python
Datasetclass interface. - Added keyboard shortcut support for toggling annotation edit mode.
- Added sliders to adjust brightness and contrast for more accurate labeling.
- Added version info to the footer.
Changed
- Improved the undo functionality. Works now in more views and one can undo the creation and deletion of annotations.
- Reduced the minimum size of bounding box creation from 10px side length to 4px.
- Print server errors to the console.
- Header actions (classifier, selection, export, settings) are grouped into a menu.
Fixed
- Fixed an issue with wrongly displayed annotations grid view in the presence of classification annotation type.
- Fixed video sample type in examples in readme and docs.
- Fixed a problem with listing all items on scroll in samples and annotations grid views.
- Fixed an image size reading issue for some JPEG formats.
What's Changed
- Print server errors in the console by @michal-lightly in #203
- Add additional tests for the similarity endpoint by @lukas-lightly in #201
- Create a sample for annotation by @horatiualmasan in #210
- Add a function to convert captions dataset to coco dict by @michal-lightly in #206
- Add getter/setter methods for captions by @lukas-lightly in #213
- Fixed the annotation-details e2e test by @LeonardoRosaa in #215
- Add export for captions to python interface by @michal-lightly in #217
- Fix for issues related with hitting limit of sqlalchemy pool + TCP connections for by @ikondrat in #214
- Update frontend code to use sample_id for annotations by @horatiualmasan in #216
- Example of fixing unknown type problem by @ikondrat in #219
- Use hotkey for toggling label editing mode by @IgorSusmelj in #221
- Add filter support for the video endpoint by @LeonardoRosaa in #220
- Add slider for brightness and contrast go GUI by @IgorSusmelj in #224
- Add metadata filters for videos by @LeonardoRosaa in #222
- Reduce minimum size of box side from 10px to 4px by @IgorSusmelj in #226
- Fix video sample type in example in readme and docs by @IgorSusmelj in #227
- Introduce Logging Step 1 by @masakljun in #198
- Split caching steps in e2e tests yaml by @michal-lightly in #218
- Use dialog for export. SidePanel removal by @JonasWurst in #208
- Operator Dropdown by @JonasWurst in #205
- Show LightlyStudio version in the footer by @michal-lightly in #231
- Make undo operation work more consistenly by @IgorSusmelj in #225
- Dialog for FSC by @JonasWurst in #209
- Add captions export endpoint by @michal-lightly in #228
- Prepare folder structure for caption e2e tests by @michal-lightly in #233
- Add endpoint to retrieve video fields bounds by @LeonardoRosaa in #223
- Implement a new endpoint to count annotations for videos by @LeonardoRosaa in #232
- Skip classification annotation type in annotations grid view by @LeonardoRosaa in #237
- Header Menu by @JonasWurst in #235
- Use labelformat 0.1.9 by @michal-lightly in #241
- Bump version to 0.4.5 by @ikondrat in #240
Full Changelog: v0.4.4...v0.4.5
v0.4.4
[0.4.4] - 2025-11-26
Added
- Added video support. A video dataset can be loaded from a local folder and inspected in the GUI.
- Added video annotation support to the GUI. Video annotations can be currently loaded and exported only manually.
- Renamed
Dataset.add_samples_from_pathtoDataset.add_images_from_path. - Added class balancing with a uniform or the input distribution as target. These options can be set for the
AnnotationClassBalancingStrategy. - Added download_example_dataset utility function to simplify the quickstart experience by removing the need for git clone.
- Added
tag_depthparameter toDataset.add_samples_from_pathto automatically create tags from subdirectory names. - Added labeling support for captions: Add/delete/edit captions from the GUI
- Added similarity metadata calculation to
Dataset.
Changed
- Renamed the
distributionfield ofAnnotationClassBalancingStrategytotarget_distribution. - Display multiple captions per image in the Captions view.
Fixed
- Support pyav >= v14 by removing the deprecated
av.AVErrorimport.
What's Changed
- Split image_router and rename functions by @michal-lightly in #134
- Rename frontend hooks from sample to image by @michal-lightly in #135
- Rename AnnotationClassToTarget.distribution by @lukas-lightly in #138
- Add get_root_dataset to dataset_resolver by @horatiualmasan in #140
- Add get_filtered_samples function by @michal-lightly in #141
- Use label names in target class balancing by @lukas-lightly in #139
- Add an API endpoint to list samples by @michal-lightly in #142
- Add API endpoint to provide the root dataset by @horatiualmasan in #145
- Added video grid view by @LeonardoRosaa in #118
- Sample Detail view: editable captions by @JonasWurst in #132
- Show captions by sample in caption grid view by @michal-lightly in #146
- Add API endpoint to provide the dataset hierarchy by @horatiualmasan in #147
- Add tagging info to readme and docs and changelog by @masakljun in #130
- Initial implementation of dynamic dataset hierarchy by @LeonardoRosaa in #150
- Added frames grid view by @LeonardoRosaa in #119
- Added video details view by @LeonardoRosaa in #122
- Add a demo dataset download function directly to the studio by @masakljun in #137
- Selection: Add annotation_balancing syntactic sugar by @masakljun in #144
- Remove unused caption endpoint by @michal-lightly in #149
- Use SampleFilter in ImageFilter by @michal-lightly in #151
- Caption editable in Caption GridView by @JonasWurst in #155
- Use correct matrix.python version in unittests by @MalteEbner in #154
- Refactor CaptionFiled by @JonasWurst in #158
- Caption Delete Route and Resolver by @JonasWurst in #156
- Enable multithreading for video decoding by @horatiualmasan in #153
- Add Caption Resolver and Route by @JonasWurst in #157
- Added frame details view by @LeonardoRosaa in #123
- Use separate environment variables for test scripts by @michal-lightly in #163
- Rename CaptionTable.caption_id to sample_id by @michal-lightly in #159
- Add function to get or create an arbitrary child dataset by @michal-lightly in #165
- Simplify batching logic when loading samples by @michal-lightly in #167
- Add quotes to pip install extras for ZSH compatibility by @masakljun in #169
- Remove AnnotationImageView and AnnotationDetailsView by @horatiualmasan in #161
- Add Caption Frontend by @JonasWurst in #166
- Delete Caption Frontend by @JonasWurst in #160
- Remove caption test fixture by @JonasWurst in #168
- Changelog for Caption Labeling Support by @JonasWurst in #170
- Document Class Distribution Balancing Selection by @masakljun in #162
- Update development guidelines by @michal-lightly in #173
- Add
compute_similarity_metadatafunction by @lukas-lightly in #172 - Link CaptionTable to SampleTable by @michal-lightly in #164
- Link annotations to SampleTable by @horatiualmasan in #171
- Remove CaptionTable.dataset_id by @michal-lightly in #176
- Class balancing for an incomplete target by @lukas-lightly in #177
- Fix metadata filters for infinite grid query by @MalteEbner in #181
- Create a child dataset for annotations by @horatiualmasan in #175
- Add tests for input and uniform distributions by @masakljun in #178
- Add
compute_similarity_metadatato Dataset by @lukas-lightly in #180 - Support pyav versions >= v14 by @MalteEbner in #182
- add example and launch instruction to index video by @ikondrat in #187
- Add example script to load video annotations by @michal-lightly in #185
- Add documentation about similarity by @lukas-lightly in #188
- Allow creating and editing annotations within the frame details view by @LeonardoRosaa in #179
- Refactor _get_class_balancing_data() by @lukas-lightly in #191
- Improve video grid loading speed by @horatiualmasan in #183
- Remove DatasetTable.get_samples function by @masakljun in #184
- Fix video frame orientation by @michal-lightly in #192
- Display annotations within the video grid view and video details view by @LeonardoRosaa in #193
- Display annotations within the video frame grid view by @LeonardoRosaa in #189
- Minor docs improvements for lightlystudio by @IgorSusmelj in #186
- Rename
Dataset.add_samples_from_pathtoDataset.add_images_from_pathby @horatiualmasan in #197 - Update docs and changelog with video by @michal-lightly in #195
- Hide annotations menu item for video and video frame sample types by @LeonardoRosaa in #196
- Add similarity API endpoint by @lukas-lightly in #190
- Fixed label disappearing after a few clicks by @LeonardoRosaa in #200
- Fix flakey test by @mihnea-necsulescu in #199
- Bump version to 0.4.4 by @michal-lightly in #202
Full Changelog: v0.4.3...v0.4.4
v0.4.3
[0.4.3] - 2025-11-13
Added
- Added class balancing with a uniform or the input distribution as target. These options can be set for the
AnnotationClassBalancingStrategy.
Fixed
- Fixed installation issue with Python 3.13: Properly declare package compatibility in pyproject.toml.
What's Changed
- Add uniform class balancing by @lukas-lightly in #112
- Added endpoint to retrieve a video by @LeonardoRosaa in #116
- Add tag_depth=1 support to add_samples_from_path by @masakljun in #84
- Added endpoint to retrieve a frame by @LeonardoRosaa in #117
- Add videos from path by @horatiualmasan in #90
- Add caption update resolver by @JonasWurst in #120
- Reintroduce SampleFilter by @michal-lightly in #115
- Add "input" class balancing by @lukas-lightly in #125
- Add cloud storage installation info to docs by @masakljun in #126
- Bugfix: Use mock DB in tests by @michal-lightly in #129
- Add an example video script for development testing by @michal-lightly in #127
- Adding caption update endpoint by @JonasWurst in #128
- Rename samples backend route to images by @michal-lightly in #131
- Add dataset and caption filters to SampleFilter by @michal-lightly in #133
- Fix: Properly declare Python 3.13 compatibility. Bump version to 0.4.3. by @michal-lightly in #136
Full Changelog: v0.4.2...v0.4.3
v0.4.2
[0.4.2] - 2025-11-11
Added
- Added new selection strategy:
AnnotationClassBalancingStrategy. - Support for Python 3.13.
- Display captions within Sample Details.
- Added more detailed setup instructions to CONTRIBUTION.md
- Added a detailed section about cloud support to the docs.
Changed
- Changed the grid slider to define how many items will appear per row.
- Auto-scroll to the selected annotation in the sample details side panel.
Fixed
- Fixed issue when embedding plot wasn't updating after changing filters.
- Prevent duplicated annotation labels: Fixed an issue that occurred when adding samples from yolo using multiple splits.
- Added
requestsas an explicit dependency to prevent potential errors during embedding model download. - Embedding generation RAM usage fixed by using
np.ndarray.
What's Changed
- First step of refactoring the dataset resolver by @IgorSusmelj in #49
- Merge a feature branch with initial changes for multimodality support by @michal-lightly in #45
- Added the make command for downloading the example dataset by @LeonardoRosaa in #50
- Rename test helper create_sample to create_image by @michal-lightly in #48
- Rename variables in tests by @michal-lightly in #51
- Make thumbnail resizing more UX friendly by @LeonardoRosaa in #42
- Updated the panel slider style by @LeonardoRosaa in #53
- Introduce dataset hierarchy by @michal-lightly in #52
- Move dataset resolver export functions to a separate file by @michal-lightly in #54
- Add AnnotationClassBalancingStrategy by @lukas-lightly in #40
- Move the rest of dataset resolver functions to their own file by @michal-lightly in #56
- Auto-scroll to the selected annotation in the sample details side panel when selecting an annotation on a sample by @mihnea-necsulescu in #55
- Update the dataset_query imports by @JonasWurst in #57
- Rename datasets_resolver to dataset_resolver by @michal-lightly in #58
- Remove DatasetLoader class properly by @michal-lightly in #61
- Use pydantic mypy plugin for a stricter type check by @michal-lightly in #60
- Use np.ndarray for embed_images() by @lukas-lightly in #62
- Rename image_resolver to image_resolver_legacy by @michal-lightly in #64
- Remove API endpoint to create a dataset by @michal-lightly in #63
- Split image resolver by @michal-lightly in #67
- Create video and videoframe tables by @JonasWurst in #68
- Split image resolver tests by @michal-lightly in #72
- Introduce SampleType by @michal-lightly in #70
- feat: refactor Plot component to make it more controllable and scalable to extend by @ikondrat in #69
- Display captions within Sample Details by @LeonardoRosaa in #71
- Add video and video frame view with count by @JonasWurst in #74
- Check dataset type when adding samples by @michal-lightly in #78
- Added steps about how to set up the project for development by @LeonardoRosaa in #47
- Video create and get_all_by_dataset resolvers by @JonasWurst in #73
- Remove image_resolver.create by @michal-lightly in #79
- feat: update plot when filter is updated by @ikondrat in #80
- Return sample IDs from create_many by @michal-lightly in #81
- Rename SampleImage to ImageStub by @michal-lightly in #86
- Torch version handling by @lukas-lightly in #87
- Remove the image_resolver.update function by @michal-lightly in #88
- Remove dataset_id from ImageCreate by @michal-lightly in #89
- Add video resolver: count_by_id and filter_new_paths by @JonasWurst in #75
- Adding Basic Operator Parameters by @JonasWurst in #85
- Prevent adding annotation label duplicates by @JonasWurst in #92
- Remove dataset_id from ImageView by @michal-lightly in #93
- videoframe resolvers frame create get by @JonasWurst in #76
- Prepare the header for video support by @LeonardoRosaa in #91
- Introduce BaseOperator by @JonasWurst in #94
- Add explicit requests dependency by @michal-lightly in #98
- Use SampleTable.dataset_id instead of ImageTable.dataset_id in queries by @michal-lightly in #95
- Operator System: registry by @JonasWurst in #97
- Rename video table fields by @horatiualmasan in #99
- Add get_or_create_video_frame_child resolver function by @horatiualmasan in #101
- Remove dataset_id from ImageTable by @michal-lightly in #96
- Rename AnnotationBaseTable sample_id to parent_sample_id by @horatiualmasan in #102
- add to docs about using cloud storage and current support limitations by @masakljun in #100
- Rename Caption sample_id to parent_sample_id by @michal-lightly in #104
- Allow the usage of scikit-learn 1.7.2 by @lukas-lightly in #103
- Add a note about Linux and Firefox by @lukas-lightly in #109
- Split sample resolver by @michal-lightly in #107
- Added endpoint to retrieve a list of videos by @LeonardoRosaa in #105
- Use VIDEO_FRAME dataset type for video frame datasets by @michal-lightly in #113
- Added endpoint to retrieve a list of frames by @LeonardoRosaa in #106
- Update read_sample to use ImageView.ImageViewTag objects by @horatiualmasan in #110
- Remove dataset_id from AnnotationCreate by @horatiualmasan in #111
- Rename SampleFilter to ImageFilter by @michal-lightly in #114
- Add operator endpoints by @JonasWurst in #108
- Bump version to 0.4.2 by @JonasWurst in #121
New Contributors
- @lukas-lightly made their first contribution in #40
- @masakljun made their first contribution in #100
Full Changelog: v0.4.1...v0.4.2
v0.4.1
[0.4.1] - 2025-10-27
Added
- Added a footer with useful links and information about filtered and total annotations or samples.
- Improved class docstrings for the most important user-facing classes.
- Added
Annotationtags section within the Annotation Details. - Added undoable action for editing annotations on the sample details.
- Allowed users to remove
Annotationtags from the Annotation Details.
Changed
- Updated button text to "View sample" in annotation details panel for better clarity.
- Pressing Escape while adding an annotation now cancels add-annotation mode.
- Improved the navbar to display button titles on hover and removed button text on small screens.
- Samples are now ordered by their filenames in the GUI.
- Introduce button to reset viewport changes for embedding plot.
- Improve UX for label picker when adding labels.
Removed
- Branding link from the
Embedding Views status bar
What's Changed
- Add analytics to docs by @michal-lightly in #1
- Update Release Date by @JonasWurst in #2
- Make it easier to leave adding annotation mode on sample details by @ikondrat in #5
- Update link to sample details by @ikondrat in #3
- Embedding plot: Remove unnecessary stuff from status bar by @LeonardoRosaa in #4
- Add Status Bar with links to Docs and Support to the GUI by @MalteEbner in #14
- Add docstrings to DatasetQuery by @MalteEbner in #10
- Add docstrings to SampleField by @MalteEbner in #17
- Make navbar more user friendly by @LeonardoRosaa in #15
- Add docstrings to Selection class by @MalteEbner in #21
- Update export dialog by @horatiualmasan in #11
- Order samples in gui by filename update e2e tests by @mihnea-necsulescu in #20
- Use Dataset instead of DatasetLoader for e2e tests by @michal-lightly in #25
- Add issue templates by @horatiualmasan in #24
- Remove DatasetLoader by @michal-lightly in #26
- Introduce button to reset to default view in plot by @ikondrat in #27
- Regenerate schema by @michal-lightly in #30
- Remove unique from file_path_abs by @horatiualmasan in #31
- Add contributing rules by @horatiualmasan in #29
- Add tag section to annotation detail view by @LeonardoRosaa in #23
- Undo in GUI does not work for editing by @LeonardoRosaa in #32
- Rework FSC Create and Refine GUI by @horatiualmasan in #12
- Cache 2d-embeddings in the database. by @MalteEbner in #33
- Allow removing of annotation tags by @LeonardoRosaa in #39
- Improve UX for label picker when adding labels by @IgorSusmelj in #37
- Show number of filtered and total samples to footer by @IgorSusmelj in #38
Full Changelog: v0.4.0...v0.4.1
v0.4.0
Added
- Public LightlyStudio release
Full Changelog: https://github.com/lightly-ai/lightly-studio/commits/v0.4.0