lightly-studio 0.3.3__tar.gz → 0.3.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of lightly-studio might be problematic. Click here for more details.

Files changed (285) hide show
  1. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/PKG-INFO +86 -21
  2. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/USAGE.md +83 -19
  3. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/pyproject.toml +3 -2
  4. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/app.py +2 -0
  5. lightly_studio-0.3.4/src/lightly_studio/api/routes/api/caption.py +30 -0
  6. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/embeddings2d.py +36 -4
  7. lightly_studio-0.3.4/src/lightly_studio/api/routes/api/metadata.py +91 -0
  8. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/add_samples.py +138 -0
  9. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset.py +143 -16
  10. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/loader.py +2 -8
  11. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/db_manager.py +10 -4
  12. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/0.B3oFNb6O.css +1 -0
  13. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/2.CkOblLn7.css +1 -0
  14. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/Samples.CIbricz7.css +1 -0
  15. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/_layout.7Ma7YdVg.css +1 -0
  16. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/useFeatureFlags.CV-KWLNP.css → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/_layout.CefECEWA.css +1 -1
  17. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/transform.2jKMtOWG.css +1 -0
  18. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/-DXuGN29.js +1 -0
  19. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Cs1XmhiF.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/B7302SU7.js +1 -1
  20. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BeWf8-vJ.js +1 -0
  21. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Bqz7dyEC.js +1 -0
  22. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/C1FmrZbK.js +1 -0
  23. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BdfTHw61.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CSCQddQS.js +1 -1
  24. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CZGpyrcA.js +1 -0
  25. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CfQ4mGwl.js +1 -0
  26. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CiaNZCBa.js +1 -0
  27. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Cqo0Vpvt.js +417 -0
  28. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Cy4fgWTG.js +1 -0
  29. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D5w4xp5l.js +1 -0
  30. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DD63uD-T.js +1 -0
  31. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DQ8aZ1o-.js +3 -0
  32. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/keKYsoph.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DSxvnAMh.js +1 -1
  33. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D_JuJOO3.js +20 -0
  34. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D_ynJAfY.js +2 -0
  35. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Dafy4oEQ.js +1 -0
  36. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BfHVnyNT.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Dj4O-5se.js +1 -1
  37. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DmjAI-UV.js +1 -0
  38. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Dug7Bq1S.js +1 -0
  39. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Dv5BSBQG.js +1 -0
  40. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DzBTnFhV.js +1 -0
  41. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DzX_yyqb.js +1 -0
  42. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Frwd2CjB.js +1 -0
  43. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/H4l0JFh9.js +1 -0
  44. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/H60ATh8g.js +2 -0
  45. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/6t3IJ0vQ.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/qIv1kPyv.js +1 -1
  46. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/sLqs1uaK.js +20 -0
  47. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/u-it74zV.js +96 -0
  48. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/app.BPc0HQPq.js +2 -0
  49. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/start.SNvc2nrm.js +1 -0
  50. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/0.5jT7P06o.js +1 -0
  51. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/1.Cdy-7S5q.js +1 -0
  52. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/10.C_uoESTX.js +1 -0
  53. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/12.DcO8wIAc.js +1 -0
  54. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/2.C8HLK8mj.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/2.BIldfkxL.js +268 -113
  55. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/3.CLvg3QcJ.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/3.BC9z_TWM.js +1 -1
  56. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/4.BQhDtXUI.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/4.D8X_Ch5n.js +1 -1
  57. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/5.CAXhxJu6.js +39 -0
  58. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/6.uBV1Lhat.js → lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/6.DRA5Ru_2.js +1 -1
  59. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/7.WVBsruHQ.js +1 -0
  60. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/8.BuKUrCEN.js +20 -0
  61. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/9.CUIn1yCR.js +1 -0
  62. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/_app/version.json +1 -0
  63. lightly_studio-0.3.4/src/lightly_studio/dist_lightly_studio_view_app/index.html +45 -0
  64. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/examples/example.py +4 -0
  65. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/examples/example_coco.py +4 -0
  66. lightly_studio-0.3.4/src/lightly_studio/examples/example_coco_caption.py +24 -0
  67. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/examples/example_metadata.py +4 -1
  68. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/examples/example_selection.py +4 -0
  69. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/examples/example_split_work.py +4 -0
  70. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/examples/example_yolo.py +4 -0
  71. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/export/export_dataset.py +11 -3
  72. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/metadata/compute_typicality.py +1 -1
  73. lightly_studio-0.3.4/src/lightly_studio/models/caption.py +73 -0
  74. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/dataset.py +1 -2
  75. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/metadata.py +1 -1
  76. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/sample.py +2 -2
  77. lightly_studio-0.3.4/src/lightly_studio/resolvers/caption_resolver.py +80 -0
  78. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/dataset_resolver.py +4 -7
  79. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/__init__.py +2 -2
  80. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/sample/__init__.py +3 -3
  81. lightly_studio-0.3.4/src/lightly_studio/resolvers/metadata_resolver/sample/bulk_update_metadata.py +46 -0
  82. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/samples_filter.py +18 -10
  83. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/type_definitions.py +2 -0
  84. lightly_studio-0.3.3/src/lightly_studio/api/routes/api/metadata.py +0 -35
  85. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/0.CA_CXIBb.css +0 -1
  86. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/_layout.DS78jgNY.css +0 -1
  87. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/index.BVs_sZj9.css +0 -1
  88. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/transform.D487hwJk.css +0 -1
  89. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/8NsknIT2.js +0 -1
  90. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BND_-4Kp.js +0 -1
  91. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BjkP1AHA.js +0 -1
  92. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BuuNVL9G.js +0 -1
  93. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/BzKGpnl4.js +0 -1
  94. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CCx7Ho51.js +0 -1
  95. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CH6P3X75.js +0 -1
  96. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CR2upx_Q.js +0 -4
  97. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CWPZrTTJ.js +0 -1
  98. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CwPowJfP.js +0 -1
  99. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CxFKfZ9T.js +0 -1
  100. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/Cxevwdid.js +0 -1
  101. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D4whDBUi.js +0 -1
  102. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/D6r9vr07.js +0 -1
  103. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DA6bFLPR.js +0 -1
  104. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DEgUu98i.js +0 -3
  105. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DGTPl6Gk.js +0 -1
  106. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DKGxBSlK.js +0 -1
  107. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DQXoLcsF.js +0 -1
  108. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DQe_kdRt.js +0 -92
  109. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DcY4jgG3.js +0 -1
  110. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/H7C68rOM.js +0 -1
  111. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/RmD8FzRo.js +0 -1
  112. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/V-MnMC1X.js +0 -1
  113. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/app.BVr6DYqP.js +0 -2
  114. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/entry/start.u7zsVvqp.js +0 -1
  115. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/0.Da2agmdd.js +0 -1
  116. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/1.B11tVRJV.js +0 -1
  117. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/10.l30Zud4h.js +0 -1
  118. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/12.CgKPGcAP.js +0 -1
  119. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/5.-6XqWX5G.js +0 -1
  120. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/7.BXsgoQZh.js +0 -1
  121. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/8.BkbcnUs8.js +0 -1
  122. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/9.Bkrv-Vww.js +0 -1
  123. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/_app/version.json +0 -1
  124. lightly_studio-0.3.3/src/lightly_studio/dist_lightly_studio_view_app/index.html +0 -44
  125. lightly_studio-0.3.3/src/lightly_studio/resolvers/metadata_resolver/sample/bulk_set_metadata.py +0 -48
  126. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/.gitignore +0 -0
  127. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/__init__.py +0 -0
  128. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/__init__.py +0 -0
  129. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/cache.py +0 -0
  130. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/db_tables.py +0 -0
  131. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/features.py +0 -0
  132. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/annotation.py +0 -0
  133. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/annotation_label.py +0 -0
  134. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/annotations/__init__.py +0 -0
  135. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/annotations/create_annotation.py +0 -0
  136. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/classifier.py +0 -0
  137. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/dataset.py +0 -0
  138. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/dataset_tag.py +0 -0
  139. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/exceptions.py +0 -0
  140. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/export.py +0 -0
  141. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/features.py +0 -0
  142. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/sample.py +0 -0
  143. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/selection.py +0 -0
  144. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/settings.py +0 -0
  145. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/status.py +0 -0
  146. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/text_embedding.py +0 -0
  147. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/api/validators.py +0 -0
  148. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/healthz.py +0 -0
  149. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/images.py +0 -0
  150. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/routes/webapp.py +0 -0
  151. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/api/server.py +0 -0
  152. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/__init__.py +0 -0
  153. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/__init__.py +0 -0
  154. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/boolean_expression.py +0 -0
  155. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/dataset_query.py +0 -0
  156. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/field.py +0 -0
  157. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/field_expression.py +0 -0
  158. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/match_expression.py +0 -0
  159. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/order_by.py +0 -0
  160. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/sample_field.py +0 -0
  161. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/dataset_query/tags_expression.py +0 -0
  162. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/sample.py +0 -0
  163. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/core/start_gui.py +0 -0
  164. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/__init__.py +0 -0
  165. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/edge_embedding_generator.py +0 -0
  166. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/embedding_generator.py +0 -0
  167. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/embedding_manager.py +0 -0
  168. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/env.py +0 -0
  169. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/file_utils.py +0 -0
  170. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/fsspec_lister.py +0 -0
  171. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dataset/mobileclip_embedding_generator.py +0 -0
  172. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/env.js +0 -0
  173. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/LightlyLogo.BNjCIww-.png +0 -0
  174. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/OpenSans-Bold.DGvYQtcs.ttf +0 -0
  175. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/OpenSans-Italic-VariableFont_wdth_wght.B4AZ-wl6.ttf +0 -0
  176. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/OpenSans-Medium.DVUZMR_6.ttf +0 -0
  177. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/OpenSans-Regular.DxJTClRG.ttf +0 -0
  178. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/OpenSans-SemiBold.D3TTYgdB.ttf +0 -0
  179. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/assets/OpenSans-VariableFont_wdth_wght.BZBpG5Iz.ttf +0 -0
  180. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/69_IOA4Y.js +0 -0
  181. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/B90CZVMX.js +0 -0
  182. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CWj6FrbW.js +0 -0
  183. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/CYgJF_JY.js +0 -0
  184. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/chunks/DIeogL5L.js +0 -0
  185. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/nodes/11.CWG1ehzT.js +0 -0
  186. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/workers/clustering.worker-DKqeLtG0.js +0 -0
  187. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/_app/immutable/workers/search.worker-vNSty3B0.js +0 -0
  188. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/apple-touch-icon-precomposed.png +0 -0
  189. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/apple-touch-icon.png +0 -0
  190. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/dist_lightly_studio_view_app/favicon.png +0 -0
  191. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/export/lightly_studio_label_input.py +0 -0
  192. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/export_schema.py +0 -0
  193. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/few_shot_classifier/__init__.py +0 -0
  194. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/few_shot_classifier/classifier.py +0 -0
  195. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/few_shot_classifier/classifier_manager.py +0 -0
  196. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/few_shot_classifier/random_forest_classifier.py +0 -0
  197. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/metadata/complex_metadata.py +0 -0
  198. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/metadata/gps_coordinate.py +0 -0
  199. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/metadata/metadata_protocol.py +0 -0
  200. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/__init__.py +0 -0
  201. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation/__init__.py +0 -0
  202. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation/annotation_base.py +0 -0
  203. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation/instance_segmentation.py +0 -0
  204. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation/links.py +0 -0
  205. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation/object_detection.py +0 -0
  206. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation/semantic_segmentation.py +0 -0
  207. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/annotation_label.py +0 -0
  208. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/classifier.py +0 -0
  209. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/embedding_model.py +0 -0
  210. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/sample_embedding.py +0 -0
  211. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/settings.py +0 -0
  212. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/models/tag.py +0 -0
  213. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/py.typed +0 -0
  214. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/__init__.py +0 -0
  215. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/__init__.py +0 -0
  216. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/create.py +0 -0
  217. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/delete.py +0 -0
  218. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/get_all.py +0 -0
  219. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/get_by_id.py +0 -0
  220. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/get_by_ids.py +0 -0
  221. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/get_by_label_name.py +0 -0
  222. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/names_by_ids.py +0 -0
  223. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_label_resolver/update.py +0 -0
  224. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/__init__.py +0 -0
  225. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/count_annotations_by_dataset.py +0 -0
  226. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/create_many.py +0 -0
  227. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/delete_annotation.py +0 -0
  228. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/delete_annotations.py +0 -0
  229. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/get_all.py +0 -0
  230. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/get_by_id.py +0 -0
  231. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/update_annotation_label.py +0 -0
  232. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotation_resolver/update_bounding_box.py +0 -0
  233. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotations/__init__.py +0 -0
  234. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/annotations/annotations_filter.py +0 -0
  235. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/embedding_model_resolver.py +0 -0
  236. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/metadata_filter.py +0 -0
  237. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/sample/get_by_sample_id.py +0 -0
  238. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/sample/get_metadata_info.py +0 -0
  239. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/sample/get_value_for_sample.py +0 -0
  240. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/metadata_resolver/sample/set_value_for_sample.py +0 -0
  241. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/sample_embedding_resolver.py +0 -0
  242. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/sample_resolver.py +0 -0
  243. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/settings_resolver.py +0 -0
  244. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/resolvers/tag_resolver.py +0 -0
  245. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/selection/README.md +0 -0
  246. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/selection/mundig.py +0 -0
  247. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/selection/select.py +0 -0
  248. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/selection/select_via_db.py +0 -0
  249. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/selection/selection_config.py +0 -0
  250. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/__init__.py +0 -0
  251. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/create_annotation.py +0 -0
  252. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/delete_annotation.py +0 -0
  253. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/get_annotation_by_id.py +0 -0
  254. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/update_annotation.py +0 -0
  255. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/update_annotation_bounding_box.py +0 -0
  256. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/update_annotation_label.py +0 -0
  257. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/services/annotations_service/update_annotations.py +0 -0
  258. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/setup_logging.py +0 -0
  259. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/ACKNOWLEDGEMENTS +0 -0
  260. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/LICENSE +0 -0
  261. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/LICENSE_weights_data +0 -0
  262. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/README.md +0 -0
  263. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/__init__.py +0 -0
  264. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/__init__.py +0 -0
  265. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/clip.py +0 -0
  266. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/configs/mobileclip_b.json +0 -0
  267. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/configs/mobileclip_s0.json +0 -0
  268. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/configs/mobileclip_s1.json +0 -0
  269. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/configs/mobileclip_s2.json +0 -0
  270. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/image_encoder.py +0 -0
  271. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/logger.py +0 -0
  272. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/models/__init__.py +0 -0
  273. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/models/mci.py +0 -0
  274. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/models/vit.py +0 -0
  275. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/__init__.py +0 -0
  276. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/common/__init__.py +0 -0
  277. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/common/mobileone.py +0 -0
  278. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/common/transformer.py +0 -0
  279. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/image/__init__.py +0 -0
  280. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/image/image_projection.py +0 -0
  281. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/image/replknet.py +0 -0
  282. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/text/__init__.py +0 -0
  283. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/text/repmixer.py +0 -0
  284. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/modules/text/tokenizer.py +0 -0
  285. {lightly_studio-0.3.3 → lightly_studio-0.3.4}/src/lightly_studio/vendor/mobileclip/text_encoder.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lightly-studio
