lightly-studio

lightly-aiApache-2.0活跃维护

面向多模态机器学习的数据平台,支持图像标注、数据筛选与清洗,帮助团队管理训练数据并提升数据质量。

LightlyStudio - The Unified Data Platform for Multimodal ML

v1.2.1发布于 2026-11-02 15:25 UTC908star +2 / 7 天42fork同步于 2026-11-10 11:52 UTC

怎么上手

由 README 提炼,执行前请确认
pip install lightly-studio
lightly-studio quickstart
硬件要求按 README 说明

README 称在单台 M1、16GB 内存的 MacBook 上可流畅处理 200 万张以上图像(含嵌入);未说明 GPU 或显存要求。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

本地跑的多模态数据平台,在浏览器里策展、标注和管理图像视频数据集

面向多模态机器学习的数据平台,支持图像标注、数据筛选与清洗,帮助团队管理训练数据并提升数据质量。

核心能力

  • 用嵌入图与套索选择按簇过滤样本
  • 支持 COCO、YOLO、文件夹与视频帧索引
  • 用采样挑选典型且多样的样本降低标注成本
  • 对比预测与真值做模型评估并导出问题样本
  • 通过插件调用 SAM 等模型自动标注

容易踩的坑

插件兼容性建议用 Python 3.10,例如 SAM 自动标注插件;GUI 默认起在 localhost:8001,可用 host 和 port 参数改;quickstart 会先下载示例数据集,用自己的数据需先跑 Python 脚本索引再启动服务。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v1.2.1
  1. v1.2.1最新正式版2026-11-02 · 2026-11-02 15:25 UTC

    Changelog

    Added

    • Annotations

      • Label with the "Smart select" and "Find all instances" assisted labeling tools in the sample details view, which save results as segmentation masks or bounding boxes. The tools use SAM 3 on fal.ai, need the fal extra (pip install "lightly-studio[fal]") and the FAL_KEY environment variable, and send images to fal.ai.
      • Delete selected annotations in bulk from the annotation grid.
      • Set the opacity of segmentation masks with the "Mask opacity" slider in the sample details view.
      • Reset brightness, contrast, and mask opacity to their defaults with one button in the sample details view.
    • Filtering

      • See histograms of the image width and height in the distribution panel of image datasets, and compare them by tag. Select a range on a histogram to filter the images by width or height.
      • Use metadata and boolean values in the query editor, with hover help and a metadata filter example.
    • Other

      • Python SDK: connect() trusts the custom CA certificates of an S3-compatible storage when the enterprise instance provides them.

    Changed

    • Embedding plot

      • Saved embedding plots now load in milliseconds instead of seconds on datasets with over 100k samples.
    • Settings

      • The settings dialog is organized in tabs.
      • "Save changes" in the settings dialog is enabled only when there are changes to save.
    • Other

      • The sample details view keeps collapsed and hidden annotation sources when you go to another sample. A page reload restores the defaults.
      • DuckDB database files retain a format readable by DuckDB 1.x when created or updated with DuckDB 2.x.

    Removed

    • BREAKING: Dropped Python 3.9 support. Upgrade to Python 3.10–3.14.

    Fixed

    • Annotations

      • Labeling with superpixels no longer skips cells or leaves pixels behind.
      • Existing selections no longer disappear while you paint with superpixels, and selecting many cells is faster.
      • Brush, eraser, and box drawing previews now use the custom color of the label.
      • In the annotation grid, changing the class after "Select all" now changes every selected annotation, not only the first 100. The selected annotations count and undo also cover all of them.
      • In Safari, the image in the details view has the correct size again, so annotations and labeling tools line up with it and show on top of it.
    • Filtering

      • The header of the filters panel, with the button to hide the panel, stays visible when you scroll the filters. You no longer have to scroll back to the top to hide the panel.
      • In the distribution panel, metadata bars now include images without annotations. Before, those images showed as filtered out even with no filters set.
      • The distribution panel keeps the selected plot when you open a sample and go back to the grid.
    • Other

      • In the settings dialog, pressing Escape while setting a shortcut now cancels the change instead of closing the dialog. The "Go back" shortcut is now always Escape and can no longer be changed.
      • Exporting from the export dialog no longer fails on Windows.
      • Python SDK: add_samples_from_coco now shows the real cause when it cannot read the annotations file from cloud storage.

    What's Changed

  2. v1.2.02026-10-23 · 2026-10-23 08:01 UTC
    查看更新说明

    Changelog

    Added

    • Evaluation

      • Edit the settings of an evaluation and rerun it, in the evaluation panel or the API.
      • Delete an evaluation in the evaluation panel or the API. Annotations stay unchanged, and filters that use the evaluation are removed.
    • Filtering

      • Filter by metadata in the query editor, e.g. metadata["score"] >= 0.8.
      • Python SDK: Filter images and videos by metadata, including nested fields, e.g. ImageSampleField.metadata["odometry.speed"] < 15.
      • Filter captions by tag and metadata in the captions tab.
      • Reset all filters with one click with the new "Clear all filters" button.
    • Annotations

      • Copy an annotation to another annotation source in the details view, or create a new source while you copy.
      • Set your own keyboard shortcut for AI-assisted labeling in the settings.
    • Other

      • Get started quickly with a short onboarding tour on image datasets.
      • See why a button is disabled in its tooltip.
      • Show sharp pixel edges when you zoom into images with the new image interpolation setting.
      • Python SDK: Embed video frames on a remote embedding server registered with register_default_embedder.
      • Python SDK: Report anonymous usage data on how data is loaded (format and source). Set LIGHTLY_STUDIO_ANALYTICS_ENABLED=false to opt out.

    Changed

    • Tags

      • BREAKING: A tag now holds only samples of its own collection, and tags no longer have a kind field. PostgreSQL migrates automatically. DuckDB users must re-index their data before they create tags.
      • Adding many samples to a tag is faster.
    • Embeddings

      • BREAKING: Python SDK: Image search in the GUI now needs an embedder that implements ImageBytesEmbedder. Implement it in your custom embedder to keep image search.
      • Python SDK: New video datasets embed frames with Perception Encoder (PE-Core-T16-384) instead of MobileCLIP. Existing datasets are not changed.
      • Python SDK: Crops and frames are embedded automatically with a previously used compatible remote embedder.
    • Embedding plot

      • Set the text axes with the new "Define axes" button. The applied texts show at the plot edges, and "Reset axes" returns to PaCMAP.
      • Text axes are now balanced and comparable. Lines at x = 0 and y = 0 split the plot into four parts, and axes with weak text matches now look small.
      • Points that are filtered out or have no category are easier to see on dark backgrounds.
    • Evaluation

      • The evaluation panel has clearer settings and confusion matrix filters. Sorts are grouped by metric, show the highest counts first, and mark missing results.
      • Python SDK: dataset.evaluate() and evaluation recompute are faster on large datasets.
    • Other

      • Python SDK: start_gui() opens the browser. Pass open_browser=False, or use lightly-studio gui --no-browser, to turn this off.

    Fixed

    • Annotations

      • Annotation cards stay aligned, source colors stay stable, and confidence stays visible when you hide annotations or switch to editing.
      • Deleting annotations now also deletes their captions.
    • Evaluation

      • Evaluation results are kept when a recompute fails.
    • Other

      • The grids return to the exact scroll position when you go back from the details view.
      • Python SDK: start_gui() stops cleanly on Ctrl+C, without a traceback.
      • The GUI footer no longer shows a dev commit hash for released versions.

    What's Changed

  3. v1.1.32026-10-07 · 2026-10-07 21:54 UTC
    查看更新说明

    Changelog

    Added

    • Add quickstart-enterprise CLI command to seed a remote enterprise instance with a demo dataset.
    • Python SDK: Index .mcap recordings into a dataset with McapDataset.load_or_create(...) and dataset.add_mcaps_from_path(...).
    • Python SDK: Attach 3D cuboids and frame tags from annotation MCAPs with dataset.add_labels_from_folder(...). A later call skips sequences that already have that annotation source.
    • Python SDK: Embed search queries on a remote embedding server with register_remote_embedder.
    • Add AI-Assisted labeling with adjustable superpixels for creating and editing instance segmentation masks in WASM-capable browsers.
    • Python SDK: Enable metric recomputing for instance-segmentation.
    • Show the distribution panel on the videos grid in the GUI, with annotation class and metadata distributions.
    • Python SDK: Embed images that are added after register_remote_embedder on the remote embedding server, if the server embeds image bytes.
    • Python SDK: Store the URL and API key of a remote embedder that register_default_embedder registered before an import, so that a later process, such as lightly-studio gui, searches on the server with no new registration.
    • Python SDK: Embed annotation crops on a remote embedding server that register_default_embedder registered, if the server embeds image bytes.

    Changed

    • Redesign the embedding plot selection tools as visible, sticky Pan, Rectangle, and Lasso buttons in the GUI.
    • Show the Rectangle and Lasso drag shortcuts in the embedding plot tool tooltips.
    • Show categorical metadata filters in the image sidebar with an optional field picker and expanded value lists.
    • Keep the query editor button enabled in the GUI. Clicking "Re-apply" refreshes the results with the current data.
    • Move the Tags, Metadata, and Embeddings docs pages under Workflows and add Enterprise sign-up and demo buttons to the docs landing page. The old URLs redirect.

    Fixed

    • Disable the subpart diversity sampling strategy when no object detection or segmentation annotation sources exist in the collection.
    • Combine typicality and similarity computation and sampling into one backend request that continues if the frontend disconnects.
    • Fix the Values field in the distribution panel using a larger font than the other fields.
    • Fix the focus outline of the bulk annotation panel controls missing its left and right edges.
    • Fix instance segmentation masks that cannot be selected with a click when their bounding boxes are hidden in the GUI.
    • Fix undoing an annotation deletion restoring it to the default source instead of its original one.
    • Return 409 instead of 500 for text and image search on a collection whose embedding space cannot embed the query, and 502 when its embedding server cannot be used.
    • Python SDK: Keep the image embeddings stored before an embedder failure, and embed only the images without an embedding when the images are added again with embed=True.

    What's Changed

  4. lightly-studio-serve/v0.1.22026-10-07 · 2026-10-07 21:54 UTC
    查看更新说明

    Changelog

    Added

    • Add the conformance kit, lightly-studio-serve conformance <url>. It checks any server that claims to speak the protocol, reports one outcome per capability, and needs no dataset.

    What's Changed

  5. v1.1.22026-09-21 · 2026-09-21 11:06 UTC
    查看更新说明

    Changelog

    Added

    • Choose how many categorical metadata values to show in distribution plots.
    • Python SDK: Read aggregate evaluation metrics (per-class and micro-averaged precision, recall, and F1, plus classification accuracy) with dataset.evaluate().metrics(run_id).
    • Add an optional preselected tag selector to the sampling dialog.

    Changed

    • Speed up coloring the embedding plot by tags on large datasets by up to 2x.
    • Show loading spinners in distribution plots in the GUI.
    • Preselected samples are now part of the sampling result.
    • Move each docs page into a folder named for its nav section. The old URLs redirect.
    • Speed up video embedding by decoding videos in parallel, overlapping decoding with the model forward (up to about 2.4× faster when embedding many videos).
    • Register a custom embedder with register_default_embedder and the capability interfaces from lightly_studio_serve.embedder, replacing set_default_embedding_model and the EmbeddingGenerator protocols.

    Fixed

    • Categorical distribution requests are now up to 80% faster by fetching only the selected field.
    • Fix hf:// directory ingest reporting every file as missing.
    • Fix the distribution panel and annotation class counts not updating when a filter changes.
    • Speed up the initial page load in the GUI by up to ~3.5 seconds by no longer loading the query editor on every page.

    What's Changed

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    🚀 Try it in 60 seconds

    LightlyStudio runs on your computer and opens in your browser. The following command downloads an example dataset with images, annotations, and evaluation results — no account needed.

    pip install lightly-studio
    lightly-studio quickstart
    

    Workflows

    Example workflows

    LightlyStudio is a browser app that runs on your own computer. Load your data into the local database with a Python script, then start the server and explore it in your browser.

    Create a file named example_coco.py:

    import lightly_studio as ls
    
    # Download the example dataset (will be skipped if it already exists)
    dataset_path = ls.utils.download_example_dataset(download_dir="dataset_examples")
    
    dataset = ls.ImageDataset.load_or_create()
    dataset.add_samples_from_coco(
        annotations_json=f"{dataset_path}/coco_subset_128_images/instances_train2017.json",
        images_path=f"{dataset_path}/coco_subset_128_images/images",
    )
    
    # Start the UI server on localhost:8001.
    # Pass `host` and `port` parameters to customize it.
    # Reopen the app later with `lightly-studio gui` instead of re-running this script.
    ls.start_gui()
    

    Run python example_coco.py and open the printed URL to inspect images with their annotations.

    To ingest COCO samples with segmentation masks instead of object detections, pass annotation_type=ls.AnnotationType.SEGMENTATION_MASK to add_samples_from_coco().

    Create a file named example_image.py:

    import lightly_studio as ls
    
    # Download the example dataset (will be skipped if it already exists)
    dataset_path = ls.utils.download_example_dataset(download_dir="dataset_examples")
    
    # Index the images, create embeddings, and store everything in the local database.
    dataset = ls.ImageDataset.load_or_create()
    dataset.add_images_from_path(
        path=f"{dataset_path}/coco_subset_128_images/images",
    )
    
    # Start the UI server on localhost:8001.
    # Pass `host` and `port` parameters to customize it.
    ls.start_gui()
    

    Run python example_image.py and open the printed URL in your browser.

    Other starting points: YOLO datasets, video folders, custom annotations, model evaluation, notebooks, and more in the docs.

    📚 Tutorials

    Step-by-step guides covering complete workflows — from raw, unlabeled data to a trained and evaluated model:

    A selection of features

    Set up a dataset

    Work with your data

    🐍 Python Interface

    Everything in LightlyStudio is scriptable: index datasets, query and edit samples, sample subsets, and export the result. See the API reference.

    🤝 Contribute

    We welcome contributions! Please check our issues page for current tasks and improvements, or propose new issues yourself. See CONTRIBUTING.md for development setup and validation instructions.

    💬 Contact

    Website Discord GitHub X YouTube LinkedIn