# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.6.13] - 2026-02-25

### Docs
- Added PyPI badges to the README now that the project is published.
- Clarified PyPI token scope guidance for first publish vs subsequent releases.

## [0.6.12] - 2026-02-24

### Packaging
- Removed a VCS direct-URL optional dependency from published metadata so the project can be uploaded to PyPI.

### Docs
- Updated PatchCore-Inspection checkpoint docs to install the upstream repo explicitly (instead of via extras).

## [0.6.11] - 2026-02-24

### Docs
- Expanded the README with practical model selection notes (tags like `numpy`/`pixel_map`) and a one-off `pyimgano-infer --model ...` example.
- Updated translated READMEs to align with the CLI-first industrial workflow entry points.

## [0.6.10] - 2026-02-24

### Docs
- Rewrote `README.md` to be shorter and oriented around the industrial CLI/workbench workflow.
- Updated `README_cn.md` to mirror the new README structure and CLI entry points.

## [0.6.9] - 2026-02-24

### Docs
- Improved publishing docs (including GitHub Actions release flow and first-time PyPI token note).
- Refreshed Sphinx docs landing page and added missing Sphinx pages so `make html` works out of the box.
- Added a short defects + infer-config quickstart snippet to the README.

### CI
- Documentation workflow now uploads the correct Sphinx build output path.

## [0.6.8] - 2026-02-24

### Docs
- Workbench/recipes docs now describe how to configure and deploy defects export via `infer_config.json`.
- Added a workbench config template: `examples/configs/industrial_adapt_defects_roi.json`.

## [0.6.7] - 2026-02-24

### Added
- Workbench `artifacts/infer_config.json` exports a `defects` block (mask/regions/ROI settings) for deploy-style `pyimgano-infer --infer-config` usage.

### Fixed
- Workbench now ensures custom/lightweight detectors expose a discoverable `contamination` attribute so default threshold calibration and `threshold_provenance` stay consistent.

### Changed
- `pyimgano.datasets` uses lazy exports for torch-dependent dataset/datamodule helpers, keeping `import pyimgano.datasets` usable in minimal environments.

## [0.6.6] - 2026-02-24

### Added
- `threshold_provenance` is now persisted in workbench reports and exported in `artifacts/infer_config.json` for auditable deploy configs.
- Shared score-threshold quantile resolver (`pyimgano.calibration.resolve_calibration_quantile`) to keep benchmark/workbench/infer defaults consistent.
- Benchmark reports include `threshold_provenance` (strategy/quantile/source) so runs are self-describing.

### Changed
- `pyimgano-infer` now auto-calibrates `threshold_` from train scores when `--train-dir` is provided and the detector does not set `threshold_`.

### Docs
- Documented threshold calibration defaults and provenance fields across CLI + industrial workflow guides.

## [0.6.5] - 2026-02-24

### Added
- Workbench dataset preflight validation (`pyimgano-train --preflight`) for catching manifest/data issues before training.
- Workbench reports now include `dataset_summary` (counts, anomaly ratio, pixel-metric gating).
- Infer-config driven deployment-style inference (`pyimgano-infer --infer-config ...`), including multi-category selection via `--infer-category`.
- Benchmark CLI can now run manifest datasets (`pyimgano-benchmark --dataset manifest --manifest-path ...`) and propagates manifest `meta` to per-image JSONL.

## [0.6.4] - 2026-02-24

### Added
- Manifest dataset (JSONL) support for workbench runs (`dataset.name="manifest"`).
- `pyimgano-manifest` for generating a JSONL manifest from the built-in `custom` dataset layout.
- `pyimgano-benchmark --list-categories` supports `--dataset manifest --manifest-path ...`.
- Workbench per-image JSONL records propagate manifest `meta` when present.
- `pyimgano-train --dry-run` validates that `dataset.manifest_path` exists and is readable.

### Fixed
- Workbench `dataset.category="all"` now runs and aggregates per-category runs correctly.

