# Mirror

`mirror.opennash.com` is an infinite inspiration canvas and provenance guessing game: pan, zoom, hover, select a tile, and guess whether the catalogue note is attached to a real open-access artwork or a generated style probe.

## What is included

- `index.html` - static app shell.
- `styles.css` - interface, canvas, tile, tooltip, and panel styling.
- `src/main.js` - browser-native infinite pan/zoom renderer.
- `data/art-seeds.js` - seed museum records, generated atlas crops, and source registry.
- `assets/mirror-ai-atlas.png` - generated with the built-in Codex GPT image flow for this project.
- `PROCESS.md` - expansion pipeline for future scan, curation, and generation runs.
- `scripts/ingest-open-access.mjs` - starter no-dependency ingest script for open-access museum APIs.
- `.codex/skills/mirror-canvas-qa` - repeatable closed-loop QA skill for public browser verification.

## Research Backbone

The seed list is intentionally biased toward sources that expose public-domain or open-access metadata and images:

- Art Institute of Chicago API and IIIF images: `https://api.artic.edu/`
- The Metropolitan Museum of Art Collection API: `https://metmuseum.github.io/`
- Cleveland Museum of Art Open Access API: `https://www.clevelandart.org/open-access-api`
- Getty Open Content Program: `https://www.getty.edu/projects/open-content-program/`
- National Gallery of Art Open Access: `https://www.nga.gov/open-access-images.html`
- Harvard Art Museums API: `https://harvardartmuseums.org/collections/api`
- Rijksmuseum/Rijksstudio API: `https://data.rijksmuseum.nl/object-metadata/api/`
- Smithsonian Open Access: `https://www.si.edu/openaccess`
- Europeana APIs: `https://pro.europeana.eu/page/apis`
- The Walters Art Museum API: `https://api.thewalters.org/`
- IIIF: `https://iiif.io/`

Run the starter ingest:

```bash
MIRROR_QUERY=painting MIRROR_LIMIT=18 node scripts/ingest-open-access.mjs
```

## Generation Process

The first Codex GPT image asset is a 4x4 atlas of speculative style tiles. It was prompted as a contact sheet of original visual languages inspired by broad art categories, with explicit constraints to avoid exact replicas, signatures, readable text, living-artist imitation, and recognizable protected characters.

Future expansion should run as a loop:

1. Pull public-domain museum records and normalize `title`, `creator`, `date`, `medium`, `style`, `license`, `sourceUrl`, and `image`.
2. Cluster the corpus by visual/metadata features: period, region, medium, motif, palette, geometry, composition, and emotional tone.
3. Generate new AI probes from combinations, not copies, such as `ukiyo-e contour + Bauhaus material study + satellite-map composition`.
4. Store every generated image with its exact prompt, generation date, source inspirations, `truth: "generated"`, and a plausible public catalogue card for the game.
5. Add all records into `data/art-seeds.js` or replace the file with a generated JSON index when the corpus becomes large.

See `PROCESS.md` for the full workflow and the first Codex GPT image prompt.

## Local Use

Open `index.html` directly in a browser. No dependency install is required.

Run the full public QA loop:

```bash
npm run qa:closed-loop
```

`npm run test:all` is an alias for the same full public browser QA loop.
