Skip to content

Commit 82d61d1

Browse files
committed
File Types: Add experimental support for animated GIFs #590 #2207
Animated GIFs are transcoded to AVC because it is much smaller and thus also suitable for long/large animations. In addition, this commit adds support for more metadata fields such as frame rate, number of frames, file capture timestamp (unix milliseconds), media type, and software version. Support for SVG files can later be implemented in a similar way.
1 parent 4253045 commit 82d61d1

File tree

165 files changed

+1571
-770
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+1571
-770
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Debian 12, Codename "Bookworm"
2-
FROM photoprism/develop:220405-bookworm
2+
FROM photoprism/develop:220413-bookworm
33

44
## alternative base images
55
# FROM photoprism/develop:bullseye # Debian 11, Codename "Bullseye"

LICENSE

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -623,9 +623,9 @@ copy of the Program in return for a fee.
623623
(a) PhotoPrism’s Brand Assets — including trademarks, logos, icons, fonts,
624624
corporate design, product and service names, and any other brand features
625625
and elements, whether registered or unregistered („Brand Assets“) — are
626-
proprietary assets owned exclusively by Michael Mayer and his legal successors
627-
(„PhotoPrism“). We reserve the right to object to any use or misuse in any
628-
jurisdiction worldwide. Visit <https://photoprism.app/trademark> to learn more.
626+
proprietary assets owned exclusively by PhotoPrism UG („PhotoPrism“). We
627+
reserve the right to object to any use or misuse in any jurisdiction
628+
worldwide. Visit <https://photoprism.app/trademark> to learn more.
629629

630630
(b) Contributors, licensees, business partners, and other third parties
631631
may never claim ownership of PhotoPrism's Brand Assets or brands confusingly

assets/LICENSE

Lines changed: 45 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,64 +4,72 @@
44
TERMS OF USE
55

66
(a) We hereby grant you a non-exclusive, non-transferable right to use the
7-
Digital Assets accompanying the software, embedded in the documentation,
8-
or provided for download — such as icons, fonts, illustrations, graphics,
7+
Digital Assets accompanying the software, embedded in the documentation, or
8+
provided for download — such as icons, fonts, illustrations, graphics,
99
wallpapers, videos, sounds, models, and sample files („Digital Assets“) —
10-
as part of the Official Software Distribution, unless otherwise noted.
10+
as part of the Software distributed by us, unless otherwise noted.
1111

1212
(b) Because some Digital Assets are licensed to us solely for direct
13-
distribution, we cannot redistribute them under a more permissive license
14-
for other purposes. If the author or copyright holder has not released them
15-
under a permissive license, you must obtain a license before using them in
16-
your own work, whether commercial or non-commercial in nature.
17-
18-
(c) Related documentation is available under the terms of the CC BY-NC-SA
19-
4.0 License, see <https://docs.photoprism.app/license/docs>. Other terms may
20-
apply to Digital Assets — in particular illustrations, graphics, and videos
21-
— embedded in the documentation if they are licensed to us solely for direct
22-
distribution. When in doubt, please ask before distributing or using
23-
them for other works.
13+
distribution, we cannot redistribute them under a more permissive license for
14+
other purposes. If the author or copyright holder has not released them under a
15+
permissive license, you must obtain a license before using them in your own
16+
work, whether commercial or non-commercial in nature.
17+
18+
(c) Related documentation is available under the terms of the CC BY-NC-SA 4.0
19+
License. Other terms may apply to Digital Assets — in particular
20+
illustrations, graphics, and videos — embedded in the documentation if they
21+
are licensed to us solely for direct distribution. When in doubt, please ask
22+
before distributing or using them for other works.
2423

2524
TRADEMARK AND BRAND ASSETS
2625

2726
(a) PhotoPrism’s Brand Assets — including trademarks, logos, icons, fonts,
28-
corporate design, product and service names, and any other brand features
29-
and elements, whether registered or unregistered („Brand Assets“) — are
30-
proprietary assets owned exclusively by Michael Mayer and his legal successors
31-
(„PhotoPrism“). We reserve the right to object to any use or misuse in any
32-
jurisdiction worldwide. Visit <https://photoprism.app/trademark> to learn more.
33-
34-
(b) Contributors, licensees, business partners, and other third parties
35-
may never claim ownership of PhotoPrism's Brand Assets or brands confusingly
36-
similar to PhotoPrism's Brand Assets in any way, including, without
37-
limitation, as a trademark, service mark, company name or designation,
38-
domain name, social media profile/handle, or in any other manner.
27+
corporate design, product and service names, and any other brand features and
28+
elements, whether registered or unregistered („Brand Assets“) — are
29+
proprietary assets owned exclusively by PhotoPrism UG („PhotoPrism“). We
30+
reserve the right to object to any use or misuse in any jurisdiction worldwide.
31+
Visit photoprism.app/trademark to learn more.
32+
33+
(b) Contributors, licensees, business partners, and other third parties may
34+
never claim ownership of PhotoPrism's Brand Assets or brands confusingly
35+
similar to PhotoPrism's Brand Assets in any way, including, without limitation,
36+
as a trademark, service mark, company name or designation, domain name, social
37+
media profile/handle, or in any other manner.
3938

