Alpha? Whatâs that?
Please note: alpha builds should be considered extremely experimental, and may not even launch on all platforms.
Read more about alpha and beta builds are here
Release notes
-
There were some crash-bugs in alpha.4, alpha.5, and alpha.6. 
PhotoStructure for Desktops on macOS is still not working with this build, but all other editions of PhotoStructure seem to be functional. Please report here or on Discord if you see anything odd, unexpected, or possibly buggy.
-
PhotoStructure for Docker users: If your docker or docker-compose scripts used $UID, please switch to using$PUID. If you used$GID, please switch to$PGID.Prior releases tried to be âniceâ and support both
$UIDand$PUID(as well as both$GIDand$PGID), but this turned out to be a bad idea.bashand other commands consider$UIDand$GIDto be reserved, read-only, and trustable environment variables, which could cause issues. Weâll just stick with the linuxserver.io standard. Details: https://photostructure.com/go/pgid -
Support for remote TCP GELF-compatible logging servers via the new PS_LOG_SERVERandPS_LOG_SERVER_LEVELsettings. -
/
âFriendlyâ duration strings are now supported (after I typoed the fourth ISO duration string). See https://photostructure.com/getting-started/advanced-settings#duration for details. -
/
Prior versions of PhotoStructure compiled the front-end javascript against an ES5 target, which caused older, unsupported iOS devices to not render the frontend. When we heard that Nighthawkâs Grandmaâs iPad didnât work, though, this had to be fixed. We know build against ES3, and should support ancient versions of Safari. -
/
/
The prior build (alpha.2andalpha.3) introducedglobs, but having bothscanPathsandglobsresulted in confusion (and several bugs). File exclusion patterns were completely revisited in this build. Implementation details and usage are explained in this forum post. -
/
Sidecar handling was improved: photo.JPEGnow matches up withphoto.JPG.xmp. -
When PhotoStructure copies files on macOS and Windows, it now retains file âbirthtimeâ metadata. This isnât a field that exists on standard Linux filesystems, so itâs not supported there. Set retainFileBirthtimes=falseto disable this new behavior. -
Lazy loading is now configurable, via the new lazyLoadExtraVhsetting. Use a smaller value if youâre serving your library over a constrained network. -
/
Several sync report improvements:-
The sync report directory can be opened via the nav menu (if accessed via localhost), or on PhotoStructure for Desktops, via the tray and system menus.
-
The README.txt now includes a comprehensive list of âstatesâ for files and directories.
-
Added a new âatâ column thatâs ISO-date-time formatted, because most spreadsheet apps donât know how to parse millis-from-common-epoch.
-
Sync reports no longer worryingly state that all sidecars were skippedâthe sync report now states what file(s) the sidecar will be associated with, and only marked as excluded if they donât match with any sibling photo or video file.
-
Sync reports now include a âstartedâ state emitted after being dequeued from the work queue.
-
Prior sync report CSVs could contain a âdetailsâ cell that included newlines. Although Excel and LibreOffice parse these CSVs properly, Google Sheets donât, and there was discussion asking if these newlines could be avoided. Good news, everyone,
/\r?/n/gis replaced with": "in the details column now! -
If automatic organization is enabled (see the
copyAssetsToLibrarysetting), a new sync report row will be added when photos and videos are copied into your library.
-
-
/
When sync finishes for a given path, and retryEnqueuedistrue,syncwill look at the last day of sync reports for paths that are âstuckââpaths that have a âenqueuedâ entry, but no subsequent âsyncedâ, âtimeoutâ, or âfailedâ entry, and retry them. -
A bug in URI root encoding caused alpha.2throughalpha.4to have several sync reporting and progress panel-related errors, which should now be resolved. -
Depending on how PhotoStructure was shut down, the syncprocess could have been force-killed while still closing the database, which would result inSQLITE_CORRUPT. A newsyncExitTimeoutMssetting has been added, which defaults to 1 minuteâthis should be enough to close SQLite even on the slowest remote HDDs and largest libraries, but now you can extend this if you must.` -
Work-in-progress files, (hidden files starting with .WIP-), used by metadata extraction and transcoding ops, now use a filesystem mutex to avoid race conditions (this caused random import failures on high-CPU-count servers). -
Filesystem watches for the same path are now shared within a given process (Node.js quietly fails when watch is invoked more than 3 times for the same path. Again, this would only impact users with high-CPU-count servers). -
Videos and images are no longer considered for aggregation (to avoid spurious live photo matches). (PhotoStructure will revert this when Live Photos are properly aggregated). -
PhotoStructure for Desktops has a âpre-flight checkâ of the library directory at startup. Prior versions could fall into an infinite loop if the directory permissions were wrong. -
Library directory suggestions now filter out any directories that are not read-write by the current user. -
The â
Not Connectedâ dialog no longer flashes epi(lepti)cally when the library server isnât available. -
Backend state, liked current running version, isPaused, and current plan is now synchronized with the front-end after every XHR request. -
Fixed ./photostructure main --tail(prior versions would erroneously report the arg as being invalid). -
PhotoStructure for Desktop billing links now open in the current window -
Due to an unclosed http response, the webserver would hang if previews were missing -
Fixed includedPreviewTagssettingâscapturedAtandexposureSettingssupport for non-standard tag locations. Preview images are tagged to let Apple Preview and Eye of Gnome properly extract exposure settings. -
/
Reduced db mutex contention during backups by pausing work item dequeuesâthis could cause tasks to âtime outâ when they were just waiting for the backup to complete. -
The âyour library is already openâ and âyour library is missingâ preflight check dialog buttons for PhotoStructure for Desktops didnât work properly. We use the new electron API properly now. -
File copies could erroneously timeout under heavy I/O, causing larger file imports to fail randomly. We now use a progress watchdog instead of a hard timeout. -
/
Wrapped PhotoStructure for Desktops launch block in a try/catch to ensure errors got rendered to a user-visible dialog -
PhotoStructure for Docker: If $PUIDor$PGIDarenât âeffectiveâ (either the current effective user id doesnât match$PUID, or current effective group id doesnât match$PGID), all commands (main,sync,web, âŚ) will now emit a warning with a link to the forum post with the solution: https://forum.photostructure.com/t/1597/2. -
Process shutdown was refactored a bit:-
To avoid premature shutdown (and dreaded
SQLITE_CORRUPTerrors), we now fully rely on âendableâ component timeouts, rather than having a single top-level timeout. If, say, the db takes a while to shut down, the new code will be patient and wait for it now. Shutdown may take a bit longer, but in testing I havenât measured slower shutdowns. -
Child processes now listen on
stdoutfor--exit, process signals, and the newexitshared-state event to initiate shutdown.
-
-
Volume and mountpoint parsing now uses the validateMountpointssetting to only return user-rXdirectories. -
Expired subscription licenses are now auto-refreshed after upgrading to a new major/minor version. -
Multiprocess state sharing is now lockless to avoid multi-process deadlocks in alpha.3. -
Advisory locks use filesystem mutexes, rather than relying on SQLite unique constraints. -
Improved info --exclude-globsoutput -
File SHAs are cached and invalidated only if fs.StatssizeormtimeMschange. Prior versions would invalidate previously-cached SHAs too aggressively, which could result in the entire file being re-read several times unnecessarily. -
Pulled in latest versions of Electron, sharp, node, typescript, ExifTool, and other third-party libraries.
Installation instructions
Please take a backup of your system before continuing!
PhotoStructure for Desktop users
- Shut down PhotoStructure
- Download and install: https://photostructure.com/go/alpha
Running the alpha installer will replace the currently installed version. PhotoStructure for Desktops will detect that itâs an alpha build, and automatically upgrade you to newer alpha or beta builds, and then âstickâ to stable builds (once v2.1-stable is released).
PhotoStructure for Docker users
- Shut down PhotoStructure
- Run
docker pull photostructure/server:alphain a terminal - Change your
docker runcommand to usephotostructure/server:alpha
PhotoStructure for Docker Compose users
docker-compose down- Edit your
docker-compose.ymlto use
image: photostructure/server:alpha
docker-compose pull ; docker-compose up -detach
PhotoStructure for Node users
-
Make sure youâve got Node.js 16.15.0 or later installed. If youâre using
nvm, runnvm install 16 ; nvm alias default nodeto get the latest. -
Shut down PhotoStructure
-
cdinto yourphotostructure-for-serversdirectory, and rungit checkout alpha ; ./start.sh
Iâm seeing âCannot find module âstream/promisesââ
Please upgrade to Node 16 or later. Instructions are above.