## [0.6.3] - 2026-02-23

### Added
- `pyimgano-train --dry-run` for validating and printing effective configs without running.
- `pyimgano-train --export-infer-config` (writes `artifacts/infer_config.json`).
- Workbench docs and examples:
  - `docs/WORKBENCH.md`
  - `examples/configs/*.json`
- Workbench reports include `seed` for better provenance.

### Fixed
- Recipe metadata `callable` paths now point at the actual registered callable (functions included).

## [0.6.2] - 2026-02-23

### Added
- Training utilities: `pyimgano.training.save_checkpoint` and `pyimgano.training.micro_finetune`.
- Workbench training config (`training.*`) and checkpoint artifacts under `checkpoints/<category>/...`.
- Builtin micro-finetune recipe: `micro-finetune-autoencoder`.
- `pyimgano-infer --from-run` for loading model/threshold/checkpoint from a workbench run directory.
- Optional anomalib recipe skeleton: `anomalib-train` (requires `pyimgano[anomalib]`).

## [0.6.1] - 2026-02-23

### Added
- Workbench adaptation knobs: tiling inference, anomaly-map postprocess, and optional map saving (`pyimgano.workbench`).
- Workbench runner for recipe execution with benchmark-compatible artifacts (reports + per-image JSONL + optional anomaly maps).
- `industrial-adapt` recipe now uses the workbench runner and supports `adaptation.save_maps=true`.
- Documentation for recipes + `pyimgano-train`: `docs/RECIPES.md`.

## [0.6.0] - 2026-02-23

### Added
- Workbench config loader: `pyimgano.config.load_config` (JSON by default; YAML optional with `PyYAML`).
- Workbench config normalization: `pyimgano.workbench.WorkbenchConfig`.
- Recipe registry: `pyimgano.recipes` (`register_recipe`, `list_recipes`, `recipe_info`).
- Builtin workbench recipe: `industrial-adapt`.
- New CLI: `pyimgano-train` (recipe discovery + config-driven execution).
- Workbench run artifact helpers: `build_workbench_run_dir_name` and `build_workbench_run_paths`.

## [0.5.8] - 2026-02-23

### Added
- Classical feature cache: `pyimgano-benchmark --cache-dir` (speeds up repeated path-based scoring).
- Run timing breakdown in benchmark reports (`timing` block with load/fit/score/eval durations).
- Developer audits:
  - `tools/audit_public_api.py`
  - `tools/audit_registry.py`
- Documentation:
  - `docs/CLI_REFERENCE.md`
  - `docs/MIGRATION.md`

### Changed
- Optional dependency errors now include clearer pip install hints (including common module ↔ pip name mismatches).

### CI
- CI runs the public API + registry audits on Linux/Python 3.11.

## [0.5.7] - 2026-02-23

### Added
- Benchmark reproducibility: `pyimgano-benchmark --seed` (best-effort) and persisted in `config.json`.
- Classical detector serialization helpers: `pyimgano.serialization.save_detector/load_detector` (pickle; restricted safe set).
- Benchmark pipeline options:
  - `pyimgano-benchmark --save-detector [PATH|auto]`
  - `pyimgano-benchmark --load-detector PATH` (skip fit)
- sklearn integration:
  - `pyimgano.sklearn_adapter.RegistryModelEstimator`
  - `docs/SKLEARN_INTEGRATION.md`
- Contract tests for detector API consistency (`tests/contracts/test_detector_contract.py`).
- Benchmark docs now describe run directory collision policy.

## [0.5.6] - 2026-02-23

### Added
- Image IO helpers: `pyimgano.io.image` (`read_image`, `resize_image`, `convert_color`).
- Dataset catalog helper: `pyimgano.datasets.catalog.list_dataset_categories`.
- Custom dataset validation: `CustomDataset.validate_structure()` and CLI preflight validation for `--dataset custom`.
- Benchmark pipeline supports `input_mode=paths|numpy` (with CLI flag `pyimgano-benchmark --input-mode`).
- Run artifact: `environment.json` (Python/platform/package snapshot).
- Report metadata stamping: `schema_version`, `timestamp_utc`, `pyimgano_version`.

