> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.ovalbee.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.ovalbee.com/_mcp/server.

# Import from Dataset Ninja

> Import a full dataset or a sample from Dataset Ninja, including its images, annotations, splits and image-level labels.

## Overview

Imports a public dataset from [Dataset Ninja](https://datasetninja.com/), in full or as its published sample, into the OvalBee dataset you pick. Images keep their annotations and are tagged with their split and image-level labels.

Dataset Ninja is a catalog of public computer vision datasets. Pick one from the built-in catalog or paste a link. Everything lands in the one destination dataset, as a new version of it. The `LAST_RUN` output opens a hidden dataset holding only the images and annotations of the latest run.

```mermaid
flowchart LR
  n1["Import from Dataset Ninja"] --> n2["Dataset"]
```

## Prerequisites

| Requirement         | What you need                                                                                                    |
| ------------------- | ---------------------------------------------------------------------------------------------------------------- |
| **Internet access** | A worker that can reach `datasetninja.com` and `assets.supervisely.com`, where Dataset Ninja hosts its archives. |

## How it works

Looks up the archive of the chosen Dataset Ninja page, full or sample.

Downloads and unpacks the archive.

Creates a new version of the destination dataset.

Imports each Supervisely project in the archive with its annotations, then uploads any images outside a project without annotations.

Tags every project image with the split it came from and with its image-level labels.

Adds the images and their annotations to the new version and to the hidden `LAST_RUN` dataset, and adds the classes and tags the projects declare to the destination's ontology.

## FAQ

#### Which link should I paste?

Click **Select dataset** to browse the catalog. You can search it by name, filter it by category, and sort it by name or image count. For a page address such as `https://datasetninja.com/pcb-component-detection`, choose **Use a link instead** at the bottom of the dialog. The node looks up the Supervisely-format archive when it runs, so there's no need to copy the download URL by hand. An archive link on `assets.supervisely.com` that a flow already holds is downloaded as it is, whatever **Import size** says.

#### Does it import the full dataset or a sample?

**Import size** defaults to **Full**. Choose **Sample** for the smaller archive published by Dataset Ninja. Catalog rows marked **(no sample)** have none, and a sample import of such a dataset stops with an error instead of downloading the full dataset.

#### What can the archive contain?

A ZIP or TAR archive holding Supervisely-formatted projects, plain image directories, or both. Projects keep their annotations, while loose JPEG, PNG, BMP, and TIFF images are imported without any.

#### Everything lands in one dataset — how do I get the splits back?

Each project image carries the archive's structure as asset tags, so [Filter images](/node-library/nodes/filter-filter-images) can carve subsets out of the single imported dataset.

| Tag             | Where it comes from                                                                                                                                                                                                                                |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `split`         | The name of the dataset directory inside the archive (`valid`, `train`, `robots_project-ds0`), or an image label named after a split (`train`, `val`, `valid`, `validation`, `test`, `trainval`, `dev`). The directory wins when both are present. |
| `class_<label>` | An image-level label with no value, one tag per label, always `true`.                                                                                                                                                                              |
| `<name>`        | An image-level label that has a value, kept as it is, for example `weather: rain`.                                                                                                                                                                 |

In **Filter images** these read as `images:split=valid`, `images:class_cat=true`, `images:weather=rain`. Dots and commas in a label name become underscores, so the tag stays filterable. Loose images carry no tags.

#### Why was my link refused?

The node imports only from Dataset Ninja: an `https://datasetninja.com/<dataset>` page, or an archive on `assets.supervisely.com`. A link to any other site, over plain `http`, with a user name or password, or with a port other than 443 stops the run before anything is downloaded. The node doesn't follow redirects either, so a server that answers with one fails the run.

#### Why did the run fail?

The page address may not name a Dataset Ninja dataset, or the dataset isn't published in Supervisely format, in which case only its original source offers a download. Otherwise the link couldn't be fetched or unpacked, or the archive held no importable images.

#### What happens when I run it again?

The whole archive is imported again into another new version of the destination dataset, and every image gets a second copy there. The node doesn't replace earlier images, and the earlier versions stay available. `LAST_RUN` moves to a new version holding only this run. Point the node at a new dataset when you don't want duplicates.

## Inputs

**`Dataset Ninja dataset`** `string` — required

Public dataset to import. Click the field to browse the [Dataset Ninja](https://datasetninja.com) catalog by name or category, or paste a Dataset Ninja page link at the bottom of the dialog. Placeholder: `https://datasetninja.com/pcb-component-detection`. Key: `LINK`.

---

**`Import size`** `select` — required, default: full

Choose the full dataset or its published sample. If no sample is available, the import stops without downloading the full dataset. If Dataset Ninja dataset holds an archive link on assets.supervisely.com, that archive is downloaded whatever you choose here. Key: `ARCHIVE_TYPE`.

Options:

* Full (`full`)
* Sample (`sample`)

---

**`Destination dataset`** `dataset` — required

Dataset that receives the imported images and annotations, or a new name to create one. Each import adds a new version, so what the dataset held before stays available. Key: `DATASET`.

---

## Outputs

**`Dataset`** `dataset`

ID of the OvalBee dataset that received imported image assets. Key: `DATASET`.

---

**`Last Run`** `dataset`

Hidden dataset containing the images and annotations imported during the last run. A rerun writes a new version of it. Shown as an artifact. Key: `LAST_RUN`.

---

## JSON config

Machine-readable node interface for automation and advanced usage.

#### Show JSON

```json
{
  "name": "Import from Dataset Ninja",
  "description": "Import a full dataset or a sample from Dataset Ninja, including its images, annotations, splits and image-level labels.",
  "category": "Import",
  "namespace": "datasetninja",
  "templateKey": "import_ops/import_from_dataset_ninja",
  "version": "v1",
  "inputs": [
    {
      "key": "LINK",
      "label": "Dataset Ninja dataset",
      "type": "string",
      "description": "Public dataset to import. Click the field to browse the [Dataset Ninja](https://datasetninja.com) catalog by name or category, or paste a Dataset Ninja page link at the bottom of the dialog.",
      "required": true,
      "default": null,
      "visibleWhen": null,
      "options": {
        "control": "dataset-ninja",
        "placeholder": "https://datasetninja.com/pcb-component-detection"
      }
    },
    {
      "key": "ARCHIVE_TYPE",
      "label": "Import size",
      "type": "select",
      "description": "Choose the full dataset or its published sample. If no sample is available, the import stops without downloading the full dataset. If Dataset Ninja dataset holds an archive link on assets.supervisely.com, that archive is downloaded whatever you choose here.",
      "required": true,
      "default": "full",
      "visibleWhen": null,
      "options": {
        "control": "tabs",
        "options": [
          {
            "label": "Full",
            "value": "full"
          },
          {
            "label": "Sample",
            "value": "sample"
          }
        ]
      }
    },
    {
      "key": "DATASET",
      "label": "Destination dataset",
      "type": "dataset",
      "description": "Dataset that receives the imported images and annotations, or a new name to create one. Each import adds a new version, so what the dataset held before stays available.",
      "required": true,
      "default": null,
      "visibleWhen": null
    }
  ],
  "outputs": [
    {
      "key": "DATASET",
      "label": "Dataset",
      "type": "dataset",
      "description": "ID of the OvalBee dataset that received imported image assets.",
      "artifact": false,
      "badge": false,
      "badgeOpens": null,
      "hidden": false
    },
    {
      "key": "LAST_RUN",
      "label": "Last Run",
      "type": "dataset",
      "description": "Hidden dataset containing the images and annotations imported during the last run. A rerun writes a new version of it.",
      "artifact": true,
      "badge": false,
      "badgeOpens": null,
      "hidden": false
    }
  ]
}
```