4039
(c) You may not include the PhotoPrism trademark in the name of your app,
4140
product, or service, whether commercial or non-commercial in nature. This
4241
includes online services such as e-commerce, community, blog, information,
43-
advertising, and personal home pages, as well as apps, app stores, client
44-
apps, or third-party apps that interact with PhotoPrism.
42+
advertising, and personal home pages, as well as apps, app stores, client apps,
43+
or third-party apps that interact with PhotoPrism.
4544

46-
(d) In the event that any provision is found to be unenforceable by a court
47-
or other competent jurisdiction, the remaining portions hereof shall remain
48-
in full force and effect.
49-
50-
DISCLAIMER OF WARRANTY AND LIMITATION OF LIABILITY
45+
DISCLAIMER OF WARRANTY
5146

5247
OUR SOFTWARE, SERVICES, DOCUMENTATION, AND DIGITAL ASSETS ARE PROVIDED
5348
“AS-IS” AND WITHOUT WARRANTY OF ANY KIND. WE DISCLAIM ALL WARRANTIES,
5449
EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5550
MERCHANTABILITY, TITLE, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
5651

52+
LIMITATION OF LIABILITY
53+
5754
WE WILL NOT BE LIABLE FOR ANY DAMAGES ASSOCIATED WITH OUR SOFTWARE AND
5855
SERVICES, INCLUDING WITHOUT LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR
5956
CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING BUT NOT LIMITED TO DAMAGES
6057
RELATING TO LOST DATA OR LOST PROFITS, EVEN IF WE HAVE BEEN ADVISED OF THE
6158
POSSIBILITY OF SUCH DAMAGES.
6259

63-
If the disclaimer of warranty and limitation of liability provided above
64-
cannot be given local legal effect according to their terms, reviewing courts
65-
shall apply local law that most closely approximates an absolute waiver of
66-
all civil liability in connection with our software and services, unless a
67-
warranty or assumption of liability was provided in return for a fee.
60+
SEVERABILITY
61+
62+
(a) If the Disclaimer of Warranty and Limitation of Liability set forth above
63+
cannot be given local legal effect according to their terms, the reviewing
64+
courts shall apply the local law that most closely approximates an absolute
65+
waiver of any civil liability in connection with our software and services,
66+
unless a written warranty or assumption of liability has been granted for a fee.
67+
68+
(b) In the event that any provision set forth above is found by a court of
69+
competent jurisdiction to be invalid, illegal, void or unenforceable, the
70+
remaining provisions shall remain in full force and effect and shall not be
71+
impaired, affected or invalidated in any way.
72+
73+
(c) It is hereby agreed and declared that it is the intention of the parties to
74+
enforce the remaining provisions without the inclusion of those provisions that
75+
may subsequently be declared invalid, illegal, void or unenforceable.

assets/README.md

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,65 +3,73 @@
33
## Terms of Use ##
44

55
(a) We hereby grant you a non-exclusive, non-transferable right to use the
6-
Digital Assets accompanying the software, embedded in the documentation,
7-
or provided for download — such as icons, fonts, illustrations, graphics,
6+
Digital Assets accompanying the software, embedded in the documentation, or
7+
provided for download — such as icons, fonts, illustrations, graphics,
88
wallpapers, videos, sounds, models, and sample files („Digital Assets“) —
9-
as part of the Official Software Distribution, **unless otherwise noted**.
9+
as part of the Software distributed by us, unless otherwise noted.
1010

1111
(b) Because some Digital Assets are licensed to us solely for direct
12-
distribution, we cannot redistribute them under a more permissive license
13-
for other purposes. If the author or copyright holder has not released them
14-
under a permissive license, you must obtain a license before using them in
15-
your own work, whether commercial or non-commercial in nature.
12+
distribution, we cannot redistribute them under a more permissive license for
13+
other purposes. If the author or copyright holder has not released them under a
14+
permissive license, you must obtain a license before using them in your own
15+
work, whether commercial or non-commercial in nature.
1616

