Giter Site home page Giter Site logo

photoprism / photoprism Goto Github PK

View Code? Open in Web Editor NEW
32.6K 329.0 1.8K 194.26 MB

AI-Powered Photos App for the Decentralized Web 🌈💎✨

Home Page: https://www.photoprism.app

License: Other

Go 79.68% Dockerfile 1.51% JavaScript 8.23% CSS 1.33% Vue 7.87% Makefile 0.46% Shell 0.68% Mermaid 0.21% Batchfile 0.03%
golang tensorflow photography private-cloud google-photos ai machine-learning self-hosted

photoprism's Introduction

PhotoPrism: Browse Your Life in Pictures

License: AGPL Documentation Community Chat GitHub Discussions Bluesky Social Mastodon

PhotoPrism® is an AI-Powered Photos App for the Decentralized Web. It makes use of the latest technologies to tag and find pictures automatically without getting in your way. You can run it at home, on a private server, or in the cloud.

To get a first impression, you are welcome to play with our public demo. Please be careful not to upload any private, unlawful or offensive pictures.

Feature Overview

Our mission is to provide the most user- and privacy-friendly solution to keep your pictures organized and accessible. That's why PhotoPrism was built from the ground up to run wherever you need it, without compromising freedom, privacy, or functionality:

Being completely self-funded and independent, we can promise you that we will never sell your data and that we will always be transparent about our software and services. Your data will never be shared with Google, Amazon, Microsoft or Apple unless you intentionally upload files to one of their services. 🔒

Getting Started

Step-by-step installation instructions for our self-hosted community edition can be found on docs.photoprism.app - all you need is a Web browser and Docker to run the server. It is available for Mac, Linux, and Windows.

The stable releases and development preview are available as a multi-arch image for 64-bit AMD, Intel, and ARM processors. That means, Raspberry Pi and Apple Silicon users enjoy the exact same functionality and can follow the same installation steps.

See our Getting Started FAQ for alternative installation methods, for example using the tar.gz packages we provide.

Support Our Mission 💎

PhotoPrism is 100% self-funded and independent. Your continued support helps us provide more features to the public, release regular updates, and remain independent!

Our members enjoy additional features, including access to interactive world maps, and can join our private chat room to connect with our team. We currently have the following membership options:

  • You can sign up directly on our website and pay with credit card or SEPA through Stripe, so you don't need to link an external account and can easily upgrade or downgrade at any time
  • Alternatively, Patreon also supports PayPal, additional currencies, and lets you choose between monthly and annual billing for all tiers

If you currently support us through GitHub Sponsors, you can also register on our website and use the Activate GitHub Sponsors Membership button to link your account. For details on this and how to link your Patreon account, see our Activation Guide.

You are welcome to contact us for change requests, membership questions, and business partnerships.

View Membership FAQ ›Sign Up ›

Why Your Support Matters

  • Your continued support helps us provide regular updates and remain independent, so we can fulfill our mission and protect your privacy
  • Sustained funding is key to quickly releasing new features requested by you and other community members
  • Being self-funded and independent, we can personally promise you that we will never sell your data and that we will always be transparent about our software and services

Please also leave a star on GitHub if you like this project. It provides additional motivation to keep going.

A big thank you to all current and past sponsors, whose generous support has been and continues to be essential to the success of the project!

View Sponsors ›View Credits ›

Getting Support

Visit docs.photoprism.app/user-guide to learn how to sync, organize, and share your pictures. If you need help installing our software at home, you are welcome to post your question in GitHub Discussions or ask in our Community Chat. Common problems can be quickly diagnosed and solved using our Troubleshooting Checklists. Eligible members are also welcome to email us for technical support and advice.

Upcoming Features and Enhancements

Our Project Roadmap shows what tasks are in progress and what features will be implemented next. You are invited to give ideas you like a thumbs-up, so we know what's most popular.

Be aware that we have a zero-bug policy and do our best to help users when they need support or have other questions. This comes at a price though, as we can't give exact release dates for new features. Our team receives many more requests than can be implemented, so we want to emphasize that we are in no way obligated to implement the features, enhancements, or other changes you request. We do, however, appreciate your feedback and carefully consider all requests.

