Version 1.0.0-beta.1 is out!

Beta? What’s that?

Remember: beta builds should be considered experimental and may be unstable.

Read more about alpha, beta, and stable releases here.

Installation instructions

PhotoStructure for Desktop users

if you’re on the alpha build already, just select “check for updates” and PhotoStructure should upgrade to -beta.1 automatically.

If not, download a new installer here: PhotoStructure | Install PhotoStructure

PhotoStructure for Docker users

Change to image photostructure/server:beta. Know that UID and GID are now configurable, but -beta.1 now defaults to running as root if the current system settings.toml exists and is owned by root.

PhotoStructure for Node users

Shut down PhotoStructure, then run git stash -u ; git checkout beta && ./

More installation details are here:

Now: what’s new in -beta.1, you ask? Well…

Continuous integration is back!

This release has a bunch of behind-the-scenes improvements–the biggest for me, personally, is switching from GitLab CI to GitHub Actions for continuous integration.

PhotoStructure has a ton of unit, integration, and system tests: over 1,000 front-end tests, more than 4,500 “core” tests, and more than 1,000 “library” tests–including a “test import” and “test rebuild” run on a 1GB set of “exemplar” photos and videos.

These tests all run on all OSes automatically, but for most of the alpha builds, CI has been broken due to node/npm/yarn/gyp/gitlab-runner incompatibilities:

Each of those failed jobs were due to the gitlab-runner wedging in ways that I couldn’t reproduce locally.

I switched to GitHub Actions for CI, and after playing bug and test whack-a-mole for the past couple days, this morning I was finally was greeted with this:


What visible changes are in 1.0.0-beta.1?

A ton, actually!

  • :sparkles: Added a first pass at tag normalization: the “Album”, “Keyword” and “Who” tags now all support “aliases”, controlled by the new rootTagAlbumsAliases, rootTagKeywordsAliases, and rootTagWhoAliases settings. This helps normalize tags in existing files, say, if your keywords aren’t (all) in English, or have inconsistencies (“Keyword/Sky” and “Keywords/Sky”).

  • :sparkles: Dropdown menu improvements

    • :package: Dropdown menus are now positioned to ensure the content is visible. If possible, they show to the right and below the click target, but will render to the left or even above the click target if the right or bottom screen edge is close.
    • :package: Dropdown menus now have a close button.
    • :package: Dropdown menus can now be dismissed by clicking or tapping anywhere else on the screen, and these taps and clicks that dismiss a menu are ignored.
    • :package: Dropdown menu contents can scroll vertically if their content is too tall for the screen.
  • :sparkles:/:package: Improved UID/GID handling for those upgrading PhotoStructure for Docker from v0.9.

    Prior to v1.0, PhotoStructure for Docker defaulted to running as root. To prevent upgrades from failing due to permission issues, we now default the userid to match the current owner of /ps/config/settings.toml.

    This default value will be overridden if UID, GID, PUID, or PGID are set, which is recommended to minimize both the number of files owned by root, and the number of processes running as root (even within containers).

    If the file is missing, we default to 1000 for both the UID and GID, which
    is the default for the first non-system user (at least in Ubuntu and Fedora).

  • :bug: Fixed PhotoStructure for Desktops packaging: alpha.7 was erroneously omitting required third-party .so/.dlls.

  • :bug: Name parsing for family names that end in “i” is now fixed.

  • :bug: The when: and date: search query filters are now synonyms, and normalize to date: (details).

  • :bug:/:package: Tag paths are normalized to “NFC” Unicode Normalization Form now. This should help library portability between macOS and other platforms.

  • :bug: Asset streams are now always scrolled into view on navigation (this was broken in alpha.7)

  • :bug: Navigating from the welcome page to the plans page could take a while if the user had many slow drives. An aggressive timeout (3 seconds) was added to prevent the page from hanging.

  • :bug:/:package: The “shown” asset file variant in the asset info panel is easier to select now (the prior click target was only the pathname)

  • :bug:/:package: Searching for before:2022 now works (if you want a query that returns all assets in your library). Previous versions applied the “captured at” validity filter to dates, which reject dates more than several weeks in the future.

  • :package: The View menubar items were re-ordered

  • :package: Environment and TOML settings now support “aliases.” This allows us to change or improve the names of settings between versions but not break existing configurations. These aliases are listed per setting in the library and system settings.toml files now.

  • :package: settings.toml and defaults.env now enumerate all environment and TOML key aliases (so prior setting names can be found).

  • :bug:/:package: Clicking “continue” from /welcome now has an aggressive timeout to prevent hangups during the initial installation flow. If you have tons of slow external disks attached to your computer, this should help.

  • :bug: Subscription signups could fail sometimes when the Stripe API reported that newly-created customers didn’t exist. We retry these requests automatically now to work around this issue.

  • :package: The info tool now supports filtering output, including deep fields. See info --help for more information.

  • :package: PhotoStructure for Node’s script now

    • :package: verifies that Node.js is at least v14.16.0
    • :package: warns if ffmpeg isn’t available
    • :package: warns Ubuntu 18 users that HEIF isn’t supported
  • :package: Ubuntu 18 fixes:

    • :bug: lsblk parsing supports older versions (that don’t support volume size information)

    • :package: rebuilt binaries on 18.04 (prior alpha builds had binaries built on Ubuntu 20.04)