### Changed
- Benchmark dataset loaders in `pyimgano.utils.datasets` now route image/mask IO via `pyimgano.io`.
- `pyimgano.pipelines.run_benchmark.list_dataset_categories` delegates to the dataset catalog.

## [0.5.5] - 2026-02-23

### Added
- Shared CLI helper module: `pyimgano.cli_common` (stable `--model-kwargs` parsing/merging/filtering).
- Registry introspection utilities:
  - `pyimgano.models.introspection`
  - `pyimgano.models.registry.model_info` / `MODEL_REGISTRY.model_info`
- Computed model capability helper: `pyimgano.models.capabilities`.
- `pyimgano-benchmark --list-categories` for dataset category discovery.
- Shared JSON conversion helper: `pyimgano.utils.jsonable.to_jsonable`.

### Changed
- `pyimgano-infer` and `pyimgano-robust-benchmark` now share model-kwargs behavior via `pyimgano.cli_common`.
- `pyimgano-benchmark` uses `to_jsonable` for JSON output and `pyimgano.reporting` uses it for report artifacts.
- CLI discovery flags are mutually exclusive across `--list-models`, `--model-info`, and `--list-categories`.

## [0.5.4] - 2026-02-23

### Added
- Industrial one-click benchmark runner: `pyimgano.pipelines.run_benchmark` (single category or `category=all`).
- Run artifacts layout (JSON + JSONL): `report.json`, `config.json`, and per-category `per_image.jsonl`.
- Reporting helpers:
  - `pyimgano.reporting.save_jsonl_records`
  - `pyimgano.reporting.runs` (`build_run_dir_name`, `ensure_run_dir`)
- Torch-like public surface for benchmark datasets: `pyimgano.datasets.{load_dataset,MVTecDataset,VisADataset,...}`.

### Changed
- `pyimgano-benchmark` gains industrial pipeline flags:
  - `--dataset custom`, `--category all`, `--resize H W`
  - `--output-dir`, `--save-run/--no-save-run`, `--per-image-jsonl/--no-per-image-jsonl`
  - `--calibration-quantile`, `--limit-train`, `--limit-test`
- `runs/` is now ignored by default (CLI writes run artifacts by default unless disabled).

## [0.5.3] - 2026-02-22

### Added
- Auto-generated registry index: `docs/MODEL_INDEX.md` (generated by `tools/generate_model_index.py`).
- Canonical `vision_*` aliases for legacy deep models: `vision_cutpaste`, `vision_memseg`, `vision_differnet`, `vision_devnet`, `vision_riad`.

### Changed
- `setup.py` is now a minimal stub delegating metadata to `pyproject.toml` to prevent packaging drift.
- Docs examples prefer canonical `vision_*` model names for consistency with the CLI/registry.

## [0.5.2] - 2026-02-22

### Added
- Legacy compatibility module: `pyimgano.detectors` with common `*Detector` class names.

### Fixed
- Ensure `_classes` is initialized for PyOD-backed detectors to keep `predict_proba()` working even when wrappers override `fit()`.

## [0.5.1] - 2026-02-22

### Added
- `pyimgano-robust-benchmark` adds `--input-mode`:
  - `numpy` (default): load decoded frames in memory (corruptions enabled)
  - `paths`: pass file paths to detectors (clean-only; corruptions skipped)
- Robustness reporting metadata: input mode, corruption mode, and skip reasons when corruptions/pixel metrics cannot run.

### Changed
- Documentation updated to use the registry-driven API (`pyimgano.models.create_model`, `pyimgano.models.list_models`) instead of `pyimgano.detectors`.
- Sphinx API reference refreshed to document the registry/factory interface.
- Benchmark scripts updated to use `create_model` + model registry names.

