Metadata-Version: 2.4
Name: ayase
Version: 0.1.29
Summary: Modular media quality metrics toolkit
Project-URL: Homepage, https://github.com/seruva19/ayase
Project-URL: Repository, https://github.com/seruva19/ayase
Project-URL: Issues, https://github.com/seruva19/ayase/issues
Project-URL: Changelog, https://github.com/seruva19/ayase/blob/main/CHANGELOG.md
Author: Ayase Contributors
License-Expression: MIT
License-File: LICENSE
Keywords: ai,computer-vision,dataset,image,metrics,ml,quality-assessment,video,vqa
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.9
Requires-Dist: accelerate>=0.25.0
Requires-Dist: colour-science>=0.4.0
Requires-Dist: decord>=0.6.0
Requires-Dist: diffusers>=0.25.0
Requires-Dist: einops>=0.7.0
Requires-Dist: huggingface-hub>=0.20.0
Requires-Dist: imageio-ffmpeg<1.0,>=0.4.9
Requires-Dist: imageio<3.0,>=2.33.0
Requires-Dist: insightface>=0.7.0
Requires-Dist: invisible-watermark>=0.2.0
Requires-Dist: joblib>=1.3.0
Requires-Dist: librosa>=0.10.0
Requires-Dist: lpips>=0.1.4
Requires-Dist: matplotlib>=3.7.0
Requires-Dist: mediapipe<1.0,>=0.10.0
Requires-Dist: moviepy<2.0,>=1.0.3
Requires-Dist: muq>=0.1.0
Requires-Dist: nltk>=3.8.0
Requires-Dist: numba>=0.58.0
Requires-Dist: numpy<3.0,>=1.24.0
Requires-Dist: omegaconf>=2.3.0
Requires-Dist: onnxruntime>=1.14.0
Requires-Dist: open-clip-torch>=2.24.0
Requires-Dist: opencv-python<5.0,>=4.9.0
Requires-Dist: paddleocr<3.0,>=2.7.0
Requires-Dist: paddlepaddle<3.0,>=2.5.0
Requires-Dist: pandas<3.0,>=2.1.0
Requires-Dist: pillow<13.0,>=10.2.0
Requires-Dist: pyarrow<23.0,>=15.0.0
Requires-Dist: pydantic-settings<3.0,>=2.1.0
Requires-Dist: pydantic<3.0,>=2.5.0
Requires-Dist: pyiqa<1.0,>=0.1.13
Requires-Dist: pyloudnorm<1.0,>=0.1.1
Requires-Dist: pyrtools>=1.0.9
Requires-Dist: python-levenshtein>=0.21.0
Requires-Dist: python-speech-features<1.0,>=0.6
Requires-Dist: pywavelets>=1.3.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: qwen-vl-utils>=0.0.8
Requires-Dist: requests>=2.31.0
Requires-Dist: rich<15.0,>=13.7.0
Requires-Dist: safetensors>=0.4.0
Requires-Dist: scikit-image>=0.19.0
Requires-Dist: scikit-learn>=1.3.0
Requires-Dist: scikit-video>=1.1.11
Requires-Dist: scipy>=1.11.0
Requires-Dist: soundfile>=0.12.0
Requires-Dist: textual>=0.52.0
Requires-Dist: timm>=0.9.12
Requires-Dist: tomli-w<2.0,>=1.0.0
Requires-Dist: tomli<3.0,>=2.0.1; python_version < '3.11'
Requires-Dist: torch<3.0,>=2.1.0
Requires-Dist: torchvision<1.0,>=0.16.0
Requires-Dist: tqdm<5.0,>=4.66.0
Requires-Dist: transformers<6.0,>=4.45.0
Requires-Dist: transnetv2-pytorch>=1.0.0
Requires-Dist: typer[all]<1.0,>=0.12.0
Requires-Dist: typing-extensions>=4.0.0; python_version < '3.11'
Requires-Dist: ultralytics<9.0,>=8.0.0
Requires-Dist: umap-learn>=0.5.0
Requires-Dist: wget<4.0,>=3.2
Provides-Extra: dev
Requires-Dist: black>=24.0.0; extra == 'dev'
Requires-Dist: mypy>=1.8.0; extra == 'dev'
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
Requires-Dist: pytest-sugar>=1.0.0; extra == 'dev'
Requires-Dist: pytest>=7.4.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Requires-Dist: seaborn>=0.13.0; extra == 'dev'
Description-Content-Type: text/markdown

# Ayase

Modular media quality metrics for video, image, and audio datasets.

> **Work in progress** - APIs and module interfaces may change before 1.0.

## What It Does

Ayase runs quality assessment modules over a dataset and writes structured per-sample metrics. 327 modules produce 364 metrics across 19 categories (NR-IQA, FR-IQA, NR-VQA, temporal, motion, audio, face, safety, aesthetics, text-video alignment, and more). Modules are independent - pick only what you need.

Full metric catalog: [METRICS.md](METRICS.md). Pretrained model catalog: [MODELS.md](MODELS.md).

## Install

```bash
pip install ayase
```

Modules that require ML backends (torch, transformers, pyiqa, insightface, etc.) skip gracefully when the backend is not installed. Model weights are downloaded and cached on first use.

## CLI

```bash
ayase scan ./dataset                                    # all modules
ayase scan ./dataset --modules metadata,basic_quality   # selected modules
ayase modules list                                      # show all 327 modules
ayase modules check                                     # verify which backends are available
ayase filter ./dataset --min-score 70 --output ./good   # filter by quality
ayase stats ./dataset                                   # dataset statistics
ayase tui                                               # terminal UI
```

## Python API

```python
from ayase import AyasePipeline

pipeline = AyasePipeline(modules=["basic", "metadata", "motion"])
results = pipeline.run("./my_dataset")

for path, sample in results.items():
    qm = sample.quality_metrics
    if qm:
        print(f"{sample.path.name}: technical={qm.technical_score} blur={qm.blur_score}")

pipeline.export("report.json")   # also: report.csv, report.html
```

## Configuration

`ayase.toml` in project root:

```toml
[general]
parallel_jobs = 8

[pipeline]
modules = ["metadata", "basic_quality", "motion"]

[output]
default_format = "json"
artifacts_dir = "reports"
```

## Custom Modules

```python
from ayase.models import Sample, QualityMetrics
from ayase.pipeline import PipelineModule
import cv2

class BlurCheck(PipelineModule):
    name = "blur_check"
    description = "Flag blurry frames via Laplacian variance"
    default_config = {"threshold": 100.0}

    def process(self, sample: Sample) -> Sample:
        img = cv2.imread(str(sample.path), cv2.IMREAD_GRAYSCALE)
        if img is None:
            return sample
        score = float(cv2.Laplacian(img, cv2.CV_64F).var())
        if sample.quality_metrics is None:
            sample.quality_metrics = QualityMetrics()
        sample.quality_metrics.blur_score = score
        if score < self.config.get("threshold", 100.0):
            sample.validation_issues.append({"severity": "warning", "message": f"Blurry ({score:.0f})"})
        return sample
```

Modules auto-register via `__init_subclass__`. Config is available as `self.config`.

## Development

```bash
git clone <repo-url> && cd ayase
pip install -e ".[dev]"
pytest                    # 8000+ tests, ~4 min
pytest tests/ --full      # with ML model loading
```

## License

MIT. Model weights downloaded at runtime carry their own licenses - see [MODELS.md](MODELS.md).
