Photo Diary is a calendar-based photo gallery platform for self-hosting. The photos are arranged by the date they were shot, in calendar-based views, aimed at diaries and other, date-based photography projects.
Key features include:
- Calendar-based views (year, month, day, photo)
- Including map from embedded GPS information
- Comprehensive photo statistics (time, gear, exposure settings, etc.)
- Fast browsing – gallery content (apart from actual photos) loaded once at startup
- User management and basic access control
Photo Diary is split into separate independent modules, each handling its own sub-system:
- react-app – Front-end web app
- server – Back-end API
- converter – Back-end process for pre-processing new photos to be added to the gallery
- Create a reposity directory structure, separate from the code
- Setup server and converter to run as a background process, e.g. using pm2
- Build react-app into server, running in the server directory:
npm run build:ui
- Photos are segmented into galleries
- Each photo can be in any number of galleries
- Single level – no nesting
- One gallery view at a time
- Special galleries for more abstract concepts
- :all includes all photos
- :public includes all photos added to galleries
- :private includes photos not added to any galleries
- Hostname-based default gallery selection
- SPA view
- Fast transition between views
- Pre-load current gallery
- Fast navigation to previous/next item
- Left/right arrow keys
- Swipe left/right
- Pre-load previous/next photo
- Year view – Calendar with heat-mapped days
- Month view – Thumbnails grouped by date
- Day view – Thumbnails
- Single photo view – Maximize to visible space, with photo properties
- Fast transition between views
- Statistics view
- General statistics
- Summary: total photos, total days, average per day
- By author
- By country
- Time distribution by year, year/month, month, weekday, hour
- Gear distribution by camera make, camera, lens, camera/lens
- Exposure distribution by focal length, aperture, shutter speed, sensitivity, EV, LV, resolution, orientation, aspect ratio
- All distribution values can be used to filter the photos
- Filters apply to both gallery and statistics views
- Filter values within a single category are additive, photos matching any are included
- Filter values across categories are subtractive, photos only matching all are included
- General statistics
- Admin view (TBD)
- Add new photos
- Pick up from upload directory on the server
- Metadata extraction from EXIF
- Timestamp
- Exposure values
- Camera/lens
- Manual input
- Galleries to link
- Author
- Country
- Override any automatically extracted values
- Create thumbnail and display size photos
- Update photo properties
- Update photo metadata
- If original file is still found
- Metadata extraction from EXIF
- Create thumbnail and display size photos
- Add new photos
- Authentication
- User login
- Token-based
- User-specific secrets for simple revocation
- Authorization
- Restricted access to galleries and functionality
- No access restrictions planned for the actual photo content, which may be in a CDN
- Multiple access levels
- No access
- View access
- Admin access
- Access levels granted by scope
- Global scope (:all)
- Public scope (:public)
- Gallery scope
- Default access level
- Through guest user (:guest), inherited by all users
- Inheritance may be overridden by broadening or narrowing access
- Restricted access to galleries and functionality
Features planned for a 1.0 release.
- Front-end
- Global admin view
- Manage users & ACL
- Manage galleries
- Manage photos
- Manage gallery/photo linking
- Global admin view
- Back-end
- Fully tested Modification API
- User
- ACL
- Gallery
- Photo
- Gallery-photo linking
- Fully tested Modification API
- Hybrid galleries
- Combine galleries to form new galleries
- Apply filters to an existing gallery
These features would be nice to have, but are too far into the future to put on the roadmap.
- Front-end
- Gallery view
- Multiple display sizes, dynamically chosen to match client window size
- Photo license information
- Permit/deny original size download by users
- Gallery admin view (TBD)
- Manage authorized galleries
- Manage photos linked to only authorized galleries
- Manage gallery/photo linking
- Photo property filter improvements
- Range filters for continuous variables: time, exposure values
- Coordinate filter, within a radius
- Gallery view
- Back-end
- Drivers for different DBs; PostgreSQL, MySQL/MariaDB, MongoDB, ...