### Fixed
- PyOD `predict_proba()` compatibility for vision wrappers by initializing `_classes` during `fit()`.

## [0.5.0] - 2026-02-22

### Added
- VAND-style pixel SegF1 + background FPR (`bg_fpr`) metrics under a single calibrated pixel threshold.
- Normal-pixel quantile calibration helper for deploy-style pixel thresholding.
- `pyimgano.robustness` module:
  - deterministic corruptions: lighting, JPEG, blur, glare/specular, geo-jitter (mask-aware)
  - robustness benchmark runner (clean + corruption suite)
- New CLI: `pyimgano-robust-benchmark` for clean + corruption robustness evaluation.
- New augmentation preset: `get_industrial_drift_augmentation()` (camera/lighting drift aligned with the corruption suite).
- New model: `vision_superad` (DINOv2 patch-kNN using k-th NN distance per patch).

### Changed
- `pyimgano-benchmark` adds `--pixel-segf1` + pixel-threshold calibration flags (single-threshold evaluation).
- `evaluate_detector()` can optionally report SegF1/bg-FPR when a fixed pixel threshold is provided.

### Fixed
- Pixel thresholding uses strict `>` comparison to avoid false positives when `threshold == max(normal)`.

## [0.4.0] - 2026-02-22

### Added
- `vision_mambaad` (MambaAD-style patch embedding reconstruction) and a new optional extra: `pyimgano[mamba]`.
- PatchCore speed/memory knobs:
  - `feature_projection_dim` + `projection_fit_samples` for random-projection feature reduction.
  - `memory_bank_dtype` for FP16/FP32 memory-bank storage.
- Tiled inference map blending modes: `map_reduce` now supports `"hann"` and `"gaussian"` in addition to `"max"`/`"mean"`.
- Industrial defect-synthesis augmentations:
  - `add_scratches`, `add_dust`, `add_specular_highlight`
  - `get_industrial_surface_defect_synthesis_augmentation` preset pipeline.

### Changed
- PatchCore coreset selection is now deterministic (seeded) and uses squared L2 distances (faster).
- `pyimgano-infer --tile-map-reduce` choices updated to include `"hann"`/`"gaussian"`.
- PatchCore CLI presets (`industrial-fast` / `industrial-balanced`) now enable feature projection + FP16 memory bank.

## [0.3.0] - 2026-02-22

### Added
- New industrial datasets:
  - `mvtec_loco` (MVTec LOCO AD) via `MVTecLOCODataset`
  - `mvtec_ad2` (MVTec AD 2, `test_public` split) via `MVTecAD2Dataset`
- High-resolution tiling inference:
  - `pyimgano.inference.TiledDetector`
  - `pyimgano-infer` tiling flags (`--tile-size/--tile-stride/...`)
- Industrial preprocessing presets: gray-world, max-RGB white balance + homomorphic filtering.
- Industrial augmentation ops: JPEG recompress, vignetting, random channel gain drift + preset pipeline.
- Inference API hardening: supports detectors that require ndarray batches for scores/maps.
- OpenCLIP backend supports numpy image inputs (not just paths).
- `docs/WEIGHTS.md` for weight/checkpoint management.

### Changed
- `pyimgano-benchmark --dataset` choices now include `btad`, `mvtec_loco`, and `mvtec_ad2`.
- `BTADDataset` accepts a `load_masks` kwarg for pipeline/CLI compatibility (BTAD still returns no masks).

## [0.2.1] - 2026-02-22

### Added
- More PyOD wrappers: `vision_cd`, `vision_dif`, `vision_lunar`, `vision_rgraph`, `vision_sampling`,
  `vision_so_gaal`, `vision_so_gaal_new`, `vision_auto_encoder`, `vision_anogan`.

## [0.2.0] - 2026-02-22