1717
(c) Related [documentation](https://docs.photoprism.app/) is available under
1818
the terms of the [CC BY-NC-SA 4.0 License](https://docs.photoprism.app/license/docs/).
19-
Other terms may apply to Digital Assets — in particular illustrations,
20-
graphics, and videos — embedded in the documentation if they are licensed
21-
to us solely for direct distribution. When in doubt, please ask before
22-
distributing or using them for other works.
19+
Other terms may apply to Digital Assets — in particular illustrations, graphics,
20+
and videos — embedded in the documentation if they are licensed to us solely
21+
for direct distribution. When in doubt, please ask before distributing or
22+
using them for other works.
2323

2424
## Trademark and Brand Assets ##
2525

2626
(a) PhotoPrism’s Brand Assets — including trademarks, logos, icons, fonts,
27-
corporate design, product and service names, and any other brand features
28-
and elements, whether registered or unregistered („Brand Assets“) — are
29-
proprietary assets owned exclusively by Michael Mayer and his legal successors
30-
(„PhotoPrism“). We reserve the right to object to any use or misuse in any
31-
jurisdiction worldwide. Visit [photoprism.app/trademark](https://photoprism.app/trademark)
32-
to learn more.
33-
34-
(b) Contributors, licensees, business partners, and other third parties
35-
may never claim ownership of PhotoPrism's Brand Assets or brands confusingly
36-
similar to PhotoPrism's Brand Assets in any way, including, without
37-
limitation, as a trademark, service mark, company name or designation,
38-
domain name, social media profile/handle, or in any other manner.
27+
corporate design, product and service names, and any other brand features and
28+
elements, whether registered or unregistered („Brand Assets“) — are
29+
proprietary assets owned exclusively by PhotoPrism UG („PhotoPrism“). We
30+
reserve the right to object to any use or misuse in any jurisdiction worldwide.
31+
Visit photoprism.app/trademark to learn more.
32+
33+
(b) Contributors, licensees, business partners, and other third parties may
34+
never claim ownership of PhotoPrism's Brand Assets or brands confusingly
35+
similar to PhotoPrism's Brand Assets in any way, including, without limitation,
36+
as a trademark, service mark, company name or designation, domain name, social
37+
media profile/handle, or in any other manner.
3938

4039
(c) You may not include the PhotoPrism trademark in the name of your app,
4140
product, or service, whether commercial or non-commercial in nature. This
4241
includes online services such as e-commerce, community, blog, information,
43-
advertising, and personal home pages, as well as apps, app stores, client
44-
apps, or third-party apps that interact with PhotoPrism.
45-
46-
(d) In the event that any provision is found to be unenforceable by a court
47-
or other competent jurisdiction, the remaining portions hereof shall remain
48-
in full force and effect.
42+
advertising, and personal home pages, as well as apps, app stores, client apps,
43+
or third-party apps that interact with PhotoPrism.
4944

50-
## Disclaimer of Warranty and Limitation of Liability ##
45+
## Disclaimer of Warranty ##
5146

5247
OUR SOFTWARE, SERVICES, DOCUMENTATION, AND DIGITAL ASSETS ARE PROVIDED
5348
“AS-IS” AND WITHOUT WARRANTY OF ANY KIND. WE DISCLAIM ALL WARRANTIES,
5449
EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5550
MERCHANTABILITY, TITLE, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
5651

52+
## Limitation of Liability ##
53+
5754
WE WILL NOT BE LIABLE FOR ANY DAMAGES ASSOCIATED WITH OUR SOFTWARE AND
5855
SERVICES, INCLUDING WITHOUT LIMITATION ORDINARY, INCIDENTAL, INDIRECT, OR
5956
CONSEQUENTIAL DAMAGES OF ANY KIND, INCLUDING BUT NOT LIMITED TO DAMAGES
6057
RELATING TO LOST DATA OR LOST PROFITS, EVEN IF WE HAVE BEEN ADVISED OF THE
6158
POSSIBILITY OF SUCH DAMAGES.
6259

63-
If the disclaimer of warranty and limitation of liability provided above
64-
cannot be given local legal effect according to their terms, reviewing courts
65-
shall apply local law that most closely approximates an absolute waiver of
66-
all civil liability in connection with our software and services, unless a
67-
warranty or assumption of liability was provided in return for a fee.
60+
## Severability ##
61+
62+
(a) If the Disclaimer of Warranty and Limitation of Liability set forth above
63+
cannot be given local legal effect according to their terms, the reviewing
64+
courts shall apply the local law that most closely approximates an absolute
65+
waiver of any civil liability in connection with our software and services,
66+
unless a written warranty or assumption of liability has been granted for a fee.
67+
68+
(b) In the event that any provision set forth above is found by a court of
69+
competent jurisdiction to be invalid, illegal, void or unenforceable, the
70+
remaining provisions shall remain in full force and effect and shall not be
71+
impaired, affected or invalidated in any way.
72+
73+
(c) It is hereby agreed and declared that it is the intention of the parties to
74+
enforce the remaining provisions without the inclusion of those provisions that
75+
may subsequently be declared invalid, illegal, void or unenforceable.

assets/examples/NOTICE.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Sample File Attribution
2+
===========================================================================
3+
4+
| Filename | Author | URL |
5+
|----------------|------------|----------------------------------------------------------------------|
6+
| pythagoras.gif | Petrus3743 | <https://commons.wikimedia.org/wiki/File:01-Satz_des_Pythagoras.gif> |

assets/examples/example.gif.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
[{
2+
"SourceFile": "example.gif",
3+
"ExifToolVersion": 12.40,
4+
"FileName": "example.gif",
5+
"Directory": ".",
6+
"FileSize": 5760,
7+
"FileModifyDate": "2021:11:01 14:39:36+00:00",
8+
"FileAccessDate": "2022:04:12 15:49:52+00:00",
9+
"FileInodeChangeDate": "2022:03:02 20:29:31+00:00",
10+
"FilePermissions": 100666,
11+
"FileType": "GIF",
12+
"FileTypeExtension": "GIF",
13+
"MIMEType": "image/gif",
14+
"GIFVersion": "89a",
15+
"ImageWidth": 100,
16+
"ImageHeight": 67,
17+
"HasColorMap": 1,
18+
"ColorResolutionDepth": 8,
19+
"BitsPerPixel": 8,
20+
"BackgroundColor": 0,
21+
"AnimationIterations": 0,
22+
"TransparentColor": 255,
23+
"ImageSize": "100 67",
24+
"Megapixels": 0.0067
25+
}]

assets/examples/pythagoras.gif

187 KB
Loading

assets/examples/pythagoras.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
[{
2+
"SourceFile": "pythagoras.gif",
3+
"ExifToolVersion": 12.40,
4+
"FileName": "pythagoras.gif",
5+
"Directory": ".",
6+
"FileSize": 191371,
7+
"FileModifyDate": "2022:04:13 08:42:33+00:00",
8+
"FileAccessDate": "2022:04:13 10:52:43+00:00",
9+
"FileInodeChangeDate": "2022:04:13 08:42:42+00:00",
10+
"FilePermissions": 100664,
11+
"FileType": "GIF",
12+
"FileTypeExtension": "GIF",
13+
"MIMEType": "image/gif",
14+
"GIFVersion": "89a",
15+
"ImageWidth": 591,
16+
"ImageHeight": 639,
17+
"HasColorMap": 1,
18+
"ColorResolutionDepth": 7,
19+
"BitsPerPixel": 8,
20+
"BackgroundColor": 255,
21+
"AnimationIterations": 0,
22+
"Comment": "Created with GIMP",
23+
"TransparentColor": 255,
24+
"FrameCount": 201,
25+
"Duration": 49.8,
26+
"ImageSize": "591 639",
27+
"Megapixels": 0.377649
28+
}]

cmd/photoprism/photoprism.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
3-
Copyright (c) 2018 - 2022 Michael Mayer <hello@photoprism.app>
3+
Copyright (c) 2018 - 2022 PhotoPrism UG. All rights reserved.
44
55
This program is free software: you can redistribute it and/or modify
66
it under Version 3 of the GNU Affero General Public License (the "AGPL"):
@@ -15,7 +15,7 @@ Copyright (c) 2018 - 2022 Michael Mayer <hello@photoprism.app>
1515
which describe how our Brand Assets may be used:
1616
<https://photoprism.app/trademark>
1717
18-
Feel free to send an e-mail to hello@photoprism.app if you have questions,
18+
Feel free to send an email to hello@photoprism.app if you have questions,
1919
want to support our work, or just want to say hello.
2020
2121
Additional information can be found in our Developer Guide:
@@ -38,7 +38,7 @@ var version = "development"
3838
var log = event.Log
3939

4040
const appDescription = "Visit https://docs.photoprism.app/ to learn more."
41-
const appCopyright = "(c) 2018-2022 Michael Mayer <hello@photoprism.app>"
41+
const appCopyright = "(c) 2018-2022 PhotoPrism UG. All rights reserved."
4242

4343
func main() {
4444
defer func() {

frontend/karma.conf.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/*
22
3-
Copyright (c) 2018 - 2022 Michael Mayer <hello@photoprism.app>
3+
Copyright (c) 2018 - 2022 PhotoPrism UG. All rights reserved.
44
55
This program is free software: you can redistribute it and/or modify
66
it under Version 3 of the GNU Affero General Public License (the "AGPL"):
@@ -15,7 +15,7 @@ Copyright (c) 2018 - 2022 Michael Mayer <hello@photoprism.app>
1515
which describe how our Brand Assets may be used:
1616
<https://photoprism.app/trademark>
1717
18-
Feel free to send an e-mail to hello@photoprism.app if you have questions,
18+
Feel free to send an email to hello@photoprism.app if you have questions,
1919
want to support our work, or just want to say hello.
2020
2121
Additional information can be found in our Developer Guide:

0 commit comments

Comments
 (0)