Skip to main content

AugmentAI 🎨

LLM-Powered Data Augmentation Policy Designer

Design domain-safe, task-aware augmentation policies through natural language conversation. No more manual hyperparameter tuning—just describe your dataset and constraints, and get scientifically sound augmentation pipelines.

Design Philosophy: The LLM suggests. Rules decide. Code executes.

PyPI version Python 3.9+ License: MIT Open In Colab

🌟 Features

  • One-Command Preparation: augmentai prepare ./dataset - inspect, split, augment, export
  • 🆕 AutoSearch: augmentai search ./dataset - find optimal policies automatically
  • Natural Language Interface: Describe your dataset in plain English
  • Domain-Aware Constraints: Built-in rules for medical, OCR, satellite, and natural images
  • Safety-First Design: Hard constraints that prevent scientifically invalid augmentations
  • Full Reproducibility: Seed locking, manifest tracking, deterministic pipelines
  • LLM as Advisor: OpenAI, Gemini, Ollama, or LM Studio—LLM suggests, rules validate
  • Executable Output: Generate standalone Python scripts ready to run
  • Verbose/Quiet Modes: --verbose for debugging, --quiet for CI/CD pipelines

🚀 Quick Start

Installation

# Install from PyPI
pip install augmentai

# Or install from source
git clone https://github.com/kyrozepto/augmentai.git
cd augmentai && pip install -e .

Set up your LLM provider

# Option 1: Environment variables (recommended)
export OPENAI_API_KEY="your-api-key"      # For OpenAI
export GOOGLE_API_KEY="your-api-key"       # For Gemini (from aistudio.google.com)

# Option 2: Pass directly via CLI
augmentai chat --provider gemini --api-key "your-key"
augmentai chat --provider openai --api-key "your-key"

# Option 3: Use Ollama (free, local)
ollama pull llama3.2
augmentai chat --provider ollama

Supported LLM Providers:

Provider Models API Key Env Var
openai gpt-4o-mini, gpt-4o OPENAI_API_KEY
gemini gemini-2.0-flash, gemini-1.5-pro GOOGLE_API_KEY
ollama llama3.2, mistral, etc. (none needed)
lmstudio local models (none needed)

One-Command Dataset Preparation

# Prepare dataset with auto-detected domain
augmentai prepare ./dataset

# Medical domain with custom split
augmentai prepare ./lung_ct --domain medical --split 70/15/15

# Preview what would happen (dry run)
augmentai prepare ./images --dry-run

Interactive Policy Design

# Start interactive chat
augmentai chat --domain medical

# List available domains
augmentai domains

# Validate an existing policy
augmentai validate my_policy.yaml --domain medical

🔍 AutoSearch: Find Optimal Policies Automatically

# Search for best policy (uses evolutionary optimization)
augmentai search ./dataset --domain medical --budget 50

# With custom output directory
augmentai search ./images --budget 100 --output ./search_results

# Preview search configuration
augmentai search ./data --dry-run

AutoSearch uses proxy metrics (diversity, coverage, strength, balance) to score policies without requiring full model training.

� Output Structure

Running augmentai prepare generates:

prepared/
├── data/
│   ├── train/           # Training split
│   ├── val/             # Validation split
│   └── test/            # Test split
├── augmented/           # Output for augmented data
├── augment.py           # Standalone augmentation script
├── config.yaml          # Pipeline configuration
├── manifest.json        # Reproducibility manifest
├── requirements.txt     # Dependencies
└── README.md            # Usage instructions

🎯 Real-World Examples

🏥 Medical: Dental Panoramic X-Ray

augmentai prepare "C:\Users\you\datasets\panoramic-xray" --domain medical --split 70/15/15

# Output:
# ✓ Detected: 1,247 images across 4 classes (cavity, healthy, fracture, caries)
# ✓ Split: 873 train, 187 val, 187 test
# ✓ Policy: Conservative augmentations preserving dental anatomy
# ✓ Forbidden: ElasticTransform, ColorJitter (would distort teeth/bone structure)

🛰️ Satellite: Land Use Classification

augmentai prepare ./sentinel2_tiles --domain satellite --seed 42

# Multi-spectral imagery gets special treatment:
# ✓ Allowed: Rotation (any angle), flips, scale
# ✓ Forbidden: ColorJitter, HSV, ChannelShuffle (breaks spectral bands!)

📝 OCR: Document Scanning

augmentai prepare ./scanned_receipts --domain ocr

# Text legibility is preserved:
# ✓ Allowed: Slight rotation (±5°), brightness adjustment
# ✓ Forbidden: MotionBlur, ElasticTransform (destroys text)

🖼️ Natural: Instagram-style Photos

augmentai prepare ./pet_photos --domain natural

# Maximum flexibility for general images:
# ✓ Allowed: Everything! Color jitter, elastic, cutout, mixup
# ✓ Strong augmentations for robust models

🔬 Research: Reproducible Experiments

# Exact same augmentations every time
augmentai prepare ./experiment_data --seed 12345 --output ./exp_v1

# Later, reproduce with the manifest
cat ./exp_v1/manifest.json
# {
#   "seed": 12345,
#   "dataset_hash": "a1b2c3d4...",
#   "policy_hash": "e5f6g7h8...",
#   "augmentai_version": "0.1.0"
# }

🏭 Production: Batch Processing

# Prepare multiple datasets with consistent settings
for dataset in chest_xray brain_mri skin_lesion; do
    augmentai prepare ./raw/$dataset --domain medical --output ./prepared/$dataset
done

💻 Python API: Full Control

from augmentai.core import Policy, Transform
from augmentai.domains import get_domain
from augmentai.rules.enforcement import RuleEnforcer
from augmentai.export import ScriptGenerator

# Create custom policy
policy = Policy(
    name="dental_xray_v2",
    domain="medical",
    transforms=[
        Transform("HorizontalFlip", 0.5),
        Transform("Rotate", 0.7, parameters={"limit": 20}),
        Transform("CLAHE", 0.4, parameters={"clip_limit": 2.0}),
        Transform("GaussNoise", 0.3, parameters={"var_limit": (10, 30)}),
        Transform("RandomBrightnessContrast", 0.5),
    ]
)

# Validate against medical rules
enforcer = RuleEnforcer(get_domain("medical"))
result = enforcer.enforce_policy(policy)
print(f"Safe transforms: {len(result.policy.transforms)}")

# Generate standalone script
generator = ScriptGenerator()
script = generator.generate_augment_script(result.policy, seed=42)
with open("my_augment.py", "w") as f:
    f.write(script)

🔄 Modifying Generated Config

After running augmentai prepare, edit config.yaml:

# config.yaml - tweak as needed!
policy:
  name: dental_xray_policy
  domain: medical
  seed: 42
transforms:
  - name: HorizontalFlip
    probability: 0.5          # ← Increase to 0.7?
  - name: Rotate
    probability: 0.5
    parameters:
      limit: 15               # ← Bump to 25 for more variety
  - name: CLAHE               # ← Add new transforms!
    probability: 0.4
    parameters:
      clip_limit: 2.0

Then re-run the generated script:

python augment.py --input data/train --output augmented/train --seed 42

🎓 Interactive Learning Session

$ augmentai chat --domain medical

You: I have dental panoramic x-rays with cavity annotations. What augmentations 
     are safe? I'm worried about distorting the teeth.

🤖 AugmentAI: Great concern! For dental x-rays, I recommend:

✅ Safe for dental imaging:
  • HorizontalFlip (p=0.5) - Teeth are roughly symmetric
  • Rotate (p=0.5, limit=±10°) - Small rotations are realistic
  • CLAHE (p=0.3) - Enhances contrast in x-rays
  • GaussNoise (p=0.2) - Simulates sensor noise

⚠️ Automatically blocked:
  • ElasticTransform - Would warp tooth boundaries unrealistically
  • GridDistortion - Same issue, breaks tooth geometry  
  • ColorJitter - X-rays are grayscale, color transforms invalid

You: Can I increase rotation to 30 degrees?

