Giter VIP home page Giter VIP logo

photonixapp / photonix Goto Github PK

View Code? Open in Web Editor NEW
1.8K 1.8K 124.0 4.78 MB

A modern, web-based photo management server. Run it on your home server and it will let you find the right photo from your collection on any device. Smart filtering is made possible by object recognition, face recognition, location awareness, color analysis and other ML algorithms.

Home Page: https://photonix.org/

License: GNU Affero General Public License v3.0

Python 65.43% JavaScript 32.59% HTML 0.29% CSS 1.39% Shell 0.23% Makefile 0.08%
ai django docker docker-image face-recognition gallery google-photos image-recognition javascript management ml object-detection photo photo-manager photography python react storage tensorflow web

photonix's People

Contributors

ashubly25 avatar bobobo1618 avatar cclauss avatar damianmoore avatar dependabot[bot] avatar edufdezsoy avatar flaviut avatar kennylevinsen avatar poweranalyst avatar taylorburnham avatar thypon avatar uraid avatar vivekchandel8 avatar whisprin avatar xurizaemon avatar yofab avatar yurijmikhalevich avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

photonix's Issues

Date Filter

Ability to search by Year or Month. Thus allowing finding of a picture from "2012/March" or simply "2012" or "March".

Image scaling service for displaying large photos

When people chose to view a photo full screen, that photo could be very large. We should fetch the image server-side (over internet if necessary) and convert/resize/compress it so it is viewable to the user quickly.

AC:

  • Make the resizing sRGB aware - https://stackoverflow.com/questions/31300865/srgb-aware-image-resize-in-pillow/
  • Define a series of common resolutions (1080, 4K, etc.) to resize to
  • Adapt the thumbnail settings to make them non-compulsory (only generated when needed).
  • Resized images maintain their correct aspect ratio.
  • Resized images should be stored in the cache folder.
  • Photo rotation metadata needs to be used - can't rely on browser to do the rotation.

localhost:8888 has stopped working

I'm sure that I'd closed down and reopened localhost:8888 previously, but when trying to reload it today, it simply says that localhost failed to connect, ERR_CONNECTION_REFUSED. Any suggestions?

Selected filters should be added to search box in a user-friendly way

AC:

  • Each selected filter drawn within a box in the search box, nicely styled
  • Icon signifying each type of filter
  • The box has a cross to remove the filter
  • Search box needs to grow vertically when many are selected
  • Range values should show one box with an updating number range
  • Range value box should be removed when slider has been expanded to the extent that it is no longer performing any filtering
  • Icon to clear all filters

Edit photo tags and metadata

Ability to add or remove tags that have been assigned to an image within an edit mode. Perhaps separate tags or 'album' grouping?

Able to manually add location data for photos that don't have it in the metadata. Would it be possible to edit the photos metadata in this case?

Tests to prove all models work

Given known test images, the models should produce repeatable output. Their score, significance and returned data structure should be the same.

Models should be tested to run under multiple scenarios:

  • Passing in a file path
  • Passing in a Photo ID
  • Passing in a Photo instance
  • Running as from command line
  • Running as from a job queue worker

Models covered:

  • Object detection
  • Style classification
  • Color
  • Location

Timeline scroll helper when browsing photos

It would be helpful to scroll back to a particular month/year when trying to use the main scroll bar. This could incorporate a histogram of number of photos taken each month. It might display when you hover over the right-hand area of the screen or when you start dragging. Need to also consider how it would display on touch devices that don't have hover events.

  • Sections of photos to jump to
  • Histogram display next to scrollbar with clickable bar per section
  • DOM sizing based on known sections and images within
  • Scroll spying to populate and unknown sections that are close to the viewport

Auto-generated slide shows

  • Mix between photo fades, slides, multiple per screen
  • Button to start from albums, people, selected filters
  • Cast to TV

Logo design

Hi, @damianmoore , I'm a logo designer. I saw your project and seems like it will be a successful project. If you want, I can design a logo for this project. What do you think?

Map photo clustering and filtering according to pan and zoom