What’s next?

This is a release-candidate build for version 1.0.0. In other words, if there aren’t any showstoppers found in this build after a couple days, this will become version 1.0.0.

1 Like

The good news is I downloaded the beta for macOS Big Sur.

The bad news…dragged to applications, opened, and was greeted by this:

Library.setup() failed: : ModelDbJanitor(/Volumes/Photos/PhotoStructure/.photostructure) {“from”:“ModelDbJanitor.setup”}: timeout¹¹⁶

Hit close, and then

main setup failed: ModelDbJanitor(/Volumes/Photos/PhotoStructure/.photostructure) {“from”:“ModelDbJanitor.setup”}: timeout¹⁶

Hit the close button again, got

main setup failed: ModelDbJanitor(/Volumes/Photos/PhotoStructure/.photostructure) {“from”:“ModelDbJanitor.setup”}: timeout¹⁶

a second time, and then the app closed.

Ooof, let’s get that fixed.

Can you either

  1. run a terminal, and then run /Applications/ --verbose and DM me the output, or

  2. send me debug logs (whatever is more convenient)?

Edit: Thanks for the log: like the 35 second timeout is firing when trying to spin up the database. Is your library on a (really) slow disk?

1 Like

I was running version 0.91 on Windows 10 PC. I could not find any option to check for upgrade.

I downloaded the Windows Installer and ran it. It went smoothly. I have started the trial and the program is rebuilding the library (it might take a few days)

BTW I still cannot not see what has changed to lose access from the LAN & WAN computers!

Sent logs off!

Another thing I noticed, and I’m not sure if this is intended behavior or the nature of going from Alpha to Beta, but now that PhotoStructure is opening, I noticed I was signed off and moved back to Lite.

I logged in, entered verification code, and I’m still on Lite status.

You’re using PhotoStructure lite.
Learn more about PhotoStructure plus.
If you’re a current subscriber, log in to activate your license on this computer.

Quit the program, reopened, and now I am back on Plus.

That’s actually by design: people running the “stable” build won’t upgrade to alpha and beta builds (even if they check for updates). You’ll only upgrade to a new alpha or beta build if you’re already running an alpha or beta.

Have you followed these steps? (maybe that’s not what you’re asking, though?)

Thanks for the report: I’ll try to reproduce this on my end.

Yes I have set PS_EXPOSE_NETWORK_WITHOUT_AUTH to 1. Everything had worked for a few weeks but something has not changed!! Maybe it’s something I have done.

Is this on Windows? A new Windows Update I just got on one of my test rigs just wiped out all my firewall settings: you might want to check that.

Also: if you don’t have a static IP for your server, your router’s DHCP server may have assigned your PhotoStructure box a new IP address.

Yes. That was the problem.

Windows changing settings without asking!!!


Another problem

When I subscribed to the Plus plan, I could not see anywhere to add a coupon. Every when paying no obvoius place to add a coupon. I cancelled the plan and tried again. I still couldn’t see to where to add a coupon.

How do you do this?

Agreed: it’s not super obvious.

I’ll add a screenshot tomorrow morning pointing out where Stripe put their coupon entry field. (Stripe is PhotoStructure’s payment processor, and they host the billing form).

If you set up a subscription, I can apply the coupon for you retroactively. As long as the coupon is applied before the trial period elapses, the coupon will be respected.

(I actually helped a couple other people with this as well).

beta version doesn’t start complaining about Node

$ ./photostructure --version

$ node --version

$ ./
Please install Node.js v14.16.0 or later
Please refer to <>.
You can also visit <> for help.

Oof, it worked on my box…

What OS is this, and what shell?

Windows 10
Git Bash (MINGW64)

Alpha versions worked fine

Oh man, sorry: I bet it’s the new version function

I didn’t even think to test awk on Windows… I’ll fix this first thing tomorrow morning.

Until then, just run

 npx yarn install

Yeah, I got the same I’m afraid.

Windows Server


What is yarn? :slight_smile:

$ yarn install
bash: yarn: command not found

EDIT: NVM I could just do ./photostructure from Git Bash

npm install yarn -g

1 Like

thanks :slight_smile:

The other solution is to put “npx” in front of yarn. I just edited my prior post.