### Added
- **Image Preprocessing Module** (`pyimgano.preprocessing`) ⭐ NEW!
  - **ImageEnhancer** - High-level interface for basic operations (25 operations)
  - **AdvancedImageEnhancer** - Extended with 25+ advanced operations (50+ total)
  - **PreprocessingPipeline** - Sequential operation composition with method chaining
  - **PreprocessingMixin** - Easy integration with detectors via mixin pattern

  **Basic Operations (25)**:
  - **Edge Detection** (7 methods): Canny, Sobel, Sobel X/Y, Laplacian, Scharr, Prewitt
  - **Morphological Operations** (7 types): Erosion, Dilation, Opening, Closing, Gradient, TopHat, BlackHat
  - **Filters** (4 types): Gaussian, Bilateral, Median, Box
  - **Normalization** (4 methods): MinMax, Z-Score, L2, Robust (IQR-based)
  - **Enhancement** (3): Sharpen, Unsharp Mask, CLAHE

  **Advanced Operations (25+)**:
  - **Frequency Domain** (6): FFT, IFFT, Lowpass, Highpass, Bandpass, Bandstop filters
  - **Texture Analysis** (3): Gabor filters, Local Binary Pattern (LBP), GLCM texture features
  - **Color Space Transformations** (8): RGB, HSV, LAB, YCrCb, HLS, LUV + conversions
  - **Advanced Enhancement** (4): Gamma correction, Contrast stretching, Single/Multi-Scale Retinex
  - **Advanced Denoising** (2): Non-local means denoising, Anisotropic diffusion
  - **Feature Extraction** (4): HOG features, Harris corners, Shi-Tomasi, FAST detector
  - **Advanced Morphology** (4): Skeletonization, Thinning, Convex hull, Distance transform
  - **Segmentation** (6): Otsu, Adaptive (mean/Gaussian), Triangle, Yen, Watershed
  - **Image Pyramids** (2): Gaussian pyramid, Laplacian pyramid

  **Augmentation Operations (30+)** ⭐ NEW!:
  - **Geometric Augmentations** (7): Rotation, Flipping, Scaling, Translation, Shearing, Perspective, Affine
  - **Color Augmentations** (5): Brightness, Contrast, Saturation, Hue adjustment, Color jitter
  - **Noise Addition** (4): Gaussian noise, Salt-and-pepper noise, Poisson noise, Speckle noise
  - **Blur Effects** (4): Motion blur, Defocus blur, Glass blur, Zoom blur
  - **Weather Effects** (5): Rain, Fog, Snow, Shadow, Sunflare effects
  - **Occlusion & Cutout** (4): Random cutout, Grid mask, Mixup, CutMix
  - **Distortion** (2): Elastic transform, Grid distortion
  - **Pipeline System** (8): Compose, OneOf, RandomApply, + 5 preset pipelines (light, medium, heavy, weather, anomaly)

  - **Total operations: 80+** (25 basic + 25 advanced + 30 augmentation)
  - Comprehensive preprocessing documentation (docs/PREPROCESSING.md)
  - Complete test suite (tests/test_preprocessing.py - 500+ lines)
  - Usage examples (examples/preprocessing_example.py, advanced_preprocessing_example.py, augmentation_example.py)
- **3 New High-Performance Deep Learning Algorithms** ⚡:
  - **DRAEM** (ICCV 2021) - Discriminatively trained reconstruction with synthetic anomalies
  - **CFlow-AD** (WACV 2022) - Real-time conditional normalizing flows
  - **DFM** - Fast discriminative feature modeling (training-free)