When zoomed out to the whole world we do not want pins for every photo that has a location. A group of images that are in a similar area should be clustered and represented by a different kind of point - a number or a stack images. We might need to eventually filter on the server side but there are performant JS libraries that should be enough for our purposes.

I propose we use Leaflet.markercluster. If this doesn't work well enough then Supercluster might be useful (but lower level)

Proposed steps:

  • Install NPM package leaflet.markercluster
  • Map view needs to run it's own GraphQL query to retrieve it's photos
    • Only make the query request once the user selects the Map tab
    • Query needs to include the same filtering as the thumbnails and should re-fetch when these change
    • Query should filter photos to only include ones that have latitude and longitude values
    • No size limit or pagination - all results
    • Only fetch photo id and thumbnail URL - no star ratings or any other details
    • Order by most recent first
  • Once GraphQL query data is received, convert and add marker to markerClusterGroup as in this demo: https://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.388.html

Cloud object storage of photos

Add support for cloud storage providers (AWS S3, Google Cloud storage) for photo and thumbnail storage. This will allow scaling to an almost infinite number of photos and users. We will support Amazon S3 (-compatible) and Google Cloud Storage (GCS) initially. This ticket does not include anything to do with encryption - there is a separate ticket #59 to add that after. Until encryption is added, all data is publically readable as browser will load the files directly.

AC:

  • One bucket configured via environment variables for storing photo data
  • One bucket configured via environment variables for storing cache data
  • User model extended to have quota_size and current_size (in bytes)
  • Library model extended to have quota_size and current_size
  • Upload feature to upload to S3 or GCS if Library path starts with s3:// or gcs:// protocols
  • Upload feature increases User and Library current_size values on each successful upload (DB transaction)
  • Background job to calculate Library and User current sizes once a day to correct any rounding/upload anomilies
  • If file is a raw type then raw processor should download from object storage and upload JPEG version to same location
  • Thumbnailing job able to retrieve from cloud storage and save to cache location which other analyzers will use
  • Ensure other analysis jobs are using 4K thumbnailed versions and trigger thumbnailer first if they don't find cached thumbnail
  • Ensure thumbnailer is locking correctly so multiple cloud storage downloads and writes do not occur in parallel
  • Thumbnailer URL needs to redirect to cloud location HTTPS endpoint

Dismissed ideas:

  • Add Bucket model to assign a bucket to a User.
    • Idea was for quota to be applied for user and they can then create as many libraries as they like. Doesn't seem like Google or AWS allow size quotas to be applied to buckets
    • User should be able
    • Fields: UUID, type (S3 etc), User, path, current_size (needs to be kept updated periodically), max_size (optional)
    • Having separate ID means it can be transferred to another user if required. Also Google recommends not including user IDs in bucket names.
    • If user wishes to create new Library then they can add it to user's existing bucket

Image quality/aesthetics scoring

Create a neural network model based on Google's NIMA to determine how appealing each image is. We can use this score to work out the best photo to show when multiple images are being represented by one, such as album covers, a cluster of items on a map, a summary of a month or event.

Public demo site

Set up a live demo installation of photo manager and link to it from the website. This depends on a public production docker image being built.

Filtering by range sliders

For filters such as aperture, shutter speed, ISO speed a range should be narrowed down rather than having to click on discrete values.

Handle natural language search

We can use NLP to tag parts of a search sentence to identify which words relate to location, objects, styles colours etc.

Zoom into area of map where currently filtered photos are

Currently the map doesn't pan or zoom automatically to where the photos are. It should present all the filtered photos on the map, zoomed in as much as possible. This should change while user is changing filters and the list of photos reduces or expands.

Cannot enlarge photos that have spaces in the filename

I've installed Photo Manager to my localhost:8888 and have the thumbnail images with all the current filters working to narrow down the images shown. If I click an image though, it takes me to a random url (different for each photo) which is just a plain black page, so I cannot view my photos enlarged.

For example, a photo labelled "2018-03-13 01 Bournemouth Station Sponsored Sign by Bournemouth University.JPG" takes me to a black screen "http://localhost:8888/photo/3259e783-f286-4c36-ae0f-f754f6a4df89"

Filter by location