Because sustained funding is key to quickly releasing new features, we encourage you to support our mission by signing up as a sponsor or purchasing a commercial license. Ultimately, that's what's best for the product and the community.

GitHub Issues ⚠️

We kindly ask you not to report bugs via GitHub Issues unless you are certain to have found a fully reproducible and previously unreported issue that must be fixed directly in the app. Thank you for your careful consideration!

  • When reporting a problem, always include the software versions you are using and other information about your environment such as browser, browser plugins, operating system, storage type, memory size, and processor
  • Note that all issue subscribers receive an email notification from GitHub whenever a new comment is added, so these should only be used for sharing important information and not for discussions, questions or expressing personal opinions
  • Contact us or a community member if you need help, it could be a local configuration problem, or a misunderstanding in how the software works
  • This gives our team the opportunity to improve the docs and provide best-in-class support to you, instead of handling unclear/duplicate bug reports or triggering a flood of notifications by responding to comments

Connect with the Community

Follow us on Twitter and join the Community Chat to get regular updates, connect with other users, and discuss your ideas. Our Code of Conduct explains the "dos and don’ts" when interacting with other community members.

Feel free to contact us at [email protected] with anything that is on your mind. We appreciate your feedback! Due to the high volume of emails we receive, our team may be unable to get back to you immediately. We do our best to respond within five business days or less.

Every Contribution Makes a Difference

We welcome contributions of any kind, including blog posts, tutorials, translations, testing, writing documentation, and pull requests. Our Developer Guide contains all the information necessary for you to get started.


PhotoPrism® is a registered trademark. By using the software and services we provide, you agree to our Terms of Service, Privacy Policy, and Code of Conduct. Docs are available under the CC BY-NC-SA 4.0 License; additional terms may apply.

photoprism's People

Contributors

alexislefebvre avatar benmccann avatar dsoprea avatar gokcedilek avatar graciousgrey avatar guysoft avatar haimkastner avatar heikomat avatar isabelirusso-dev avatar jean-louis67 avatar jesserockz avatar kvalev avatar lastzero avatar lipovlan avatar lukasdotcom avatar lulu195 avatar mastirhekir avatar moximoti avatar oliveirahermogenes avatar pheggas avatar photoprismci avatar ppnplus avatar reubendowle avatar skunert avatar thielepaul avatar vedhavyas avatar weblate avatar wikiyu avatar ya-aleksko avatar zierbeek 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  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

photoprism's Issues

Dockerfile for linux distros that don't use apt-get

I noticed the Dockerfile depends on apt to work. As someone who uses a distro that does not us apt, it is taking me quite a while to get a working version of photoprism to build. It might be good if multiple dockerfiles are created to support multiple package managers. I'd be willing to help with an Arch Linux version, I just need to know how the Dockerfiles should be organized within the project directory.

Setup Wiki and add existing information

Our Wiki should contain the following information:

  • Bookmarks: Related projects/products, developer tutorials, design resources, etc
  • Developer Guide
  • Everything about machine learning / TensorFlow
  • Glossary
  • Infrastructure
  • Use Cases

Simple video support

Shall we support files other than JPEG and RAW? Maybe move all videos to a separate video directory?

We focus on photos because when you remember something, your brain also uses images, not videos with sound, or not?

Implement locking and logging for imports

As a user, I want to be sure another import is not already running when I start it.

When an import is running it should not be possible to start a second import. A lock file would be a solution but it's probably better to use the database as we want to log the import results there anyways.

Might be interesting to try Prometheus for displaying stats from the logs.

Simple password authentication

Issuehunt badges

PhotoPrism is for personal use but some form of auth would be great to protect it from guests using the same network etc.


IssueHunt Summary

graciousgrey graciousgrey has been rewarded.

Backers (Total: $20.00)

Submitted pull Requests


Tips


IssueHunt has been backed by the following sponsors. Become a sponsor

Smart albums

Some users might want the software to automatically create albums e.g. like the iPhone does. Not sure if this is what we want. I would like to have more control over what the software does.

Config: Add support for PostgreSQL

Nice idea lads, I totally support it. Were youever wondering to switch to postgres ? For the deployment size I'm predicting this going to have, mysql might be a bit suboptimal choice :)