- Total algorithms now: **37+** (19 classical ML + 18 deep learning)
- Enterprise-grade package configuration
- Modern `pyproject.toml` build system configuration
- Comprehensive GitHub Actions CI/CD workflows
- Pre-commit hooks for code quality
- Code quality tools integration (Black, isort, flake8, mypy, ruff)
- Contributing guidelines (CONTRIBUTING.md)
- This changelog file
- Support for Python 3.9-3.12
- Type hints marker (py.typed)
- MANIFEST.in for proper package distribution
- .editorconfig for consistent coding style
- tox configuration for multi-version testing
- **34+ total algorithms** (19 classical ML + 15 deep learning)
- New PyOD classical ML integrations (19 total):
  - **ECOD** (Empirical CDF-based, TKDE 2022) - State-of-the-art, parameter-free
  - **COPOD** (Copula-based, ICDM 2020) - High-performance, parameter-free
  - **KNN** (K-Nearest Neighbors) - Classic, simple and effective
  - **PCA** (Principal Component Analysis) - Classic dimensionality reduction
  - **COF** (Connectivity-Based Outlier Factor, PAKDD 2002) - Density-based detection
  - **MCD** (Minimum Covariance Determinant, 1999) - Robust statistical method
  - **Feature Bagging** (KDD 2005) - Ensemble method for stability
  - **INNE** (Isolation Nearest Neighbors, ICDM 2014) - Fast isolation-based
- New state-of-the-art deep learning algorithms (15 total):
  - **SimpleNet** (CVPR 2023) ⭐ - Ultra-fast SOTA, 10x faster training, ~99% AUROC
  - **PatchCore** (CVPR 2022) ⭐ - Best accuracy (99.6% AUROC), memory-based, pixel localization
  - **STFPM** (BMVC 2021) ⭐ - Student-Teacher matching, multi-scale features, ~97% AUROC
- Enhanced error handling and logging for all detectors
- Improved PyOD version compatibility (>=1.1.0, <3.0.0)
- Comprehensive algorithm selection guide
- **Deep Learning Models Guide** - Detailed documentation for SOTA DL algorithms
- Complete test suite with comprehensive coverage:
  - Classical ML tests (test_pyod_models.py)
  - Deep learning tests (test_dl_models.py) - 400+ lines covering all DL models
- Enhanced documentation structure with dedicated DL guide
- **Comprehensive Evaluation Module** (`pyimgano.evaluation`) ⭐
  - `compute_auroc()` - ROC-AUC computation
  - `compute_average_precision()` - Average Precision for imbalanced datasets
  - `compute_classification_metrics()` - Precision, Recall, F1, Specificity, Accuracy
  - `find_optimal_threshold()` - Automatic threshold optimization (F1, Youden, etc.)
  - `evaluate_detector()` - One-stop comprehensive evaluation
  - `compute_pro_score()` - Pixel-level PRO score for localization
  - `print_evaluation_summary()` - Formatted result display
- **Benchmarking Tools** (`pyimgano.benchmark`) ⭐
  - `AlgorithmBenchmark` class - Systematic multi-algorithm comparison
  - `quick_benchmark()` - Fast benchmarking with defaults
  - Automatic timing measurements (training and inference)
  - Performance ranking by any metric
  - JSON export for results
- **Visualization Module** (`pyimgano.visualization`) ⭐
  - `plot_anomaly_map()` - Heatmap overlay on images
  - `plot_roc_curve()` - ROC curve with AUC
  - `plot_precision_recall_curve()` - PR curve with AP
  - `plot_score_distribution()` - Score histograms for normal/anomaly
  - `compare_detectors()` - Side-by-side detector comparison
  - `save_anomaly_overlay()` - Fast OpenCV-based overlay (no matplotlib)
- **Example Scripts** (examples/) ⭐
  - `quick_start.py` - Basic usage example
  - `benchmark_example.py` - Multi-algorithm benchmarking
  - `visualization_example.py` - Visualization demonstrations
- **Expanded Test Suite** ⭐
  - `test_evaluation.py` - 400+ lines testing all metrics
  - `test_integration.py` - End-to-end workflow tests
  - Synthetic dataset fixtures for testing
  - Edge case and error handling tests
