galerie
A self-hosted web art gallery, and the AI curator that fills it.
A self-hosted art gallery, and the curator that fills it.
Name a painter. The curator builds their catalogue, searches the archives it is connected to, and downloads the best printable copy of each work it can find.
The gallery is the other half: a private place to look at what came back. Full screen, no crops.

What you do
./curate.sh "Jules Bastien-Lepage"
That is the whole interaction. The curator resolves the artist, pulls their catalogue from Wikidata, asks every connected source for every work, merges duplicates, and collects candidate images.
Works it cannot find a clean copy of stay in the catalogue, marked as missing.

Where the AI comes in
Fetching files is the easy half. The hard half is that most of what an archive returns is not a reproduction of a painting — it is a photograph of an object.
A scan with the frame in shot. Stretcher bars along one edge. A colour calibration strip next to the canvas. A conservation sticker. A gigapixel tile of one corner. A print floating in a paper margin with a pencil signature under it. All of them are catalogued the same way, and none of them can be printed.
So the AI looks at them. For each work it gets every candidate side by side and answers one question: is this a flat reproduction where the painting reaches all four edges? What fails is rejected with a reason and never offered again. The next round brings different versions, until something clean turns up or the work is marked unavailable.
Three more things it handles, none of which can be written as a rule:
The same painting under two names. One archive has The Grand Canal, another has Le Grand Canal, a third uses Cyrillic. Same picture, three records. They get merged and the best scan survives.
Bigger files that are worse. Museum photographs come with yellowed varnish, a colour cast, gallery lighting, a slight angle. A smaller restored reproduction often wins.
The wrong artist. Archives match on surnames and painting runs in families. Without something looking at the pictures, a father’s illustrations end up filed under his son.
What you get

Each work shows the size it prints at — in centimetres, at 300 DPI and at 150 DPI, not just a pixel count. Download the file as it is, or have it converted to TIFF in AdobeRGB at 300 DPI, ready for a lab.
One button deletes a bad reproduction. It blocks that version permanently and puts the work back in the queue, so the next round finds a different one.
On a phone

Where it looks
Five connectors, all official open-access APIs. Nothing behind a login, nothing scraped, nothing reassembled from an image a site serves in pieces.
| connector | what it brings |
|---|---|
| Wikidata | the catalogue, and the identity every other source is matched against |
| Wikimedia Commons | the widest net: individual scans and whole category trees |
| The Metropolitan Museum | few works per artist, often the best scan of them |
| Smithsonian | CC0 originals, frequently the source others serve a shrunken copy of |
| Art Institute of Chicago, Cleveland Museum | their own collections, CC0 |
Adding one is small. A connector is one file with one function: given a work,
return candidate images with their dimensions. Scoring, deduplication, review and
downloading are already there and treat every source the same.
curator/sources/cleveland.py is fifty lines and is the template; the five rules
are in AGENTS.md.
No artwork ships with it
The repository contains code, not pictures. Nothing is downloaded until you ask for an artist, and what lands on disk depends entirely on which artists you ask for.
Expect it to get large. One painter can be hundreds of works, and a print-quality scan is tens of megabytes.
The screenshots above are from a running installation.
For personal use
It collects from public collections for private use. It does not clear rights and it records no licence, because sources report licensing inconsistently and a guessed value that looks authoritative is worse than none.
A file may be public domain, a museum’s open-access release, or someone’s own photograph under a licence requiring attribution. Before publishing, printing commercially or redistributing, check at the source. Every work links back to the page it came from.
What to expect
- Painters still in copyright come back nearly empty. The catalogue is right; the images are not in open collections.
- Clean scans are often smaller than framed ones, so many works land below print size.
- Some catalogues are mostly prints and drawings — Victorian illustrators and 17th-century Dutch masters especially.
Running it
Postgres and two containers, in docker-compose.yml. Configuration in .env.
The only optional extra is a Smithsonian API key, which is free.
cp .env.example .env # then edit it
docker compose up -d --build
./curate.sh "Johannes Vermeer"
| file | what it covers |
|---|---|
AGENTS.md |
how it works, the rules, the invariants |
docs/sources.md |
every source and its traps |
docs/vision-qc.md |
the review step: criteria and file format |