drupal / art_gallery
A typography-led Drupal CMS site template for artists and galleries: artworks, artists, exhibitions and freeform Canvas pages, with a built-in lightbox and WCAG 2.2 AA as a release criterion.
Package info
git.drupalcode.org/project/art_gallery.git
Type:drupal-recipe
pkg:composer/drupal/art_gallery
Requires
- drupal/art_gallery_theme: ^1
- drupal/core: ^11.4
- drupal/drupal_cms_accessibility_tools: ^2.2
- drupal/drupal_cms_forms: ^2
- drupal/drupal_cms_multilingual: ^2
- drupal/drupal_cms_site_template_base: ^2.2
- drupal/verf: ^2.1
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
A Drupal CMS site template for artists and small galleries. It gives you a working gallery website in one install: artworks, artists and exhibitions with the metadata a gallery actually keeps, listing pages with filters, a lightbox, freeform pages built in Drupal Canvas, and a typography-led black-and-white design with one accent color of your choice. WCAG 2.2 AA is a release criterion, not an afterthought (see Accessibility).
It works for a single artist's portfolio as well as for a gallery that represents several artists.
What you get
Content types
- Artwork: images (several per work, the first is the primary), artist(s), year ("c. 1898" is fine), medium, materials and technique, dimensions, edition, series, availability (available, reserved, sold, not for sale, on loan), price with a "show price" switch (off means "price on request"), inventory number, credit line, description, featured flag.
- Artist: portrait, discipline, short and long biography, CV, born/died/based in, links, disciplines, featured flag and sort weight. Artists without a portrait get a monogram placeholder.
- Exhibition: dates, type (solo, group, fair, online, residency), venue and address, opening hours, external link, the artists and the works in hanging order, hero image, text. Current, upcoming and past are worked out from the dates.
- Medium and Series vocabularies. The Utility page type of Drupal CMS stays available for privacy policies and the like.
Pages and listings (Canvas pages you can edit, with Views blocks you can move):
- Home with a hero work, "Now showing", featured works and artists.
- Works (filterable grid: medium, artist, availability; 12 per page) and a dense index table.
- Artists, Exhibitions (current, upcoming, past), About, Visit, and an Accessibility statement to adapt.
- Artwork, artist and exhibition pages rendered by Canvas content templates: wall-label metadata, "more by this artist", works per exhibition, exhibitions per artist, an inquiry button.
Theme (art_gallery_theme): Archivo display type, IBM Plex Mono labels, gray mats so works are never cropped, a built-in keyboard-operable lightbox (PhotoSwipe, bundled, no CDN), light and dark scheme, white or warm page ground and an accent color, all from the theme settings form, which refuses color pairs below 4.5:1 contrast.
Also included: Drupal CMS's base template (SEO, search engine sitemap, editorial workflow, media, accessibility tooling for editors), the forms feature, SEO fields and social-sharing metatags for every gallery type, and Drupal CMS's multilingual feature: the site is translation-ready and ships in English. Artworks, artists, exhibitions, Canvas pages, menu links, the Medium and Series terms and image alt texts can be translated, and editors have the permissions. Add your languages under Configuration → Regional and language. The header has no language switcher: once a second language is added, place the Language switcher block in the header of the page layout in the Canvas editor.
Install
With the Drupal CMS installer: choose Art Gallery when the installer offers site templates (once the template is listed). With Composer and Drush:
composer create-project drupal/cms my-gallery
cd my-gallery
composer require drupal/art_gallery
./vendor/bin/drush site:install --yes --site-name="My Gallery" ../recipes/art_gallery
The install takes a minute and ends with the sample content below in place. Log in, replace the sample artists and works with your own, edit the About, Visit and Accessibility pages, and set your colors under Appearance → Art Gallery → Settings.
The sample content
The template installs six Belgian artists (Anna Boch, James Ensor, Léon Spilliaert, Jean Brusselmans, George Minne, Constantin Meunier), eighteen works and four exhibitions, so every page has something on it from the first minute. The artists and works are real and in the public domain; the gallery, the inventory numbers, prices, availability, exhibitions, venue, address and contact details are fictional and meant to be replaced. Delete or edit them freely; nothing else depends on them.
Customizing
- Colors and fonts without code: Appearance → Art Gallery → Settings, or copy the theme's
theme.cssandfonts.cssto your web root. Details in the theme'sCUSTOMIZING.md, including the--ag-*color contract and how a Canvas Brand Kit plugs into it. - Layout and pages: edit the Canvas pages and content templates in the Canvas editor.
- Single-artist site: create one Artist, leave the Artists menu item out, and use the artwork card variant without the artist line. The data model needs no change.
- Deeper changes: copy the theme into
themes/custom(seeCUSTOMIZING.md) and make it yours. - AI coding agents: installed through the Drupal CMS installer, the template places an
AGENTS.mdat the project root with notes on its content model, Canvas templates and theme (with Composer alone, adddrupal/art_gallerytoextra.drupal-scaffold.allowed-packagesto get it). Composer rewrites that file on every install or update; to keep your own edits, add"[project-root]/AGENTS.md": falseunderextra.drupal-scaffold.file-mappingin your project'scomposer.json.
Accessibility
What the theme's components do (headings, focus, target sizes, contrast, keyboard-operable lightbox and menu, reduced motion) is described in the theme's ACCESSIBILITY.md. The template adds:
- Sample content with real alt texts. All 23 sample images describe the work, not just its title.
The default pages and content templates keep one
h1and a logical heading order. - Accessible listings. The works filters are native
selectelements with visible labels, and the works index table has a caption. - Editoria11y for content editors (from Drupal CMS's accessibility tools), and an Accessibility statement page in the footer menu, as a template to edit.
How it is checked: before every release, axe-core (WCAG 2.x A/AA and best-practice rules) runs on the
Home, Works, Artists, Exhibitions, About, Visit and Accessibility pages and on one artwork, artist and
exhibition page, as an anonymous visitor, with 0 violations as the bar; Editoria11y runs on the same
pages as an editor, and the menu, filters, pager and lightbox are checked with a keyboard and at phone
width. In CI, the install test visits every default page and the accessibility job runs axe and a
headless-browser test of the lightbox.
Known limitations: image derivatives are generated on first view, so a gray mat shows until then, and the sample content is English only.
What your site still has to do:
- Write real alt texts for your own images.
- Edit the Accessibility statement page (
/accessibility): your name, contact details, the review date and any limitations specific to your site. - Keep the contrast rules when you change colors, and re-run an automated checker (axe DevTools, Lighthouse or the Editoria11y dashboard) after adding components or custom markup.
Requirements and compatibility
Drupal CMS 2.2 or later (Drupal core 11.4+, Canvas 1.x). The template depends on
drupal_cms_site_template_base, drupal_cms_accessibility_tools, drupal_cms_forms,
drupal_cms_multilingual, the theme and the small verf module (for the artist filter).
Support and contributing
Bugs and ideas: the issue queue. The theme has its own queue at art_gallery_theme.
Credits
Images in the sample content (content/file/)
All public domain. Art Institute of Chicago (AIC) and Cleveland Museum of Art (CMA) publish theirs as CC0 (https://www.artic.edu/open-access/open-access-images, https://www.clevelandart.org/open-access). The other images come from Wikimedia Commons, where they are tagged public domain or CC0: the paintings are out of copyright (artist dead more than 70 years) and faithful reproductions of public-domain paintings carry no copyright of their own in the EU (Directive 2019/790, article 14). The artists are real; the gallery, inventory numbers, availability, prices and exhibitions around them are fictional.
| File | Work | Source |
|---|---|---|
| ensor-rog.jpg | James Ensor, De rog (The Skate), 1892 | KMSKA Antwerp, via Wikimedia Commons (public domain) |
| ensor-grijze-zee.jpg | James Ensor, Grijze zee (The Grey Sea), 1880 | KMSKA Antwerp, via Wikimedia Commons (public domain) |
| ensor-baden-oostende.jpg | James Ensor, De baden te Oostende (The Baths at Ostend), 1890 | MSK Ghent, via Wikimedia Commons (public domain) |
| ensor-self-portrait.jpg | James Ensor, Ensor aan de schildersezel, 1890 (artist portrait) | KMSKA Antwerp, via Wikimedia Commons (public domain) |
| minne-reliekdrager.jpg | George Minne, De kleine reliekdrager (The Small Relic Bearer), 1897 | KMSKA Antwerp, inv. 2049, via Wikimedia Commons (CC0) |
| minne-solidarity.jpg | George Minne, Solidarity, 1898 | CMA 1968.191 |
| minne-baptism.jpg | George Minne, The Baptism of Christ, 1899 | CMA 1969.248 |
| meunier-portrait.jpg | Constantin Meunier in his studio, c. 1901, photographer not credited (artist portrait) | halftone reproduction via Wikimedia Commons (public domain, anonymous work published > 70 years ago) |
| meunier-reaper.jpg | Constantin Meunier, The Reaper, c. 1895 | AIC |
| meunier-shipwrecked.jpg | Constantin Meunier, Shipwrecked, c. 1890 | AIC |
| meunier-hammerman.jpg | Constantin Meunier, The Hammerman, 1884 | AIC |
| boch-elevatie.jpg | Anna Boch, Tijdens de elevatie (During the Elevation), 1893 | Mu.ZEE Ostend, SM002365, via meemoo and Wikimedia Commons (public domain) |
| boch-kaai-mechelen.jpg | Anna Boch, Kaai in Mechelen (Wharf in Mechelen), 1906 | MSK Ghent, 1942-AK, via Wikimedia Commons (public domain) |
| boch-nettenboetsters.jpg | Anna Boch, Nettenboetsters in de duinen (Net menders in the dunes) | Mu.ZEE Ostend, via Wikimedia Commons (public domain) |
| boch-portrait.jpg | Théo van Rysselberghe, Portrait of Anna Boch, c. 1889 (artist portrait) | Museum of Fine Arts, Springfield MA, via Wikimedia Commons (public domain) |
| spilliaert-self-portrait.jpg | Léon Spilliaert, Self-portrait with a red pencil, 1908 (artist portrait) | Mu.ZEE Ostend, via Wikimedia Commons (public domain) |
| spilliaert-vertigo.jpg | Léon Spilliaert, Vertigo (Duizeling), 1908 | Mu.ZEE Ostend, SM000696, via Wikimedia Commons (public domain); https://artinflanders.be/en/artwork/vertigo-0 |
| spilliaert-windstoot.jpg | Léon Spilliaert, De windstoot, after 1904 | Mu.ZEE Ostend, SM000003, via Wikimedia Commons (public domain) |
| spilliaert-zeedijk.jpg | Léon Spilliaert, De zeedijk te Oostende van op het staketsel gezien, 1910 | Mu.ZEE Ostend, SM001668, via Wikimedia Commons (public domain) |
| brusselmans-self-portrait.jpg | Jean Brusselmans, Autoportrait à la pipe, etching, 1915 (artist portrait) | KBR Brussels, Prints Department F-2013-2111, via Wikimedia Commons (public domain) |
| brusselmans-tuinen.jpg | Jean Brusselmans, Tuinen, 1934 | Mu.ZEE Ostend via artinflanders.be and Wikimedia Commons (public domain) |
| brusselmans-grijs-winter.jpg | Jean Brusselmans, Grijs winterlandschap, 1935 | Musea Brugge via artinflanders.be and Wikimedia Commons (public domain) |
| brusselmans-brabants.jpg | Jean Brusselmans, Brabants landschap, 1934 | Wikimedia Commons (public domain) |
The theme's own credits (Mercury, fonts, libraries, icons, component example images) are in the
CREDITS.md of art_gallery_theme.
Copyright rule used for selecting images
Only works by artists who died more than 70 years ago, so they are public domain in the EU as well as in the museums' jurisdiction. That excludes, for example, Pollock, Rothko, Brancusi and Kupka, whose works are still under copyright in Belgium even where a US museum offers them openly.