> ## Documentation Index
> Fetch the complete documentation index at: https://docs.glasswarp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Mona Lisa: the VNC-hard demo

> An agent reproduces the Mona Lisa in Paint — exact color via UIA plus hundreds of native tile fills.

The demo we reach for when someone asks *"what can Glasswarp do that a VNC or a
throwaway sandbox can't?"* An agent turns a source portrait into a
paint-by-numbers plan and **paints it in MS Paint on a real Windows PC** through
the API.

```
launch_app(mspaint) → observe canvas → draw tile grid (native drags)
  → for each quantized color: set exact RGB (UIA dialog) → bucket-fill its tiles
  → screenshot the reproduction
```

<Note>
  **Platform vs agent:** Glasswarp provides eyes (`screenshot`, canvas/ribbon
  UIA targets) and hands (`drag`, `click`, native color-dialog input). Turning an
  image into a tile plan is the agent (customer code).
</Note>

## Why it's a differentiator

<Steps>
  <Step title="Exact color through UI structure">
    Each tile color is set via Paint's native **Edit Colors** dialog using host
    **UIA** targets (the R/G/B fields). A pixel-only VNC framebuffer has no UI
    tree to target, so it can't reliably dial in precise RGB.
  </Step>

  <Step title="High-volume precise native input">
    Hundreds of native drags (the tile grid) and native bucket-fills land 1:1 on
    the real Win32 canvas at native resolution. Soft framebuffers smear and
    misplace this at scale.
  </Step>

  <Step title="Native-resolution verification">
    The result is captured as a fresh, native-res GPU screenshot — not a
    re-encoded remote frame.
  </Step>
</Steps>

## Prerequisites

<Steps>
  <Step title="An online, API-enabled rig">
    See [Install the host](/get-started/install-host).
  </Step>

  <Step title="A host with drag support">
    The host must be rebuilt with `mouse_down` / `mouse_up`.
  </Step>

  <Step title="SDK with grounding extra">
    ```bash theme={null}
    pip install "glasswarp[grounding]"
    export GLASSWARP_API_KEY=gw_live_sk_...
    ```
  </Step>
</Steps>

## Run

```bash theme={null}
python sdk/python/examples/paint_mona_lisa_demo.py
```

A public-domain Mona Lisa ships at `sdk/python/examples/assets/mona_lisa.jpg`.

## Tuning

| Env var           | Default                           | Purpose                                                |
| ----------------- | --------------------------------- | ------------------------------------------------------ |
| `MONA_SRC`        | bundled Mona Lisa                 | Any portrait to reproduce                              |
| `MONA_COLS`       | `28`                              | Mosaic columns — higher = more fidelity, more tiles    |
| `MONA_COLORS`     | `12`                              | Quantized colors = number of Edit-Colors dialog visits |
| `MONA_FILL_BATCH` | `24`                              | Bucket-fill clicks per API round trip                  |
| `PAINT_PATH`      | `C:\Windows\System32\mspaint.exe` | App to launch                                          |

Defaults produce a **\~28×42 ≈ 1176-tile, 12-color** mosaic, letterboxed so
tiles stay square. When finished, the agent opens Paint **File → Save As**,
navigates to **Desktop**, confirms the destination, then saves a JPEG on the
**Windows rig** (not the client):

`%USERPROFILE%\Desktop\Mona Lisa via Glasswarp API.jpg`

Watch the Save dialog in **Console → Sessions → Eye**.

<CardGroup cols={2}>
  <Card title="Paint the wordmark" icon="pen-nib" href="/examples/paint">
    The themed GLASSWARP headline visual.
  </Card>

  <Card title="Send input" icon="hand-pointer" href="/guides/input">
    Drag, click, and native color selection.
  </Card>
</CardGroup>
