Skip to main content
Glama
README.md
# Vritti

**Creative OS MCP** — the agent becomes the designer.

A lightweight, no-API-key Creative OS that makes any AI agent a competent graphic designer with brand DNA memory, genre-aware generation, self-critique, and version control.

## Features

- **Zero API keys** — Pollinations.ai (free, no signup) + SVG fallback
- **Brand DNA** — lock colors/fonts/style once → generate forever
- **Genre skills** — horror, music, corporate, cinema, minimal, vibrant
- **35+ presets** — Instagram, LinkedIn, YouTube, TikTok, album covers, movie posters
- **Self-critique** — 6-dimension rubric scoring with auto-regenerate
- **Version control** — every generation tracked (adapted from Rudra Musical Git)
- **SVG generation** — skill-aware local fallback with rsvg-convert
- **Multi-engine** — Pollinations → HuggingFace → SVG fallback chain

## Install

```bash
# No dependencies beyond httpx + pillow (already installed on Termux)
cd ~/vritti
pip install -e .

# Or just use directly
PYTHONPATH=src python3 -m vritti.server
```

## Usage

### As MCP Server (stdio JSON-RPC)

```bash
# Add to your MCP config
{
  "vritti": {
    "command": "python3",
    "args": ["-m", "vritti.server"],
    "env": { "PYTHONPATH": "/path/to/vritti/src" }
  }
}
```

### Python API

```python
from vritti.server import generate_image, create_brand, quality_check

# Create brand DNA
create_brand(
    name="My Brand",
    primary_color="#1a1a2e",
    secondary_color="#e94560",
    style="dark cinematic",
)

# Generate with brand
result = generate_image(
    prompt="Ancient temple at midnight, dramatic lighting",
    genre="horror",
    brand="My Brand",
    preset="movie-poster",
)

# Quality check
quality = quality_check(
    image_path=result["path"],
    prompt="Ancient temple at midnight",
    genre="horror",
    brand="My Brand",
)
print(f"Score: {quality['overall_score']}/100")
```

## MCP Tools

| Tool | Description |
|------|-------------|
| `generate_image` | Generate image from text prompt (Pollinations/SVG fallback) |
| `generate_carousel` | Multi-slide carousel for social platforms |
| `create_brand` | Create brand DNA profile (colors, fonts, style) |
| `list_skills` | List available genres, formats, principles |
| `list_engines` | List generation engines and status |
| `list_presets` | List 35+ platform presets |
| `list_brands` | List saved brand profiles |
| `get_version` | Get Vritti version info |
| `get_platform` | Get detected platform and output paths |
| `version_history` | Get generation version history |
| `quality_check` | Evaluate image quality against rubric |

## Skills

### Genres
- `horror` — deep reds, blacks, monochromatic
- `music` — genre-dependent (hip-hop bold, lo-fi muted)
- `corporate` — blues, whites, conservative
- `cinema` — dramatic, high contrast, color grading
- `minimal` — whitespace, single accent, breathing room
- `vibrant` — neon, high saturation, bold gradients

### Formats
- `instagram-square` — 1080x1080
- `instagram-carousel` — 1080x1350 (4:5)
- `album-cover` — 3000x3000 (Spotify/Apple requirement)
- `movie-poster` — 2700x4000 (27:40 at 300 DPI)
- `linkedin-carousel` — 1080x1350
- `youtube-thumbnail` — 1280x720

## Architecture

```
vritti/
├── src/vritti/
│   ├── server.py          # MCP server (JSON-RPC over stdio)
│   ├── engines/           # Pollinations + HuggingFace + SVG
│   ├── svg/               # SVG generation + PNG conversion
│   ├── skills/            # Genre/format/principle loaders
│   ├── brand/             # Brand DNA CRUD
│   ├── quality/           # 6-dimension rubric scoring
│   ├── versioning/        # Version control (Rudra-adapted)
│   ├── output/            # 35+ platform presets
│   └── platform.py        # Termux/Android/Windows detection
├── skills/                # JSON skill files
│   ├── genres/            # Horror, music, corporate, etc.
│   ├── formats/           # Instagram, album, poster specs
│   └── principles/        # Color theory, typography, composition
└── pyproject.toml
```

## License

MIT — LGCY Studios