Skip to content

Commit 98525e9

Browse files
committed
v2026.2.0-beta
1 parent 7f0cd0a commit 98525e9

331 files changed

Lines changed: 9033 additions & 5205 deletions

File tree

Some content is hidden

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

.dockerignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,3 @@
22
.github
33
.gitignore
44
Dockerfile*
5-
# binaries in tools/* are compiled with glibc, but Alpine uses musl, so skip:
6-
tools/

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
---
22
name: Bug report
33
about: Create a report to help us improve
4-
54
---
65

76
## Welcome to PhotoStructure!
@@ -16,4 +15,4 @@ If it has, please add any additional context or system information that you thin
1615

1716
If it hasn't, the more context the better: and if there is information that you'd rather keep private, please email support@photostructure.com with a reference to the bug and those additional details.
1817

19-
Cheers!
18+
Cheers!

.github/ISSUE_TEMPLATE/feature_request.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
---
22
name: Feature request
33
about: Suggest an idea for this project
4-
54
---
65

76
## Welcome to PhotoStructure!
@@ -14,6 +13,6 @@ If it has, be sure to add your comments on how you think the feature could be ha
1413

1514
If it hasn't, [click "new topic" in the feature requests category](https://forum.photostructure.com/c/feature-requests/7/l/latest?order=votes), and provide as many details as you can.
1615

17-
Remember to vote on what you want built next: it really helps prioritize next work.
16+
Remember to vote on what you want built next: it really helps prioritize next work.
1817

1918
Cheers!

.github/workflows/docker-build.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ jobs:
1414
build:
1515
name: Build Docker Images
1616
runs-on: ubuntu-latest
17+
permissions:
18+
contents: read
19+
packages: write
1720
steps:
1821
- name: Checkout
1922
uses: actions/checkout@v4

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
.env
33
.history
44
.npm
5+
*.js.map
56
*.log*
67
*.tgz
78
node_modules/

.yarnrc

Lines changed: 0 additions & 1 deletion
This file was deleted.

CHANGELOG.md

Lines changed: 252 additions & 150 deletions
Large diffs are not rendered by default.

Dockerfile

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,55 @@
44
# <https://photostructure.com/server/photostructure-for-docker/>
55

66
# https://github.com/photostructure/base-tools/pkgs/container/base-tools-debian
7-
FROM photostructure/base-tools-debian:sha-2f5c9bb as builder
7+
FROM photostructure/base-tools-debian:sha-030fda9 AS builder
88

99
# https://docs.docker.com/develop/develop-images/multistage-build/
1010

1111
# https://docs.docker.com/engine/reference/builder/#workdir
1212
WORKDIR /opt/photostructure
1313

14-
COPY package.json yarn.lock ./
14+
COPY package.json package-lock.json ./
1515

1616
# base-tools-debian will install build-essential and libraries that native
1717
# node packages require to be compiled. We don't need the compilation
1818
# toolchain, though--just the compiled native libraries, so once this is done,
1919
# we switch to the smaller base image.
20-
RUN yarn install --frozen-lockfile --production --no-cache
20+
RUN npm ci --omit=dev
2121

22-
# This must match the base image from
22+
# This must match the major version from
2323
# https://github.com/photostructure/base-tools-debian/blob/main/Dockerfile
24-
FROM node:20.11-bookworm-slim
25-
26-
# ffmpeg is used for video frame extraction and transcoding
24+
# We use node:24 (not node:24.x) because native modules use N-API which is
25+
# ABI-stable across Node versions. This allows automatic security patches.
26+
FROM node:24-bookworm-slim
27+
28+
# Native Node.js module runtime dependencies:
29+
# libglib2.0-0 is required by @photostructure/fs-metadata (GIO volume metadata)
30+
#
31+
# External tool runtime dependencies:
2732
# libheif-examples provides "heif-convert"
2833
# libjpeg-turbo-progs includes `jpegtran` for lossless rotation and JPEG file validation
29-
# libjpeg62-turbo-dev is used by VIPS for JPEG handling
30-
# liblcms2-dev supports color management
31-
# liborc-0.4-dev is for sharp SIMD operations
34+
# libjpeg62-turbo is the JPEG runtime used by heif-convert
35+
# liblcms2-2 supports color management (used by heif-convert)
36+
# liborc-0.4-0 is used by heif-convert
37+
# libreadline8 is for the static sqlite3 CLI tool
3238
# passwd provides `usermod` and `groupmod` (used by docker-entrypoint.sh)
33-
# perl is required for exiftool.
39+
# perl is required for exiftool
3440
# procps provides a working `ps -o lstart`
35-
# wget is used by the health check.
41+
# wget is used by the health check
3642
# tini is an `init` that supports proper zombie and signal handling
3743