3
- Version: 0.3.3
3
+ Version: 0.3.4
4
4
  Summary: LightlyStudio is a lightweight, fast, and easy-to-use data exploration tool for data scientists and engineers.
5
5
  Classifier: Operating System :: MacOS :: MacOS X
6
6
  Classifier: Operating System :: Microsoft :: Windows
@@ -10,7 +10,8 @@ Classifier: Programming Language :: Python :: 3.8
10
10
  Classifier: Programming Language :: Python :: 3.9
11
11
  Classifier: Programming Language :: Python :: 3.10
12
12
  Classifier: Programming Language :: Python :: 3.11
13
- Requires-Python: >=3.8
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Requires-Python: <3.13,>=3.8
14
15
  Requires-Dist: annotated-types==0.7.0
15
16
  Requires-Dist: duckdb-engine<0.17,>=0.15.0
16
17
  Requires-Dist: duckdb<1.3,>=1.2.2
@@ -60,7 +61,7 @@ Description-Content-Type: text/markdown
60
61
 
61
62
  We at **[Lightly](https://lightly.ai)** created **LightlyStudio**, an open-source tool
62
63
  designed to supercharge your data curation workflows for computer vision datasets. Explore
63
- your data, visualize annotations and crops, tag samples, and export curated lists to improve
64
+ your data, visualize captions, annotations and crops, tag samples, and export curated lists to improve
64
65
  your machine learning pipelines. And much more!
65
66
 
66
67
  LightlyStudio runs entirely locally on your machine, keeping your data private. It consists
@@ -72,7 +73,7 @@ Using LightlyStudio typically involves these steps:
72
73
 
73
74
  1. **Index Your Dataset:** Run a Python script using the `lightly_studio` library to process your local dataset (images and annotations) and save metadata into a local `lightly_studio.db` file.
74
75
  2. **Launch the UI:** The script then starts a local web server.
75
- 3. **Explore & Curate:** Use the UI to visualize images, annotations, and object crops. Filter and search your data (experimental text search available). Apply tags to interesting samples (e.g., "mislabeled", "review").
76
+ 3. **Explore & Curate:** Use the UI to visualize images, annotations, captions, and object crops. Filter and search your data (experimental text search available). Apply tags to interesting samples (e.g., "mislabeled", "review").
76
77
  4. **Export Curated Data:** Export information (like filenames) for your tagged samples from the UI to use downstream.
77
78
  5. **Stop the Server:** Close the terminal running the script (Ctrl+C) when done.
78
79
 
@@ -111,7 +112,7 @@ The library is OS-independent and works on Windows, Linux, and macOS.
111
112
 
112
113
  ```shell
113
114
  # 1. Create and activate a virtual environment (Recommended)
114
- # On Linux/macOS:
115
+ # On Linux/MacOS:
115
116
  python3 -m venv venv
116
117
  source venv/bin/activate
117
118
 
@@ -139,14 +140,12 @@ following contents in the same directory that contains the `dataset_examples/` f
139
140
  ```python
140
141
  # example_yolo.py
141
142
 
142
- from pathlib import Path
143
143
  import lightly_studio as ls
144
144
 
145
145
  # Create a dataset and add the samples from the yolo format
146
146
  dataset = ls.Dataset.create()
147
147
  dataset.add_samples_from_yolo(
148
148
  data_yaml="dataset_examples/road_signs_yolo/data.yaml",
149
- input_split="test",
150
149
  )
151
150
 
152
151
  # Start the UI application on the port 8001.
@@ -202,7 +201,6 @@ the `dataset_examples/` folder:
202
201
  ```python
203
202
  # example_coco.py
204
203
 
205
- from pathlib import Path
206
204
  import lightly_studio as ls
207
205
 
208
206
  # Create a dataset and add the samples from the coco format
@@ -245,6 +243,56 @@ COCO uses a single JSON file containing all annotations. The format consists of
245
243
 
246
244
  </details>
247
245
 
246
+ ### COCO Captions
247
+
248
+ To run a caption example using a COCO dataset, create a file named
249
+ `example_coco_captions.py` with the following contents in the same directory that contains
250
+ the `dataset_examples/` folder:
251
+
252
+ ```python
253
+ # example_coco_captions.py
254
+
255
+ import lightly_studio as ls
256
+
257
+ # Create a dataset and add the samples from the coco format
258
+ dataset = ls.Dataset.create()
259
+ dataset.add_samples_from_coco_caption(
260
+ annotations_json="dataset_examples/coco_subset_128_images/captions_train2017.json",
261
+ images_path="dataset_examples/coco_subset_128_images/images",
262
+ )
263
+
264
+ # Start the UI application on the port 8001.
265
+ ls.start_gui()
266
+ ```
267
+
268
+ Run the script:
269
+
270
+ ```
271
+ python example_coco_captions.py
272
+ ```
273
+
274
+ Now you can inspect samples with their assigned captions in the app. When you are done,
275
+ stop the app by pressing Ctrl+C in the terminal.
276
+
277
+ <details>
278
+ <summary>The COCO format details:</summary>
279
+
280
+ ```
281
+ coco_subset_128_images/
282
+ ├── images/
283
+ │ ├── image1.jpg
284
+ │ ├── image2.jpg
285
+ │ └── ...
286
+ └── captions_train2017.json # Single JSON file containing all captions
287
+ ```
288
+
289
+ COCO uses a single JSON file containing all captions. The format consists of three main components:
290
+
291
+ - Images: Defines metadata for each image in the dataset.
292
+ - Annotations: Defines the captions.
293
+
294
+ </details>
295
+
248
296
  ## 🔍 How It Works
249
297
 
250
298
  1. Your **Python script** uses the `lightly_studio` **Dataset**.
@@ -330,7 +378,6 @@ import lightly_studio as ls
330
378
  dataset = ls.Dataset.create()
331
379
  dataset.add_samples_from_yolo(
332
380
  data_yaml="my_yolo_dataset/data.yaml",
333
- input_split="val",
334
381
  )
335
382
 
336
383
  ls.start_gui()
@@ -628,12 +675,12 @@ query.add_tag("tag_name")
628
675
 
629
676
  #### Export Samples
630
677
 
631
- Currently, exporting to the COCO object detection format is supported. The following example shows how to export the samples in the query to a COCO JSON file:
678
+ Currently, exporting to the COCO object detection format is supported and only annotations
679
+ of type object detection are exported. The following example exports the samples in the query
680
+ to a COCO JSON file named `coco_export.json`:
632
681
 
633
682
  ```py
634
- from pathlib import Path
635
-
636
- query.export().to_coco_object_detections(Path("coco_export.json"))
683
+ query.export().to_coco_object_detections()
637
684
  ```
638
685
 
639
686
  ### Examples
@@ -697,7 +744,11 @@ samples.
697
744
  Set the `LIGHTLY_STUDIO_LICENSE_KEY` environment variable before using selection features:
698
745
 
699
746
  ```bash
747
+ # On Linux/MacOS
700
748
  export LIGHTLY_STUDIO_LICENSE_KEY="license_key_here"
749
+
750
+ # On Windows (PowerShell)
751
+ $env:LIGHTLY_STUDIO_LICENSE_KEY="license_key_here"
701
752
  ```
702
753
 
703
754
  Alternatively, set it inside your Python script:
@@ -707,6 +758,12 @@ import os
707
758
  os.environ["LIGHTLY_STUDIO_LICENSE_KEY"] = "license_key_here"
708
759
  ```
709
760
 
761
+ Or in a `.env` file:
762
+
763
+ ```
764
+ LIGHTLY_STUDIO_LICENSE_KEY="license_key_here"
765
+ ```
766
+
710
767
  #### Diversity Selection
711
768
 
712
769
  Diversity selection can be configured directly from a `DatasetQuery`. The example below showcases a simple case of selecting diverse samples.
@@ -796,19 +853,27 @@ with open("export.txt", "w") as f:
796
853
 
797
854
  ## 📚 **FAQ**
798
855
 
799
- ### Are the datasets persistent?
856
+ ### Does LightlyStudio persist the datasets?
800
857
 
801
- Yes, the information about datasets is persistent and stored in the db file. You can see it after the dataset is processed.
802
- If you rerun the loader it will create a new dataset representing the same dataset, keeping the previous dataset information untouched.
858
+ Yes, the information about datasets is persisted in a database file. You can see inspect
859
+ it after the dataset is processed. Use `Dataset.load()` to load a dataset from a pre-existing
860
+ database.
803
861
 
804
862
  ### Can I change the database path?
805
863
 
806
- Not yet. The database is stored in the working directory by default.
864
+ Yes, the database can be selected as follows:
865
+ ```py
866
+ import lightly_studio as ls
867
+
868
+ ls.db_manager.connect(db_file="custom.db")
869
+ ```
807
870
 
808
- ### Can I launch in another Python script or do I have to do it in the same script?
871
+ ### Can I use LightlyStudio from two scripts in parallel?
809
872
 
810
- It is possible to use only one script at the same time because we lock the db file for the duration of the script.
873
+ Only one script can be run at one time as the app uses a database lock for data integrity.
811
874
 
812
- ### Can I change the API backend port?
875
+ ### Can I change the API backend host and port?
813
876
 
814
- Yes. To change the port set the LIGHTLY_STUDIO_PORT variable to your preffered value. If at runtime the port is unavailable it will try to set it to a random value.
877
+ Yes, by setting environment variables. For the host set the LIGHTLY_STUDIO_HOST variable,
878
+ to change the port set the LIGHTLY_STUDIO_PORT variable. Note that if the port is unavailable
879
+ at runtime the app uses a random port number.
@@ -19,7 +19,7 @@
19
19
 
20
20
  We at **[Lightly](https://lightly.ai)** created **LightlyStudio**, an open-source tool
21
21
  designed to supercharge your data curation workflows for computer vision datasets. Explore
22
- your data, visualize annotations and crops, tag samples, and export curated lists to improve
22
+ your data, visualize captions, annotations and crops, tag samples, and export curated lists to improve
23
23
  your machine learning pipelines. And much more!
24
24
 
25
25
  LightlyStudio runs entirely locally on your machine, keeping your data private. It consists
@@ -31,7 +31,7 @@ Using LightlyStudio typically involves these steps:
31
31
 
32
32
  1. **Index Your Dataset:** Run a Python script using the `lightly_studio` library to process your local dataset (images and annotations) and save metadata into a local `lightly_studio.db` file.
33
33
  2. **Launch the UI:** The script then starts a local web server.
34
- 3. **Explore & Curate:** Use the UI to visualize images, annotations, and object crops. Filter and search your data (experimental text search available). Apply tags to interesting samples (e.g., "mislabeled", "review").
34
+ 3. **Explore & Curate:** Use the UI to visualize images, annotations, captions, and object crops. Filter and search your data (experimental text search available). Apply tags to interesting samples (e.g., "mislabeled", "review").
35
35
  4. **Export Curated Data:** Export information (like filenames) for your tagged samples from the UI to use downstream.
36
36
  5. **Stop the Server:** Close the terminal running the script (Ctrl+C) when done.
37
37
 
@@ -70,7 +70,7 @@ The library is OS-independent and works on Windows, Linux, and macOS.
70
70
 
71
71
  ```shell
72
72
  # 1. Create and activate a virtual environment (Recommended)
73
- # On Linux/macOS:
73
+ # On Linux/MacOS:
74
74
  python3 -m venv venv
75
75
  source venv/bin/activate
76
76
 
@@ -98,14 +98,12 @@ following contents in the same directory that contains the `dataset_examples/` f
98
98
  ```python
99
99
  # example_yolo.py
100
100
 
101
- from pathlib import Path
102
101
  import lightly_studio as ls
103
102
 
104
103
  # Create a dataset and add the samples from the yolo format
105
104
  dataset = ls.Dataset.create()
106
105
  dataset.add_samples_from_yolo(
107
106
  data_yaml="dataset_examples/road_signs_yolo/data.yaml",
108
- input_split="test",
109
107
  )
110
108
 
111
109
  # Start the UI application on the port 8001.
@@ -161,7 +159,6 @@ the `dataset_examples/` folder:
161
159
  ```python
162
160
  # example_coco.py
163
161
 
164
- from pathlib import Path
165
162
  import lightly_studio as ls
166
163
 
167
164
  # Create a dataset and add the samples from the coco format
@@ -204,6 +201,56 @@ COCO uses a single JSON file containing all annotations. The format consists of
204
201
 
205
202
  </details>
206
203
 
204
+ ### COCO Captions
205
+
206
+ To run a caption example using a COCO dataset, create a file named
207
+ `example_coco_captions.py` with the following contents in the same directory that contains
208
+ the `dataset_examples/` folder:
209
+
210
+ ```python
211
+ # example_coco_captions.py
212
+
213
+ import lightly_studio as ls
214
+
215
+ # Create a dataset and add the samples from the coco format
216
+ dataset = ls.Dataset.create()
217
+ dataset.add_samples_from_coco_caption(
218
+ annotations_json="dataset_examples/coco_subset_128_images/captions_train2017.json",
219
+ images_path="dataset_examples/coco_subset_128_images/images",
220
+ )
221
+
222
+ # Start the UI application on the port 8001.
223
+ ls.start_gui()
224
+ ```
225
+
226
+ Run the script:
227
+
228
+ ```
229
+ python example_coco_captions.py
230
+ ```
231
+
232
+ Now you can inspect samples with their assigned captions in the app. When you are done,
233
+ stop the app by pressing Ctrl+C in the terminal.
234
+
235
+ <details>
236
+ <summary>The COCO format details:</summary>
237
+
238
+ ```
239
+ coco_subset_128_images/
240
+ ├── images/
241
+ │ ├── image1.jpg
242
+ │ ├── image2.jpg
243
+ │ └── ...
244
+ └── captions_train2017.json # Single JSON file containing all captions
245
+ ```
246
+
247
+ COCO uses a single JSON file containing all captions. The format consists of three main components:
248
+
249
+ - Images: Defines metadata for each image in the dataset.
250
+ - Annotations: Defines the captions.
251
+
252
+ </details>
253
+
207
254
  ## 🔍 How It Works
208
255
 
209
256
  1. Your **Python script** uses the `lightly_studio` **Dataset**.
@@ -289,7 +336,6 @@ import lightly_studio as ls
289
336
  dataset = ls.Dataset.create()
290
337
  dataset.add_samples_from_yolo(
291
338
  data_yaml="my_yolo_dataset/data.yaml",
292
- input_split="val",
293
339
  )
294
340
 
295
341
  ls.start_gui()
@@ -587,12 +633,12 @@ query.add_tag("tag_name")
587
633
 
588
634
  #### Export Samples
589
635
 
590
- Currently, exporting to the COCO object detection format is supported. The following example shows how to export the samples in the query to a COCO JSON file:
636
+ Currently, exporting to the COCO object detection format is supported and only annotations
637
+ of type object detection are exported. The following example exports the samples in the query
638
+ to a COCO JSON file named `coco_export.json`:
591
639
 
592
640
  ```py
593
- from pathlib import Path
594
-
595
- query.export().to_coco_object_detections(Path("coco_export.json"))
641
+ query.export().to_coco_object_detections()
596
642
  ```
597
643
 
598
644
  ### Examples
@@ -656,7 +702,11 @@ samples.
656
702
  Set the `LIGHTLY_STUDIO_LICENSE_KEY` environment variable before using selection features:
657
703
 
658
704
  ```bash
705
+ # On Linux/MacOS
659
706
  export LIGHTLY_STUDIO_LICENSE_KEY="license_key_here"
707
+
708
+ # On Windows (PowerShell)
709
+ $env:LIGHTLY_STUDIO_LICENSE_KEY="license_key_here"
660
710
  ```
661
711
 
662
712
  Alternatively, set it inside your Python script:
@@ -666,6 +716,12 @@ import os
666
716
  os.environ["LIGHTLY_STUDIO_LICENSE_KEY"] = "license_key_here"
667
717
  ```
668
718
 
719
+ Or in a `.env` file:
720
+
721
+ ```
722
+ LIGHTLY_STUDIO_LICENSE_KEY="license_key_here"
723
+ ```
724
+
669
725
  #### Diversity Selection
670
726
 
671
727
  Diversity selection can be configured directly from a `DatasetQuery`. The example below showcases a simple case of selecting diverse samples.
@@ -755,19 +811,27 @@ with open("export.txt", "w") as f:
755
811
 
756
812
  ## 📚 **FAQ**
757
813
 
758
- ### Are the datasets persistent?
814
+ ### Does LightlyStudio persist the datasets?
759
815
 
760
- Yes, the information about datasets is persistent and stored in the db file. You can see it after the dataset is processed.
761
- If you rerun the loader it will create a new dataset representing the same dataset, keeping the previous dataset information untouched.
816
+ Yes, the information about datasets is persisted in a database file. You can see inspect
817
+ it after the dataset is processed. Use `Dataset.load()` to load a dataset from a pre-existing
818
+ database.
762
819
 
763
820
  ### Can I change the database path?
764
821
 
765
- Not yet. The database is stored in the working directory by default.
822
+ Yes, the database can be selected as follows:
823
+ ```py
824
+ import lightly_studio as ls
825
+
826
+ ls.db_manager.connect(db_file="custom.db")
827
+ ```
766
828
 
767
- ### Can I launch in another Python script or do I have to do it in the same script?
829
+ ### Can I use LightlyStudio from two scripts in parallel?
768
830
 
769
- It is possible to use only one script at the same time because we lock the db file for the duration of the script.
831
+ Only one script can be run at one time as the app uses a database lock for data integrity.
770
832
 
771
- ### Can I change the API backend port?
833
+ ### Can I change the API backend host and port?
772
834
 
773
- Yes. To change the port set the LIGHTLY_STUDIO_PORT variable to your preffered value. If at runtime the port is unavailable it will try to set it to a random value.
835
+ Yes, by setting environment variables. For the host set the LIGHTLY_STUDIO_HOST variable,
836
+ to change the port set the LIGHTLY_STUDIO_PORT variable. Note that if the port is unavailable
837
+ at runtime the app uses a random port number.
@@ -1,15 +1,16 @@
1
1
  [project]
2
2
  name = "lightly-studio"
3
- version = "0.3.3"
3
+ version = "0.3.4"
4
4
  description = "LightlyStudio is a lightweight, fast, and easy-to-use data exploration tool for data scientists and engineers."
5
5
  readme = "USAGE.md"
6
- requires-python = ">=3.8"
6
+ requires-python = ">=3.8,<3.13"
7
7
  classifiers = [
8
8
  "Programming Language :: Python :: 3",
9
9
  "Programming Language :: Python :: 3.8",
10
10
  "Programming Language :: Python :: 3.9",
11
11
  "Programming Language :: Python :: 3.10",
12
12
  "Programming Language :: Python :: 3.11",
13
+ "Programming Language :: Python :: 3.12",
13
14
  "Operating System :: POSIX :: Linux",
14
15
  "Operating System :: MacOS :: MacOS X",
15
16
  "Operating System :: Microsoft :: Windows",
@@ -16,6 +16,7 @@ from lightly_studio.api.routes import healthz, images, webapp
16
16
  from lightly_studio.api.routes.api import (
17
17
  annotation,
18
18
  annotation_label,
19
+ caption,
19
20
  classifier,
20
21
  dataset,
21
22
  dataset_tag,
@@ -89,6 +90,7 @@ api_router.include_router(export.export_router)
89
90
  api_router.include_router(sample.samples_router)
90
91
  api_router.include_router(annotation_label.annotations_label_router)
91
92
  api_router.include_router(annotation.annotations_router)
93
+ api_router.include_router(caption.captions_router)
92
94
  api_router.include_router(text_embedding.text_embedding_router)
93
95
  api_router.include_router(settings.settings_router)
94
96
  api_router.include_router(classifier.classifier_router)
@@ -0,0 +1,30 @@
1
+ """API routes for dataset captions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from uuid import UUID
6
+
7
+ from fastapi import APIRouter, Depends, Path
8
+ from typing_extensions import Annotated
9
+
10
+ from lightly_studio.api.routes.api.validators import Paginated, PaginatedWithCursor
11
+ from lightly_studio.db_manager import SessionDep
12
+ from lightly_studio.models.caption import CaptionsListView
13
+ from lightly_studio.resolvers import caption_resolver
14
+ from lightly_studio.resolvers.caption_resolver import GetAllCaptionsResult
15
+
16
+ captions_router = APIRouter(prefix="/datasets/{dataset_id}", tags=["captions"])
17
+
18
+
19
+ @captions_router.get("/captions", response_model=CaptionsListView)
20
+ def read_captions(
21
+ dataset_id: Annotated[UUID, Path(title="Dataset Id")],
22
+ session: SessionDep,
23
+ pagination: Annotated[PaginatedWithCursor, Depends()],
24
+ ) -> GetAllCaptionsResult:
25
+ """Retrieve captions for a dataset."""
26
+ return caption_resolver.get_all(
27
+ session=session,
28
+ dataset_id=dataset_id,
29
+ pagination=Paginated(offset=pagination.offset, limit=pagination.limit),
30
+ )
@@ -3,25 +3,40 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import io
6
+ from uuid import UUID
6
7
 
7
8
  import numpy as np
8
9
  import pyarrow as pa
9
10
  from fastapi import APIRouter, HTTPException, Response
10
11
  from numpy.typing import NDArray
11
12
  from pyarrow import ipc
13
+ from pydantic import BaseModel, Field
12
14
  from sklearn.manifold import TSNE
13
15
  from sqlmodel import select
14
16
 
15
17
  from lightly_studio.db_manager import SessionDep
16
18
  from lightly_studio.models.dataset import DatasetTable
17
19
  from lightly_studio.models.embedding_model import EmbeddingModelTable
18
- from lightly_studio.resolvers import sample_embedding_resolver
20
+ from lightly_studio.resolvers import sample_embedding_resolver, sample_resolver
21
+ from lightly_studio.resolvers.samples_filter import SampleFilter
19
22
 
20
23
  embeddings2d_router = APIRouter()
21
24
 
22
25
 
23
- @embeddings2d_router.get("/embeddings2d/tsne")
24
- def get_embeddings2d__tsne(session: SessionDep) -> Response:
26
+ class GetEmbeddings2DRequest(BaseModel):
27
+ """Request body for retrieving 2D embeddings."""
28
+
29
+ filters: SampleFilter | None = Field(
30
+ None,
31
+ description="Filter parameters identifying matching samples",
32
+ )
33
+
34
+
35
+ @embeddings2d_router.post("/embeddings2d/tsne")
36
+ def get_embeddings2d__tsne(
37
+ session: SessionDep,
38
+ body: GetEmbeddings2DRequest | None = None,
39
+ ) -> Response:
25
40
  """Return 2D embeddings serialized as an Arrow stream."""
26
41
  # TODO(Malte, 09/2025): Support choosing the dataset via API parameter.
27
42
  dataset = session.exec(select(DatasetTable).limit(1)).first()
@@ -37,7 +52,6 @@ def get_embeddings2d__tsne(session: SessionDep) -> Response:
37
52
  if embedding_model is None:
38
53
  raise HTTPException(status_code=404, detail="No embedding model configured.")
39
54
 
40
- # TODO(Malte, 09/2025): Support choosing a subset of samples via API parameter.
41
55
  embeddings = sample_embedding_resolver.get_all_by_dataset_id(
42
56
  session=session,
43
57
  dataset_id=dataset.dataset_id,
@@ -49,6 +63,22 @@ def get_embeddings2d__tsne(session: SessionDep) -> Response:
49
63
  x = embedding_values_tsne[:, 0]
50
64
  y = embedding_values_tsne[:, 1]
51
65
 
66
+ matching_sample_ids: set[UUID] | None = None
67
+ filters = body.filters if body else None
68
+ if filters:
69
+ matching_samples_result = sample_resolver.get_all_by_dataset_id(
70
+ session=session,
71
+ dataset_id=dataset.dataset_id,
72
+ filters=filters,
73
+ )
74
+ matching_sample_ids = {sample.sample_id for sample in matching_samples_result.samples}
75
+
76
+ sample_ids = [embedding.sample_id for embedding in embeddings]
77
+ if matching_sample_ids is None:
78
+ fulfils_filter = [1] * len(sample_ids)
79
+ else:
80
+ fulfils_filter = [1 if sample_id in matching_sample_ids else 0 for sample_id in sample_ids]
81
+
52
82
  # TODO(Malte, 09/2025): Save the 2D-embeddings in the database to avoid recomputing
53
83
  # them on every request.
54
84
 
@@ -57,6 +87,8 @@ def get_embeddings2d__tsne(session: SessionDep) -> Response:
57
87
  {
58
88
  "x": pa.array(x, type=pa.float32()),
59
89
  "y": pa.array(y, type=pa.float32()),
90
+ "fulfils_filter": pa.array(fulfils_filter, type=pa.uint8()),
91
+ "sample_id": pa.array([str(sample_id) for sample_id in sample_ids], type=pa.string()),
60
92
  }
61
93
  )
62
94
 
@@ -0,0 +1,91 @@
1
+ """This module contains the API routes for managing datasets."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List
6
+ from uuid import UUID
7
+
8
+ from fastapi import APIRouter, Depends, Path
9
+ from pydantic import BaseModel, Field
10
+ from typing_extensions import Annotated
11
+
12
+ from lightly_studio.api.routes.api.dataset import get_and_validate_dataset_id
13
+ from lightly_studio.db_manager import SessionDep
14
+ from lightly_studio.metadata import compute_typicality
15
+ from lightly_studio.models.dataset import DatasetTable
16
+ from lightly_studio.models.metadata import MetadataInfoView
17
+ from lightly_studio.resolvers import embedding_model_resolver
18
+ from lightly_studio.resolvers.metadata_resolver.sample.get_metadata_info import (
19
+ get_all_metadata_keys_and_schema,
20
+ )
21
+
22
+ metadata_router = APIRouter(prefix="/datasets/{dataset_id}", tags=["metadata"])
23
+
24
+
25
+ @metadata_router.get("/metadata/info", response_model=List[MetadataInfoView])
26
+ def get_metadata_info(
27
+ session: SessionDep,
28
+ dataset_id: Annotated[UUID, Path(title="Dataset Id")],
29
+ ) -> list[MetadataInfoView]:
30
+ """Get all metadata keys and their schema for a dataset.
31
+
32
+ Args:
33
+ session: The database session.
34
+ dataset_id: The ID of the dataset.
35
+
36
+ Returns:
37
+ List of metadata info objects with name, type, and optionally min/max values
38
+ for numerical metadata types.
39
+ """
40
+ return get_all_metadata_keys_and_schema(session=session, dataset_id=dataset_id)
41
+
42
+
43
+ class ComputeTypicalityRequest(BaseModel):
44
+ """Request model for computing typicality metadata."""
45
+
46
+ embedding_model_name: str | None = Field(
47
+ default=None,
48
+ description="Embedding model name (uses default if not specified)",
49
+ )
50
+ metadata_name: str = Field(
51
+ default="typicality",
52
+ description="Metadata field name (defaults to 'typicality')",
53
+ )
54
+
55
+
56
+ @metadata_router.post(
57
+ "/metadata/typicality",
58
+ status_code=204,
59
+ response_model=None,
60
+ )
61
+ def compute_typicality_metadata(
62
+ session: SessionDep,
63
+ dataset: Annotated[
64
+ DatasetTable,
65
+ Depends(get_and_validate_dataset_id),
66
+ ],
67
+ request: ComputeTypicalityRequest,
68
+ ) -> None:
69
+ """Compute typicality metadata for a dataset.
70
+
71
+ Args:
72
+ session: The database session.
73
+ dataset: The dataset to compute typicality for.
74
+ request: Request parameters including optional embedding model name
75
+ and metadata field name.
76
+
77
+ Returns:
78
+ None (204 No Content on success).
79
+ """
80
+ embedding_model = embedding_model_resolver.get_by_name(
81
+ session=session,
82
+ dataset_id=dataset.dataset_id,
83
+ embedding_model_name=request.embedding_model_name,
84
+ )
85
+
86
+ compute_typicality.compute_typicality_metadata(
87
+ session=session,
88
+ dataset_id=dataset.dataset_id,
89
+ embedding_model_id=embedding_model.embedding_model_id,
90
+ metadata_name=request.metadata_name,
91
+ )