Exploratory Data Analysis
spacering-net/codeg
Perform comprehensive exploratory data analysis on scientific data files across 200+ file formats.
Adds a new dataset/datamodule to anomalib under src/anomalib/data/.
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamodule --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "anomalib-adding-a-datamodule" agent skill from https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamodule into .claude/skills/anomalib-adding-a-datamodule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "anomalib-adding-a-datamodule", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamoduleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamodule --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-edge-platform/anomalib.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/anomalib-adding-a-datamodule .agents/skills/anomalib-adding-a-datamodule && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "anomalib-adding-a-datamodule" agent skill from https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamodule into .agents/skills/anomalib-adding-a-datamodule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "anomalib-adding-a-datamodule", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamodule --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-edge-platform/anomalib.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/anomalib-adding-a-datamodule .cursor/skills/anomalib-adding-a-datamodule && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "anomalib-adding-a-datamodule" agent skill from https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamodule into .cursor/skills/anomalib-adding-a-datamodule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "anomalib-adding-a-datamodule", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/open-edge-platform/anomalib.git --path .agents/skills/anomalib-adding-a-datamodule--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamodule --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-edge-platform/anomalib.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/anomalib-adding-a-datamodule .gemini/skills/anomalib-adding-a-datamodule && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "anomalib-adding-a-datamodule" agent skill from https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamodule into .gemini/skills/anomalib-adding-a-datamodule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "anomalib-adding-a-datamodule", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamoduleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/open-edge-platform/anomalib.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/anomalib-adding-a-datamodule .github/skills/anomalib-adding-a-datamodule && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "anomalib-adding-a-datamodule" agent skill from https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamodule into .github/skills/anomalib-adding-a-datamodule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "anomalib-adding-a-datamodule", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add open-edge-platform/anomalib --skill anomalib-adding-a-datamodule -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install open-edge-platform/anomalib anomalib-adding-a-datamodule --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-edge-platform/anomalib.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/anomalib-adding-a-datamodule .opencode/skills/anomalib-adding-a-datamodule && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "anomalib-adding-a-datamodule" agent skill from https://github.com/open-edge-platform/anomalib/tree/main/.agents/skills/anomalib-adding-a-datamodule into .opencode/skills/anomalib-adding-a-datamodule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "anomalib-adding-a-datamodule", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
anomalib-adding-a-datamoduleAdds 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/. 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.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 6f54715. It shows what the files ask for, not the result of running them.
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.
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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
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.
.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.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.)
AnomalibDataset — src/anomalib/data/datasets/base/image.py__init__(self, augmentations=None) — call via super().__init__(...).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_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).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.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.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.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):
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.
# 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# 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-zeroExport from the image (or video/depth) package __init__.py —
src/anomalib/data/datamodules/image/__init__.py: add the import and __all__ entry there first.
Then add the import and __all__ entry in src/anomalib/data/__init__.py, alongside the existing
datamodules.image import block:
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.
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.).
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:
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".
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:
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.
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.
In your datamodule test, consume the generated data via the shared fixture:
@pytest.fixture()
def datamodule(dataset_path: Path) -> MyDataModule:
dm = MyDataModule(root=dataset_path / "my_dataset")
dm.prepare_data()
dm.setup()
return dmIf 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.
self.samples must be assigned (not mutated in place before assignment) — the samples setter on
AnomalibDataset validates required columns and paths.samples.attrs["task"] — post-processing and metrics branch on "classification" vs
"segmentation".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.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.When writing a datamodule or dataset that parses metadata (split CSVs, JSON, Parquet, annotations, or directory trees):
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.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.prepare_data():split_root is within root (is_within_directory(self.root, self.split_root)).validate_path(folder, base_dir=self.root, should_exist=False).mkdir(...).validate_path(dest_file, base_dir=self.root, should_exist=False).../ traversal) raise ValueError (see tests/unit/data/utils/test_path_confinement.py).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.root using resolve_path_under_root or validate_path(..., base_dir=root).src/anomalib/data/__init__.py and __all__ updated.anomalib.data.MyDataModule resolves and works from the CLI --data flag.tests/unit/data/datamodule/ (including path confinement tests if parsing external metadata).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
SKILL.md and 1 other file in .agents/skills/anomalib-adding-a-datamodule of open-edge-platform/anomalib.
Open the folder on GitHubat commit 6f54715
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Anomalib Adding A Datamodule this skillopen-edge-platform/anomalib | 6.2k | — | ~3.7k | Automated safety check: Pass | Apache-2.0 | |
| Exploratory Data Analysisspacering-net/codeg | 3.8k | 15 repos | ~3.6k | Automated safety check: Pass | MIT | |
| MatplotlibzLanqing/codex-claude-academic-skills | 4.6k | 18 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Scikit LearnzLanqing/codex-claude-academic-skills | 4.6k | 17 repos | ~3.9k | Automated safety check: Pass | BSD-3-Clause | |
| Chart Visualizationbytedance/deer-flow | 83k | 2 repos | ~840 | Automated safety check: Pass | MIT | |
| TimesFM Forecastinggoogle-research/timesfm | 34k | — | ~4.7k | Automated safety check: Pass | Apache-2.0 |
spacering-net/codeg
Perform comprehensive exploratory data analysis on scientific data files across 200+ file formats.
zLanqing/codex-claude-academic-skills
Low-level plotting library for full customization. An agent skill from zLanqing/codex-claude-academic-skills.
zLanqing/codex-claude-academic-skills
Machine learning in Python with scikit-learn. An agent skill from zLanqing/codex-claude-academic-skills.
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.
google-research/timesfm
Forecasts any univariate time series zero-shot with Google's TimesFM model, returning point forecasts and calibrated prediction intervals without training.
vercel/next.js
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…
open-edge-platform/anomalib
Adds a new anomaly-detection model to anomalib under src/anomalib/models/.
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.
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.
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.
open-edge-platform/anomalib
Export, validate, and publish model sample-result images into docs/source/images and reference them from README/docs pages.
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…
Categories
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/.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.