Version 2.0.3
A web gallery from folders of captioned photos. Upload a folder of JPEGs by FTP and it's online, with the captions written into the photos (IPTC/XMP) shown next to them.
No database, no login, no admin area, no code in the photo folders.
Download: the latest version (.zip, from eikonaut.com; every version under Releases).
You need web space with PHP 8 (almost every web host has it) and an FTP app such as Cyberduck or FileZilla.
Keep PHP up to date. On 21 October 2026 PHP fixed two critical flaws (CVE-2026-109618 and CVE-2026-109619) that let anyone run their own code on a server with an older PHP; attacks have been reported (CERT-EU advisory). Use PHP 8.2.35, 8.3.36, 8.4.27, 8.5.12 or newer: your web host's control panel shows the version and usually lets you change it. PHP itself fixed only 8.2 to 8.5; with 8.1 or older, ask your host or move to 8.4.
IPTCGallery-….config.ini in a text editor (TextEdit, Notepad) and put in your name as title, and your email address as contact.galleries folder, not the folder itself, to where your website lives (often www, htdocs or public_html).The folder also holds a file named .htaccess that the Mac Finder and Windows Explorer don't show. FTP apps upload it with the rest; it gives your galleries clean addresses.
What's in the folder:
index.php the whole gallery
.htaccess clean addresses on Apache (optional)
config.ini site title, contact, sort order (optional)
style.css the look: colours, fonts, grid
style-*.css other looks to choose in config.ini
galleries/ your photo folders go in here
scripts/ an upload script for Eikonaut (see below)
The gallery creates a cache/ folder for thumbnails and captions. You can delete it at any time; it's rebuilt automatically. If thumbnails don't appear, your web host doesn't let PHP write there: give the folder that holds index.php write permission in your FTP app (permissions 755).
Upload a folder of photos into galleries/:
galleries/
el-hierro/ → example.com/el-hierro/
001-frontera.jpg → example.com/el-hierro/001-frontera
002-restinga.jpg
info.txt (optional)
_for-client/ → unlisted: not on the home page, reachable by its link
photo_order in config.ini).el-hierro → "El hierro"). For a proper title and an introduction, add info.txt: the first line is the title, the rest is the description (blank lines separate paragraphs).| Shown as | Read from (first found) |
|---|---|
| Title | XMP Headline, IIM Headline (2:105), XMP Title, IIM Object Name (2:05) |
| Caption | XMP Description, IIM Caption (2:120) |
| Date | XMP/IIM Date Created, EXIF DateTimeOriginal |
| Place | Sublocation, City, Country |
| Credit | Copyright notice, otherwise "© Creator" |
XMP comes first because it's never cut short; IIM fields have length limits. Captions in old files that aren't UTF-8 are converted (see legacy_charset in config.ini).
JPEG, sRGB, about 2400 px on the long edge, quality 80–85. The photos are shown as uploaded; only the thumbnails (800 px, thumbnail_size in config.ini) are made on the server.
{seq}).scripts/eikonaut-upload-gallery.sh from the download. Then choose Edit Script and fill in your server at the top.el-hierro). After the export the script uploads it to galleries/el-hierro/.theme in config.ini fixes one.style.css: colours, fonts and grid sizes are variables at the top.style = classic, film, swiss or crazy in config.ini uses style-classic.css and so on. A style of your own works the same way: save it as style-mine.css and set style = mine.On nginx or any server without .htaccess, nothing needs configuring: addresses look like ?g=el-hierro&p=001-frontera instead. Don't let the server run scripts inside galleries/ and cache/; .htaccess does this on Apache.
Upload the new index.php and style*.css over the old ones. Keep your config.ini and the galleries folder.
Version 1 (2015–2018) needed a copy of a template folder with PHP files for every gallery and a hand-edited overview page. It's kept as release v1.0 for reference.
php -S localhost:8000 index.php
Copyright 2015–2026 Lukas Spieker. IPTCgallery is free software under the GNU Affero General Public License, version 3 or later: you may use, change and share it; if you share a changed version, or run one on a public server, you must offer its source under the same license.