2018-12-04 05:38:25 +08:00
# PiGallery2
2017-06-04 04:35:47 +08:00
[![npm version ](https://badge.fury.io/js/pigallery2.svg )](https://badge.fury.io/js/pigallery2)
2017-07-04 01:17:49 +08:00
[![Build Status ](https://travis-ci.org/bpatrik/pigallery2.svg?branch=master )](https://travis-ci.org/bpatrik/pigallery2)
2016-05-02 16:07:42 +08:00
[![Heroku ](https://heroku-badge.herokuapp.com/?app=pigallery2&style=flat )](https://pigallery2.herokuapp.com)
2018-12-06 20:50:55 +08:00
[![Docker Build Status ](https://img.shields.io/docker/build/bpatrik/pigallery2.svg )](https://hub.docker.com/r/bpatrik/pigallery2/)
2018-11-30 22:36:42 +08:00
[![dependencies Status ](https://david-dm.org/bpatrik/pigallery2/status.svg )](https://david-dm.org/bpatrik/pigallery2)
[![devDependencies Status ](https://david-dm.org/bpatrik/pigallery2/dev-status.svg )](https://david-dm.org/bpatrik/pigallery2?type=dev)
2016-03-12 21:21:25 +08:00
2018-12-06 20:50:55 +08:00
2018-12-04 05:38:25 +08:00
Homepage: http://bpatrik.github.io/pigallery2/
2017-03-23 02:38:39 +08:00
This is a directory-first photo gallery website, optimised for running on low resource servers (especially on raspberry pi)
2016-03-14 20:30:15 +08:00
2017-06-04 21:25:22 +08:00
## Live Demo
2018-12-03 05:30:49 +08:00
Live Demo @ heroku: https://pigallery2.herokuapp.com/
- the demo page **first load** might take up **30s** : the time while the free webservice boots up
2017-03-23 02:38:39 +08:00
2018-05-16 08:01:11 +08:00
## Table of contents
2018-12-06 16:52:04 +08:00
1. [Getting started ](#getting-started-on-raspberry-pi )
2. [Translate the page to your own language ](#translate-the-page-to-your-own-language )
3. [Feature list ](#feature-list )
4. [Known errors ](#known-errors )
5. [Credits ](#credits )
2016-03-14 20:30:15 +08:00
2017-03-23 02:38:39 +08:00
2018-05-16 08:01:11 +08:00
2018-12-06 16:52:04 +08:00
## 1. Getting started (on Raspberry Pi)
### 1.1 Direct Install
### 1.1.0 [Install NodeJs](https://nodejs.org/en/download/)
2017-06-04 21:25:22 +08:00
Download and extract
```bash
2018-12-03 05:15:39 +08:00
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
2017-06-04 21:25:22 +08:00
```
2018-12-03 05:15:39 +08:00
2018-12-06 16:52:04 +08:00
Full node install on raspberry pi description: https://www.w3schools.com/nodejs/nodejs_raspberrypi.asp
2017-06-04 21:25:22 +08:00
2018-12-06 20:50:55 +08:00
### 1.1.1 Install PiGallery2
#### 1.1.1-a Install from release
2017-07-13 00:35:23 +08:00
2017-06-04 21:25:22 +08:00
```bash
cd ~
2018-12-11 05:54:05 +08:00
wget https://github.com/bpatrik/pigallery2/releases/download/1.5.5/pigallery2.zip
2018-05-16 08:01:11 +08:00
unzip pigallery2.zip
cd pigallery2
2017-07-13 00:35:23 +08:00
npm install
```
2018-12-06 20:50:55 +08:00
#### 1.1.1-b Install from source
2017-07-13 00:35:23 +08:00
```bash
cd ~
wget https://github.com/bpatrik/pigallery2/archive/master.zip
unzip master.zip
2018-05-16 08:01:11 +08:00
cd pigallery2-master # enter the unzipped directory
2017-06-04 21:25:22 +08:00
npm install
```
2018-12-06 04:55:11 +08:00
**Note**: if you run `npm run build-release` , it creates a clean, minified, production ready version from the app in the `release` folder, that is ready to deploy.
2017-07-13 00:35:23 +08:00
2018-12-06 20:50:55 +08:00
#### 1.1.2 Run PiGallery2
2017-06-04 21:25:22 +08:00
```bash
npm start
```
2018-12-06 04:55:11 +08:00
To configure it, run `PiGallery2` first to create `config.json` file, then edit it and restart.
The app has a nice UI for settings, you may use that too.
2017-07-26 05:39:50 +08:00
Default user: `admin` pass: `admin`
2017-06-04 21:25:22 +08:00
2018-12-06 16:52:04 +08:00
### 1.2 Run with Docker
If you have `docker` and don't want to install all the dependencies, use this:
2018-12-06 06:16:14 +08:00
```bash
docker run \
-p 80:80 \
-e NODE_ENV=production \
-v < path to your config file folder > /config.json:/pigallery2-release/config.json \
-v < path to your images folder > :/pigallery2-release/demo/images \
2018-12-06 16:52:04 +08:00
-v < path to your temp folder > :/pigallery2-release/demo/TEMP \
2018-12-11 05:54:05 +08:00
bpatrik/pigallery2:1.5.5-stretch
2018-12-06 06:16:14 +08:00
```
Make sure that a file at `<path to your config file folder>/config.json` exists before running it.
After the container is up and running, you go to `http://localhost` and log in with user: `admin` pass: `admin` and set up the page in the settings.
2018-12-11 05:54:05 +08:00
**All docker builds**: https://hub.docker.com/r/bpatrik/pigallery2/tags/
2018-12-06 16:52:04 +08:00
**Note**: You dont need to do the installation steps if you are using docker.
2018-12-06 06:16:14 +08:00
2018-12-06 20:50:55 +08:00
### 1.3 Advanced configuration
You can set up the app the following ways:
* Using the UI
* Manually editing the `config.json`
* Through switches
* Like: `node backend/index.js --Server-port=3000 --Client-authenticationRequired=false`
* You can check the generated `config.json` for the config hierarchy
* Through environmental variable
* like set env. variable `Server-port` to `3000`
### 1.4 Useful links/tips:
2018-05-16 08:01:11 +08:00
#### using nginx
2018-12-06 20:50:55 +08:00
It is recommended to use a reverse proxy like nginx before node
2017-07-30 05:39:06 +08:00
https://stackoverflow.com/questions/5009324/node-js-nginx-what-now
2017-10-20 00:08:07 +08:00
2018-05-16 08:01:11 +08:00
#### making https
2018-12-06 20:50:55 +08:00
With cerbot & nginx it is simple to set up secure connection. You have no excuse not doing so.
2017-07-30 05:39:06 +08:00
https://certbot.eff.org/
2018-05-16 08:01:11 +08:00
#### node install error:
2017-10-20 00:08:07 +08:00
If you get error during module installation, make sure you have everything to build node modules from source
```bash
apt-get install build-essential libkrb5-dev gcc g++
```
2018-12-06 16:52:04 +08:00
## 2. Translate the page to your own language
2018-05-16 08:01:11 +08:00
1. download / clone the repo (the source not the packed release!)
2. add your language e.g: fr
```bash
npm run add-translation -- --fr
```
it creates a new `messages.fr.xls` file at `frontend/translate` folder,
it will already contain dummy translation with google translate.
3. 'fix' the dummy translation
4. test if it works:
build and start the app
```bash
npm install
npm start
```
5. create a pull request at github to add your translation to the project.
2018-12-06 16:52:04 +08:00
## 3. Feature list
2017-06-04 21:25:22 +08:00
2017-03-23 02:38:39 +08:00
* **Rendering directories as it is**
* Listing subdirectories recursively
* Listing photos in a nice grid layout
* supporting most common image formats
* showing **tag/keywords, locations, GPS coordinates** for photos
* rendering photos on demand (on scroll)
2017-03-23 02:41:32 +08:00
* **On the fly thumbnail generation** in several sizes
2017-03-23 02:38:39 +08:00
* prioritizes thumbnail generation (generating thumbnail first for the visible photos)
* saving generated thumbnails to TEMP folder for reuse
2018-12-06 04:55:11 +08:00
* supporting multi-core CPUs
2017-06-12 05:33:47 +08:00
* supporting hardware acceleration ([sharp](https://github.com/lovell/sharp) and [gm ](https://github.com/aheckmann/gm ) as optional and JS-based [Jimp ](https://github.com/oliver-moran/jimp ) as fallback)
2018-12-13 04:03:06 +08:00
* Custom lightbox for full screen photo and video viewing
2017-07-09 18:03:17 +08:00
* keyboard support for navigation
2017-03-23 02:38:39 +08:00
* showing low-res thumbnail while full image loads
2017-07-10 04:00:42 +08:00
* Information panel for showing **Exif info**
2017-07-12 04:23:07 +08:00
* Automatic playing
2017-07-18 00:30:16 +08:00
* gesture support (swipe left, right, up)
2018-12-13 04:03:06 +08:00
* shortcut support
2017-03-23 02:41:32 +08:00
* Client side caching (directories and search results)
2018-12-13 04:03:06 +08:00
* Rendering **photos** with GPS coordinates **on open street maps**
* .gpx file support: rendering paths to map
* supports [OSM ](https://www.openstreetmap.org ) and [Mapbox ](https://www.mapbox.com ) by default, but you can add any provider that has a tile url
2017-03-23 02:41:32 +08:00
* **Two modes: SQL database and no-database mode**
* both modes supports
* user management
* password protection can be disabled/enabled
2017-03-23 02:38:39 +08:00
* database mode supports:
* faster directory listing
* searching
* instant search, auto complete
2017-07-09 18:03:17 +08:00
* sharing
2017-03-23 02:38:39 +08:00
* setting link expiration time
2018-03-30 08:30:23 +08:00
* internalization / translation support
2018-12-13 04:03:06 +08:00
* currently supported languages: eng, hun
2017-07-30 05:39:06 +08:00
* Nice design
2017-03-23 02:38:39 +08:00
* responsive design (phone, tablet desktop support)
2017-07-30 05:39:06 +08:00
* Setup page
2018-11-02 17:51:36 +08:00
* Random photo url
* You can generate an url that returns a random photo from your gallery. You can use this feature to develop 3rd party applications, like: changing desktop background
2018-11-23 02:12:10 +08:00
* video support
2018-11-25 22:22:07 +08:00
* fully supports *.mp4 files and partially (might have errors with safari and IE) supports * .ogg, *.ogv, * .webm files
* uses ffmpeg and ffprobe to generate video thumbnails
2018-12-06 16:52:04 +08:00
* Dockerized
2017-07-09 18:03:17 +08:00
* **Markdown based blogging support** - `future plan`
2017-03-23 02:41:32 +08:00
* you can write some note in the blog.md for every directory
2017-03-23 02:38:39 +08:00
* bug free :) - `In progress`
2018-03-30 08:30:23 +08:00
2018-12-06 16:52:04 +08:00
## 4. Known errors
2018-11-02 17:51:36 +08:00
* EXIF orientation tag:
* There is no nice way to handle EXIF orientation tag properly.
The page handles these photos, but might cause same error in the user experience (e.g.: the pages loads those photos slower. See issue [#11 ](https://github.com/bpatrik/pigallery2/issues/11 ))
2018-12-03 03:57:16 +08:00
* Video support on weak servers (like raspberry pi) with low upload rate
* video playback may use up too much resources and the server might not response for a while. A solution might be to down scale / convert the video files to lower bitrate.
2018-12-06 16:52:04 +08:00
## 5. Credits
2018-05-16 08:01:11 +08:00
Crossbrowser testing sponsored by [Browser Stack ](https://www.browserstack.com )
[<img src="https://camo.githubusercontent.com/a7b268f2785656ab3ca7b1cbb1633ee5affceb8f/68747470733a2f2f64677a6f7139623561736a67312e636c6f756466726f6e742e6e65742f70726f64756374696f6e2f696d616765732f6c61796f75742f6c6f676f2d6865616465722e706e67" alt="Browser Stack" height="31px" style="background: cornflowerblue;"> ](https://www.browserstack.com )
2018-03-30 08:30:23 +08:00