Once photos are being tagged with location, add ability to filter by these locations.

  • Display location tags to filter like any other tag
  • Locations are hierarchical so you should see country first, then expand to see cities

Display and navigate 360 photos

  • Generate thumbnail that isn't warped - might be extra wide so it can be animated
  • Thumbnail display should signify that it's a different type of photo (icon, animation)
  • Touch and drag to pan
  • Gyroscope control if on mobile device
  • Scaled image dimensions might need to change
  • Support 360 video too?

Question?

Hi,

This isn't really an issue, but unsure how else I can place it here. Is it possible to install straight to a web server, so being 'public'?

And for the name, Fotografi? Dutch (and Albanian too) for Photography.

Thanks.

Mobile layout

  • Reduce margins of filters and photo list
  • Reduce width and height of filter sections
  • Expand/collapse search/filter
  • Make sure map view is useable
  • Grid view to show 3 thumbnails horizontally for phones
  • Start search area as collapsed by default on phones and store state as localStorage
  • Make sure all tappable elements are in safe area for phones with notches etc.
  • Move photo detail metadata to right-hand side pull-out
  • Thumbnail scrollable area broken on iOS

Raw photo processing

If a user uploads a raw photo, we will need a JPEG generated of it at full size so we can use it as a source to generate all other thumbnails. There might already be a JPEG with the same timestamp/number but we can't be sure that it was generated by the camera or by program at a later date. dcraw might be able to process all the raw formats we need but it could take a bit of tweaking to get acceptable results. A notice will display when viewing the "raw" in detail explaining that we generated the image to be helpful. The processed resulting JPEG should be stored separately from the main photo collection as we don't want to pollute the user's photo folder.

AC:

  • Raw photo processing for a test set of images from different cameras
  • New folder for raw-processed
  • Raw to JPEG conversion that happens via task processing queue
  • Parallel processing
  • Processed JPEG should have PhotoFile.id as the filename
  • Store the method, our own version number, dcraw version number etc. on PhotoFile instance so we can re-process if we discover a better technique later on.
  • Thumbnailer should check the new folder location if PhotoFile has been raw processed
  • Maybe TIFF and PNG files should be processed in a similar manner.

Faceted search of remaining filters

The visible filters should reduce based on the filters that are already selected. There is no point in showing filters that with return 0 results.

Setting custom names for cameras & lenses

As noticed by @Soharic here, some cameras/phones give unrecognisable make/model names in their metadata. The user should be able to override the names of their cameras with a custom name.

  • Format the make name as best as possible in the UI (title case)
  • See if there is a compiled list of model -> common name translations
  • Add custom text field to Camera model
  • Allow setting custom name in the UI
  • Display custom name in filter and photo detail UI

Casting of photos to TV

If there is a Chromecast or similar on the local network and icon should display (and possibly a notification) to connect and use the TV as a presentation device. Only a full photo at a time should be displayed, not the whole screen view that is on the presenter's phone/laptop.

Pre-fetch large PhotoDetail images to enhance responsiveness

We can assume that when a user views one image full screen, they are quite likely to also go to the next or previous photo too. We might also say that the user is likely to click on the first image when they have filtered or selected an album. If a user hovers over a thumbnail, they are likely to click it. We could download these images ahead of time so the server has started to generate the scaled images and the browser has them in the cache ready. We should be aware of extra bandwidth usage, especially on mobile devices.

Photo detail view

Detail view of photo showing camera attributes, tags, mini map, bounding boxes from object detection.

  • Modal view of photo which is on a higher z-index so main UI doesn't get redrawn on close.
  • Scroll down to see more details with animated indicator on first display and when hovering near bottom (no scroll bar will be displayed as we want photo to be as full screen as possible).
  • Scrolling down should make new pane float over photo without the photo moving - the pane might not be very tall and could control photo overlays such a bounding boxes. Make touch screen compatible too.
  • Location map and pin defaulting to a sensible zoom level
  • Colors display
  • Styles display
  • Camera settings display
  • Cross icon and ESC key to close modal
  • Star rating
  • Histogram
  • Full metadata display from exif
  • File path/name display
  • Move metadata overlay to be on the right with an icon to view it as scrolling down is not obvious

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.