🤖 AugmentAI: I'd advise caution. Dental panoramic x-rays are typically taken 
with the patient positioned consistently. Rotations beyond ±15° might create 
unrealistic training samples. However, if your dataset has varied positioning, 
±20° could work. I'll set it to 20° as a compromise.

/preview
┌────────────────────────────┬─────────────┬──────────────────────┐
│ Transform                  │ Probability │ Parameters           │
├────────────────────────────┼─────────────┼──────────────────────┤
│ HorizontalFlip             │ 50%         │ -                    │
│ Rotate                     │ 50%         │ limit=20             │
│ CLAHE                      │ 30%         │ clip_limit=2.0       │
│ GaussNoise                 │ 20%         │ var_limit=(5, 25)    │
│ RandomBrightnessContrast   │ 30%         │ brightness_limit=0.1 │
└────────────────────────────┴─────────────┴──────────────────────┘

/export dental_cavity_policy.py
✓ Exported to dental_cavity_policy.py

🏥 Domain Safety

AugmentAI enforces hard constraints that cannot be overridden:

Domain Forbidden Transforms Reason
Medical ElasticTransform, GridDistortion, ColorJitter Breaks anatomy, invalid for grayscale
OCR MotionBlur, ElasticTransform Destroys text legibility
Satellite ColorJitter, HSV, ChannelShuffle Breaks spectral band relationships

📁 Project Structure

augmentai/
├── cli/              # CLI commands (prepare, chat, validate, search)
├── core/             # Policy, Transform, Manifest, Pipeline
├── domains/          # Domain rules (medical, ocr, satellite, natural)
├── inspection/       # Dataset auto-detection & analysis
├── splitting/        # Train/val/test splitting strategies
├── export/           # Script & folder generation
├── llm/              # LLM client and prompts
├── rules/            # Safety validation & enforcement
├── compilers/        # Backend code generation
├── search/           # 🆕 AutoSearch: evolutionary policy optimization
├── utils/            # 🆕 Progress bars, logging utilities
└── exceptions.py     # 🆕 Custom error hierarchy

🔧 Configuration

Create augmentai.yaml in your project:

llm:
  provider: openai  # or ollama, lmstudio
  model: gpt-4o-mini
  temperature: 0.7

backend: albumentations
output_dir: ./policies

🎯 Custom Domains

Define your own domain constraints in YAML:

# my_domain.yaml
name: my_custom_domain
description: Custom constraints for my task

constraints:
  - transform_name: ElasticTransform
    level: forbidden
    reason: Not suitable for my task

  - transform_name: Rotate
    level: recommended
    reason: Good for rotation invariance
    parameter_limits:
      limit: [-30, 30]

recommended_transforms:
  - HorizontalFlip
  - RandomBrightnessContrast

Load with:

augmentai chat --domain-file my_domain.yaml

🤝 Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

📄 License

MIT License - see LICENSE for details.

🙏 Acknowledgments

  • Albumentations for the augmentation backend
  • Rich for beautiful terminal UI
  • OpenAI, Ollama, LM Studio for LLM support

Metadata

Release files for augmentai 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for augmentai 0.1.1
File Size Uploaded Provenance
augmentai-0.1.1.tar.gz 142.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for augmentai 0.1.1
File Interpreter ABI Platform
augmentai-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 295.1 kB

Release files / augmentai-0.1.1.tar.gz

Download URL augmentai-0.1.1.tar.gz
Size 142.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5e96ec86c0e6b51cd8e2ff4fed86c22309326556a26b89236a6efafbc99be8f6
BLAKE2b-256 checksum
How to use checksums
fd233d13e8fbb04768ca5e83139136394b94835c6b6da02be2bab0e7ce970d55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.4

Release files / augmentai-0.1.1-py3-none-any.whl

Download URL augmentai-0.1.1-py3-none-any.whl
Size 152.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd34c1bffceeb90096b3cd0dcc338cf4e8599723f4b89de0a42ca5a94554504a
BLAKE2b-256 checksum
How to use checksums
09ffae38287dd822d7cb6d68c80fef86567ef84404fc39a71c5d1a03ab2c8ff4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.4

Security for augmentai 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page