3844
RUN apt-get update \
3945
&& apt-get upgrade -y \
4046
&& apt-get install -y --no-install-recommends \
41-
ffmpeg \
47+
ca-certificates \
48+
heif-thumbnailer \
49+
libglib2.0-0 \
4250
libheif-examples \
4351
libjpeg-turbo-progs \
4452
libjpeg62-turbo \
4553
liblcms2-2 \
4654
liborc-0.4-0 \
55+
libreadline8 \
4756
locales-all \
4857
passwd \
4958
perl \
@@ -52,19 +61,32 @@ RUN apt-get update \
5261
tzdata \
5362
wget \
5463
&& rm -rf /var/lib/apt/lists/* \
55-
&& npm install --force --location=global npm yarn \
64+
&& npm install --force --location=global npm \
5665
&& touch /.running-in-container
5766

5867
# Sets the default path to be inside /opt/photostructure when running `docker exec -it`:
5968
WORKDIR /opt/photostructure
6069

6170
COPY --chown=node:node . ./
6271

63-
# Overwrite source with builder results (/opt/photostructure/tools/bin):
72+
# Overwrite source with builder results (/opt/photostructure/tools):
6473
COPY --from=builder --chown=node:node /opt/photostructure ./
6574

75+
# FFmpeg 8.0.1 static binaries (Debian bookworm has 5.1.6)
76+
# https://github.com/wader/static-ffmpeg - pinned to digest for supply chain security
77+
78+
COPY --from=mwader/static-ffmpeg@sha256:252705ff88532fa338e7065c21792756552f8fe7c212f84bc503d3c340689594 \
79+
/ffmpeg /ffprobe /opt/photostructure/tools/
80+
81+
82+
# To update the digest in the future when a new version releases, visit
83+
# https://hub.docker.com/r/mwader/static-ffmpeg/tags, click the latest version
84+
# tag, and copy the "Index digest"
85+
86+
# ---
87+
6688
# The node docker image sets NODE_VERSION and YARN_VERSION environment
67-
# variables, which has causes concern and confusion with some users.
89+
# variables, which has caused concern and confusion with some users.
6890

6991
# Unfortunately, Docker doesn't support _deleting_ prior-set ENV values--you
7092
# can only set them to "", which is still visible to the container manager and
@@ -79,24 +101,24 @@ COPY --from=builder --chown=node:node /opt/photostructure ./
79101
# PhotoStructure will look for the presence of a /.running-in-container file
80102
# (which was created in the RUN command above).
81103

82-
# Node.js and several third-party libraries look for this value to run in
83-
# "production mode" (rather than "development mode").
84-
ENV NODE_ENV="production"
85-
86104
# These PATH elements are not required by PhotoStructure--this is only here to
87105
# make the command-line tooling (like `photostructure` and `sqlite3`)
88106
# available when people shell into their containers.
89107

90108
# Run `photostructure --help` or visit https://photostructure.com/tools/ for
91109
# details about these tools.
92-
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/photostructure:/opt/photostructure/tools/bin"
110+
ENV PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/photostructure:/opt/photostructure/tools"
93111

94112
# Your library is exposed by default to <http://localhost:1787>
95113
# This can be changed by setting the PS_HTTP_PORT environment variable.
96114
EXPOSE 1787
97115

98-
# We're not installing curl, but busybox has a wget workalike:
99-
HEALTHCHECK CMD wget --quiet --output-document - http://localhost:1787/ping
116+
# Healthcheck: ping the web server to verify it's responding.
117+
# - Uses PS_HTTP_PORT if set, otherwise defaults to 1787
118+
# - start-period: PhotoStructure can take time to initialize on first run
119+
# - interval/timeout: balance between responsiveness and resource usage
120+
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
121+
CMD wget --quiet --output-document - "http://localhost:${PS_HTTP_PORT:-1787}/ping"
100122

101123
# https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact
102124

LICENSE.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ authors and copyright holders) that governs your use of the Product (any
77
software or hardware installed or made available by PhotoStructure, Inc.).
88

99
**If you do not agree to the following terms of this license, please <a
10-
href="https://photostructure.com/faq/uninstall/" target="_blank">uninstall</a>
10+
href="/guide/uninstall/" target="_blank">uninstall</a>
1111
the Product.**
1212

1313
### Copyright
1414

1515
The Product is protected by copyright and other intellectual property laws and
16-
treaties. Photostructure, Inc. retains the title, copyright, and all
16+
treaties. PhotoStructure, Inc. retains the title, copyright, and all
1717
intellectual property rights in the Product.
1818

1919
### License
@@ -56,19 +56,19 @@ derivative works of the Product.
5656
The Product may periodically download and install updates. These updates may
5757
include bug fixes, security updates, and new features. Automatic updates may be
5858
disabled by the user via <a
59-
href="https://photostructure.com/getting-started/advanced-settings/"
59+
href="/getting-started/advanced-settings/"
6060
target="_blank">settings</a>.
6161

6262
The Product may send error reports that contain limited file metadata via a
6363
third party (such as Sentry). Error reports may be <a
64-
href="https://photostructure.com/faq/error-reports/#how-to-opt-out-of-sending-error-reports"
64+
href="/guide/error-reports/#how-to-opt-out-of-sending-error-reports"
6565
target="_blank">disabled by the user</a>.
6666

6767
[//]: # "The URL above must be fully-qualified, as the EULA is included in the welcome page."
6868

6969
### Amendments to this Agreement
7070

71-
Photostructure, Inc. reserves the right, at its sole discretion, to modify or
71+
PhotoStructure, Inc. reserves the right, at its sole discretion, to modify or
7272
replace this Agreement at any time. If a revision is material we will provide at
7373
least 30 days' notice prior to any new terms taking effect. What constitutes a
7474
material change will be determined at our sole discretion.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ PhotoStructure for Servers requires:
1111

1212
## Installation instructions
1313

14-
1. Read and accept the [**end-user license agreement**](https://photostructure.com/eula), then
14+
1. Read and accept the [**end-user license agreement**](https://photostructure.com/eula), then
1515

1616
2. check out instructions for [**docker**](https://photostructure.com/server/photostructure-for-docker/) or [**docker-compose**](https://photostructure.com/server/photostructure-for-docker-compose/).
1717

0 commit comments

Comments
 (0)