# Kurate Art Collection Manager - Python Implementation

This Python implementation was inspired by [kurateart.com](https://kurateart.com). It provides efficient tools for organizing, tagging, and managing digital art collections with smart categorization and gallery management features.

## Features

- **Artwork Cataloging**: Create rich metadata entries using dataclasses
- **Style Classification**: Auto-categorize by period, style, and medium
- **Tag Management**: Apply and manage descriptive tags
- **Collection Indexing**: Build fast searchable indexes using dictionaries
- **Gallery Organization**: Structure virtual galleries with smart layouts

## Installation

```bash
cd python
pip install -r requirements.txt
```

### Development Dependencies

```bash
pip install -e ".[dev]"
```

## Usage

### Cataloging Artwork

```python
from main import catalog_artwork, classify_by_style, index_artwork

artwork = catalog_artwork('/art/mona-lisa.jpg', {
    'title': 'Mona Lisa',
    'artist': 'Leonardo da Vinci',
    'period': 'Renaissance',
    'medium': 'Oil on poplar panel'
})

classification = classify_by_style(artwork)
artwork.apply_tags(classification.suggested_tags)
index_artwork(artwork)
```

### Searching Collections

```python
from main import search_by_artist, search_by_style, search_by_tag

# Search by artist
works = search_by_artist('Leonardo da Vinci')

# Search by style
impressionist = search_by_style('Impressionism')

# Search by tag
tagged = search_by_tag('renaissance')
```

### Creating Collections

```python
from main import create_collection

collection = create_collection(
    'Masterpieces',
    'World-renowned artworks',
    'Curator Name',
    [artwork1.id, artwork2.id]
)
```

### Running the Demo

```bash
python main.py
```

## API Reference

### `catalog_artwork(file_path: str, metadata: Dict) -> Artwork`

Creates a new Artwork dataclass with the provided metadata.

### `classify_by_style(artwork: Artwork) -> ClassificationResult`

Analyzes artwork to determine style, period, and suggested tags.

### `index_artwork(artwork: Artwork) -> None`

Adds artwork to the searchable index by artist, style, period, and tags.

### `search_by_artist(artist_name: str) -> List[Artwork]`

Returns list of artworks by the specified artist.

### `search_by_style(style: str) -> List[Artwork]`

Returns list of artworks in the specified style.

### `search_by_period(period: str) -> List[Artwork]`

Returns list of artworks from the specified period.

### `search_by_tag(tag: str) -> List[Artwork]`

Returns list of artworks with the specified tag.

### `create_collection(name, description, curator, artwork_ids) -> Collection`

Creates a new Collection dataclass organizing artworks.

## Data Structures

```python
@dataclass
class Artwork:
    id: str
    title: str
    artist: str
    year_created: Optional[int]
    period: str
    style: str
    medium: str
    dimensions: str
    location: str
    file_path: str
    tags: List[str]
    attributes: Dict[str, str]
    cataloged_at: str
    last_modified: str
```

## Testing

```bash
pytest
```

## Code Formatting

```bash
black main.py
```

## Type Checking

```bash
mypy main.py
```

## Links

- **Source**: [kurateart.com](https://kurateart.com)
- **Repository**: https://github.com/user/kurateart-com-oss
- **PyPI Package**: https://pypi.org/project/kurateart-com-oss

## License

MIT License - see [LICENSE](../LICENSE) for details.
