/imgshr

Simple image gallery sharing web application.

Primary LanguageRubyGNU Affero General Public License v3.0AGPL-3.0

IMGSHR

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 https://imgshr.space!

Features

  • Galleries are shared via secret token in URL (e.g. https://imgshr.space/!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)

Development

nvm use
npm install -g yarn
yarn
bundle
foreman start

Deployment using docker

Initial setup

Clone the source code:

git clone https://github.com/nning/imgshr.git
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:

./deploy.sh run web rails secret

Now start up all services (in background):

./deploy.sh 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:

./deploy.sh logs -f

Update the code

./deploy.sh down
git pull
./deploy.sh up --build

traefik example

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

License

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