Compare commits
1 commit
develop
...
upgrade/vu
Author | SHA1 | Date | |
---|---|---|---|
![]() |
bdc1336116 |
5
.clabot
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
"contributors": "https://api.github.com/repos/photoprism/photoprism/contributors",
|
||||
"message": "Thank you very much for your contribution! As with many open-source projects, we ask that you sign our contributor license agreement so your pull request can be safely merged.",
|
||||
"label": "cla-signed"
|
||||
}
|
|
@ -1,22 +1,17 @@
|
|||
/photos/*
|
||||
/assets/photos/*
|
||||
/assets/cache/*
|
||||
/frontend/node_modules/*
|
||||
/node_modules
|
||||
/assets/static/build/*
|
||||
/assets/facenet
|
||||
/assets/nasnet
|
||||
/assets/nsfw
|
||||
/storage
|
||||
/build
|
||||
/assets/resources/database/*
|
||||
/assets/resources/static/build/*
|
||||
/assets/resources/nasnet
|
||||
/assets/testdata
|
||||
/assets/backups
|
||||
Dockerfile
|
||||
/photoprism
|
||||
/photoprism-*
|
||||
docker-compose*
|
||||
/coverage.*
|
||||
/frontend/tests/acceptance/screenshots
|
||||
/tmp/
|
||||
.dockerignore
|
||||
.idea
|
||||
.DS_Store
|
||||
.env
|
||||
*.db
|
||||
*.db-journal
|
||||
Dockerfile
|
||||
docker-compose*
|
||||
/frontend/tests/acceptance/screenshots
|
||||
|
|
182
.drone.yml
|
@ -1,182 +0,0 @@
|
|||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: linux-amd64
|
||||
|
||||
platform:
|
||||
arch: amd64
|
||||
os: linux
|
||||
|
||||
trigger:
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
- tag
|
||||
|
||||
steps:
|
||||
- name: up
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
CODECOV_TOKEN:
|
||||
from_secret: codecov_token
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- docker compose -f docker-compose.ci.yml pull
|
||||
- docker compose -f docker-compose.ci.yml stop
|
||||
- docker compose -f docker-compose.ci.yml up -d --build --force-recreate
|
||||
|
||||
- name: test-develop
|
||||
environment:
|
||||
CODECOV_TOKEN:
|
||||
from_secret: codecov_token
|
||||
commands:
|
||||
- docker compose -f docker-compose.ci.yml exec -e CODECOV_TOKEN=$${CODECOV_TOKEN} -T photoprism make all test-js test-codecov install migrate
|
||||
when:
|
||||
branch:
|
||||
- develop
|
||||
|
||||
- name: test
|
||||
commands:
|
||||
- docker compose -f docker-compose.ci.yml exec -T photoprism make all test install migrate
|
||||
when:
|
||||
branch:
|
||||
- preview
|
||||
- release
|
||||
|
||||
- name: down
|
||||
commands:
|
||||
- docker compose -f docker-compose.ci.yml down
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
|
||||
- name: deploy-preview
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- scripts/install-qemu.sh
|
||||
- make docker-preview
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
branch:
|
||||
- preview
|
||||
|
||||
- name: deploy-demo
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- docker pull photoprism/photoprism:preview
|
||||
- make docker-demo
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
branch:
|
||||
- preview
|
||||
|
||||
- name: deploy-release
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- scripts/install-qemu.sh
|
||||
- make docker-release
|
||||
when:
|
||||
status:
|
||||
- success
|
||||
branch:
|
||||
- release
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: pull-request
|
||||
|
||||
platform:
|
||||
arch: amd64
|
||||
os: linux
|
||||
|
||||
trigger:
|
||||
event:
|
||||
include:
|
||||
- pull_request
|
||||
|
||||
steps:
|
||||
- name: up
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml up -d --build --force-recreate
|
||||
|
||||
- name: test
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml exec -T photoprism make all test install migrate
|
||||
|
||||
- name: down
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml down
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
|
||||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: linux-arm64
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- preview
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
- tag
|
||||
|
||||
platform:
|
||||
arch: arm64
|
||||
os: linux
|
||||
|
||||
steps:
|
||||
- name: up
|
||||
environment:
|
||||
DOCKER_USERNAME:
|
||||
from_secret: docker_username
|
||||
DOCKER_PASSWORD:
|
||||
from_secret: docker_password
|
||||
commands:
|
||||
- scripts/login.sh
|
||||
- docker-compose -f docker-compose.ci.yml stop
|
||||
- docker-compose -f docker-compose.ci.yml up -d --build --force-recreate
|
||||
|
||||
- name: test
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml exec -T photoprism make all test-go install migrate
|
||||
|
||||
- name: down
|
||||
commands:
|
||||
- docker-compose -f docker-compose.ci.yml down
|
||||
- docker system prune -f
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
|
||||
---
|
||||
kind: signature
|
||||
hmac: 61a27b3c3142a9a1d1972f0fe00a8aa19d99623e6fea6e1d5ad44b6b20cd5cd1
|
||||
|
||||
...
|
40
.fossa.yml
Normal file → Executable file
|
@ -1,24 +1,18 @@
|
|||
version: 3
|
||||
# Generated by FOSSA CLI (https://github.com/fossas/fossa-cli)
|
||||
# Visit https://fossa.com to learn more
|
||||
|
||||
project:
|
||||
name: "PhotoPrism"
|
||||
id: "github.com/photoprism/photoprism"
|
||||
url: "https://github.com/photoprism/photoprism"
|
||||
link: "https://www.photoprism.app/"
|
||||
|
||||
revision:
|
||||
branch: "develop"
|
||||
|
||||
paths:
|
||||
exclude:
|
||||
- ./.github
|
||||
- ./assets
|
||||
- ./build
|
||||
- ./docker
|
||||
- ./frontend/tests
|
||||
- ./storage
|
||||
- ./scripts
|
||||
- ./test
|
||||
|
||||
telemetry:
|
||||
scope: "off"
|
||||
version: 2
|
||||
cli:
|
||||
server: https://app.fossa.com
|
||||
fetcher: custom
|
||||
project: git@github.com:photoprism/photoprism.git
|
||||
analyze:
|
||||
modules:
|
||||
- name: github.com/photoprism/photoprism/cmd/photoprism
|
||||
type: go
|
||||
target: github.com/photoprism/photoprism/cmd/photoprism
|
||||
path: cmd/photoprism
|
||||
- name: frontend
|
||||
type: npm
|
||||
target: frontend
|
||||
path: frontend
|
||||
|
|
81
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
@ -1,81 +0,0 @@
|
|||
---
|
||||
name: Bug Report
|
||||
about: Report a new and clearly identified bug that must be fixed directly in the application
|
||||
title: 'SHORT DESCRIPTION OF THE PROBLEM YOU ARE REPORTING'
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
PLEASE PROCEED ONLY IF YOU ARE ABSOLUTELY SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR POSSIBLY A PROBLEM WITH SOME OTHER SOFTWARE YOU ARE USING. VISIT <https://www.photoprism.app/kb/getting-support> TO LEARN MORE ABOUT OUR SUPPORT OPTIONS. THANK YOU FOR YOUR CAREFUL CONSIDERATION!
|
||||
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
#### 1. What is not working as documented?
|
||||
|
||||
Please be as specific as possible and explain what part of the software is not [working as documented](https://docs.photoprism.app/). "No photos found" would not be detailed enough. Also, never report [known issues](https://docs.photoprism.app/known-issues/) or [features not yet implemented](https://github.com/photoprism/photoprism/issues) as bugs. Thank you!
|
||||
|
||||
#### 2. How can we reproduce it?
|
||||
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
When reporting an import, indexing, or performance issue, please include the number and type of pictures in your library, as well as any configuration options you have changed, such as for thumbnail quality.
|
||||
|
||||
#### 3. What behavior do you expect?
|
||||
|
||||
Give us a clear and concise description of what you expect.
|
||||
|
||||
#### 4. What could be the cause of your problem?
|
||||
|
||||
Always try to determine the cause of your problem using the checklists at <https://docs.photoprism.app/getting-started/troubleshooting/> before submitting a bug report.
|
||||
|
||||
#### 5. Can you provide us with example files for testing, error logs, or screenshots?
|
||||
|
||||
Please include sample files or screenshots that help to reproduce your problem. You can also email files or share a download link, see <https://www.photoprism.app/contact> for details.
|
||||
|
||||
Visit <https://docs.photoprism.app/getting-started/troubleshooting/browsers/> to learn how to diagnose frontend issues.
|
||||
|
||||
**Important: If it is an import, indexing or metadata issue, we require sample files and logs from you.** Otherwise, we will not be able to process your report. If it is an import problem specifically, please always provide us with an archive of the files before you imported them so we can reproduce the behavior.
|
||||
|
||||
#### 6. Which software versions do you use?
|
||||
|
||||
(a) PhotoPrism Architecture & Build Number: AMD64, ARM64, ARMv7,...
|
||||
|
||||
(b) Database Type & Version: MariaDB, MySQL, SQLite,...
|
||||
|
||||
(c) Operating System Types & Versions: Linux, Windows, Android,...
|
||||
|
||||
(d) Browser Types & Versions: Firefox, Chrome, Safari on iPhone,...
|
||||
|
||||
(e) Ad Blockers, Browser Plugins, and/or Firewall Software?
|
||||
|
||||
You can find the version/build number of the app in *Settings* by scrolling to the bottom. Note that MySQL 8 support has been discontinued, see system requirements at <https://docs.photoprism.app/getting-started/#system-requirements>.
|
||||
|
||||
*Always provide database and operating system details if it is a backend, import, or indexing issue. Should it be a frontend issue, at a minimum we require you to provide web browser and operating system details. When reporting a performance problem, we ask that you provide us with complete information about your environment, as there may be more than one cause.*
|
||||
|
||||
#### 7. On what kind of device is PhotoPrism installed?
|
||||
|
||||
This is especially important if you are reporting a performance, import, or indexing issue. You can skip this if you're reporting a problem you found in our public demo, or if it's a completely unrelated issue, such as incorrect page layout.
|
||||
|
||||
(a) Device / Processor Type: Raspberry Pi 4, Intel Core i7-3770, AMD Ryzen 7 3800X,...
|
||||
|
||||
(b) Physical Memory & Swap Space in GB
|
||||
|
||||
(c) Storage Type: HDD, SSD, RAID, USB, Network Storage,...
|
||||
|
||||
(d) Anything else that might be helpful to know?
|
||||
|
||||
*Always provide device, memory, and storage details if you have a backend, performance, import, or indexing issue.*
|
||||
|
||||
#### 8. Do you use a Reverse Proxy, Firewall, VPN, or CDN?
|
||||
|
||||
If yes, please specify type and version. You can skip this if you are reporting a completely unrelated issue.
|
||||
|
||||
*Always provide this information when you have a reliability, performance, or frontend problem, such as failed uploads, connection errors, broken thumbnails, or video playback issues.*
|
||||
|
||||
**Using NGINX?** Please also provide the configuration and/or consider asking the NGINX community for advice as we do not specialize in supporting their product. Docs can be found at <https://docs.photoprism.app/getting-started/proxies/nginx/>.
|
33
.github/ISSUE_TEMPLATE/feature-request.md
vendored
|
@ -1,33 +0,0 @@
|
|||
---
|
||||
name: Feature Request
|
||||
about: Suggest a new feature or enhancement
|
||||
title: 'Category: Short Description (PLEASE CHANGE)'
|
||||
labels: idea
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
PLEASE ONLY PROCEED IF YOU ARE ABSOLUTELY SURE THAT THIS IS NOT A TECHNICAL SUPPORT INCIDENT AND/OR A PROBLEM WITH OTHER SOFTWARE YOU ARE USING. PLEASE ALSO CHECK OUR PUBLIC ROADMAP AND TRY TO FIND EXISTING FEATURE REQUESTS FIRST:
|
||||
|
||||
- <https://link.photoprism.app/roadmap>
|
||||
- <https://github.com/photoprism/photoprism/issues>
|
||||
|
||||
VISIT <https://www.photoprism.app/kb/getting-support> TO LEARN MORE ABOUT OUR SUPPORT OPTIONS. THANK YOU FOR YOUR CAREFUL CONSIDERATION!
|
||||
|
||||
===============================================================================
|
||||
|
||||
**Describe what problem this solves and why this would be valuable to many users**
|
||||
|
||||
A clear and concise description of what the problem is and why it is important to solve it.
|
||||
|
||||
**Describe the solution you'd like**
|
||||
|
||||
A clear and concise description of what you suggest to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
|
||||
Add any other context or screenshots about the feature request here.
|
18
.github/ISSUE_TEMPLATE/question.md
vendored
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
name: Question
|
||||
about: You have a general question or need assistance
|
||||
title: 'STOP! DO NOT PROCEED, USE GITHUB DISCUSSIONS INSTEAD - THANK YOU'
|
||||
labels: technical-support
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
FOR GENERAL QUESTIONS, TECHNICAL SUPPORT, AND TO GET TO KNOW OTHER COMMUNITY MEMBERS:
|
||||
|
||||
<https://github.com/photoprism/photoprism/discussions>
|
||||
|
||||
OUR TROUBLESHOOTING CHECKLISTS HELP YOU QUICKLY DIAGNOSE AND FIX COMMON PROBLEMS:
|
||||
|
||||
<https://docs.photoprism.app/getting-started/troubleshooting/>
|
||||
|
||||
DO NOT PROCEED, THANK YOU!
|
33
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -1,33 +0,0 @@
|
|||
<!--
|
||||
|
||||
Thank you for your interest in contributing!
|
||||
|
||||
Because we want to create the best possible product for our users, we have a set of criteria to ensure that all submissions are acceptable, see https://docs.photoprism.app/developer-guide/pull-requests/ for details.
|
||||
|
||||
(1) Please provide a concise description of your pull request.
|
||||
|
||||
- What does it implement / fix / improve? Why?
|
||||
- Are the changes related to an existing issue?
|
||||
|
||||
(2) After you submit your first pull request, you will be asked to accept our CLA, see https://www.photoprism.app/cla.
|
||||
|
||||
(3) Finally, please confirm that the following criteria are met by replacing "[ ]" with "[x]" (also possible at a later time).
|
||||
|
||||
-->
|
||||
|
||||
Acceptance Criteria:
|
||||
|
||||
- [ ] Features and enhancements must be fully implemented so that they can be released at any time without additional work
|
||||
- [ ] Automated unit and/or acceptance tests are mandatory to ensure the changes work as expected and to reduce repetitive manual work
|
||||
- [ ] Frontend components must be responsive to work and look properly on phones, tablets, and desktop computers; you must have tested them on all major browsers and different devices
|
||||
- [ ] Documentation and translation updates should be provided if needed
|
||||
- [ ] In case you submit database-related changes, they must be tested and compatible with SQLite 3 and MariaDB 10.5.12+
|
||||
|
||||
<!--
|
||||
|
||||
Since reviewing, testing and finally merging pull requests requires significant resources on our side, this can take several months if it's not just a small fix, especially if extensive testing is required to prevent bugs from getting into our stable version.
|
||||
|
||||
We thank you for your patience! :)
|
||||
|
||||
-->
|
||||
|
31
.github/workflows/codeql-analysis.yml
vendored
|
@ -1,31 +0,0 @@
|
|||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop, release, master ]
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'go', 'javascript' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
- name: CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
31
.gitignore
vendored
|
@ -1,32 +1,20 @@
|
|||
# Application files and directories
|
||||
/photoprism
|
||||
/photoprism-*
|
||||
/photos/originals/*
|
||||
/photos/import/*
|
||||
/storage/*
|
||||
/build/*
|
||||
/assets/photos/originals/*
|
||||
/assets/photos/import/*
|
||||
/assets/photos/export/*
|
||||
/assets/resources/database/*
|
||||
!/assets/resources/database/.gitignore
|
||||
/node_modules
|
||||
/pro
|
||||
/plus
|
||||
/frontend/.eslintcache
|
||||
/frontend/node_modules/*
|
||||
/frontend/tests/*.html
|
||||
/frontend/tests/*.log
|
||||
/frontend/tests/screenshots
|
||||
/frontend/src/locales/*.mo
|
||||
/assets/facenet
|
||||
/assets/nasnet
|
||||
/assets/nsfw
|
||||
/assets/static/build/
|
||||
/package-lock.json
|
||||
/frontend/tests_output
|
||||
/tmp/
|
||||
/assets/testdata
|
||||
/assets/backups
|
||||
/assets/resources/nasnet
|
||||
*.log
|
||||
*.pid
|
||||
*.db
|
||||
*.db-journal
|
||||
docker-compose.override.yml
|
||||
docker-compose.tmp.yml
|
||||
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
|
@ -60,7 +48,6 @@ Thumbs.db
|
|||
.settings
|
||||
.swp
|
||||
.tmp
|
||||
.env
|
||||
|
||||
#Karma Coverage Report
|
||||
frontend/coverage/
|
||||
frontend/coverage/
|
169
.ldap.cfg
|
@ -1,169 +0,0 @@
|
|||
debug = true
|
||||
[behaviors]
|
||||
# Ignore all capabilities restrictions, for instance allowing every user to perform a search
|
||||
IgnoreCapabilities = true
|
||||
[ldap]
|
||||
enabled = true
|
||||
listen = "0.0.0.0:389"
|
||||
[ldaps]
|
||||
enabled = false
|
||||
listen = "0.0.0.0:636"
|
||||
[api]
|
||||
enabled = true
|
||||
internals = true
|
||||
tls = false
|
||||
listen = "0.0.0.0:5555"
|
||||
[backend]
|
||||
datastore = "config"
|
||||
baseDN = "dc=localssl,dc=dev"
|
||||
|
||||
[[users]]
|
||||
name = "user"
|
||||
givenname = "John"
|
||||
objectClass = "user"
|
||||
displayName = "John Doe"
|
||||
sn = "Doe"
|
||||
uidnumber = 5003
|
||||
primarygroup = 5501
|
||||
loginShell = "/bin/sh"
|
||||
otherGroups = [5505,5506,5507,5508]
|
||||
userPrincipalName = "jdoe@example.com"
|
||||
mail = "jdoe@example.com"
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRole = ["user"]
|
||||
photoprismNoLogin = ["false"]
|
||||
photoprismWebdav = ["true"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "bob"
|
||||
givenname = "Bob"
|
||||
objectClass = "user"
|
||||
displayName = "Robert Jones"
|
||||
sn = "Jones"
|
||||
userPrincipalName = "bob@example.com"
|
||||
mail = "bob@example.com"
|
||||
uidnumber = 5005
|
||||
primarygroup = 5502
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5505,5506]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRoleUser = ["true"]
|
||||
photoprismNoLogin = ["false"]
|
||||
photoprismWebdav = ["true"]
|
||||
photoprismUploadPath = ["bob"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "guest"
|
||||
objectClass = "user"
|
||||
givenname = "Guest"
|
||||
displayName = "Guest User"
|
||||
userPrincipalName = "guest@example.com"
|
||||
mail = "guest@example.com"
|
||||
uidnumber = 5006
|
||||
primarygroup = 5503
|
||||
loginShell = "/bin/sh"
|
||||
otherGroups = [5505,5507]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismRole = ["guest"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "uploader"
|
||||
givenname = "Uploader"
|
||||
objectClass = "user"
|
||||
displayName = "Uploader"
|
||||
sn = "Uploader"
|
||||
userPrincipalName = "uploader@example.com"
|
||||
mail = "uploader@example.com"
|
||||
uidnumber = 5007
|
||||
primarygroup = 5504
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5508]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismUploadPath = ["bob"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "contributor"
|
||||
givenname = "Contributor"
|
||||
objectClass = "user"
|
||||
displayName = "Contributor"
|
||||
sn = "Contributor"
|
||||
userPrincipalName = "contributor@example.com"
|
||||
mail = "contributor@example.com"
|
||||
uidnumber = 5009
|
||||
primarygroup = 5509
|
||||
loginShell = "/bin/bash"
|
||||
otherGroups = [5508]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.customattributes]]
|
||||
photoprismUploadPath = ["contrib"]
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[users]]
|
||||
name = "mail"
|
||||
objectClass = "user"
|
||||
givenname = "Mail"
|
||||
displayName = "Mail User"
|
||||
userPrincipalName = "mail@example.com"
|
||||
mail = "mail@example.com"
|
||||
uidnumber = 5507
|
||||
primarygroup = 5506
|
||||
loginShell = "/bin/nologin"
|
||||
otherGroups = [5505]
|
||||
passsha256 = "4314c1fe282face45336b1422a3285c5ff31a39c8e24425615fa53a43b718493" # photoprism
|
||||
[[users.capabilities]]
|
||||
action = "search"
|
||||
object = "*"
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-admin"
|
||||
gidnumber = 5501
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-user"
|
||||
gidnumber = 5502
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-guest"
|
||||
gidnumber = 5503
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-uploader"
|
||||
gidnumber = 5504
|
||||
|
||||
[[groups]]
|
||||
name = "gmail"
|
||||
gidnumber = 5505
|
||||
|
||||
[[groups]]
|
||||
name = "email"
|
||||
gidnumber = 5506
|
||||
|
||||
[[groups]]
|
||||
name = "ssh"
|
||||
gidnumber = 5507
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-webdav"
|
||||
gidnumber = 5508
|
||||
|
||||
[[groups]]
|
||||
name = "PhotoPrism-contributor"
|
||||
gidnumber = 5509
|
5
.my.cnf
|
@ -1,5 +0,0 @@
|
|||
[client]
|
||||
user=root
|
||||
password=photoprism
|
||||
host=mariadb
|
||||
port=4001
|
32
.travis.yml
Normal file
|
@ -0,0 +1,32 @@
|
|||
sudo: required
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- docker-ce
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cache
|
||||
|
||||
before_cache:
|
||||
- sudo chown -R travis:travis $HOME/.cache
|
||||
|
||||
services:
|
||||
- docker
|
||||
|
||||
before_script:
|
||||
- docker-compose -f docker-compose.travis.yml up -d --build
|
||||
|
||||
script:
|
||||
- scripts/travis.sh
|
||||
|
||||
after_script:
|
||||
- docker-compose -f docker-compose.travis.yml down
|
||||
|
||||
deploy:
|
||||
provider: script
|
||||
script: make docker-photoprism docker-demo
|
||||
skip_cleanup: true
|
||||
on:
|
||||
branch: master
|
|
@ -1,45 +0,0 @@
|
|||
# PhotoPrism® Code of Conduct
|
||||
|
||||
**By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), including our [Privacy Policy](https://www.photoprism.app/privacy) and the following Code of Conduct. It explains the "dos and don’ts" when interacting with our team and other community members.**
|
||||
|
||||
*Last Updated: July 5, 2023*
|
||||
|
||||
## Rules
|
||||
|
||||
Because we want our Code of Conduct to be easy to understand and implement, we have only three basic rules, numbered in order of importance:
|
||||
|
||||
(1) Be respectful, be responsible, be kind.
|
||||
|
||||
(2) Don’t panic.
|
||||
|
||||
(3) Don’t feed the trolls.
|
||||
|
||||
## Guidelines
|
||||
|
||||
Not everyone has experience with Open Source communities and intuitively knows what is acceptable. In that case, the following guidelines and examples are meant to provide a quick overview and help you avoid the most common pitfalls:
|
||||
|
||||
(a) Do not [feel entitled](https://www.reddit.com/r/photoprism/comments/13emwf0/did_you_guys_really_nerf_hardware_transcoding/) to free software, support, or advice, especially if you are not a contributor, [member](https://link.photoprism.app/membership), or business customer. Don't expect contributors to [give status reports](https://docs.photoprism.app/developer-guide/code-quality/#go-slow-before-you-go-fast) as if they work for you or owe you something, even if you have donated a small amount. We also ask that you do not use GitHub Issues or other development tools to start general discussions, get technical support, or express personal opinions.
|
||||
|
||||
(b) Honor **Rule #2**, [read the docs](https://docs.photoprism.app) and [determine the cause of your problem](https://docs.photoprism.app/getting-started/troubleshooting/) before opening invalid bug reports, starting a public "shitstorm", or insulting other community members in our chat rooms. Aside from being annoying for everyone, it also keeps our team from working on features and enhancements that users like you are waiting for.
|
||||
|
||||
(c) Reckless, [surprisingly harsh](https://github.com/photoprism/photoprism/issues/281#issuecomment-1207233135) or ignorant communication that disregards **Rule #1** is unacceptable, whether public or private. If you are having a bad day and want to offend someone, please go somewhere else.
|
||||
|
||||
We have found that many of the issues that new users get upset about when they read about them in community forums or old issue comments have been resolved in the meantime. If not, you can be sure that we are working to improve our software and services to the best of our ability.
|
||||
|
||||
*Thanks to our amazing community, problems are rare in practice. Common sense and staying away from the computer when you are tired or hungry should usually be enough to get along with others.*
|
||||
|
||||
## Reporting
|
||||
|
||||
We encourage all community members to resolve problems on their own whenever possible. Serious and persistent violations, such as disrespectful, abusive, harassing, or otherwise unacceptable behavior, [may be reported](https://www.photoprism.app/contact) to us.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Our community standards will be enforced as necessary to protect everyone's well-being and to ensure that our discussion forums, chat rooms, and other infrastructure can be used as intended.
|
||||
|
||||
Initial warnings may be issued in the form of a [snarky comment](https://www.urbandictionary.com/define.php?term=snarky), especially if your tone is harsh to begin with. In serious cases, we will provide a link to this Code of Conduct to avoid misunderstandings. We also reserve the right to delete rants, personal attacks, spam, and unsolicited advertising from our community forums.
|
||||
|
||||
Getting a simple **\*plonk\***[^1] in response finally signals that we have lost hope and you're being ignored according to **Rule #3**. This old tradition from Usenet days is as time-saving as it is clear. It is not meant in a disrespectful way.
|
||||
|
||||
In addition, we may use technical measures to temporarily or permanently restrict your access to our infrastructure, including forums and chats.
|
||||
|
||||
[^1]: \*plonk\* including variants such as "Plonk." stands for the metaphorical sound of a user hitting the bottom of the kill file. It was first used in [Usenet forums](https://en.everybodywiki.com/Plonk_(Usenet)), a worldwide distributed discussion system and precursor to the Web.
|
|
@ -1,78 +1,46 @@
|
|||
# Every Contribution Makes a Difference
|
||||
# Every contribution makes a difference
|
||||
|
||||
We welcome contributions of any kind, including blog posts, tutorials, testing, writing documentation, and pull requests. Our [Developer Guide](https://docs.photoprism.app/developer-guide/) contains all the information necessary for you to get started.
|
||||
Think of open-source development as free training with a visible outcome.
|
||||
Exploring new technologies is easier than in commercial environments,
|
||||
where development effort is more focused on immediate results.
|
||||
|
||||
## Join the Community ##
|
||||
We welcome contributions of any kind including pull requests, ideas, bug reports,
|
||||
testing, writing documentation, tutorials and blog posts. If you help with development,
|
||||
you have the opportunity to learn Docker, Go, TensorFlow and much more.
|
||||
|
||||
Follow us on [Twitter](https://link.photoprism.app/twitter) and join the [Community Chat](https://link.photoprism.app/chat)
|
||||
to get regular updates, connect with other contributors, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct) explains the "dos and don’ts" when interacting with other community members.
|
||||
## Questions? ##
|
||||
|
||||
Feel free to [contact us](https://www.photoprism.app/contact) 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.
|
||||
Join our [developers mailing list](https://groups.google.com/a/photoprism.org/forum/#!forum/developers)
|
||||
to receive regular project updates, get in contact with other contributors and discuss your ideas. Don't be afraid to ask stupid questions.
|
||||
|
||||
## Not a Developer? No Problem ##
|
||||
## Pull requests ##
|
||||
|
||||
You can also contribute by…
|
||||
Issues labeled [help wanted](https://github.com/photoprism/photoprism/labels/help%20wanted) /
|
||||
[easy](https://github.com/photoprism/photoprism/labels/easy) can be good (first) contributions.
|
||||
Our [Developer Guide](https://github.com/photoprism/photoprism/wiki) contains all information necessary to get you started.
|
||||
|
||||
* answering questions in the [Community Chat](https://link.photoprism.app/chat), on [Reddit](https://link.photoprism.app/reddit) and in [GitHub Discussions](https://link.photoprism.app/discussions)
|
||||
* helping us [translate](https://docs.photoprism.app/developer-guide/translations-weblate/) the Web UI on [Weblate](https://translate.photoprism.app/)
|
||||
* [conducting research](https://github.com/photoprism/photoprism/issues?q=is%3Aopen+is%3Aissue+label%3Aresearch) and [improving the documentation](https://github.com/photoprism/photoprism/issues?q=is%3Aopen+is%3Aissue+label%3Adocs)
|
||||
* publishing tutorials, blog posts, and podcasts
|
||||
* voting for us on pages like:
|
||||
* https://alternativeto.net/software/photoprism/about/
|
||||
* https://www.saashub.com/google-photos-alternatives
|
||||
* recommending PhotoPrism to your friends
|
||||
Our [step-by-step guide](https://github.com/photoprism/photoprism/wiki/Pull-Requests) explains how to submit new features, bugfixes and documentation.
|
||||
|
||||
## Creating Bug Reports ##
|
||||
## Funded issues ##
|
||||
|
||||
Before reporting a bug, please use our [Troubleshooting Checklists](https://docs.photoprism.app/getting-started/troubleshooting/)
|
||||
to determine the cause of your problem. If you have a general question, need help, or an issue has not
|
||||
(yet) been clearly identified:
|
||||
You'll get a small reward for working on [funded issues](https://github.com/photoprism/photoprism/labels/IssueHunt), see [issuehunt.io](https://issuehunt.io/repos/119160553) for details. Note that issue descriptions may be outdated on their site. Rewards are paid out when all [acceptance criteria](https://github.com/photoprism/photoprism/wiki/Issues#user-stories) prioritized as MUST are met and your pull request was successfully merged.
|
||||
|
||||
- You are welcome to ask in our [Community Chat](https://link.photoprism.app/chat)
|
||||
- or post your question in [GitHub Discussions](https://link.photoprism.app/discussions)
|
||||
## Feature requests ##
|
||||
|
||||
### GitHub Issues ###
|
||||
You are welcome to add specific feature requests directly to our [GitHub issue tracker](https://github.com/photoprism/photoprism/issues)
|
||||
if no similar [idea](https://github.com/photoprism/photoprism/labels/idea)
|
||||
or [todo](https://github.com/photoprism/photoprism/labels/todo) already exists.
|
||||
Please don't use the issue tracker to ask general questions.
|
||||
|
||||
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 [our source code](https://github.com/photoprism/photoprism). Thank you for your careful consideration!
|
||||
We also maintain a couple of pages in our [Developer Guide](https://github.com/photoprism/photoprism/wiki)
|
||||
for collecting interesting ideas and feedback, e.g.
|
||||
[Related](https://github.com/photoprism/photoprism/wiki/Related),
|
||||
[Love](https://github.com/photoprism/photoprism/wiki/Love),
|
||||
[Concerns](https://github.com/photoprism/photoprism/wiki/Concerns) and
|
||||
[Research](https://github.com/photoprism/photoprism/wiki/Research).
|
||||
|
||||
- When reporting a problem, always include the software versions you are using and other information about your environment such as [browser, browser plugins](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory), and [processor](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu)
|
||||
- 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](https://www.photoprism.app/contact) or [a community member](https://link.photoprism.app/discussions) 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](https://docs.photoprism.app/getting-started/troubleshooting/) 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
|
||||
## Reporting bugs ##
|
||||
|
||||
## Submitting Pull Requests ##
|
||||
|
||||
Follow our [step-by-step guide](https://docs.photoprism.app/developer-guide/pull-requests) to learn how to submit new features, bug fixes, and documentation enhancements.
|
||||
|
||||
Pull requests solving ["help wanted"](https://github.com/photoprism/photoprism/labels/help%20wanted) issues are the easiest to merge and the most helpful to us, as they allow us to spend more time on core functionality and other issues that are difficult for external contributors to work on. If you are new to this project, anything labeled ["easy"](https://github.com/photoprism/photoprism/labels/easy) may be a good first contribution.
|
||||
|
||||
**Be aware that reviewing, testing and finally merging pull requests requires significant resources on our side. It can therefore take several months if it is not just a small fix, especially if extensive testing is needed to prevent bugs from getting into our stable version.**
|
||||
|
||||
## Contributor License Agreement (CLA) ##
|
||||
|
||||
After you submit your first pull request, you will be asked to accept our Contributor License Agreement (CLA). Visit [photoprism.app/cla](https://www.photoprism.app/cla) and [photoprism.app/oss/faq](https://www.photoprism.app/oss/faq#cla) to learn more.
|
||||
|
||||
## Thank You to All Current and Past Sponsors 💎 ##
|
||||
|
||||
[A big thank you to all of our sponsors](SPONSORS.md), whose generous support has been and continues to be essential to the success of the project! 💜
|
||||
|
||||
Our project infrastructure is provided by the following companies:
|
||||
|
||||
- [**GitHub**](https://github.com/) hosts our [code repositories](https://github.com/photoprism/photoprism) and also provides many other important services
|
||||
- [**Docker**](https://www.docker.com/) approved us for their [Open Source Program](https://www.docker.com/community/open-source/application/) and hosts all of our app images
|
||||
- [**Element**](https://element.io/) develops and [operates the infrastructure](https://matrix.org/) that our [community chat](https://link.photoprism.app/chat) is based on
|
||||
- [**BrowserStack**](https://www.browserstack.com/) provides [free access](https://www.browserstack.com/open-source) to their device and browser testing infrastructure
|
||||
|
||||
[View Sponsors ›](SPONSORS.md) [View Credits ›](https://docs.photoprism.app/credits/)
|
||||
|
||||
## Privacy Notice ##
|
||||
|
||||
We operate a number of web services that help us develop and maintain our software in collaboration with the open source community, for example [translate.photoprism.app](https://translate.photoprism.app/).
|
||||
|
||||
Because many of these apps and tools were originally developed for internal use without a high level of privacy in mind, we ask that you do not enter personal information such as your real name or personal email address if you want it to remain private.
|
||||
|
||||
**Personal details may otherwise show up in logs, source code, translation files, commit messages, and pull request comments.**
|
||||
|
||||
----
|
||||
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), [Privacy Policy](https://www.photoprism.app/privacy), and [Code of Conduct](https://www.photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
Please use the [GitHub issue tracker](https://github.com/photoprism/photoprism/issues) to report clearly identified bugs and impediments to us.
|
||||
If you're not sure, start by asking in our [help forum](https://groups.google.com/a/photoprism.org/forum/#!forum/help) or [contact us via email](mailto:help@photoprism.org).
|
||||
When reporting an issue, please provide the version in use and information about your environment like browser, operating system, installed memory, and processor type.
|
17
Dockerfile
|
@ -1,18 +1,5 @@
|
|||
# Ubuntu 23.10 (Mantic Minotaur)
|
||||
FROM photoprism/develop:231206-mantic
|
||||
FROM photoprism/development:20191105
|
||||
|
||||
## Alternative Environments:
|
||||
# FROM photoprism/develop:armv7 # ARMv7 (32bit)
|
||||
# FROM photoprism/develop:lunar # Ubuntu 23.04 (Lunar Lobster)
|
||||
# FROM photoprism/develop:jammy # Ubuntu 22.04 LTS (Jammy Jellyfish)
|
||||
# FROM photoprism/develop:impish # Ubuntu 21.10 (Impish Indri)
|
||||
# FROM photoprism/develop:bookworm # Debian 12 (Bookworm)
|
||||
# FROM photoprism/develop:bullseye # Debian 11 (Bullseye)
|
||||
# FROM photoprism/develop:buster # Debian 10 (Buster)
|
||||
|
||||
# Set default working directory.
|
||||
# Set up project directory
|
||||
WORKDIR "/go/src/github.com/photoprism/photoprism"
|
||||
|
||||
# Copy source to image.
|
||||
COPY . .
|
||||
COPY --chown=root:root /scripts/dist/ /scripts/
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
custom: "https://www.photoprism.app/editions#compare"
|
||||
github: photoprism
|
||||
patreon: photoprism
|
188
LICENSE
|
@ -1,5 +1,5 @@
|
|||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
|
@ -7,15 +7,17 @@
|
|||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
|
@ -24,34 +26,44 @@ them if you wish), that you receive source code or can get it if you
|
|||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
@ -60,7 +72,7 @@ modification follow.
|
|||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
@ -537,45 +549,35 @@ to collect a royalty for further conveying from those to whom you convey
|
|||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
|
@ -616,31 +618,57 @@ an absolute waiver of all civil liability in connection with the
|
|||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
ADDITIONAL TERMS
|
||||
|
||||
18. PhotoPrism® Trademark and Brand Assets
|
||||
|
||||
(a) PhotoPrism’s Brand Assets — including trademarks, logos, icons, fonts,
|
||||
corporate design, product and service names, and any other brand features
|
||||
and elements, whether registered or unregistered („Brand Assets“) — are
|
||||
proprietary assets owned exclusively by PhotoPrism UG („PhotoPrism“). We
|
||||
reserve the right to object to any use or misuse in any jurisdiction
|
||||
worldwide. Visit <https://www.photoprism.app/trademark> to learn more.
|
||||
|
||||
(b) Contributors, licensees, business partners, and other third parties
|
||||
may never claim ownership of PhotoPrism's Brand Assets or brands confusingly
|
||||
similar to PhotoPrism's Brand Assets in any way, including, without
|
||||
limitation, as a trademark, service mark, company name or designation,
|
||||
domain name, social media profile/handle, or in any other manner.
|
||||
|
||||
(c) You may not include the PhotoPrism trademark in the name of your app,
|
||||
product, or service, whether commercial or non-commercial in nature. This
|
||||
includes online services such as e-commerce, community, blog, information,
|
||||
advertising, and personal home pages, as well as apps, app stores, client
|
||||
apps, or third-party apps that interact with PhotoPrism.
|
||||
|
||||
(d) In the event that any provision is found to be unenforceable by a court
|
||||
or other competent jurisdiction, the remaining portions hereof shall remain
|
||||
in full force and effect.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
686
Makefile
|
@ -1,646 +1,130 @@
|
|||
# Copyright © 2018 - 2023 PhotoPrism UG. All rights reserved.
|
||||
#
|
||||
# Questions? Email us at hello@photoprism.app or visit our website to learn
|
||||
# more about our team, products and services: https://www.photoprism.app/
|
||||
|
||||
export GO111MODULE=on
|
||||
|
||||
-include .env
|
||||
export
|
||||
|
||||
# Binary file names.
|
||||
BINARY_NAME=photoprism
|
||||
GOIMPORTS=goimports
|
||||
BINARY_NAME=photoprism
|
||||
DOCKER_TAG=`date -u +%Y%m%d`
|
||||
TIDB_VERSION=2.1.11
|
||||
TF_VERSION=1.14.0
|
||||
DARKTABLE_VERSION="$(awk '$2 == "DARKTABLE_VERSION" { print $3; exit }' docker/darktable/Dockerfile)"
|
||||
|
||||
# Build parameters.
|
||||
BUILD_PATH ?= $(shell realpath "./build")
|
||||
BUILD_DATE ?= $(shell date -u +%y%m%d)
|
||||
BUILD_VERSION ?= $(shell git describe --always)
|
||||
BUILD_TAG ?= $(BUILD_DATE)-$(BUILD_VERSION)
|
||||
BUILD_OS ?= $(shell uname -s)
|
||||
BUILD_ARCH ?= $(shell scripts/dist/arch.sh)
|
||||
JS_BUILD_PATH ?= $(shell realpath "./assets/static/build")
|
||||
|
||||
# Install parameters.
|
||||
INSTALL_PATH ?= $(BUILD_PATH)/photoprism-ce_$(BUILD_TAG)-$(shell echo $(BUILD_OS) | tr '[:upper:]' '[:lower:]')-$(BUILD_ARCH)
|
||||
DESTDIR ?= $(INSTALL_PATH)
|
||||
DESTUID ?= 1000
|
||||
DESTGID ?= 1000
|
||||
INSTALL_USER ?= $(DESTUID):$(DESTGID)
|
||||
INSTALL_MODE ?= u+rwX,a+rX
|
||||
INSTALL_MODE_BIN ?= 755
|
||||
|
||||
UID := $(shell id -u)
|
||||
GID := $(shell id -g)
|
||||
HASRICHGO := $(shell which richgo)
|
||||
|
||||
ifdef HASRICHGO
|
||||
GOTEST=richgo test
|
||||
else
|
||||
GOTEST=go test
|
||||
endif
|
||||
|
||||
# Ensure compatibility with "docker-compose" (old) and "docker compose" (new).
|
||||
HAS_DOCKER_COMPOSE_WITH_DASH := $(shell which docker-compose)
|
||||
|
||||
ifdef HAS_DOCKER_COMPOSE_WITH_DASH
|
||||
DOCKER_COMPOSE=docker-compose
|
||||
else
|
||||
DOCKER_COMPOSE=docker compose
|
||||
endif
|
||||
|
||||
# Declare "make" targets.
|
||||
all: dep build-js
|
||||
dep: dep-tensorflow dep-js
|
||||
biuld: build
|
||||
build: build-go
|
||||
build-all: build-go build-js
|
||||
pull: docker-pull
|
||||
all: dep build
|
||||
dep: dep-tensorflow dep-js dep-go
|
||||
build: build-js build-go
|
||||
install: install-bin install-assets
|
||||
test: test-js test-go
|
||||
test-go: reset-sqlite run-test-go
|
||||
test-pkg: reset-sqlite run-test-pkg
|
||||
test-api: reset-sqlite run-test-api
|
||||
test-commands: reset-sqlite run-test-commands
|
||||
test-photoprism: reset-sqlite run-test-photoprism
|
||||
test-short: reset-sqlite run-test-short
|
||||
test-mariadb: reset-acceptance run-test-mariadb
|
||||
acceptance-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth acceptance-auth-sqlite-stop acceptance-sqlite-restart wait-2 acceptance acceptance-sqlite-stop
|
||||
acceptance-run-chromium-short: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth-short acceptance-auth-sqlite-stop acceptance-sqlite-restart wait-2 acceptance-short acceptance-sqlite-stop
|
||||
acceptance-auth-run-chromium: storage/acceptance acceptance-auth-sqlite-restart wait acceptance-auth acceptance-auth-sqlite-stop
|
||||
acceptance-public-run-chromium: storage/acceptance acceptance-sqlite-restart wait acceptance acceptance-sqlite-stop
|
||||
wait:
|
||||
sleep 20
|
||||
wait-2:
|
||||
sleep 20
|
||||
show-build:
|
||||
@echo "$(BUILD_TAG)"
|
||||
test-all: test acceptance-run-chromium
|
||||
acceptance: start test-chromium test-firefox stop
|
||||
fmt: fmt-js fmt-go
|
||||
clean-local: clean-local-config clean-local-cache
|
||||
upgrade: dep-upgrade-js dep-upgrade
|
||||
devtools: install-go dep-npm
|
||||
.SILENT: help;
|
||||
logs:
|
||||
$(DOCKER_COMPOSE) logs -f
|
||||
help:
|
||||
@echo "For build instructions, visit <https://docs.photoprism.app/developer-guide/>."
|
||||
fix-permissions:
|
||||
$(info Updating filesystem permissions...)
|
||||
@if [ $(UID) != 0 ]; then\
|
||||
echo "Running \"chown --preserve-root -Rcf $(UID):$(GID) /go /photoprism /opt/photoprism /tmp/photoprism\". Please wait."; \
|
||||
sudo chown --preserve-root -Rcf $(UID):$(GID) /go /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Running \"chmod --preserve-root -Rcf u+rwX /go/src/github.com/photoprism/* /photoprism /opt/photoprism /tmp/photoprism\". Please wait.";\
|
||||
sudo chmod --preserve-root -Rcf u+rwX /go/src/github.com/photoprism/photoprism/* /photoprism /opt/photoprism /tmp/photoprism || true;\
|
||||
echo "Done."; \
|
||||
else\
|
||||
echo "Running as root. Nothing to do."; \
|
||||
fi
|
||||
gettext-merge:
|
||||
./scripts/gettext-merge.sh
|
||||
gettext-clear-fuzzy:
|
||||
./scripts/gettext-clear-fuzzy.sh
|
||||
clean:
|
||||
rm -f *.log .test*
|
||||
[ ! -f "$(BINARY_NAME)" ] || rm -f $(BINARY_NAME)
|
||||
[ ! -d "node_modules" ] || rm -rf node_modules
|
||||
[ ! -d "frontend/node_modules" ] || rm -rf frontend/node_modules
|
||||
[ ! -d "$(BUILD_PATH)" ] || rm -rf --preserve-root $(BUILD_PATH)
|
||||
[ ! -d "$(JS_BUILD_PATH)" ] || rm -rf --preserve-root $(JS_BUILD_PATH)
|
||||
tar.gz:
|
||||
$(info Creating tar.gz archives from the directories in "$(BUILD_PATH)"...)
|
||||
find "$(BUILD_PATH)" -maxdepth 1 -mindepth 1 -type d -name "photoprism*" -exec tar --exclude='.[^/]*' -C {} -czf {}.tar.gz . \;
|
||||
pkg: pkg-amd64 pkg-arm64
|
||||
pkg-amd64:
|
||||
docker run --rm -u $(UID) --platform=amd64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" --entrypoint "" photoprism/develop:jammy make all install tar.gz
|
||||
pkg-arm64:
|
||||
docker run --rm -u $(UID) --platform=arm64 --pull=always -v ".:/go/src/github.com/photoprism/photoprism" --entrypoint "" photoprism/develop:jammy make all install tar.gz
|
||||
install:
|
||||
$(info Installing in "$(DESTDIR)"...)
|
||||
@[ ! -d "$(DESTDIR)" ] || (echo "ERROR: Install path '$(DESTDIR)' already exists!"; exit 1)
|
||||
mkdir --mode=$(INSTALL_MODE) -p $(DESTDIR)
|
||||
env TMPDIR="$(BUILD_PATH)" ./scripts/dist/install-tensorflow.sh $(DESTDIR)
|
||||
rm -rf --preserve-root $(DESTDIR)/include
|
||||
(cd $(DESTDIR) && mkdir -p bin lib assets)
|
||||
./scripts/build.sh prod "$(DESTDIR)/bin/$(BINARY_NAME)"
|
||||
rsync -r -l --safe-links --exclude-from=assets/.buildignore --chmod=a+r,u+rw ./assets/ $(DESTDIR)/assets
|
||||
wget -O $(DESTDIR)/assets/static/img/wallpaper/welcome.jpg https://cdn.photoprism.app/wallpaper/welcome.jpg
|
||||
wget -O $(DESTDIR)/assets/static/img/preview.jpg https://cdn.photoprism.app/img/preview.jpg
|
||||
chown -R $(INSTALL_USER) $(DESTDIR)
|
||||
chmod -R $(INSTALL_MODE) $(DESTDIR)
|
||||
chmod -R $(INSTALL_MODE_BIN) $(DESTDIR)/bin $(DESTDIR)/lib
|
||||
@echo "PhotoPrism $(BUILD_TAG) has been successfully installed in \"$(DESTDIR)\".\nEnjoy!"
|
||||
install-go:
|
||||
sudo scripts/dist/install-go.sh
|
||||
go build -v ./...
|
||||
install-tensorflow:
|
||||
sudo scripts/dist/install-tensorflow.sh
|
||||
install-darktable:
|
||||
sudo scripts/dist/install-darktable.sh
|
||||
acceptance-sqlite-restart:
|
||||
cp -f storage/acceptance/backup.db storage/acceptance/index.db
|
||||
cp -f storage/acceptance/config-sqlite/settingsBackup.yml storage/acceptance/config-sqlite/settings.yml
|
||||
rm -rf storage/acceptance/sidecar/2020
|
||||
rm -rf storage/acceptance/sidecar/2011
|
||||
rm -rf storage/acceptance/originals/2010
|
||||
rm -rf storage/acceptance/originals/2020
|
||||
rm -rf storage/acceptance/originals/2011
|
||||
rm -rf storage/acceptance/originals/2013
|
||||
rm -rf storage/acceptance/originals/2017
|
||||
./photoprism --auth-mode="public" -c "./storage/acceptance/config-sqlite" --test start -d
|
||||
acceptance-sqlite-stop:
|
||||
./photoprism --auth-mode="public" -c "./storage/acceptance/config-sqlite" --test stop
|
||||
acceptance-auth-sqlite-restart:
|
||||
cp -f storage/acceptance/backup.db storage/acceptance/index.db
|
||||
cp -f storage/acceptance/config-sqlite/settingsBackup.yml storage/acceptance/config-sqlite/settings.yml
|
||||
./photoprism --auth-mode="password" -c "./storage/acceptance/config-sqlite" --test start -d
|
||||
acceptance-auth-sqlite-stop:
|
||||
./photoprism --auth-mode="password" -c "./storage/acceptance/config-sqlite" --test stop
|
||||
upgrade: upgrade-js upgrade-go
|
||||
start:
|
||||
./photoprism start -d
|
||||
go run cmd/photoprism/photoprism.go start -d
|
||||
stop:
|
||||
./photoprism stop
|
||||
go run cmd/photoprism/photoprism.go stop
|
||||
terminal:
|
||||
$(DOCKER_COMPOSE) exec -u $(UID) photoprism bash
|
||||
rootshell: root-terminal
|
||||
root-terminal:
|
||||
$(DOCKER_COMPOSE) exec -u root photoprism bash
|
||||
docker-compose exec photoprism bash
|
||||
migrate:
|
||||
go run cmd/photoprism/photoprism.go migrations run
|
||||
generate:
|
||||
POT_SIZE_BEFORE=$(shell stat -L -c %s assets/locales/messages.pot)
|
||||
go generate ./pkg/... ./internal/...
|
||||
go fmt ./pkg/... ./internal/...
|
||||
POT_SIZE_AFTER=$(shell stat -L -c %s assets/locales/messages.pot)
|
||||
@if [ $(POT_SIZE_BEFORE) == $(POT_SIZE_AFTER) ]; then\
|
||||
git checkout -- assets/locales/messages.pot;\
|
||||
echo "Reverted unnecessary change in assets/locales/messages.pot.";\
|
||||
fi
|
||||
go-generate:
|
||||
go generate ./pkg/... ./internal/...
|
||||
go fmt ./pkg/... ./internal/...
|
||||
clean-local-assets:
|
||||
rm -rf $(BUILD_PATH)/assets/*
|
||||
clean-local-cache:
|
||||
rm -rf $(BUILD_PATH)/storage/cache/*
|
||||
clean-local-config:
|
||||
rm -f $(BUILD_PATH)/config/*
|
||||
dep-list:
|
||||
go list -u -m -json all | go-mod-outdated -direct
|
||||
dep-npm:
|
||||
sudo npm install -g npm
|
||||
go run cmd/photoprism/photoprism.go migrate
|
||||
install-bin:
|
||||
scripts/build.sh prod ~/.local/bin/$(BINARY_NAME)
|
||||
install-assets:
|
||||
$(info Installing assets in ~/photoprism)
|
||||
mkdir -p ~/.config/photoprism
|
||||
mkdir -p ~/.cache/photoprism
|
||||
mkdir -p ~/Pictures/Originals
|
||||
mkdir -p ~/Pictures/Import
|
||||
mkdir -p ~/Pictures/Export
|
||||
mkdir -p ~/.local/share/photoprism/resources/database
|
||||
cp -r assets/resources/static assets/resources/templates assets/resources/nasnet ~/.local/share/photoprism/resources
|
||||
rsync -a -v --ignore-existing assets/config/*.yml ~/.config/photoprism
|
||||
find ~/.local/share/photoprism -name '.*' -type f -delete
|
||||
dep-js:
|
||||
(cd frontend && npm ci --no-update-notifier --no-audit)
|
||||
(cd frontend && npm install)
|
||||
dep-go:
|
||||
go build -v ./...
|
||||
dep-upgrade:
|
||||
go get -u -t ./...
|
||||
dep-upgrade-js:
|
||||
(cd frontend && npm --depth 3 update --legacy-peer-deps)
|
||||
dep-tensorflow:
|
||||
scripts/download-facenet.sh
|
||||
scripts/download-nasnet.sh
|
||||
scripts/download-nsfw.sh
|
||||
dep-acceptance: storage/acceptance
|
||||
storage/acceptance:
|
||||
[ -f "./storage/acceptance/index.db" ] || (cd storage && rm -rf acceptance && wget -c https://dl.photoprism.app/qa/acceptance.tar.gz -O - | tar -xz)
|
||||
zip-facenet:
|
||||
(cd assets && zip -r facenet.zip facenet -x "*/.*" -x "*/version.txt")
|
||||
zip-nasnet:
|
||||
(cd assets && zip -r nasnet.zip nasnet -x "*/.*" -x "*/version.txt")
|
||||
zip-nsfw:
|
||||
(cd assets && zip -r nsfw.zip nsfw -x "*/.*" -x "*/version.txt")
|
||||
(cd assets/resources && zip -r nasnet.zip nasnet -x "*/.*" -x "*/version.txt")
|
||||
build-js:
|
||||
(cd frontend && env NODE_ENV=production npm run build)
|
||||
build-go: build-debug
|
||||
build-debug:
|
||||
build-go:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh debug $(BINARY_NAME)
|
||||
build-prod:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh prod $(BINARY_NAME)
|
||||
build-race:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh race $(BINARY_NAME)
|
||||
build-static:
|
||||
rm -f $(BINARY_NAME)
|
||||
scripts/build.sh static $(BINARY_NAME)
|
||||
build-tensorflow:
|
||||
docker build -t photoprism/tensorflow:build docker/tensorflow
|
||||
docker run -ti photoprism/tensorflow:build bash
|
||||
build-tensorflow-arm64:
|
||||
docker build -t photoprism/tensorflow:arm64 docker/tensorflow/arm64
|
||||
docker run -ti photoprism/tensorflow:arm64 bash
|
||||
watch-js:
|
||||
(cd frontend && env NODE_ENV=development npm run watch)
|
||||
test-js:
|
||||
$(info Running JS unit tests...)
|
||||
(cd frontend && env TZ=UTC NODE_ENV=development BABEL_ENV=test npm run test)
|
||||
acceptance:
|
||||
$(info Running public-mode tests in 'chromium:headless'...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=public --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-short:
|
||||
(cd frontend && env NODE_ENV=development BABEL_ENV=test npm run test)
|
||||
test-chromium:
|
||||
$(info Running JS acceptance tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=public,type=short --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-firefox:
|
||||
(cd frontend && npm run test-chromium)
|
||||
test-firefox:
|
||||
$(info Running JS acceptance tests in Firefox...)
|
||||
(cd frontend && npm run testcafe -- firefox:headless --test-grep "^(Common|Core)\:*" --test-meta mode=public --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-auth:
|
||||
$(info Running JS acceptance-auth tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=auth --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-auth-short:
|
||||
$(info Running JS acceptance-auth tests in Chrome...)
|
||||
(cd frontend && npm run testcafe -- chrome:headless --test-grep "^(Common|Core)\:*" --test-meta mode=auth,type=short --config-file ./testcaferc.json "tests/acceptance")
|
||||
acceptance-auth-firefox:
|
||||
$(info Running JS acceptance-auth tests in Firefox...)
|
||||
(cd frontend && npm run testcafe -- firefox:headless --test-grep "^(Common|Core)\:*" --test-meta mode=auth --config-file ./testcaferc.json "tests/acceptance")
|
||||
reset-mariadb:
|
||||
$(info Resetting photoprism database...)
|
||||
mysql < scripts/sql/reset-photoprism.sql
|
||||
reset-mariadb-testdb:
|
||||
$(info Resetting testdb database...)
|
||||
mysql < scripts/sql/reset-testdb.sql
|
||||
reset-mariadb-local:
|
||||
$(info Resetting local database...)
|
||||
mysql < scripts/sql/reset-local.sql
|
||||
reset-mariadb-acceptance:
|
||||
$(info Resetting acceptance database...)
|
||||
mysql < scripts/sql/reset-acceptance.sql
|
||||
reset-mariadb-all: reset-mariadb-testdb reset-mariadb-local reset-mariadb-acceptance reset-mariadb-photoprism
|
||||
reset-testdb: reset-sqlite reset-mariadb-testdb
|
||||
reset-acceptance: reset-mariadb-acceptance
|
||||
reset-sqlite:
|
||||
$(info Removing test database files...)
|
||||
find ./internal -type f -name ".test.*" -delete
|
||||
run-test-short:
|
||||
$(info Running short Go tests in parallel mode...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -short -timeout 5m ./pkg/... ./internal/...
|
||||
run-test-go:
|
||||
$(info Running all Go tests...)
|
||||
$(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m ./pkg/... ./internal/...
|
||||
run-test-mariadb:
|
||||
$(info Running all Go tests on MariaDB...)
|
||||
PHOTOPRISM_TEST_DRIVER="mysql" PHOTOPRISM_TEST_DSN="root:photoprism@tcp(mariadb:4001)/acceptance?charset=utf8mb4,utf8&collation=utf8mb4_unicode_ci&parseTime=true" $(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m ./pkg/... ./internal/...
|
||||
run-test-pkg:
|
||||
$(info Running all Go tests in "/pkg"...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./pkg/...
|
||||
run-test-api:
|
||||
$(info Running all API tests...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./internal/api/...
|
||||
run-test-commands:
|
||||
$(info Running all CLI command tests...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./internal/commands/...
|
||||
run-test-photoprism:
|
||||
$(info Running all Go tests in "/internal/photoprism"...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./internal/photoprism/...
|
||||
test-parallel:
|
||||
$(info Running all Go tests in parallel mode...)
|
||||
$(GOTEST) -parallel 2 -count 1 -cpu 2 -tags slow -timeout 20m ./pkg/... ./internal/...
|
||||
(cd frontend && npm run test-firefox)
|
||||
test-go:
|
||||
$(info Running all Go unit tests...)
|
||||
$(GOTEST) -count=1 -tags=slow -timeout 20m ./internal/...
|
||||
test-verbose:
|
||||
$(info Running all Go tests in verbose mode...)
|
||||
$(GOTEST) -parallel 1 -count 1 -cpu 1 -tags slow -timeout 20m -v ./pkg/... ./internal/...
|
||||
$(info Running all Go unit tests in verbose mode...)
|
||||
$(GOTEST) -tags=slow -timeout 20m -v ./internal/...
|
||||
test-short:
|
||||
$(info Running short Go unit tests in verbose mode...)
|
||||
$(GOTEST) -short -timeout 5m -v ./internal/...
|
||||
test-race:
|
||||
$(info Running all Go tests with race detection in verbose mode...)
|
||||
$(GOTEST) -tags slow -race -timeout 60m -v ./pkg/... ./internal/...
|
||||
$(info Running all Go unit tests with race detection in verbose mode...)
|
||||
$(GOTEST) -tags=slow -race -timeout 60m -v ./internal/...
|
||||
test-codecov:
|
||||
$(info Running all Go unit tests with code coverage report for codecov...)
|
||||
go test -count=1 -tags=slow -timeout 30m -coverprofile=coverage.txt -covermode=atomic -v ./internal/...
|
||||
scripts/codecov.sh
|
||||
test-coverage:
|
||||
$(info Running all Go tests with code coverage report...)
|
||||
go test -parallel 1 -count 1 -cpu 1 -failfast -tags slow -timeout 30m -coverprofile coverage.txt -covermode atomic ./pkg/... ./internal/...
|
||||
$(info Running all Go unit tests with code coverage report...)
|
||||
go test -count=1 -tags=slow -timeout 30m -coverprofile=coverage.txt -covermode=atomic -v ./internal/...
|
||||
go tool cover -html=coverage.txt -o coverage.html
|
||||
go tool cover -func coverage.txt | grep total:
|
||||
docker-pull:
|
||||
$(DOCKER_COMPOSE) pull --ignore-pull-failures
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml pull --ignore-pull-failures
|
||||
docker-build:
|
||||
$(DOCKER_COMPOSE) pull --ignore-pull-failures
|
||||
$(DOCKER_COMPOSE) build
|
||||
docker-local-up:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml up --force-recreate
|
||||
docker-local-down:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml down -V
|
||||
develop: docker-develop
|
||||
docker-develop: docker-develop-latest
|
||||
docker-develop-all: docker-develop-latest docker-develop-other
|
||||
docker-develop-latest: docker-develop-ubuntu
|
||||
docker-develop-debian: docker-develop-bookworm docker-develop-bookworm-slim
|
||||
docker-develop-ubuntu: docker-develop-mantic docker-develop-mantic-slim
|
||||
docker-develop-other: docker-develop-debian docker-develop-bullseye docker-develop-bullseye-slim docker-develop-buster
|
||||
docker-develop-bookworm:
|
||||
docker pull --platform=amd64 debian:bookworm-slim
|
||||
docker pull --platform=arm64 debian:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bookworm /bookworm "-t photoprism/develop:debian"
|
||||
docker-develop-bookworm-slim:
|
||||
docker pull --platform=amd64 debian:bookworm-slim
|
||||
docker pull --platform=arm64 debian:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bookworm-slim /bookworm-slim
|
||||
docker-develop-bullseye:
|
||||
docker pull --platform=amd64 golang:1-bullseye
|
||||
docker pull --platform=arm64 golang:1-bullseye
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bullseye /bullseye
|
||||
docker-develop-bullseye-slim:
|
||||
docker pull --platform=amd64 debian:bullseye-slim
|
||||
docker pull --platform=arm64 debian:bullseye-slim
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 bullseye-slim /bullseye-slim
|
||||
develop-armv7: docker-develop-armv7
|
||||
docker-develop-armv7:
|
||||
docker pull --platform=arm ubuntu:mantic
|
||||
scripts/docker/buildx.sh develop linux/arm armv7 /armv7
|
||||
docker-develop-buster:
|
||||
docker pull --platform=amd64 golang:1-buster
|
||||
docker pull --platform=arm64 golang:1-buster
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 buster /buster
|
||||
docker-develop-impish:
|
||||
docker pull --platform=amd64 ubuntu:impish
|
||||
docker pull --platform=arm64 ubuntu:impish
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 impish /impish
|
||||
docker-develop-jammy:
|
||||
docker pull --platform=amd64 ubuntu:jammy
|
||||
docker pull --platform=arm64 ubuntu:jammy
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 jammy /jammy
|
||||
docker-develop-jammy-slim:
|
||||
docker pull --platform=amd64 ubuntu:jammy
|
||||
docker pull --platform=arm64 ubuntu:jammy
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 jammy-slim /jammy-slim
|
||||
docker-develop-lunar:
|
||||
docker pull --platform=amd64 ubuntu:lunar
|
||||
docker pull --platform=arm64 ubuntu:lunar
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 lunar /lunar
|
||||
docker-develop-lunar-slim:
|
||||
docker pull --platform=amd64 ubuntu:lunar
|
||||
docker pull --platform=arm64 ubuntu:lunar
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 lunar-slim /lunar-slim
|
||||
docker-develop-mantic:
|
||||
docker pull --platform=amd64 ubuntu:mantic
|
||||
docker pull --platform=arm64 ubuntu:mantic
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 mantic /mantic "-t photoprism/develop:latest -t photoprism/develop:ubuntu"
|
||||
docker-develop-mantic-slim:
|
||||
docker pull --platform=amd64 ubuntu:mantic
|
||||
docker pull --platform=arm64 ubuntu:mantic
|
||||
scripts/docker/buildx-multi.sh develop linux/amd64,linux/arm64 mantic-slim /mantic-slim
|
||||
unstable: docker-unstable
|
||||
docker-unstable: docker-unstable-mantic
|
||||
docker-unstable-jammy:
|
||||
docker pull --platform=amd64 photoprism/develop:jammy
|
||||
docker pull --platform=amd64 photoprism/develop:jammy-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64 unstable-ce /jammy
|
||||
docker-unstable-lunar:
|
||||
docker pull --platform=amd64 photoprism/develop:lunar
|
||||
docker pull --platform=amd64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64 unstable-ce /lunar
|
||||
docker-unstable-mantic:
|
||||
docker pull --platform=amd64 photoprism/develop:mantic
|
||||
docker pull --platform=amd64 photoprism/develop:mantic-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64 unstable-ce /mantic
|
||||
preview: docker-preview-ce
|
||||
docker-preview: docker-preview-ce
|
||||
docker-preview-all: docker-preview-latest docker-preview-other
|
||||
docker-preview-ce: docker-preview-mantic
|
||||
docker-preview-latest: docker-preview-ubuntu
|
||||
docker-preview-debian: docker-preview-bookworm
|
||||
docker-preview-ubuntu: docker-preview-mantic
|
||||
docker-preview-other: docker-preview-debian docker-preview-bullseye
|
||||
docker-preview-arm: docker-preview-arm64 docker-preview-armv7
|
||||
docker-preview-bookworm:
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-bookworm /bookworm "-t photoprism/photoprism:preview-ce-debian"
|
||||
docker-preview-armv7:
|
||||
docker pull --platform=arm photoprism/develop:armv7
|
||||
docker pull --platform=arm ubuntu:mantic
|
||||
scripts/docker/buildx.sh photoprism linux/arm preview-armv7 /armv7
|
||||
docker-preview-arm64:
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx.sh photoprism linux/arm64 preview-arm64 /lunar
|
||||
docker-preview-bullseye:
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-bullseye /bullseye
|
||||
docker-preview-buster:
|
||||
docker pull --platform=amd64 photoprism/develop:buster
|
||||
docker pull --platform=arm64 photoprism/develop:buster
|
||||
docker pull --platform=amd64 debian:buster-slim
|
||||
docker pull --platform=arm64 debian:buster-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-buster /buster
|
||||
docker-preview-impish:
|
||||
docker pull --platform=amd64 photoprism/develop:impish
|
||||
docker pull --platform=arm64 photoprism/develop:impish
|
||||
docker pull --platform=amd64 ubuntu:impish
|
||||
docker pull --platform=arm64 ubuntu:impish
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-impish /impish
|
||||
docker-preview-jammy:
|
||||
docker pull --platform=amd64 photoprism/develop:jammy
|
||||
docker pull --platform=amd64 photoprism/develop:jammy-slim
|
||||
docker pull --platform=arm64 photoprism/develop:jammy
|
||||
docker pull --platform=arm64 photoprism/develop:jammy-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /jammy
|
||||
docker-preview-lunar:
|
||||
docker pull --platform=amd64 photoprism/develop:lunar
|
||||
docker pull --platform=amd64 photoprism/develop:lunar-slim
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /lunar
|
||||
docker-preview-mantic:
|
||||
docker pull --platform=amd64 photoprism/develop:mantic
|
||||
docker pull --platform=amd64 photoprism/develop:mantic-slim
|
||||
docker pull --platform=arm64 photoprism/develop:mantic
|
||||
docker pull --platform=arm64 photoprism/develop:mantic-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 preview-ce /mantic
|
||||
release: docker-release
|
||||
docker-release: docker-release-latest
|
||||
docker-release-all: docker-release-latest docker-release-other
|
||||
docker-release-latest: docker-release-ubuntu
|
||||
docker-release-debian: docker-release-bookworm
|
||||
docker-release-ubuntu: docker-release-mantic
|
||||
docker-release-other: docker-release-debian docker-release-bullseye
|
||||
docker-release-arm: docker-release-arm64 docker-release-armv7
|
||||
docker-release-bookworm:
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm
|
||||
docker pull --platform=amd64 photoprism/develop:bookworm-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm
|
||||
docker pull --platform=arm64 photoprism/develop:bookworm-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-bookworm /bookworm "-t photoprism/photoprism:ce-debian"
|
||||
docker-release-armv7:
|
||||
docker pull --platform=arm photoprism/develop:armv7
|
||||
docker pull --platform=arm ubuntu:mantic
|
||||
scripts/docker/buildx.sh photoprism linux/arm armv7 /armv7
|
||||
docker-release-arm64:
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx.sh photoprism linux/arm64 ce-arm64 /lunar
|
||||
docker-release-bullseye:
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye
|
||||
docker pull --platform=amd64 photoprism/develop:bullseye-slim
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye
|
||||
docker pull --platform=arm64 photoprism/develop:bullseye-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-bullseye /bullseye
|
||||
docker-release-buster:
|
||||
docker pull --platform=amd64 photoprism/develop:buster
|
||||
docker pull --platform=arm64 photoprism/develop:buster
|
||||
docker pull --platform=amd64 debian:buster-slim
|
||||
docker pull --platform=arm64 debian:buster-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-buster /buster
|
||||
docker-release-impish:
|
||||
docker pull --platform=amd64 photoprism/develop:impish
|
||||
docker pull --platform=arm64 photoprism/develop:impish
|
||||
docker pull --platform=amd64 ubuntu:impish
|
||||
docker pull --platform=arm64 ubuntu:impish
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-impish /impish
|
||||
docker-release-jammy:
|
||||
docker pull --platform=amd64 photoprism/develop:jammy
|
||||
docker pull --platform=amd64 photoprism/develop:jammy-slim
|
||||
docker pull --platform=arm64 photoprism/develop:jammy
|
||||
docker pull --platform=arm64 photoprism/develop:jammy-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce-jammy /jammy
|
||||
docker-release-lunar:
|
||||
docker pull --platform=amd64 photoprism/develop:lunar
|
||||
docker pull --platform=amd64 photoprism/develop:lunar-slim
|
||||
docker pull --platform=arm64 photoprism/develop:lunar
|
||||
docker pull --platform=arm64 photoprism/develop:lunar-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce /lunar
|
||||
docker-release-mantic:
|
||||
docker pull --platform=amd64 photoprism/develop:mantic
|
||||
docker pull --platform=amd64 photoprism/develop:mantic-slim
|
||||
docker pull --platform=arm64 photoprism/develop:mantic
|
||||
docker pull --platform=arm64 photoprism/develop:mantic-slim
|
||||
scripts/docker/buildx-multi.sh photoprism linux/amd64,linux/arm64 ce /mantic
|
||||
start-local:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml up -d --wait
|
||||
stop-local:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.local.yml stop
|
||||
mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml pull mysql
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml stop mysql
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml up -d --wait mysql
|
||||
start-mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml up -d --wait mysql
|
||||
stop-mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml stop mysql
|
||||
logs-mysql:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.mysql.yml logs -f mysql
|
||||
latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml pull photoprism-latest
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml stop photoprism-latest
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml up -d --wait photoprism-latest
|
||||
start-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml up photoprism-latest
|
||||
stop-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml stop photoprism-latest
|
||||
terminal-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml exec photoprism-latest bash
|
||||
logs-latest:
|
||||
$(DOCKER_COMPOSE) -f docker-compose.latest.yml logs -f photoprism-latest
|
||||
docker-local: docker-local-mantic
|
||||
docker-local-all: docker-local-mantic docker-local-lunar docker-local-jammy docker-local-bookworm docker-local-bullseye docker-local-buster
|
||||
docker-local-bookworm:
|
||||
docker pull photoprism/develop:bookworm
|
||||
docker pull photoprism/develop:bookworm-slim
|
||||
scripts/docker/build.sh photoprism ce-bookworm /bookworm "-t photoprism/photoprism:local"
|
||||
docker-local-bullseye:
|
||||
docker pull photoprism/develop:bullseye
|
||||
docker pull photoprism/develop:bullseye-slim
|
||||
scripts/docker/build.sh photoprism ce-bullseye /bullseye "-t photoprism/photoprism:local"
|
||||
docker-local-buster:
|
||||
docker pull photoprism/develop:buster
|
||||
docker pull debian:buster-slim
|
||||
scripts/docker/build.sh photoprism ce-buster /buster "-t photoprism/photoprism:local"
|
||||
docker-local-impish:
|
||||
docker pull photoprism/develop:impish
|
||||
docker pull ubuntu:impish
|
||||
scripts/docker/build.sh photoprism ce-impish /impish "-t photoprism/photoprism:local"
|
||||
docker-local-jammy:
|
||||
docker pull photoprism/develop:jammy
|
||||
docker pull ubuntu:jammy
|
||||
scripts/docker/build.sh photoprism ce-jammy /jammy "-t photoprism/photoprism:local"
|
||||
docker-local-lunar:
|
||||
docker pull photoprism/develop:lunar
|
||||
docker pull ubuntu:lunar
|
||||
scripts/docker/build.sh photoprism ce-lunar /lunar "-t photoprism/photoprism:local"
|
||||
docker-local-mantic:
|
||||
docker pull photoprism/develop:mantic
|
||||
docker pull ubuntu:mantic
|
||||
scripts/docker/build.sh photoprism ce-mantic /mantic "-t photoprism/photoprism:local"
|
||||
docker-local-develop: docker-local-develop-mantic
|
||||
docker-local-develop-all: docker-local-develop-mantic docker-local-develop-lunar docker-local-develop-jammy docker-local-develop-bookworm docker-local-develop-bullseye docker-local-develop-buster docker-local-develop-impish
|
||||
docker-local-develop-bookworm:
|
||||
docker pull debian:bookworm-slim
|
||||
scripts/docker/build.sh develop bookworm /bookworm
|
||||
docker-local-develop-bullseye:
|
||||
docker pull golang:1-bullseye
|
||||
scripts/docker/build.sh develop bullseye /bullseye
|
||||
docker-local-develop-buster:
|
||||
docker pull golang:1-buster
|
||||
scripts/docker/build.sh develop buster /buster
|
||||
docker-local-develop-impish:
|
||||
docker pull ubuntu:impish
|
||||
scripts/docker/build.sh develop impish /impish
|
||||
docker-local-develop-jammy:
|
||||
docker pull ubuntu:jammy
|
||||
scripts/docker/build.sh develop jammy /jammy
|
||||
docker-local-develop-lunar:
|
||||
docker pull ubuntu:lunar
|
||||
scripts/docker/build.sh develop lunar /lunar
|
||||
docker-local-develop-mantic:
|
||||
docker pull ubuntu:mantic
|
||||
scripts/docker/build.sh develop mantic /mantic
|
||||
docker-ddns:
|
||||
docker pull golang:alpine
|
||||
scripts/docker/buildx-multi.sh ddns linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
docker-goproxy:
|
||||
docker pull golang:alpine
|
||||
scripts/docker/buildx-multi.sh goproxy linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
demo: docker-demo
|
||||
docker-demo: docker-demo-latest
|
||||
docker-demo-all: docker-demo-latest docker-demo-debian
|
||||
docker-demo-latest:
|
||||
docker pull photoprism/photoprism:preview-ce
|
||||
scripts/docker/build.sh demo ce
|
||||
scripts/docker/push.sh demo ce
|
||||
docker-demo-debian:
|
||||
docker pull photoprism/photoprism:preview-ce-debian
|
||||
scripts/docker/build.sh demo debian /debian
|
||||
scripts/docker/push.sh demo debian
|
||||
docker-demo-ubuntu:
|
||||
docker pull photoprism/photoprism:preview-ce-ubuntu
|
||||
scripts/docker/build.sh demo ubuntu /ubuntu
|
||||
scripts/docker/push.sh demo ubuntu
|
||||
docker-demo-unstable:
|
||||
docker pull photoprism/photoprism:unstable-ce
|
||||
scripts/docker/build.sh demo $(BUILD_DATE) /unstable
|
||||
scripts/docker/push.sh demo $(BUILD_DATE)
|
||||
docker-demo-local:
|
||||
scripts/docker/build.sh photoprism
|
||||
scripts/docker/build.sh demo $(BUILD_DATE) /debian
|
||||
scripts/docker/push.sh demo $(BUILD_DATE)
|
||||
docker-dummy-webdav:
|
||||
docker pull --platform=amd64 golang:1
|
||||
docker pull --platform=arm64 golang:1
|
||||
scripts/docker/buildx-multi.sh dummy-webdav linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
docker-dummy-oidc:
|
||||
docker pull --platform=amd64 golang:1
|
||||
docker pull --platform=arm64 golang:1
|
||||
scripts/docker/buildx-multi.sh dummy-oidc linux/amd64,linux/arm64 $(BUILD_DATE)
|
||||
packer-digitalocean:
|
||||
$(info Buildinng DigitalOcean marketplace image...)
|
||||
(cd ./setup/docker/cloud && packer build digitalocean.json)
|
||||
drone-sign:
|
||||
drone sign photoprism/photoprism --save
|
||||
clean:
|
||||
rm -f $(BINARY_NAME)
|
||||
rm -f *.log
|
||||
rm -rf node_modules
|
||||
rm -rf assets/testdata
|
||||
rm -rf assets/backups
|
||||
rm -rf frontend/node_modules
|
||||
docker-development:
|
||||
scripts/docker-build.sh development $(DOCKER_TAG)
|
||||
scripts/docker-push.sh development $(DOCKER_TAG)
|
||||
docker-photoprism:
|
||||
scripts/docker-build.sh photoprism $(DOCKER_TAG)
|
||||
scripts/docker-push.sh photoprism $(DOCKER_TAG)
|
||||
docker-demo:
|
||||
scripts/docker-build.sh demo $(DOCKER_TAG)
|
||||
scripts/docker-push.sh demo $(DOCKER_TAG)
|
||||
docker-tensorflow:
|
||||
scripts/docker-build.sh tensorflow $(TF_VERSION)
|
||||
scripts/docker-push.sh tensorflow $(TF_VERSION)
|
||||
docker-darktable:
|
||||
scripts/docker-build.sh darktable $(DARKTABLE_VERSION)
|
||||
scripts/docker-push.sh darktable $(DARKTABLE_VERSION)
|
||||
docker-tidb:
|
||||
scripts/docker-build.sh tidb $(TIDB_VERSION)
|
||||
scripts/docker-push.sh tidb $(TIDB_VERSION)
|
||||
lint-js:
|
||||
(cd frontend && npm run lint)
|
||||
fmt-js:
|
||||
(cd frontend && npm run fmt)
|
||||
fmt-go:
|
||||
go fmt ./pkg/... ./internal/... ./cmd/...
|
||||
gofmt -w -s pkg internal cmd
|
||||
goimports -w pkg internal cmd
|
||||
goimports -w internal cmd
|
||||
go fmt ./internal/... ./cmd/...
|
||||
tidy:
|
||||
go mod tidy -go=1.16 && go mod tidy -go=1.17
|
||||
users:
|
||||
./photoprism users add -p photoprism -r admin -s -a test:true -n "Alice Austen" superadmin
|
||||
./photoprism users ls
|
||||
|
||||
# Declare all targets as "PHONY", see https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html.
|
||||
MAKEFLAGS += --always-make
|
||||
.PHONY: all assets build cmd docker frontend internal pkg scripts storage photoprism install;
|
||||
go mod tidy
|
||||
upgrade-js:
|
||||
(cd frontend && npm update --depth 1)
|
||||
upgrade-go:
|
||||
go mod tidy
|
||||
go get -u
|
||||
|
|
148
README.md
|
@ -1,110 +1,92 @@
|
|||
PhotoPrism: Browse Your Life in Pictures
|
||||
PhotoPrism: Browse your life in pictures
|
||||
========================================
|
||||
|
||||
[](https://docs.photoprism.app/license/agpl/)
|
||||
[](https://docs.photoprism.app/)
|
||||
[](https://link.photoprism.app/chat)
|
||||
[](https://link.photoprism.app/discussions)
|
||||
[](https://photoprism.bsky.social/)
|
||||
[](https://floss.social/@photoprism)
|
||||
[][license]
|
||||
[][goreport]
|
||||
[][ci]
|
||||
[][docs]
|
||||
[](https://github.com/photoprism/photoprism/graphs/contributors/)
|
||||
[][chat]
|
||||
[][twitter]
|
||||
|
||||
PhotoPrism® is an AI-Powered Photos App for the [Decentralized Web](https://en.wikipedia.org/wiki/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.
|
||||
PhotoPrism is a server-based application for browsing, organizing and sharing your personal photo collection.
|
||||
It makes use of the latest technologies to automatically tag and find pictures without getting in your way.
|
||||
Say goodbye to solutions that force you to upload your visual memories to the cloud or pay monthly fees.
|
||||
|
||||

|
||||

|
||||
|
||||
To get a first impression, you are welcome to play with our [public demo](https://try.photoprism.app/). Please be careful not to upload any private, unlawful or offensive pictures.
|
||||
More screenshots: https://photoprism.org/#screenshots
|
||||
|
||||
## Feature Overview ##
|
||||
## What to expect ##
|
||||
|
||||
**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:
|
||||
* Clearly structured Web interface for browsing, organizing and sharing your personal photo collection.
|
||||
* Import everything without worrying about duplicates or RAW to JPEG conversion.
|
||||
* Reverse geocoding and automated tagging based on Google TensorFlow.
|
||||
* No monthly costs. No proprietary formats. No privacy concerns.
|
||||
|
||||
* Browse [all your photos](https://docs.photoprism.app/user-guide/organize/browse/) and [videos](https://try.photoprism.app/library/videos) without worrying about [RAW conversion, duplicates or video formats](https://docs.photoprism.app/user-guide/settings/library/)
|
||||
* Easily find specific pictures using [powerful search filters](https://try.photoprism.app/library/browse?view=cards&q=flower%20color%3Ared)
|
||||
* Recognizes [the faces of your family and friends](https://try.photoprism.app/library/people)
|
||||
* [Automatic classification](https://try.photoprism.app/library/labels) of pictures based on their content and location
|
||||
* [Play Live Photos](https://try.photoprism.app/library/live) by hovering over them in [albums](https://try.photoprism.app/library/albums) and [search results](https://try.photoprism.app/library/browse?view=cards&q=type%3Alive)
|
||||
* Since the [User Interface](https://try.photoprism.app/) is a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps),
|
||||
it provides a native app-like experience, and you can conveniently install it on the home screen of all major operating systems and mobile devices
|
||||
* Includes four high-resolution [World Maps](https://try.photoprism.app/library/places) to bring back the memories of your favorite trips
|
||||
* Metadata is extracted and merged from Exif, XMP, and other sources such as Google Photos
|
||||
* Many more image properties like [Colors](https://try.photoprism.app/library/browse?view=cards&q=color:red), [Chroma](https://try.photoprism.app/library/browse?view=cards&q=mono%3Atrue), and [Quality](https://try.photoprism.app/library/review) can be searched as well
|
||||
* Use [PhotoSync](https://link.photoprism.app/photosync) to securely backup iOS and Android phones in the background
|
||||
* WebDAV clients such as Microsoft's Windows Explorer and Apple's Finder [can connect directly](https://docs.photoprism.app/user-guide/sync/webdav/) to PhotoPrism, allowing you to open, edit, and delete files from your computer as if they were local
|
||||
## For the early birds ##
|
||||
|
||||
Being completely [**self-funded and independent**](https://link.photoprism.app/membership), we can promise you that we will [never sell your data](https://www.photoprism.app/privacy) and that we will [always be transparent](https://www.photoprism.app/terms) 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. 🔒
|
||||
You're welcome to play with our demo at [demo.photoprism.org](https://demo.photoprism.org).
|
||||
Leave your email to get a [release notification](https://goo.gl/forms/KBPVGl9PCsOKrAv33).
|
||||
|
||||
## Getting Started ##
|
||||
<img align="right" width="25%" src="https://www.photoprism.app/user/pages/01.home/03._screenshots/iphone-maps-hybrid-540px.png">
|
||||
Step-by-step [installation instructions](https://docs.photoprism.org/en/latest/setup/) can be found
|
||||
in our [User Guide](https://docs.photoprism.org/en/latest/).
|
||||
Developers can skip this and move on to the [Developer Guide](https://github.com/photoprism/photoprism/wiki).
|
||||
|
||||
Step-by-step [installation instructions](https://docs.photoprism.app/getting-started/) for our self-hosted [community edition](https://link.photoprism.app/personal-editions) can be found on [docs.photoprism.app](https://docs.photoprism.app/getting-started/) - all you need is a Web browser and [Docker](https://docs.docker.com/get-docker/) to run the server. It is available for Mac, Linux, and Windows.
|
||||
All you need is a Web browser and [Docker](https://store.docker.com/search?type=edition&offering=community)
|
||||
to run the server. It is available for Mac, Linux and Windows.
|
||||
Note that we just [started working](https://github.com/photoprism/photoprism/wiki/Project-Status)
|
||||
on the UI and features are neither complete nor stable.
|
||||
We plan to ship the final app as a single binary including all dependencies.
|
||||
|
||||
The [stable releases](https://docs.photoprism.app/release-notes/) and [development preview](https://docs.photoprism.app/getting-started/updates/#development-preview) are available as a [multi-arch image](https://link.photoprism.app/docker-hub) for 64-bit AMD, Intel, and ARM processors.
|
||||
That means, [Raspberry Pi](https://docs.photoprism.app/getting-started/raspberry-pi/) and Apple Silicon users enjoy the exact same functionality and can follow the same [installation steps](https://docs.photoprism.app/getting-started/docker-compose/).
|
||||
If you have a question, don't hesitate to ask in our [help forum](https://groups.google.com/a/photoprism.org/forum/#!forum/help)
|
||||
or [contact us via email](mailto:hello@photoprism.org).
|
||||
|
||||
See our [Getting Started FAQ](https://docs.photoprism.app/getting-started/faq/#how-can-i-install-photoprism-without-docker) for alternative installation methods, for example using the [*tar.gz* packages](https://dl.photoprism.app/pkg/linux/README.html) we provide.
|
||||
## Why this has to be free software ##
|
||||
|
||||
## Support Our Mission 💎 ##
|
||||
The development of every commercial product is focused on monetization.
|
||||
We've [built similar apps more than once](https://github.com/photoprism/photoprism/wiki/Mediencenter) and every single time the constraints of working
|
||||
in a profit-oriented corporate environment were an impediment.
|
||||
|
||||
**PhotoPrism is 100% self-funded and independent.** Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent!
|
||||
We are sure we can do better with only a fraction of the budget. Simplicity - the art of maximizing the amount of work not done - can be very powerful.
|
||||
Go itself is a [great example](https://talks.golang.org/2015/simplicity-is-complicated.slide).
|
||||
|
||||
Our members [enjoy additional features](https://www.photoprism.app/kb/personal), including access to [interactive world maps](https://try.photoprism.app/library/places), and can join our private chat room to [connect with our team](https://www.photoprism.app/about/team). We currently have the following membership options:
|
||||
Our long-term goal is to become an open platform for machine learning [research](https://github.com/photoprism/photoprism/wiki/Research) based on real-world photo collections.
|
||||
|
||||
- You can [sign up directly on our website](https://link.photoprism.app/membership) and pay with credit card or SEPA through Stripe, so you don't need to [link an external account](https://www.photoprism.app/kb/activation) and can easily upgrade or downgrade at any time
|
||||
- Alternatively, [Patreon](https://link.photoprism.app/patreon) also supports PayPal, additional currencies, and lets you choose between monthly and annual billing for all tiers
|
||||
## How to contribute ##
|
||||
|
||||
If you currently support us through [GitHub Sponsors](https://link.photoprism.app/sponsor), you can also [register on our website](https://my.photoprism.app/register) and use the *Activate GitHub Sponsors Membership* button to link your account. For details on this and how to [link your Patreon account](https://www.patreon.com/pledges), see our [Activation Guide](https://www.photoprism.app/kb/activation).
|
||||
We welcome contributions of any kind. If you have a bug or an idea, read our
|
||||
[guide](https://docs.photoprism.org/en/latest/contribute/) before opening an issue.
|
||||
Issues labeled [help wanted](https://github.com/photoprism/photoprism/labels/help%20wanted) /
|
||||
[easy](https://github.com/photoprism/photoprism/issues?q=is%3Aissue+is%3Aopen+label%3Aeasy) can be
|
||||
good (first) contributions.
|
||||
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact) for change requests, membership questions, and business partnerships.
|
||||
You'll get a small reward for working on [funded issues](https://github.com/photoprism/photoprism/labels/funded), see [issuehunt.io](https://issuehunt.io/repos/119160553) for details. Note that issue descriptions may be outdated on their site. Rewards are paid out when all [acceptance criteria](https://github.com/photoprism/photoprism/wiki/Issues#user-stories) prioritized as MUST are met and your [pull request](https://github.com/photoprism/photoprism/wiki/Pull-Requests) was successfully merged.
|
||||
|
||||
[View Membership FAQ ›](https://www.photoprism.app/kb/membership) [Sign Up ›](https://link.photoprism.app/membership)
|
||||
Please join our [developers mailing list](https://groups.google.com/a/photoprism.org/forum/#!forum/developers)
|
||||
to receive regular project updates and discuss development related topics. Don't be afraid to ask stupid questions.
|
||||
|
||||
### Why Your Support Matters ###
|
||||
## Donations ##
|
||||
|
||||
- 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
|
||||
We don't want to ask individuals for a donation at the moment. Please leave a star if you like this project, it provides enough motivation to keep going. Thank you very much! <3
|
||||
|
||||
Please also leave [a star](https://github.com/photoprism/photoprism/stargazers) on GitHub if you like this project. It provides additional motivation to keep going.
|
||||
If you still want to donate, you can do so via [Liberapay][donations] and [PayPal][paypal]. It really means a lot to us as we haven't received any major financial support so far and are funding this project from our personal savings.
|
||||
|
||||
**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!**
|
||||
## Sponsorship ##
|
||||
|
||||
[View Sponsors ›](SPONSORS.md) [View Credits ›](https://docs.photoprism.app/credits/)
|
||||
Please [reach out to us](mailto:hello@photoprism.org) if you work for an organization that can [support our project](https://dl.photoprism.org/slides/PhotoPrism.pdf)
|
||||
as we are looking for a way to continue doing this full-time.
|
||||
We'll be happy to mention your contribution plus you'll get a direct line to [our team](https://docs.photoprism.org/en/latest/team/) of top-class engineers and scientists.
|
||||
|
||||
## Getting Support ##
|
||||
See [SPONSORS.md](SPONSORS.md) for details.
|
||||
|
||||
Visit [docs.photoprism.app/user-guide](https://docs.photoprism.app/user-guide/) to learn how to [sync](https://docs.photoprism.app/user-guide/sync/webdav/), [organize](https://docs.photoprism.app/user-guide/library/), and [share](https://docs.photoprism.app/user-guide/share/) your pictures. If you need help installing our software at home, you are welcome to post your question in [GitHub Discussions](https://link.photoprism.app/discussions) or ask in our [Community Chat](https://link.photoprism.app/chat).
|
||||
Common problems can be quickly diagnosed and solved using our [Troubleshooting Checklists](https://docs.photoprism.app/getting-started/troubleshooting/). Eligible [members](https://link.photoprism.app/membership) are also welcome to email us for technical support and advice.
|
||||
|
||||
## Upcoming Features and Enhancements ##
|
||||
|
||||
Our [Project Roadmap](https://link.photoprism.app/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](https://link.photoprism.app/sponsor) or purchasing a [commercial license](https://www.photoprism.app/teams). 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](https://docs.photoprism.app/getting-started/troubleshooting/browsers/), operating system, [storage type](https://docs.photoprism.app/getting-started/troubleshooting/performance/#storage), [memory size](https://docs.photoprism.app/getting-started/troubleshooting/performance/#memory), and [processor](https://docs.photoprism.app/getting-started/troubleshooting/performance/#server-cpu)
|
||||
- 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](https://www.photoprism.app/contact) or [a community member](https://link.photoprism.app/discussions) 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](https://docs.photoprism.app/getting-started/troubleshooting/) 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](https://link.photoprism.app/twitter) and join the [Community Chat](https://link.photoprism.app/chat)
|
||||
to get regular updates, connect with other users, and discuss your ideas. Our [Code of Conduct](https://www.photoprism.app/code-of-conduct) explains the "dos and don’ts" when interacting with other community members.
|
||||
|
||||
Feel free to contact us at [hello@photoprism.app](mailto:hello@photoprism.app) 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](CONTRIBUTING.md) of any kind, including blog posts, tutorials, translations, testing, writing documentation, and pull requests. Our [Developer Guide](https://docs.photoprism.app/developer-guide/) contains all the information necessary for you to get started.
|
||||
|
||||
----
|
||||
|
||||
*PhotoPrism® is a [registered trademark](https://www.photoprism.app/trademark). By using the software and services we provide, you agree to our [Terms of Service](https://www.photoprism.app/terms), [Privacy Policy](https://www.photoprism.app/privacy), and [Code of Conduct](https://www.photoprism.app/code-of-conduct). Docs are [available](https://link.photoprism.app/github-docs) under the [CC BY-NC-SA 4.0 License](https://creativecommons.org/licenses/by-nc-sa/4.0/); [additional terms](https://github.com/photoprism/photoprism/blob/develop/assets/README.md) may apply.*
|
||||
[license]: https://github.com/photoprism/photoprism/blob/develop/LICENSE
|
||||
[donations]: https://en.liberapay.com/photoprism
|
||||
[paypal]: https://www.paypal.me/photoprism
|
||||
[goreport]: https://goreportcard.com/report/github.com/photoprism/photoprism
|
||||
[coverage]: https://codecov.io/gh/photoprism/photoprism
|
||||
[ci]: https://travis-ci.org/photoprism/photoprism
|
||||
[docs]: https://docs.photoprism.org/en/latest/
|
||||
[issuehunt]: https://issuehunt.io/repos/119160553
|
||||
[chat]: https://gitter.im/browseyourlife/community
|
||||
[twitter]: https://twitter.com/browseyourlife
|
||||
|
|
32
SECURITY.md
|
@ -1,32 +0,0 @@
|
|||
# PhotoPrism® Security Policy
|
||||
|
||||
**Please contact us at [security@photoprism.app](mailto:security@photoprism.app) when you have discovered a potential security issue.** You are welcome to also report vulnerabilities in third-party applications that we may not be able to fix directly.
|
||||
|
||||
At a minimum, your report should include the following:
|
||||
|
||||
- version and architecture
|
||||
- vulnerability description
|
||||
- reproduction steps
|
||||
|
||||
We will then try to reproduce the problem, determine the impact and get back to you as soon as possible.
|
||||
Confirmed vulnerabilities will be fixed within 90 days, depending on the severity and whether third-party
|
||||
packages are affected.
|
||||
|
||||
## Responsible Disclosure
|
||||
|
||||
1. Confirm that the vulnerability applies to a current version and is reproducible.
|
||||
2. First share the vulnerability details with us so that users are not put at risk.
|
||||
3. Wait before publishing details until everyone has had a chance to update.
|
||||
4. Respect the privacy of others.
|
||||
|
||||
*Avoid activities that disrupt, degrade, or interrupt our services or compromise other users' data, such as spam, brute force attacks, denial of service attacks, and malicious file distribution.*
|
||||
|
||||
## Reporting Issues as a Business or Organization
|
||||
|
||||
(a) If an email we receive appears to be auto-generated and does not look like a legitimate report that has been manually reviewed in accordance with the requirements of this policy, we may ignore it and you should not expect a response in order to protect our ability to respond to actual issues.
|
||||
|
||||
(b) Unless absolutely necessary, for example to report a major issue that has just been discovered, please send requests or reports during regular business hours and never at night or on weekends, especially if they are sent asynchronously.
|
||||
|
||||
(c) Refrain from sending HTML emails as we consider them insecure and unsuitable for this purpose.
|
||||
|
||||
(d) If you are contacting us as a business or organization, we encourage you to include legal and contact information on your website, as failure to provide legally required information may compromise your eligibility and trustworthiness.
|
103
SPONSORS.md
|
@ -1,97 +1,20 @@
|
|||
# Thank You to All Current and Past Sponsors 💎 #
|
||||
Let's join forces
|
||||
=================
|
||||
|
||||
Your [continued support](https://link.photoprism.app/membership) helps us [provide more features to the public](https://www.photoprism.app/oss/faq#what-functionality-is-generally-available), release [regular updates](https://docs.photoprism.app/release-notes/), and remain independent! 💜
|
||||
PhotoPrism is a non-profit project run entirely by volunteers. We need your funds to pay for
|
||||
[organizing meetups](https://github.com/photoprism/photoprism/wiki/Meetups),
|
||||
[running our servers](https://github.com/photoprism/photoprism/wiki/Infrastructure),
|
||||
visiting conferences, buying test devices, offering rewards for contributions, and covering our cost of living.
|
||||
|
||||
You are [welcome to contact us](https://www.photoprism.app/contact) for change requests, membership questions, and business partnerships.
|
||||
You can [become a sponsor on Patreon](https://www.patreon.com/photoprism) or [Liberapay](https://en.liberapay.com/photoprism), [fund issues](https://issuehunt.io/repos/119160553), [donate via PayPal](https://www.paypal.me/photoprism) or [get in touch with us](mailto:hello@photoprism.org) to discuss further details.
|
||||
Thank you very much! 💎
|
||||
|
||||
[View Membership FAQ ›](https://www.photoprism.app/kb/membership) [Contact Us ›](https://www.photoprism.app/contact)
|
||||
## Sponsors ##
|
||||
|
||||
## Platinum Sponsors ##
|
||||
[](https://blog.liquidbytes.net/)
|
||||
|
||||
[**Sid Karunaratne**](https://github.com/sakaru) (Patreon, May 2019)
|
||||
[Sid Karunaratne](https://github.com/sakaru)
|
||||
|
||||
**Andrew** (Patreon, October 2021)
|
||||
## Donations ##
|
||||
|
||||
[**@ppibburr**](https://github.com/ppibburr) (GitHub Sponsors, December 2021)
|
||||
|
||||
[**Arto Bendiken**](https://github.com/artob) (GitHub Sponsors, March 2023)
|
||||
|
||||
**Marko Eckert** (Patreon, May 2023)
|
||||
|
||||
**Vitold Romanovski** (May 2023)
|
||||
|
||||
**Aaron C. de Bruyn** (September 2023)
|
||||
|
||||
[**Patrick Kvaksrud**](https://github.com/Kvaksrud) (October 2023)
|
||||
|
||||
## Gold Sponsors ##
|
||||
|
||||
[**Simen Eriksen**](https://github.com/dennorske) (GitHub Sponsors, December 2019)
|
||||
|
||||
[**Alex Leahu**](https://github.com/alxjsn) (GitHub Sponsors, January 2020)
|
||||
|
||||
[**Thomas Eg**](https://github.com/ThomasEg) (GitHub Sponsors, April 2020)
|
||||
|
||||
[**@mpodshivalin**](https://github.com/mpodshivalin) (GitHub Sponsors, July 2020)
|
||||
|
||||
[**@kvtong93**](https://github.com/kvtong93) (GitHub Sponsors, September 2020)
|
||||
|
||||
[**Thomas Eizinger**](https://github.com/thomaseizinger) (GitHub Sponsors, October 2020)
|
||||
|
||||
[**@FreshMosh**](https://github.com/FreshMosh) (GitHub Sponsors, November 2020)
|
||||
|
||||
**Cooper** (Patreon, November 2020)
|
||||
|
||||
[**Asim Aslam**](https://github.com/asim) (GitHub Sponsors, November 2020)
|
||||
|
||||
**Garn Penrod** (Patreon, November 2020)
|
||||
|
||||
[**@anaxmedia**](https://github.com/anaxmedia) (GitHub Sponsors, November 2020)
|
||||
|
||||
[**Kevin Anderson**](https://github.com/kevinanderson1) (GitHub Sponsors, November 2020)
|
||||
|
||||
[**@reyman**](https://github.com/reyman) (GitHub Sponsors, January 2021)
|
||||
|
||||
[**Ben McCann**](https://github.com/benmccann) (GitHub Sponsors, January 2021)
|
||||
|
||||
[**Steven Chan**](https://github.com/nioq) (GitHub Sponsors, April 2021)
|
||||
|
||||
[**Joseph Jacks**](https://github.com/josephjacks) (GitHub Sponsors, June 2021)
|
||||
|
||||
[**Daniel Hähnke**](https://github.com/DanBenHa) (GitHub Sponsors, July 2021)
|
||||
|
||||
[**@jasontitus**](https://github.com/jasontitus) (GitHub Sponsors, October 2021)
|
||||
|
||||
[**Łukasz Anwajler**](https://github.com/anwajler) (GitHub Sponsors, November 2021)
|
||||
|
||||
[**Gyto6**](https://github.com/gyto6) (GitHub Sponsors, May 2022)
|
||||
|
||||
**Sandro Petruzzi** (Patreon, May 2022)
|
||||
|
||||
[**Toly Rugalev**](https://github.com/AnatolyRugalev) (GitHub Sponsors, March 2023)
|
||||
|
||||
[**Yongho Lee**](https://github.com/lyh16) (Patreon, May 2023)
|
||||
|
||||
**Albert R** (Patreon, August 2023)
|
||||
|
||||
**Peter Galbavy** (Patreon, November 2023)
|
||||
|
||||
## Infrastructure Sponsors ##
|
||||
|
||||
Our project infrastructure is provided by the following companies:
|
||||
|
||||
- [**GitHub**](https://github.com/) hosts our [code repositories](https://github.com/photoprism/photoprism) and also provides many other important services
|
||||
- [**Docker**](https://www.docker.com/) approved us for their [Open Source Program](https://www.docker.com/community/open-source/application/) and hosts all of our app images
|
||||
- [**Element**](https://element.io/) develops and [operates the infrastructure](https://matrix.org/) that our [community chat](https://link.photoprism.app/chat) is based on
|
||||
- [**BrowserStack**](https://www.browserstack.com/) provides [free access](https://www.browserstack.com/open-source) to their device and browser testing infrastructure
|
||||
|
||||
[View Credits ›](https://docs.photoprism.app/credits/)
|
||||
|
||||
## One-Time Donations ##
|
||||
|
||||
[WarpinWolf](https://github.com/WarpinWolf), [David Pennington](https://github.com/Xeoncross), Jun Li, Jonas Aaberg, Dmitry, Fabian Graf, Klemens
|
||||
Guder, [Greg](https://github.com/oziee), Jean-Louis Frenkel, [INIT_6](https://twitter.com/init_3), Sandro Rüegge,
|
||||
William Kray, Ovace Mamnoon, Clément Caplain Moreau, The Gordon Project, [@pluja](https://github.com/pluja),
|
||||
[@swingstate](https://github.com/photoprism/photoprism/issues/808#issuecomment-997467377), [Sola](https://github.com/solacrypto)
|
||||
|
||||
[Make Donation ›](https://link.photoprism.app/donate)
|
||||
[David Pennington](https://github.com/Xeoncross), Jun Li, Jonas Aaberg, Dmitry
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
examples
|
||||
README.md
|
||||
.*
|
149
assets/README
|
@ -1,149 +0,0 @@
|
|||
|
||||
PhotoPrism® Documentation and Digital Assets
|
||||
|
||||
This Agreement is between you and PhotoPrism UG ("PhotoPrism", "we" or "us").
|
||||
Visit photoprism.app/contact to view our full contact information as required
|
||||
by law.
|
||||
|
||||
We may update this Agreement as necessary (1) for legal reasons or (2) to
|
||||
improve readability and make clarifications that our users request.
|
||||
|
||||
By using the Documentation and Digital Assets we provide, you agree to the
|
||||
terms of this Agreement.
|
||||
|
||||
Last Updated: April 5, 2023
|
||||
|
||||
DEFINITIONS
|
||||
|
||||
"Software" means any software published and distributed by PhotoPrism, either
|
||||
self-hosted, installed on a device, managed, or as a service.
|
||||
|
||||
"Open Source Software" is any software component or software application,
|
||||
including third-party software, distributed under a Public License.
|
||||
|
||||
"Services" means any backend services, world maps, hosted documentation, remote
|
||||
access, cloud storage, software as a service, support forums, member benefits
|
||||
and/or other services offered by PhotoPrism that are based on or complementary
|
||||
to the Software.
|
||||
|
||||
"Documentation" means all instructions, diagrams, screenshots, manuals, guides,
|
||||
references and/or other written documents related to the Software and the
|
||||
Services.
|
||||
|
||||
"Digital Assets" means icons, fonts, illustrations, graphics, background
|
||||
images, videos, sounds, models, and sample files related to or accompanying the
|
||||
Software and/or Documentation, such as those provided on GitHub, distributed at
|
||||
dl.photoprism.app, or used on docs.photoprism.app.
|
||||
|
||||
"Brand Assets" means trademarks, logos, icons, fonts, corporate designs,
|
||||
product and service names, and any other brand features and elements, whether
|
||||
registered or unregistered.
|
||||
|
||||
"Customer" means an individual, company or partnership that has entered into a
|
||||
written agreement with PhotoPrism to license Software.
|
||||
|
||||
"Affiliate(s)" means any entity that controls, is controlled by, or is under
|
||||
common control with a party, where "control" means the ability to direct the
|
||||
management and policies of an entity.
|
||||
|
||||
"Intellectual Property Rights" means all intellectual property rights,
|
||||
including but not limited to patents, copyrights, trademarks, goodwill, moral
|
||||
rights, trade secrets and all other intellectual and industrial property rights
|
||||
and proprietary rights, including registrations, applications, renewals and
|
||||
extensions of such rights worldwide.
|
||||
|
||||
"License Agreement" means the agreement between PhotoPrism (or a PhotoPrism
|
||||
Affiliate or an authorized reseller of the Software) and Customer under which
|
||||
Customer has acquired or will acquire license rights to use the Software.
|
||||
|
||||
"Public License" means any license that conforms to the Open Source Definition
|
||||
(as promulgated by the Open Source Initiative) or the Free Software Definition
|
||||
(as promulgated by the Free Software Foundation) or a substantially similar
|
||||
license, including any license approved by the Open Source Initiative or a
|
||||
Creative Commons license. "Open Source Licenses" include copyleft licenses.
|
||||
|
||||
TERMS OF USE
|
||||
|
||||
(a) Our public Documentation is available under the terms of the CC BY-NC-SA
|
||||
4.0 License. Other terms may apply to Digital Assets — in particular
|
||||
illustrations, graphics, and videos — embedded in the documentation if they
|
||||
are licensed to us solely for direct distribution. When in doubt, please ask
|
||||
before distributing or using them for other works.
|
||||
|
||||
(b) We hereby grant you a non-exclusive, royalty-free, worldwide,
|
||||
non-sublicensable, non-transferable right to use the Digital Assets in
|
||||
combination with the Software and Services, unless otherwise noted.
|
||||
|
||||
(c) Because some Digital Assets are licensed to us solely for direct
|
||||
distribution, we cannot redistribute them under a more permissive license for
|
||||
other purposes. If the author or copyright holder has not released them under a
|
||||
permissive license, you must obtain a license before using them in your own
|
||||
work, whether commercial or non-commercial in nature.
|
||||
|
||||
(d) All rights not expressly licensed by PhotoPrism under a License Agreement or
|
||||
provided under a Public License are reserved. For the avoidance of doubt, this
|
||||
also applies to promotional materials, legal documents, and any other
|
||||
Intellectual Property Rights. The use, reproduction, and distribution of Open
|
||||
Source Software is subject to the terms of the applicable Public License.
|
||||
|
||||
TRADEMARK AND BRAND ASSETS
|
||||
|
||||
(a) PhotoPrism’s Brand Assets are proprietary assets owned exclusively by
|
||||
PhotoPrism. We reserve the right to object to any use or misuse in any
|
||||
jurisdiction worldwide. Visit photoprism.app/trademark to learn more.
|
||||
|
||||
(b) Contributors, licensees, business partners, and other third parties may
|
||||
never claim ownership of PhotoPrism's Brand Assets or brands confusingly
|
||||
similar to PhotoPrism's Brand Assets in any way, including, without limitation,
|
||||
as a trademark, service mark, company name or designation, domain name, social
|
||||
media profile/handle, or in any other manner.
|
||||
|
||||
(c) You may not include the PhotoPrism trademark in the name of your app,
|
||||
product, or service, whether commercial or non-commercial in nature. This
|
||||
includes online services such as e-commerce, community, blog, information,
|
||||
advertising, and personal home pages, as well as apps, app stores, client apps,
|
||||
or third-party apps that interact with PhotoPrism.
|
||||
|
||||
DISCLAIMER OF WARRANTY
|
||||
|
||||
OUR SOFTWARE, SERVICES AND DOCUMENTATION ARE PROVIDED "AS-IS" AND WITHOUT
|
||||
WARRANTY OF ANY KIND. WE DISCLAIM ALL WARRANTIES, EXPRESSED OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, TITLE,
|
||||
NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
PHOTOPRISM DOES NOT WARRANT THAT THE SOFTWARE, SERVICES OR DOCUMENTATION WILL
|
||||
BE UNINTERRUPTED OR ERROR-FREE OR THAT ALL ERRORS WILL BE CORRECTED. WE
|
||||
DISCLAIM ALL LIABILITY AND RESPONSIBILITY FOR ANY THIRD-PARTY PRODUCTS OR
|
||||
SERVICES OR FOR ANY ACTS OR OMISSIONS OF ANY THIRD-PARTY SUPPLIERS, VENDORS OR
|
||||
SERVICE PROVIDERS.
|
||||
|
||||
LIMITATION OF LIABILITY
|
||||
|
||||
TO THE FULLEST EXTENT PERMITTED BY LAW, WE WILL NOT BE LIABLE FOR ANY DAMAGES
|
||||
ASSOCIATED WITH OUR SOFTWARE, SERVICES OR DOCUMENTATION, INCLUDING WITHOUT
|
||||
LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
KIND, INCLUDING BUT NOT LIMITED TO DAMAGES RELATING TO LOST DATA OR LOST
|
||||
PROFITS, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
IN NO EVENT SHALL PHOTOPRISM HAVE ANY LIABILITY TO ANY THIRD-PARTY SUPPLIER,
|
||||
VENDOR OR SERVICE PROVIDER. NOTWITHSTANDING ANY OTHER PROVISION IN THESE TERMS,
|
||||
OUR MAXIMUM AGGREGATE LIABILITY IS EUR 50.
|
||||
|
||||
FINAL PROVISIONS
|
||||
|
||||
(a) These terms do not imply any rights other than those expressly granted in
|
||||
these terms.
|
||||
|
||||
(b) In the event that you breach these terms and we do not take any action, we
|
||||
will still be entitled to use our rights and remedies in any other situation
|
||||
where you breach these terms.
|
||||
|
||||
(c) If a provision of these terms is or becomes legally invalid or if there is
|
||||
any gap that needs to be filled, the validity of the remainder of these terms
|
||||
shall not be affected thereby. Invalid provisions shall be replaced by common
|
||||
consent with such provisions which come as close as possible to the intended
|
||||
result of the invalid provision. In the event of gaps, such provisions shall
|
||||
come into force by common consent which comes as close as possible to the
|
||||
intended result of these terms, should the matter have been considered in
|
||||
advance. Any changes of or amendments to these terms must be in writing to
|
||||
become effective.
|
3520
assets/config/labels.yml
Normal file
22
assets/config/photoprism.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
debug: false
|
||||
read-only: false
|
||||
public: false
|
||||
admin-password: photoprism
|
||||
config-path: ~/.config/photoprism
|
||||
cache-path: ~/.cache/photoprism
|
||||
assets-path: ~/.local/share/photoprism
|
||||
resources-path: ~/.local/share/photoprism/resources
|
||||
originals-path: ~/Pictures/Originals
|
||||
import-path: ~/Pictures/Import
|
||||
export-path: ~/Pictures/Export
|
||||
sql-host: localhost
|
||||
sql-port: 4000
|
||||
sql-password: photoprism
|
||||
http-host:
|
||||
http-mode: release
|
||||
http-port: 2342
|
||||
database-driver: internal
|
||||
database-dsn: root:photoprism@tcp(localhost:4000)/photoprism?parseTime=true
|
||||
pid-filename: ~/.local/share/photoprism/photoprism.pid
|
||||
log-filename: ~/.local/share/photoprism/photoprism.log
|
||||
detach-server: false
|
2
assets/config/settings.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
theme: dark
|
||||
language: en
|
Before Width: | Height: | Size: 62 KiB |
|
@ -1,3 +0,0 @@
|
|||
beach*
|
||||
*.xml
|
||||
preloader.gif
|
Before Width: | Height: | Size: 65 KiB |
|
@ -1,9 +0,0 @@
|
|||
# Sample File Attribution
|
||||
|
||||
| Filename | Author | URL |
|
||||
|-------------------------------|------------|----------------------------------------------------------------------|
|
||||
| pythagoras.gif | Petrus3743 | <https://commons.wikimedia.org/wiki/File:01-Satz_des_Pythagoras.gif> |
|
||||
| fox.profile0.8bpc.yuv420.avif | Link-U | <https://github.com/link-u/avif-sample-images> |
|
||||
|
||||
**Additional File Samples can be found at <https://dl.photoprism.app/samples/>.**
|
||||
|
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 103 KiB |
|
@ -1,70 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "beach_sand.jpg",
|
||||
"ExifToolVersion": 12.56,
|
||||
"FileName": "beach_sand.jpg",
|
||||
"Directory": ".",
|
||||
"FileSize": 105321,
|
||||
"FileModifyDate": "2023:06:20 04:43:41+00:00",
|
||||
"FileAccessDate": "2023:08:06 16:38:50+00:00",
|
||||
"FileInodeChangeDate": "2023:08:04 05:10:37+00:00",
|
||||
"FilePermissions": 100644,
|
||||
"FileType": "JPEG",
|
||||
"FileTypeExtension": "JPG",
|
||||
"MIMEType": "image/jpeg",
|
||||
"JFIFVersion": "1 2",
|
||||
"ExifByteOrder": "MM",
|
||||
"Make": "Apple",
|
||||
"Model": "iPhone SE",
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"ResolutionUnit": 2,
|
||||
"Software": "10.2.1",
|
||||
"ModifyDate": "2017:02:15 14:13:40",
|
||||
"YCbCrPositioning": 1,
|
||||
"ExposureTime": 0.0004940711462,
|
||||
"ExposureProgram": 2,
|
||||
"ISO": 25,
|
||||
"ExifVersion": "0231",
|
||||
"DateTimeOriginal": "2017:02:15 14:13:40",
|
||||
"CreateDate": "2017:02:15 14:13:40",
|
||||
"ComponentsConfiguration": "1 2 3 0",
|
||||
"ApertureValue": 2.19999999733148,
|
||||
"MeteringMode": 5,
|
||||
"Flash": 16,
|
||||
"FocalLength": 4.2,
|
||||
"SubSecTimeOriginal": 249,
|
||||
"SubSecTimeDigitized": 249,
|
||||
"FlashpixVersion": "0100",
|
||||
"ColorSpace": 65535,
|
||||
"SensingMethod": 2,
|
||||
"ExposureMode": 0,
|
||||
"WhiteBalance": 0,
|
||||
"SceneCaptureType": 0,
|
||||
"LensModel": "iPhone SE back camera 4.15mm f/2.2",
|
||||
"GPSVersionID": "2 3 0 0",
|
||||
"GPSLatitudeRef": "S",
|
||||
"GPSLongitudeRef": "E",
|
||||
"GPSAltitudeRef": 1,
|
||||
"CurrentIPTCDigest": "804bedc723e0e6cd3a41d0a44b074d19",
|
||||
"DocumentNotes": "https://flickr.com/e/Rl7qi7oH%2BSEGDuwWBbZYaBQMEB5oNfPvQ6m3aMrPQ64%3D",
|
||||
"ApplicationRecordVersion": 4,
|
||||
"ImageWidth": 640,
|
||||
"ImageHeight": 480,
|
||||
"EncodingProcess": 2,
|
||||
"BitsPerSample": 8,
|
||||
"ColorComponents": 3,
|
||||
"YCbCrSubSampling": "2 2",
|
||||
"Aperture": 2.19999999733148,
|
||||
"ImageSize": "640 480",
|
||||
"Megapixels": 0.3072,
|
||||
"ShutterSpeed": 0.0004940711462,
|
||||
"SubSecCreateDate": "2017:02:15 14:13:40.249",
|
||||
"SubSecDateTimeOriginal": "2017:02:15 14:13:40.249",
|
||||
"GPSAltitude": -1.990417522,
|
||||
"GPSLatitude": -29.2824777777778,
|
||||
"GPSLongitude": 31.4436361111111,
|
||||
"FocalLength35efl": 4.2,
|
||||
"GPSPosition": "-29.2824777777778 31.4436361111111",
|
||||
"LightValue": 15.2580006188259,
|
||||
"LensID": "iPhone SE back camera 4.15mm f/2.2"
|
||||
}]
|
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 33 KiB |
|
@ -1,85 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "/Users/michael/Downloads/20200511-141648-Berlin-Germany-2020-3ku.mp4",
|
||||
"ExifToolVersion": 11.85,
|
||||
"FileName": "blue-go-video.mp4",
|
||||
"Directory": "/Users/michael/Downloads",
|
||||
"FileSize": "4.4 MB",
|
||||
"FileModifyDate": "2020:05:14 14:02:58+02:00",
|
||||
"FileAccessDate": "2020:05:14 14:02:58+02:00",
|
||||
"FileInodeChangeDate": "2020:05:14 14:02:58+02:00",
|
||||
"FilePermissions": "rw-r--r--",
|
||||
"FileType": "MP4",
|
||||
"FileTypeExtension": "mp4",
|
||||
"MIMEType": "video/mp4",
|
||||
"MajorBrand": "MP4 v2 [ISO 14496-14]",
|
||||
"MinorVersion": "0.0.0",
|
||||
"CompatibleBrands": ["isom","mp42"],
|
||||
"MovieHeaderVersion": 0,
|
||||
"CreateDate": "2020:05:11 14:16:48",
|
||||
"ModifyDate": "2020:05:11 14:16:48",
|
||||
"TimeScale": 1000,
|
||||
"Duration": "2.42 s",
|
||||
"PreferredRate": 1,
|
||||
"PreferredVolume": "100.00%",
|
||||
"PreviewTime": "0 s",
|
||||
"PreviewDuration": "0 s",
|
||||
"PosterTime": "0 s",
|
||||
"SelectionTime": "0 s",
|
||||
"SelectionDuration": "0 s",
|
||||
"CurrentTime": "0 s",
|
||||
"NextTrackID": 3,
|
||||
"GPSCoordinates": "52 deg 27' 34.56\" N, 13 deg 19' 18.48\" E",
|
||||
"AndroidVersion": 10,
|
||||
"TrackHeaderVersion": 0,
|
||||
"TrackCreateDate": "2020:05:11 14:16:48",
|
||||
"TrackModifyDate": "2020:05:11 14:16:48",
|
||||
"TrackID": 1,
|
||||
"TrackDuration": "2.42 s",
|
||||
"TrackLayer": 0,
|
||||
"TrackVolume": "0.00%",
|
||||
"ImageWidth": 1920,
|
||||
"ImageHeight": 1080,
|
||||
"GraphicsMode": "srcCopy",
|
||||
"OpColor": "0 0 0",
|
||||
"CompressorID": "avc1",
|
||||
"SourceImageWidth": 1920,
|
||||
"SourceImageHeight": 1080,
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"BitDepth": 24,
|
||||
"PixelAspectRatio": "65536:65536",
|
||||
"ColorRepresentation": "nclx 1 1 1",
|
||||
"VideoFrameRate": 28.101,
|
||||
"MatrixStructure": "1 0 0 0 1 0 0 0 1",
|
||||
"MediaHeaderVersion": 0,
|
||||
"MediaCreateDate": "2020:05:11 14:16:48",
|
||||
"MediaModifyDate": "2020:05:11 14:16:48",
|
||||
"MediaTimeScale": 48000,
|
||||
"MediaDuration": "2.41 s",
|
||||
"HandlerType": "Audio Track",
|
||||
"HandlerDescription": "SoundHandle",
|
||||
"Balance": 0,
|
||||
"AudioFormat": "mp4a",
|
||||
"AudioChannels": 2,
|
||||
"AudioBitsPerSample": 16,
|
||||
"AudioSampleRate": 48000,
|
||||
"MediaDataSize": 3818513,
|
||||
"MediaDataOffset": 810340,
|
||||
"ImageSize": "1920x1080",
|
||||
"Megapixels": 2.1,
|
||||
"AvgBitrate": "12.6 Mbps",
|
||||
"GPSLatitude": "52 deg 27' 34.56\" N",
|
||||
"GPSLongitude": "13 deg 19' 18.48\" E",
|
||||
"Rotation": 90,
|
||||
"GPSPosition": "52 deg 27' 34.56\" N, 13 deg 19' 18.48\" E",
|
||||
"Title": "Blue Gopher",
|
||||
"Description": "Cute gopher",
|
||||
"Comment": "We love go",
|
||||
"Subject": "gopher",
|
||||
"Keywords": "blue, desk",
|
||||
"Artist": "Micha",
|
||||
"CameraOwner": "Micha",
|
||||
"CameraSerial": "123",
|
||||
"DocumentID": "12398365",
|
||||
"InstanceID": "9058055",
|
||||
}]
|
|
@ -1,6 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "/Users/michael/Downloads/20200511-141648-Berlin-Germany-2020-3ku.mp4",
|
||||
"ExifToolVersion": 11.85,
|
||||
"FileName": "blue-go-video.mp4",
|
||||
"Directory": "/Users/michael/Downloads"
|
||||
}]
|
Before Width: | Height: | Size: 96 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 86 KiB |
Before Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 95 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 5.6 KiB |
|
@ -1,25 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "example.gif",
|
||||
"ExifToolVersion": 12.40,
|
||||
"FileName": "example.gif",
|
||||
"Directory": ".",
|
||||
"FileSize": 5760,
|
||||
"FileModifyDate": "2021:11:01 14:39:36+00:00",
|
||||
"FileAccessDate": "2022:04:12 15:49:52+00:00",
|
||||
"FileInodeChangeDate": "2022:03:02 20:29:31+00:00",
|
||||
"FilePermissions": 100666,
|
||||
"FileType": "GIF",
|
||||
"FileTypeExtension": "GIF",
|
||||
"MIMEType": "image/gif",
|
||||
"GIFVersion": "89a",
|
||||
"ImageWidth": 100,
|
||||
"ImageHeight": 67,
|
||||
"HasColorMap": 1,
|
||||
"ColorResolutionDepth": 8,
|
||||
"BitsPerPixel": 8,
|
||||
"BackgroundColor": 0,
|
||||
"AnimationIterations": 0,
|
||||
"TransparentColor": 255,
|
||||
"ImageSize": "100 67",
|
||||
"Megapixels": 0.0067
|
||||
}]
|
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 85 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 78 KiB |
|
@ -1,153 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "iphone_15_pro.heic",
|
||||
"ExifToolVersion": 12.40,
|
||||
"FileName": "iphone_15_pro.heic",
|
||||
"Directory": ".",
|
||||
"FileSize": 886825,
|
||||
"FileModifyDate": "2023:10:31 11:48:48+01:00",
|
||||
"FileAccessDate": "2023:10:31 11:51:22+01:00",
|
||||
"FileInodeChangeDate": "2023:10:31 11:50:11+01:00",
|
||||
"FilePermissions": 100664,
|
||||
"FileType": "HEIC",
|
||||
"FileTypeExtension": "HEIC",
|
||||
"MIMEType": "image/heic",
|
||||
"MajorBrand": "heic",
|
||||
"MinorVersion": "0.0.0",
|
||||
"CompatibleBrands": ["mif1","MiHE","MiPr","miaf","MiHB","heic"],
|
||||
"HandlerType": "pict",
|
||||
"PrimaryItemReference": 49,
|
||||
"MetaImageSize": "0 1287 4032 3024",
|
||||
"XMPToolkit": "XMP Core 6.0.0",
|
||||
"HDRGainMapHeadroom": 3.847906,
|
||||
"HDRGainMapVersion": 131072,
|
||||
"ExifByteOrder": "MM",
|
||||
"Make": "Apple",
|
||||
"Model": "iPhone 15 Pro",
|
||||
"Orientation": 6,
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"ResolutionUnit": 2,
|
||||
"Software": 17.1,
|
||||
"ModifyDate": "2023:10:31 11:44:43",
|
||||
"HostComputer": "iPhone 15 Pro",
|
||||
"ExposureTime": 0.01666666667,
|
||||
"FNumber": 2.2,
|
||||
"ExposureProgram": 2,
|
||||
"ISO": 400,
|
||||
"ExifVersion": "0232",
|
||||
"DateTimeOriginal": "2023:10:31 11:44:43",
|
||||
"CreateDate": "2023:10:31 11:44:43",
|
||||
"OffsetTime": "+01:00",
|
||||
"OffsetTimeOriginal": "+01:00",
|
||||
"OffsetTimeDigitized": "+01:00",
|
||||
"ShutterSpeedValue": 0.0165679999782223,
|
||||
"ApertureValue": 2.20000000038133,
|
||||
"BrightnessValue": 2.15000162,
|
||||
"ExposureCompensation": 0,
|
||||
"MeteringMode": 5,
|
||||
"Flash": 16,
|
||||
"FocalLength": 2.22,
|
||||
"SubjectArea": "2015 1511 2323 1330",
|
||||
"RunTimeFlags": 1,
|
||||
"RunTimeValue": 154455128730208,
|
||||
"RunTimeScale": 1000000000,
|
||||
"RunTimeEpoch": 0,
|
||||
"AccelerationVector": "-0.004213878416 -1.002046108 -0.01470538881",
|
||||
"Warning": "[minor] Bad format (16) for MakerNotes entry 10",
|
||||
"SubSecTimeOriginal": 432,
|
||||
"SubSecTimeDigitized": 432,
|
||||
"ColorSpace": 65535,
|
||||
"ExifImageWidth": 4032,
|
||||
"ExifImageHeight": 3024,
|
||||
"SensingMethod": 2,
|
||||
"SceneType": 1,
|
||||
"ExposureMode": 0,
|
||||
"WhiteBalance": 0,
|
||||
"FocalLengthIn35mmFormat": 14,
|
||||
"LensInfo": "2.22 9 1.779999971 2.8",
|
||||
"LensMake": "Apple",
|
||||
"LensModel": "iPhone 15 Pro back triple camera 2.22mm f/2.2",
|
||||
"CompositeImage": 2,
|
||||
"GPSLatitudeRef": "N",
|
||||
"GPSLongitudeRef": "E",
|
||||
"GPSAltitudeRef": 0,
|
||||
"GPSTimeStamp": "10:44:43",
|
||||
"GPSSpeedRef": "K",
|
||||
"GPSSpeed": 0,
|
||||
"GPSImgDirectionRef": "T",
|
||||
"GPSImgDirection": 101.3112946,
|
||||
"GPSDestBearingRef": "T",
|
||||
"GPSDestBearing": 101.3112946,
|
||||
"GPSDateStamp": "2023:10:31",
|
||||
"GPSHPositioningError": 14.275587,
|
||||
"ProfileCMMType": "appl",
|
||||
"ProfileVersion": 1024,
|
||||
"ProfileClass": "mntr",
|
||||
"ColorSpaceData": "RGB ",
|
||||
"ProfileConnectionSpace": "XYZ ",
|
||||
"ProfileDateTime": "2022:01:01 00:00:00",
|
||||
"ProfileFileSignature": "acsp",
|
||||
"PrimaryPlatform": "APPL",
|
||||
"CMMFlags": 0,
|
||||
"DeviceManufacturer": "APPL",
|
||||
"DeviceModel": "",
|
||||
"DeviceAttributes": "0 0",
|
||||
"RenderingIntent": 0,
|
||||
"ConnectionSpaceIlluminant": "0.9642 1 0.82491",
|
||||
"ProfileCreator": "appl",
|
||||
"ProfileID": "236 253 163 142 56 133 71 195 109 180 189 79 122 218 24 47",
|
||||
"ProfileDescription": "Display P3",
|
||||
"ProfileCopyright": "Copyright Apple Inc., 2022",
|
||||
"MediaWhitePoint": "0.96419 1 0.82489",
|
||||
"RedMatrixColumn": "0.51512 0.2412 -0.00105",
|
||||
"GreenMatrixColumn": "0.29198 0.69225 0.04189",
|
||||
"BlueMatrixColumn": "0.1571 0.06657 0.78407",
|
||||
"RedTRC": "(Binary data 32 bytes, use -b option to extract)",
|
||||
"ChromaticAdaptation": "1.04788 0.02292 -0.0502 0.02959 0.99048 -0.01706 -0.00923 0.01508 0.75168",
|
||||
"BlueTRC": "(Binary data 32 bytes, use -b option to extract)",
|
||||
"GreenTRC": "(Binary data 32 bytes, use -b option to extract)",
|
||||
"HEVCConfigurationVersion": 1,
|
||||
"GeneralProfileSpace": 0,
|
||||
"GeneralTierFlag": 0,
|
||||
"GeneralProfileIDC": 3,
|
||||
"GenProfileCompatibilityFlags": 1879048192,
|
||||
"ConstraintIndicatorFlags": "176 0 0 0 0 0",
|
||||
"GeneralLevelIDC": 90,
|
||||
"MinSpatialSegmentationIDC": 0,
|
||||
"ParallelismType": 0,
|
||||
"ChromaFormat": 1,
|
||||
"BitDepthLuma": 8,
|
||||
"BitDepthChroma": 8,
|
||||
"AverageFrameRate": 0,
|
||||
"ConstantFrameRate": 0,
|
||||
"NumTemporalLayers": 1,
|
||||
"TemporalIDNested": 0,
|
||||
"ImageWidth": 4032,
|
||||
"ImageHeight": 3024,
|
||||
"ImageSpatialExtent": "4032 3024",
|
||||
"Rotation": 270,
|
||||
"ImagePixelDepth": 8,
|
||||
"AuxiliaryImageType": "urn:com:apple:photo:2020:aux:hdrgainmap",
|
||||
"MediaDataSize": 882139,
|
||||
"MediaDataOffset": 4686,
|
||||
"RunTimeSincePowerUp": 154455.128730208,
|
||||
"Aperture": 2.2,
|
||||
"ImageSize": "4032 3024",
|
||||
"Megapixels": 12.192768,
|
||||
"ScaleFactor35efl": 6.30630630630631,
|
||||
"ShutterSpeed": 0.01666666667,
|
||||
"SubSecCreateDate": "2023:10:31 11:44:43.432+01:00",
|
||||
"SubSecDateTimeOriginal": "2023:10:31 11:44:43.432+01:00",
|
||||
"SubSecModifyDate": "2023:10:31 11:44:43+01:00",
|
||||
"GPSAltitude": 50.15664187,
|
||||
"GPSDateTime": "2023:10:31 10:44:43Z",
|
||||
"GPSLatitude": 52.4596055555556,
|
||||
"GPSLongitude": 13.3218416666667,
|
||||
"CircleOfConfusion": "0.00476447847114884",
|
||||
"FOV": 104.250120754113,
|
||||
"FocalLength35efl": 14,
|
||||
"GPSPosition": "52.4596055555556 13.3218416666667",
|
||||
"HyperfocalDistance": 0.470184057236731,
|
||||
"LightValue": 6.18189764281985,
|
||||
"LensID": "iPhone 15 Pro back triple camera 2.22mm f/2.2"
|
||||
}]
|
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 866 B |
Before Width: | Height: | Size: 187 KiB |
|
@ -1,28 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "pythagoras.gif",
|
||||
"ExifToolVersion": 12.40,
|
||||
"FileName": "pythagoras.gif",
|
||||
"Directory": ".",
|
||||
"FileSize": 191371,
|
||||
"FileModifyDate": "2022:04:13 08:42:33+00:00",
|
||||
"FileAccessDate": "2022:04:13 10:52:43+00:00",
|
||||
"FileInodeChangeDate": "2022:04:13 08:42:42+00:00",
|
||||
"FilePermissions": 100664,
|
||||
"FileType": "GIF",
|
||||
"FileTypeExtension": "GIF",
|
||||
"MIMEType": "image/gif",
|
||||
"GIFVersion": "89a",
|
||||
"ImageWidth": 591,
|
||||
"ImageHeight": 639,
|
||||
"HasColorMap": 1,
|
||||
"ColorResolutionDepth": 7,
|
||||
"BitsPerPixel": 8,
|
||||
"BackgroundColor": 255,
|
||||
"AnimationIterations": 0,
|
||||
"Comment": "Created with GIMP",
|
||||
"TransparentColor": 255,
|
||||
"FrameCount": 201,
|
||||
"Duration": 49.8,
|
||||
"ImageSize": "591 639",
|
||||
"Megapixels": 0.377649
|
||||
}]
|
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 6.9 MiB |
|
@ -1,82 +0,0 @@
|
|||
[{
|
||||
"SourceFile": "/go/src/github.com/photoprism/photoprism/storage/import/samsung-motion-photo.jpg",
|
||||
"ExifToolVersion": 12.56,
|
||||
"FileName": "samsung-motion-photo.jpg",
|
||||
"Directory": "/go/src/github.com/photoprism/photoprism/storage/import",
|
||||
"FileSize": 7221645,
|
||||
"FileModifyDate": "2023:07:27 02:03:13+00:00",
|
||||
"FileAccessDate": "2023:08:13 17:11:04+00:00",
|
||||
"FileInodeChangeDate": "2023:08:13 17:11:02+00:00",
|
||||
"FilePermissions": 100644,
|
||||
"FileType": "JPEG",
|
||||
"FileTypeExtension": "JPG",
|
||||
"MIMEType": "image/jpeg",
|
||||
"ExifByteOrder": "II",
|
||||
"Make": "samsung",
|
||||
"Model": "SM-G973F",
|
||||
"Orientation": 1,
|
||||
"XResolution": 72,
|
||||
"YResolution": 72,
|
||||
"ResolutionUnit": 2,
|
||||
"Software": "G973FXXU4CTC9",
|
||||
"ModifyDate": "2020:04:23 18:33:41",
|
||||
"YCbCrPositioning": 1,
|
||||
"ExposureTime": 0.0007575757576,
|
||||
"FNumber": 2.4,
|
||||
"ExposureProgram": 2,
|
||||
"ISO": 50,
|
||||
"ExifVersion": "0220",
|
||||
"DateTimeOriginal": "2020:04:23 18:33:41",
|
||||
"CreateDate": "2020:04:23 18:33:41",
|
||||
"ShutterSpeedValue": 0.999475026346474,
|
||||
"ApertureValue": 2.39495740923786,
|
||||
"BrightnessValue": 22.58,
|
||||
"ExposureCompensation": 0,
|
||||
"MaxApertureValue": 2.39495740923786,
|
||||
"MeteringMode": 2,
|
||||
"Flash": 0,
|
||||
"FocalLength": 4.32,
|
||||
"ColorSpace": 1,
|
||||
"ExifImageWidth": 4032,
|
||||
"ExifImageHeight": 3024,
|
||||
"ExposureMode": 0,
|
||||
"WhiteBalance": 0,
|
||||
"DigitalZoomRatio": 1,
|
||||
"FocalLengthIn35mmFormat": 26,
|
||||
"SceneCaptureType": 0,
|
||||
"ImageUniqueID": "L12XLLD01VM",
|
||||
"GPSLatitudeRef": "N",
|
||||
"GPSLongitudeRef": "W",
|
||||
"Compression": 6,
|
||||
"ThumbnailOffset": 888,
|
||||
"ThumbnailLength": 50555,
|
||||
"XMPToolkit": "Adobe XMP Core 5.1.0-jc003",
|
||||
"MicroVideo": 1,
|
||||
"MicroVideoVersion": 1,
|
||||
"MicroVideoOffset": 4535831,
|
||||
"MicroVideoPresentationTimestampUs": -1,
|
||||
"ImageWidth": 4032,
|
||||
"ImageHeight": 3024,
|
||||
"EncodingProcess": 0,
|
||||
"BitsPerSample": 8,
|
||||
"ColorComponents": 3,
|
||||
"YCbCrSubSampling": "2 2",
|
||||
"TimeStamp": "2020:04:23 17:33:41.809+00:00",
|
||||
"MCCData": 234,
|
||||
"EmbeddedVideoType": "MotionPhoto_Data",
|
||||
"EmbeddedVideoFile": "(Binary data 4535775 bytes, use -b option to extract)",
|
||||
"Aperture": 2.4,
|
||||
"ImageSize": "4032 3024",
|
||||
"Megapixels": 12.192768,
|
||||
"ScaleFactor35efl": 6.01851851851852,
|
||||
"ShutterSpeed": 0.0007575757576,
|
||||
"ThumbnailImage": "(Binary data 50555 bytes, use -b option to extract)",
|
||||
"GPSLatitude": 51.5049828,
|
||||
"GPSLongitude": -0.0787347997222222,
|
||||
"CircleOfConfusion": "0.00499230176602706",
|
||||
"FOV": 69.3903656740024,
|
||||
"FocalLength35efl": 26,
|
||||
"GPSPosition": "51.5049828 -0.0787347997222222",
|
||||
"HyperfocalDistance": 1.55759815100044,
|
||||
"LightValue": 13.8923910258672
|
||||
}]
|
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 126 KiB |
|
@ -1,3 +0,0 @@
|
|||
# Whatever it is, we'd love to hear from you!
|
||||
|
||||
Feel free to send an e-mail to
|
|
@ -1 +0,0 @@
|
|||
textexttext
|
|
@ -1,6 +0,0 @@
|
|||
<note>
|
||||
<to>Tove</to>
|
||||
<from>Jani</from>
|
||||
<heading>Reminder</heading>
|
||||
<body>Don't forget me this weekend!</body>
|
||||
</note>
|
|
@ -1,6 +0,0 @@
|
|||
version: '3.5'
|
||||
|
||||
services:
|
||||
photoprism:
|
||||
build: .
|
||||
image: photoprism/photoprism:develop
|
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 28 KiB |