Details on possible implementation strategies can be found in this comment:

Implement proof-of-concept for albums

As a user, I want to create albums, so that I can put related photos together.

Albums should also have a sort order & sort by that can be configured (usually date taken). Photos can be added using the menu in photo search.

Acceptance Criteria:

  • User MUST be able to view his albums
  • User MUST be able to create albums
  • User MUST be able to add photos to an album via the "photos" page (One photo can be part of multiple albums)
  • User MUST not be able to add the same photo to an album twice
  • User MUST be able to remove photos from an album via the "photos" page and from within the album
  • User MUST be able to define the order of photos (either by setting default filters like date or maybe later via drag and drop)

Connect with nextcloud

Is there an option to connect it with my nextcloud and the photos where are stored there?
That would be awesome.

Nextcloud has an gallery plugin but i think this is ways better.

Support Photos In Place on Hard Drive

For people with already organized (and massive) photo collections, it would be really nice to be able to point to our existing photo organization and not have to have photoprism copy/duplicate all of my data.

Docker size

Hi

I was wondering why downloading photoprism container took so much time...

image

May I suggest a multistage build ? Here's the doc https://docs.docker.com/develop/develop-images/multistage-build/

Basically, if you can make a standalone photoprism binary (aka no need for local third party)

FROM golang:1.7.3
# everything for build, until standalone photoprism bin is in say /bin/photoprism

FROM alpine:latest  
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /bin/photoprism .
ENTRYPOINT ["./photoprism"]
CMD ["start"]  

Don't ignore errors

There are lot of functions who just print errors and never return them. That is not really nice. :P

Implement init command?

Shall we implement photoprism init to create a conf file and maybe some directories? Would it be useful? Most installations are probably using Docker and don't need it.

Just saw this in the docs of another Go project:

Inside an empty directory run:
$ bebop init
This will generate an initial configuration file "bebop.conf" inside the current dir. Edit the configuration file to set the server listen address, the base url, the database and file storage parameters, OAuth credentials, etc.

See https://github.com/disintegration/bebop

Store metadata in the filesystem

In order to be able to copy the archive or restore database contents after a problem, it would be very convenient to store a copy of the metadata in the filesystem right next to the photos they belong to.

Contents need to be time stamped and fingerprinted in order to avoid sync/merge issues.

YAML, JSON or XML? Are there existing standard formats?

This way we could also store the original filename during import (simply write it to this file).

Improve color indexing

As a user, I want to search for color names so that I can find matching photos.

The color indexing implemented right now is just a proof-of-concept. It finds too many different colors (with complicated names). We need to reimplement indexing using another algorithm like k-means and use a reduced list of colors: red, pink, purple, indigo, blue, cyan, teal, green, lime, yellow, amber, orange, brown, grey, white and black.

Acceptance Criteria:

  • You SHOULD use the k-means clustering algorithm (unless you find a better method)
  • You MAY use any open-source Go libraries as long as the license is compatible with GPL
  • The following dominant colors MUST be detected: red, pink, purple, indigo, blue, cyan, teal, green, lime, yellow, amber, orange, brown, grey, white and black - color codes see Material Design palette
  • Only colors.go and related tests MUST be changed (you don't need to touch the indexer etc)
  • You MAY add "light" or "dark" as color name prefix, to indicate if it's light or dark

Support symlinks

Currently photoprism attempts to create the directory, this fails if the folder is a symlink and thus refuses to start.

Segfault at import

A fresh docker install (commit 6844c5f) crashed
when importing about 3000 photos.

Moving main jpg file "Camera/IMG_20170425_062158425.jpg" to "/Photos/Originals/2017/04/20170425_062158_2343698269B6.jpg"
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x52fbd9]

goroutine 1 [running]:
github.com/RobCherry/vibrant.NewPaletteBuilder(0x0, 0x0, 0x0)
        /go/pkg/mod/github.com/!rob!cherry/[email protected]/palette.go:202 +0x29
github.com/photoprism/photoprism/internal/photoprism.(*MediaFile).GetColors(0xc0003d7b80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /go/src/github.com/photoprism/photoprism/internal/photoprism/colors.go:33 +0xcf
github.com/photoprism/photoprism/internal/photoprism.(*Indexer).IndexMediaFile(0xc000410da0, 0xc0003d7b80, 0x1, 0x1)
        /go/src/github.com/photoprism/photoprism/internal/photoprism/indexer.go:92 +0x1e81
github.com/photoprism/photoprism/internal/photoprism.(*Indexer).IndexRelated(0xc000410da0, 0xc0003d7ae0, 0xc0003d7ae0)
        /go/src/github.com/photoprism/photoprism/internal/photoprism/indexer.go:231 +0x9b
github.com/photoprism/photoprism/internal/photoprism.(*Importer).ImportPhotosFromDirectory.func1(0xc000027920, 0x30, 0xecac40, 0xc00041f450, 0x0, 0x0, 0x1a, 0xc0007a76c0)
        /go/src/github.com/photoprism/photoprism/internal/photoprism/importer.go:104 +0x869
path/filepath.walk(0xc000027920, 0x30, 0xecac40, 0xc00041f450, 0xc00070ca20, 0x0, 0x0)
        /usr/local/go/src/path/filepath/path.go:358 +0x41c
path/filepath.walk(0xc0004203e0, 0x15, 0xecac40, 0xc0003cf930, 0xc00070ca20, 0x0, 0x0)
        /usr/local/go/src/path/filepath/path.go:382 +0x2fe
path/filepath.walk(0xc000026047, 0xe, 0xecac40, 0xc0003cf380, 0xc00070ca20, 0x0, 0x30)
        /usr/local/go/src/path/filepath/path.go:382 +0x2fe
path/filepath.Walk(0xc000026047, 0xe, 0xc00070ca20, 0x30, 0x28)
        /usr/local/go/src/path/filepath/path.go:404 +0x105
github.com/photoprism/photoprism/internal/photoprism.(*Importer).ImportPhotosFromDirectory(0xc00070c9f0, 0xc000026047, 0xe)
        /go/src/github.com/photoprism/photoprism/internal/photoprism/importer.go:38 +0xb5
github.com/photoprism/photoprism/internal/commands.importAction(0xc00046e160, 0xeb9000, 0x33)
        /go/src/github.com/photoprism/photoprism/internal/commands/import.go:35 +0x307
github.com/urfave/cli.HandleAction(0xc87100, 0xdfb058, 0xc00046e160, 0xc0003fc100, 0x0)
        /go/pkg/mod/github.com/urfave/[email protected]/app.go:490 +0xc8
github.com/urfave/cli.Command.Run(0xda5f8c, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0xdaca99, 0xe, 0x0, ...)
        /go/pkg/mod/github.com/urfave/[email protected]/command.go:210 +0x990
github.com/urfave/cli.(*App).Run(0xc0004544e0, 0xc00000c080, 0x2, 0x2, 0x0, 0x0)
        /go/pkg/mod/github.com/urfave/[email protected]/app.go:255 +0x687
main.main()
        /go/src/github.com/photoprism/photoprism/cmd/photoprism/photoprism.go:29 +0x2d7

Album sharing with random URL and auto expiration

As a user, I want to share links to albums so that friends can view my photos without giving away my admin password.

In a later release, we might offer hosting on our servers for selected (shared) photos / albums with auto expiration, so that friends don't need direct access to a user's PhotoPrism server instance at home.

Question: Pluggable storage backend to enable running on top of perkeep?

This looks really promising for personal photos. There is also a general purpose personal storage system out there called Perkeep which I think could be a great storage backend for photoprism. Perkeep could be the "database" while photoprism would be the application server and interface. Just wondering if something like this would be possible or even desired for photoprism.

Support Google Maps API for geocoding

As a User, I want to have the option to use Google Maps instead of OpenStreetMap, so I have the best experience.

Right now, only OpenStreetMap is supported / used (just the reverse lookup API, not the UI).

Acceptance Criteria:

  • Add helpful information to our Developer Guide, Geocoding is just a stub right now
  • Change DB structure: We use the Place IDs of OpenStreetMap as location ID right now
  • Caching should also be improved to reduce load on API and improve indexing performance
  • Implement config option / parameters to configure OpenStreetMap and Google Maps (API key?)
  • Check license issues, maybe we can get a special license from Google as we are Open Source?

Improve support for Exif metadata

Issuehunt badges

As a user, I want complete Exif support so that I can search and view all metadata.

Please compare the Exif tags we already support - see exif.go and related test - with the list of standard Exif tags and what others index / display, see screenshots on the Exif page in our Wiki.

For example, flash is not indexed right now. ISO and color space as well. For date and time, it would be awesome to know the time zone to display it properly. And then of course test it with real files, do some code-clean up and add documentation to our Wiki, e.g. list tags we support or add info why we can't support it.

Acceptance Criteria:

  • Exif tags we already support MUST be compared with standard tags / other apps
  • Support for additional tags SHOULD be added to exif.go
  • A test for each supported tag MUST be added (find additional example images containing those tags, if needed)
  • Documentation MUST be added to our Wiki (list of tags: supported? yes/no)
  • You MAY add fields to the file or photo model for storing additional metadata (indexing is not part of this ticket, but you are invited to improve it along the way)

IssueHunt Summary

graciousgrey graciousgrey has been rewarded.

Backers (Total: $20.00)

Submitted pull Requests


Tips


IssueHunt has been backed by the following sponsors. Become a sponsor

Native smartphone apps

For Android and iOS. Interface should be similar to the Web UI (Material Design).

Main reason why this is important: Automatic upload / sync of photos stored on the devices, especially if PhotoPrism is hosted at home (devices need to be in the same Wifi network).

Maybe use NativeScript? https://www.nativescript.org/

Video support.

Please add support for Video to be stored / played back.

People: Facial Recognition

Issuehunt badges

As a user, I want to tag familiar human faces so that I can find all photos of these persons.

PhotoPrism must be able to detect and recognize faces. There are existing libraries for this, so we should try those first. See Face Recognition in our Wiki.

Here is a complete howto: https://hackernoon.com/face-recognition-with-go-676a555b8a7e

Acceptance Criteria:

  • You SHOULD use go-face (unless you find a better library)
  • A unit test demonstrating face recognition with real images and faces MUST be delivered
  • A user interface MAY be developed and gives extra karma
  • You MUST update our Docker images in /docker as needed (go-face requires dlib as external dependency); let us know when we shall push new images to Docker Hub
  • Documentation MUST be updated so that other developers know everything to continue working on this task

IssueHunt Summary

lastzero lastzero has been rewarded.

Backers (Total: $900.00)

Submitted pull Requests


Tips

Support Photos In Place on Hard Drive

For people with already organized (and massive) photo collections, it would be really nice to be able to point to our existing photo organization and not have to have photoprism copy/duplicate all of my data.

I initially opened #40 with my work account, so I closed it and reopened it with my personal. Sorry for the churn.

Gamification of development process

It would be nice to give out little perks for contributing to this project like Amazon vouchers. Or at least virtual badges based on points collected. Seems like an interesting experiment.

[EPIC] The great refactor -- tracking huge changes across the code base

Hi!

Great project! The Go part needs a bit of polishing I begun doing.

Here are some notes that I started hammering on:

  • Remove the convoluted way configuration is created and replace it with proper yaml marshalling (#50)
  • Add documentation to exported values (#50)
  • Restrict exported fields if they aren't really used, there is no need to export them ( there are lot of exported fields which don't really need to be exported. ). (#50)
  • See if it's really necessary to share all the structures with a pointer making them escape to heap. If they aren't modified or required to be modified it's enough to pass them by value and making them stay on stack.
  • Make the database injectable ( this is quite likely the biggest of changes and probably needs to be tracked in a separate ticket. ).
  • Extract services and put them into their own package so other packages can access them if they are needed.
  • Write some more tests
  • Reduce complexity by extracting small behaviour and eventually refactor them to use a different approach. Once smaller components are extracted it will be much easier to see what can be thrown out or made simpler.
  • Remove . imports
  • Indexing can take a lot of time for many pictures and Tensorflow adds to that. This should be extracted into a semaphore controlled parallel process. Since they aren't connected it should be possible to make it parallel rather than concurrent

That's all for now as a quick glance. :) I'll extract stuff in here into different tickets to track them via different PRs if you don't mind of course.

Also, I started into the first three points together since they would cause a lot of code conflicts if done separately.

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.