- **Documentation**:
  - `EVALUATION_AND_BENCHMARK.md` - Complete evaluation guide

- Additional PyOD classical wrappers (unified vision API):
  - `vision_iforest` (Isolation Forest)
  - `vision_kde` (Kernel Density Estimation)
  - `vision_gmm` (Gaussian Mixture Model)
  - `vision_sos` (Stochastic Outlier Selection)
  - `vision_sod` (Subspace Outlier Detection)
  - `vision_rod` (Rotation-based Outlier Detection)
  - `vision_qmcd` (Quantile-based MCD)
  - `vision_mad` (Median Absolute Deviation)
  - `vision_lmdd` (LMDD)

### Fixed
- `compute_pro_score` now computes **region-aware** PRO/AUPRO (connected components + FPR-limited integration),
  instead of using pixel-level ROC TPR as a proxy.
- `pyimgano.models.ae` no longer hard-requires `pytorch_msssim` at import time; `ComposedLoss` falls back to L1
  when the optional dependency is missing.

### Changed
- Enhanced package metadata and classifiers
- Improved dependency version specifications
- Updated development workflow documentation
- Updated `__init__.py` to export new modules and functions
- Version bump to 0.2.0

### Improved
- Test configuration with coverage reporting
- Documentation structure
- Code quality and consistency

## [0.1.0] - 2025-01-XX

### Added
- Initial release of PyImgAno
- Visual anomaly detection utilities
- Support for 15+ classical ML anomaly detectors:
  - ABOD (Angle-Based Outlier Detection)
  - CBLOF (Cluster-Based Local Outlier Factor)
  - DBSCAN
  - Isolation Forest
  - HBOS (Histogram-Based Outlier Score)
  - K-Means
  - Kernel PCA
  - LOCI (Local Correlation Integral)
  - LODA (Lightweight On-line Detector)
  - LOF (Local Outlier Factor)
  - LSCP (Locally Selective Combination)
  - MO_GAAL
  - One-Class SVM
  - SUOD (Scalable Unsupervised Outlier Detection)
  - XGBOD (XGBoost Outlier Detection)

- Support for 15 deep learning anomaly detectors:
  - **SimpleNet** (CVPR 2023) - Ultra-fast SOTA ⭐
  - **PatchCore** (CVPR 2022) - Best accuracy ⭐
  - **STFPM** (BMVC 2021) - Student-Teacher ⭐
  - AutoEncoder (AE)
  - AE + SVM
  - ALAD (Adversarial Learning)
  - Anomalib integration
  - Deep SVDD
  - EfficientAD
  - FastFlow
  - IMDD
  - PaDiM
  - Reverse Distillation
  - SSIM-based methods
  - VAE (Variational AutoEncoder)

- Model registry system with factory pattern
- Flexible data loading utilities
- Image preprocessing and transformation pipeline
- Augmentation registry system
- Defect detection operations
- Support for diffusion models (optional)
- Multi-language documentation (English, Chinese, Japanese, Korean)
- Example scripts and notebooks
- MIT License

### Features
- Unified API for all anomaly detection models
- PyTorch Lightning data modules
- Extensible architecture
- Easy model registration system
- Comprehensive image operations
- OpenCV-based augmentation
- Visualization utilities

---

## Release Notes Guidelines

### Types of Changes
- **Added** for new features
- **Changed** for changes in existing functionality
- **Deprecated** for soon-to-be removed features
- **Removed** for now removed features
- **Fixed** for any bug fixes
- **Security** for vulnerability fixes
- **Improved** for enhancements to existing features

### Version Format
- **Major.Minor.Patch** (e.g., 1.0.0)
- **Major**: Incompatible API changes
- **Minor**: New features, backward compatible
- **Patch**: Bug fixes, backward compatible

[Unreleased]: https://github.com/jhlu2019/pyimgano/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/jhlu2019/pyimgano/releases/tag/v0.1.0
