Skip to content

Calendar-based photo gallery platform for self-hosting

License

Notifications You must be signed in to change notification settings

vlumi/photo-diary

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Photo Diary

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

Structure

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

Basic Setup

  • Create a reposity directory structure, separate from the code
    • Must include the sub-directories inbox, original, display, and thumbnail
    • Configure PHOTO_ROOT_DIR on converter and react-app to point to this directory
  • 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

Features

  • 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
  • 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
  • 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
  • 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

Roadmap

Features planned for a 1.0 release.

  • Front-end
    • Global admin view
      • Manage users & ACL
      • Manage galleries
      • Manage photos
      • Manage gallery/photo linking
  • Back-end
    • Fully tested Modification API
      • User
      • ACL
      • Gallery
      • Photo
      • Gallery-photo linking
  • Hybrid galleries
    • Combine galleries to form new galleries
    • Apply filters to an existing gallery

Backlog

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
  • Back-end
    • Drivers for different DBs; PostgreSQL, MySQL/MariaDB, MongoDB, ...

About

Calendar-based photo gallery platform for self-hosting

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages