Skip to content


Repository files navigation


Build Status Maintainability Coverage

Simple image gallery sharing application. Galleries are creatable by everyone and available with a token in the URL. Everyone with the correct URL can change the gallery name, upload images and set their title. On creation, a boss token is generated, which can be used to delete the whole gallery, single pictures or make the gallery read-only later on.

You can test this at!


  • Galleries are shared via secret token in URL (e.g.!Njg4NThi)
  • Galleries are editable by everyone or -- when they are configured to be read-only -- only with a boss token (URL)
  • Pictures can be shared with token URLs to prevent giving away a gallery's token
  • EXIF data is read and shown
  • Pictures can be rated
  • Infinite scrolling on gallery page
  • Lazy image loading
  • Responsive design
  • Tagging of images
  • Filter by tags, date, rating
  • Automatic labelling using self-hosted Convolutional Neural Network (Inception v3 model)
  • GitHub login for taking track of galleries and gallery administration
  • Device token authentication for galleries
  • Symmetric client-side encrypted galleries with sharable secret based on libsodium (XSalsa20 for encryption, Poly1305 for authentication)
  • "Responsive Images Service": Options like resize for inclusion in third-party sites
  • Transparent conversion of images (to avif or webp) if browser supports these formats
  • Milestones can be set by gallery and shown on images (e.g. for showing time since a certain event on photos)


nvm use
npm install -g yarn
foreman start

Deployment using docker

Initial setup

Clone the source code:

git clone
cd imgshr

Change the MySQL root password and the admin login credentials in .env and config/settings.yml.

Then generate a Rails secret key and paste it into .env:

./ run web rails secret

Now start up all services (in background):

./ up -d

The docker volumes deploy_db, deploy_redis, and deploy_storage hold the production data; make sure, you do not lose them.

The log can be followed with:

./ logs -f

Update the code

./ down
git pull
./ up --build

traefik example

See examples/traefik as a starting point for a deployment with traefik and Let's Encrypt.


Copyright © 2014-2023 henning mueller, released under the terms of GNU AGPL 3.0.