Agent skill

Anomalib Adding A Datamodule

by open-edge-platform in open-edge-platform/anomalib

Adds a new dataset/datamodule to anomalib under src/anomalib/data/.

Apache-2.0Auto-check passedData & Analytics

Install Anomalib Adding A Datamodule

skills CLI
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamodule --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/open-edge-platform/anomalib.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/anomalib-adding-a-datamodule .claude/skills/anomalib-adding-a-datamodule && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
anomalib-adding-a-datamodule
GitHub stars
6.2k
Token cost
~3.7k tokens
SKILL.md length
1,010 words
Files
2
Skills in repo
17
Repo updated
First seen
Licence
Apache-2.0

At a glance

Adds a new dataset/datamodule to anomalib under src/anomalib/data/.

  • Works in 2 steps: Export from the image (or video/depth)… → Then add the import and all entry in…
  • Wiring a new data source into the AnomalibDataset/AnomalibDataModule base classes
  • SKILL.md covers Base classes to implement…, Reference: MVTecAD (standard…, Reference: Folder (generic… and Writing a brand-new datamodule…, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Anomalib Adding A Datamodule is an agent skill from open-edge-platform/anomalib. Adds a new dataset/datamodule to anomalib under src/anomalib/data/. Use when wiring a new data source into the AnomalibDataset/AnomalibDataModule base classes, exporting it so anomalib.data.<Name and the CLI/config (jsonargparse) can discover it, and adding matching tests. Do not use for model architecture work (see anomalib-adding-a-model) or for training an existing datamodule (see anomalib-training).

Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `evals/evals.json`).

It sits in Data & Analytics. The repository describes itself as: An anomaly detection library comprising state-of-the-art algorithms and features such as experiment management, hyper-parameter optimization, and edge inference. The licence is Apache-2.0.

When your agent uses it

  • Wiring a new data source into the AnomalibDataset/AnomalibDataModule base classes
  • Exporting it so anomalib.data.<Name and the CLI/config (jsonargparse) can discover it
  • Adding matching tests
  • Model architecture work (see anomalib-adding-a-model)

Example prompts

  • “/anomalib-adding-a-datamodule”

Requirements

  • Python 3

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Export from the image (or video/depth) package init.py —
  2. Then add the import and all entry in src/anomalib/data/init.py, alongside the existing

What it can do on your machine

Read from SKILL.md and the folder at commit 6f54715. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Anomalib Adding A Datamodule loads about 3.7k tokens when it runs. Until then it costs about 109 tokens; SKILL.md has 1,010 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~109
When it runs · the whole SKILL.md, loaded when a task matches
~3.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from open-edge-platform/anomalib at commit 6f54715, republished under its Apache-2.0 licence (© open-edge-platform). 1,010 words, ~3,742 tokens.

Download SKILL.mdSave it as .claude/skills/anomalib-adding-a-datamodule/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
anomalib-adding-a-datamodule
description
Adds a new dataset/datamodule to anomalib under src/anomalib/data/. Use when wiring a new data source into the AnomalibDataset/AnomalibDataModule base classes, exporting it so anomalib.data.<Name> and the CLI/config (jsonargparse) can discover it, and adding matching tests. Do not use for model architecture work (see anomalib-adding-a-model) or for training an existing datamodule (see anomalib-training).
license
Apache-2.0

Adding a New Dataset / DataModule

anomalib splits data support into two layers per source, both under src/anomalib/data/:

  • datasets/image/<name>.py — a torch-facing AnomalibDataset subclass (one dataset = one split).
  • datamodules/image/<name>.py — a Lightning-facing AnomalibDataModule subclass that owns train/val/test dataloaders and split logic.

(Use datasets/video/ and datamodules/video/, or depth/, for other modalities — the pattern is identical.)

Base classes to implement against

  • AnomalibDataset — src/anomalib/data/datasets/base/image.py
    • __init__(self, augmentations=None) — call via super().__init__(...).
    • You must build a pandas.DataFrame and assign it to self.samples. Required columns: image_path, split, label_index (0 for normal, 1 for abnormal); segmentation datasets also need mask_path (set to empty string "" for normal samples). After building the DataFrame, set samples.attrs["task"] to "classification" or "segmentation".
    • collate_fn defaults to ImageBatch.collate; override only for non-image batch types.
  • AnomalibDataModule — src/anomalib/data/datamodules/base/image.py
    • Only abstract method you must implement: _setup(self, _stage=None) -> None, where you set self.train_data and self.test_data (and self.val_data if you don't rely on the base class's val_split_mode machinery).
    • The base class already implements setup(), train_dataloader(), val_dataloader(), test_dataloader(), and from_config() (jsonargparse subclass integration) — do not override these unless the data source genuinely needs custom dataloader construction.
    • Constructor should accept and forward: train_batch_size, eval_batch_size, num_workers, train_augmentations / val_augmentations / test_augmentations / augmentations, test_split_mode / test_split_ratio, val_split_mode / val_split_ratio, seed.

Reference: MVTecAD (standard benchmark-style dataset)

  • src/anomalib/data/datasets/image/mvtecad.py — MVTecADDataset(AnomalibDataset); builds self.samples via the make_mvtec_ad_dataset(root_category, split, extensions) helper.
  • src/anomalib/data/datamodules/image/mvtecad.py — MVTecAD(AnomalibDataModule); _setup() constructs MVTecADDataset(split=Split.TRAIN, root=self.root, category=self.category) for train/test, and prepare_data() downloads the dataset archive if missing.

Reference: Folder (generic custom-folder dataset — use this as your template for ad hoc data)

  • src/anomalib/data/datasets/image/folder.py — FolderDataset(AnomalibDataset), built via the make_folder_dataset(...) helper: collects filenames/labels from directories, builds the samples DataFrame, and attaches mask paths to abnormal samples when mask_dir is given.

  • src/anomalib/data/datamodules/image/folder.py — Folder(AnomalibDataModule) constructor (key args):

    python
    Folder(
        name: str,                                              # required, becomes datamodule.name
        normal_dir: str | Path | Sequence[str | Path],           # required
        root: str | Path | None = None,
        abnormal_dir: str | Path | Sequence[str | Path] | None = None,
        normal_test_dir: str | Path | Sequence[str | Path] | None = None,  # separate normal images for test set
        mask_dir: str | Path | Sequence[str | Path] | None = None,   # for segmentation masks
        normal_split_ratio: float = 0.2,
        extensions: tuple[str] | None = None,
        train_batch_size: int = 32,
        eval_batch_size: int = 32,
        num_workers: int = 8,
        train_augmentations: Transform | None = None,
        val_augmentations: Transform | None = None,
        test_augmentations: Transform | None = None,
        augmentations: Transform | None = None,
        test_split_mode: TestSplitMode = TestSplitMode.FROM_DIR,
        test_split_ratio: float = 0.2,
        val_split_mode: ValSplitMode = ValSplitMode.FROM_TEST,
        val_split_ratio: float = 0.5,
        seed: int | None = None,
    )

    Note: test_split_ratio (inherited from AnomalibDataModule) controls the fraction of training images held out for testing when test_split_mode triggers a synthetic split. normal_split_ratio is stored by Folder but used only by FolderDataset internally to split normal images between train and test sets when normal_test_dir is not provided and test data must come from the normal pool.

Use Folder directly (no new code needed) whenever the data is already laid out as root/normal_dir/*, root/abnormal_dir/*, optionally root/mask_dir/*. Only write a brand-new dataset/datamodule pair when the data needs custom parsing logic Folder can't express.

Writing a brand-new datamodule (skeleton)

python
# src/anomalib/data/datasets/image/my_dataset.py
from anomalib.data.datasets.base import AnomalibDataset

class MyDataset(AnomalibDataset):
    def __init__(self, root=None, augmentations=None, split=None):
        super().__init__(augmentations=augmentations)
        samples = make_my_dataset_samples(root=root, split=split)  # build the DataFrame yourself
        # DataFrame must have columns: image_path, split, label_index (and mask_path for segmentation)
        samples.attrs["task"] = "segmentation"  # or "classification"
        self.samples = samples
python
# src/anomalib/data/datamodules/image/my_dataset.py
from pathlib import Path

from anomalib.data.datamodules.base.image import AnomalibDataModule
from anomalib.data.datasets.image.my_dataset import MyDataset
from anomalib.data.utils import Split

class MyDataModule(AnomalibDataModule):
    def __init__(
        self,
        root: str | Path = "./datasets/MyDataset",
        train_batch_size: int = 32,
        eval_batch_size: int = 32,
        num_workers: int = 8,
        train_augmentations=None,
        val_augmentations=None,
        test_augmentations=None,
        augmentations=None,
        test_split_mode=None,
        test_split_ratio: float = 0.2,
        val_split_mode=None,
        val_split_ratio: float = 0.5,
        seed: int | None = None,
    ) -> None:
        super().__init__(
            train_batch_size=train_batch_size, eval_batch_size=eval_batch_size,
            num_workers=num_workers, train_augmentations=train_augmentations,
            val_augmentations=val_augmentations, test_augmentations=test_augmentations,
            augmentations=augmentations, test_split_mode=test_split_mode,
            test_split_ratio=test_split_ratio, val_split_mode=val_split_mode,
            val_split_ratio=val_split_ratio, seed=seed,
        )
        self.root = Path(root)

    def _setup(self, _stage=None) -> None:
        self.train_data = MyDataset(split=Split.TRAIN, root=self.root)
        self.test_data = MyDataset(split=Split.TEST, root=self.root)

    def prepare_data(self) -> None:
        ...  # optional: download/validate on rank-zero

Registration — how the datamodule becomes discoverable

  1. Export from the image (or video/depth) package __init__.py — src/anomalib/data/datamodules/image/__init__.py: add the import and __all__ entry there first.

  2. Then add the import and __all__ entry in src/anomalib/data/__init__.py, alongside the existing datamodules.image import block:

python
from .datamodules.image import (
    ...,
    MyDataModule,
)

Once exported, it is usable as anomalib.data.MyDataModule, and from the CLI: anomalib train --model Patchcore --data anomalib.data.MyDataModule --data.root ./datasets/mine.

Tests

Add tests/unit/data/datamodule/image/test_my_dataset.py following the pattern in tests/unit/data/datamodule/image/test_mvtec_ad.py: a datamodule fixture that instantiates the datamodule against a generated dummy dataset, calls prepare_data() + setup(), then reuses the shared assertions in tests/unit/data/datamodule/base/image.py (batch shapes, split non-overlap, etc.).

Add a dummy dataset generator (required for a new DataFormat)

Real datasets aren't checked into the repo — tests generate synthetic data on the fly via tests/helpers/data.py. If your new datamodule corresponds to a new DataFormat value (i.e. it isn't just Folder under another name), you must add a matching generator method:

  1. Add the format to ImageDataFormat (or VideoDataFormat) in src/anomalib/data/datamodules/image/__init__.py (or .../video/__init__.py), e.g. MY_DATASET = "my_dataset".

  2. Implement _generate_dummy_my_dataset_dataset(self) -> None on DummyImageDatasetGenerator (tests/helpers/data.py) for image datasets, or DummyVideoDatasetGenerator for video datasets — the method name must be _generate_dummy_{data_format.value}_dataset; DummyDatasetGenerator.generate_dataset() dispatches to it via getattr. Build the on-disk layout your datamodule expects using the low-level DummyImageGenerator (tests/helpers/data.py::DummyImageGenerator) for image datasets, or DummyVideoGenerator for video datasets:

    python
    def _generate_dummy_my_dataset_dataset(self) -> None:
        """Generate dummy MyDataset dataset in a temporary directory."""
        dataset_category = "dummy"
        # normal train/test images
        for split in ("train", "test"):
            path = self.dataset_root / dataset_category / split / self.normal_category
            num_images = self.num_train if split == "train" else self.num_test
            for i in range(num_images):
                image_filename = path / f"{i:03}.png"
                self.image_generator.generate_image(label=LabelName.NORMAL, image_filename=image_filename)
    
        # abnormal test images + masks
        path = self.dataset_root / dataset_category / "test" / self.abnormal_category
        mask_path = self.dataset_root / dataset_category / "ground_truth" / self.abnormal_category
        for i in range(self.num_test):
            image_filename = path / f"{i:03}.png"
            mask_filename = mask_path / f"{i:03}_mask.png"
            self.image_generator.generate_image(LabelName.ABNORMAL, image_filename, mask_filename)

    See _generate_dummy_mvtecad_dataset and _generate_dummy_folder_dataset in the same file for the two canonical layouts (category-per-split-per-class vs. flat normal/abnormal/mask dirs) — mirror whichever matches your real dataset's directory structure.

  3. The session-scoped dataset_path fixture in tests/conftest.py dispatches image formats to DummyImageDatasetGenerator and video formats to DummyVideoDatasetGenerator (skipping folder/ tabular, which tests construct manually) — you only need to implement the _generate_dummy_* method on the appropriate generator class.

  4. In your datamodule test, consume the generated data via the shared fixture:

    python
    @pytest.fixture()
    def datamodule(dataset_path: Path) -> MyDataModule:
        dm = MyDataModule(root=dataset_path / "my_dataset")
        dm.prepare_data()
        dm.setup()
        return dm

If your datamodule is just a thin wrapper around Folder (same on-disk convention, different defaults), you don't need a new DataFormat/generator — reuse _generate_dummy_folder_dataset and construct your datamodule directly against its output directory.

Show full SKILL.md (334 more words)Show less

Gotchas

  • self.samples must be assigned (not mutated in place before assignment) — the samples setter on AnomalibDataset validates required columns and paths.
  • Don't skip samples.attrs["task"] — post-processing and metrics branch on "classification" vs "segmentation".
  • Prefer Folder over a new dataset class whenever the on-disk layout is a plain normal/abnormal/mask directory split — writing a new class is only needed for non-standard parsing.
  • Tests never touch real downloaded datasets. If you add a new DataFormat, you must also add a _generate_dummy_<format>_dataset method on the appropriate generator (DummyImageDatasetGenerator for image formats, DummyVideoDatasetGenerator for video formats) — otherwise the shared dataset_path fixture (tests/conftest.py) will raise NotImplementedError for that format.

Path confinement and data security rules

When writing a datamodule or dataset that parses metadata (split CSVs, JSON, Parquet, annotations, or directory trees):

  • Never trust dataset paths: Never join path strings from metadata files directly to root with root / path or os.path.join. Always use resolve_path_under_root(root, path) or validate_path(path, base_dir=root) from anomalib.data.utils.path.
  • Validate categorical metadata: If categorical fields (category, split, label) from CSV/JSON are used to build directory paths, validate them against explicit allowlists/enums before building paths to prevent directory traversal via metadata fields.
  • Confine destination directories: When copying or creating split trees on disk in prepare_data():
    • Verify that split_root is within root (is_within_directory(self.root, self.split_root)).
    • Confine leaf folders before creation: validate_path(folder, base_dir=self.root, should_exist=False).mkdir(...).
    • Confine destination file paths: validate_path(dest_file, base_dir=self.root, should_exist=False).
  • Add confinement tests: Any datamodule that reads external split/metadata files must include unit tests asserting that out-of-root paths (e.g. ../ traversal) raise ValueError (see tests/unit/data/utils/test_path_confinement.py).

Reviewer / self-check before opening a PR

  • AnomalibDataset subclass sets self.samples (DataFrame with required columns + task attr).
  • AnomalibDataModule subclass implements _setup() only; no unnecessary overrides of train_dataloader/val_dataloader/test_dataloader.
  • Any paths parsed from split files, annotations, or metadata are confined to root using resolve_path_under_root or validate_path(..., base_dir=root).
  • Datamodule exported from src/anomalib/data/__init__.py and __all__ updated.
  • anomalib.data.MyDataModule resolves and works from the CLI --data flag.
  • Unit tests added under tests/unit/data/datamodule/ (including path confinement tests if parsing external metadata).
  • If a new DataFormat was introduced, a matching _generate_dummy_*_dataset method was added to DummyImageDatasetGenerator in tests/helpers/data.py.

© open-edge-platform, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in .agents/skills/anomalib-adding-a-datamodule of open-edge-platform/anomalib.

  • SKILL.md
  • evals/evals.json

Open the folder on GitHubat commit 6f54715

Compare with similar skills

Anomalib Adding A Datamodule next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Anomalib Adding A Datamodule compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Anomalib Adding A Datamodule this skillopen-edge-platform/anomalib6.2k—~3.7kAutomated safety check: PassApache-2.0
Exploratory Data Analysisspacering-net/codeg3.8k15 repos~3.6kAutomated safety check: PassMIT
MatplotlibzLanqing/codex-claude-academic-skills4.6k18 repos~2.9kAutomated safety check: PassMIT
Scikit LearnzLanqing/codex-claude-academic-skills4.6k17 repos~3.9kAutomated safety check: PassBSD-3-Clause
Chart Visualizationbytedance/deer-flow83k2 repos~840Automated safety check: PassMIT
TimesFM Forecastinggoogle-research/timesfm34k—~4.7kAutomated safety check: PassApache-2.0

Similar skills

  • Exploratory Data Analysis

    spacering-net/codeg

    Perform comprehensive exploratory data analysis on scientific data files across 200+ file formats.

    3.8k GitHub starsUsed in 15 repos~3.6k tokens
    Data & AnalyticsAuto-check passed
  • Matplotlib

    zLanqing/codex-claude-academic-skills

    Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 18 repos~2.9k tokens
    Data & AnalyticsAuto-check passed
  • Scikit Learn

    zLanqing/codex-claude-academic-skills

    Machine learning in Python with scikit-learn. An agent skill from zLanqing/codex-claude-academic-skills.

    4.6k GitHub starsUsed in 17 repos~3.9k tokens
    Data & AnalyticsAuto-check passed
  • Chart Visualization

    bytedance/deer-flow

    Picks a suitable chart type from 26 options for your data, maps the data to that chart's parameters and generates a chart image through a JavaScript script.

    83k GitHub starsUsed in 2 repos~840 tokens
    Data & AnalyticsAuto-check passed
  • TimesFM Forecasting

    google-research/timesfm

    Forecasts any univariate time series zero-shot with Google's TimesFM model, returning point forecasts and calibrated prediction intervals without training.

    34k GitHub stars~4.7k tokensUpdated 8 days ago
    Data & AnalyticsAuto-check passed
  • Sandbox Bench

    vercel/next.js

    Official

    Benchmark React or Next.js changes on Vercel Sandbox VMs with paired A/B statistics: react PR/commit vs base, or Next.js PR/commit vs base, measured end-to-end through the bench/render-pipeline app…

    143k GitHub stars~4.1k tokensUpdated today
    Data & AnalyticsAuto-check passed

More from open-edge-platform/anomalib

All 17 skills in this repo
  • Anomalib Adding A Model

    open-edge-platform/anomalib

    Adds a new anomaly-detection model to anomalib under src/anomalib/models/.

    6.2k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Anomalib Benchmarking

    open-edge-platform/anomalib

    Runs the anomalib benchmarking pipeline to train/evaluate a grid of model + dataset (+ category) combinations and collect metrics into a results CSV.

    6.2k GitHub stars~1k tokensUpdated yesterday
    Auto-check passed
  • Anomalib Tiled Ensemble

    open-edge-platform/anomalib

    Runs and configures the anomalib tiled-ensemble pipeline, which trains/evaluates one model per image tile and merges results (with optional seam smoothing) for high-resolution anomaly detection.

    6.2k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Anomalib Training

    open-edge-platform/anomalib

    Trains an anomalib model on a dataset via the Python API or CLI, including training on a custom folder-structured dataset with the Folder datamodule.

    6.2k GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Model Sample Image Export

    open-edge-platform/anomalib

    Export, validate, and publish model sample-result images into docs/source/images and reference them from README/docs pages.

    6.2k GitHub stars~874 tokensUpdated yesterday
    Auto-check passed
  • UI Test Utils

    open-edge-platform/anomalib

    A skill your agent uses when writing or updating Anomalib Studio UI component or hook tests that need the shared render/renderHook helpers, React Router paths or parameters, React Query, theme…

    6.2k GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed

Questions about Anomalib Adding A Datamodule

What does Anomalib Adding A Datamodule do?

Adds a new dataset/datamodule to anomalib under src/anomalib/data/. Anomalib Adding A Datamodule is an agent skill from open-edge-platform/anomalib. Adds a new dataset/datamodule to anomalib under src/anomalib/data/.

When should I use Anomalib Adding A Datamodule?

Anomalib Adding A Datamodule fits situations like: wiring a new data source into the AnomalibDataset/AnomalibDataModule base classes; exporting it so anomalib.data.<Name and the CLI/config (jsonargparse) can discover it; adding matching tests; model architecture work (see anomalib-adding-a-model).

How do I install Anomalib Adding A Datamodule in Claude Code?

Run `npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a claude-code`. Or copy the skill folder (.agents/skills/anomalib-adding-a-datamodule in open-edge-platform/anomalib) into .claude/skills/anomalib-adding-a-datamodule in your project. Claude Code loads it when a task matches its description.

How do I install Anomalib Adding A Datamodule in Codex?

Run `npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a codex`. Or copy the skill folder (.agents/skills/anomalib-adding-a-datamodule in open-edge-platform/anomalib) into .agents/skills/anomalib-adding-a-datamodule in your project. Codex loads it when a task matches its description.

Can I use Anomalib Adding A Datamodule in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/anomalib-adding-a-datamodule, .gemini/skills/anomalib-adding-a-datamodule, .github/skills/anomalib-adding-a-datamodule and .opencode/skills/anomalib-adding-a-datamodule in your project.

What does Anomalib Adding A Datamodule need to run?

SKILL.md names no scripts, command-line tools or credentials: Anomalib Adding A Datamodule is instructions for the agent only. Our summary lists: Python 3.

Does Anomalib Adding A Datamodule access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Anomalib Adding A Datamodule safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Anomalib Adding A Datamodule use?

Anomalib Adding A Datamodule is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Anomalib Adding A Datamodule use?

About 3.7k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Anomalib Adding A Datamodule?

Skills that share tags, products or a category with Anomalib Adding A Datamodule: Exploratory Data Analysis (spacering-net/codeg, 3.8k stars), Matplotlib (zLanqing/codex-claude-academic-skills, 4.6k stars), Scikit Learn (zLanqing/codex-claude-academic-skills, 4.6k stars) and Chart Visualization (bytedance/deer-flow, 83k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Anomalib Adding A Datamodule?

open-edge-platform (a GitHub organization) maintains it in open-edge-platform/anomalib, which has 6,226 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 7, 2026.

Source: open-edge-platform/anomalib on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.