Tag Archives: shotwell

Shotwell 0.32.0

Hello everyone, as “teased” over on discourse, April 22nd saw the release of Shotwell’s new stable version, 0.32.0.

New features include:

  • More image formats: AVIF, CR3, HEIF/HVEC, JPEG XL & WebP
  • Some initial geographical data handling (The map display will likely return in 33)
  • Multiple libraries and settings that are isolated from each other
  • Support of more than one account for publishing services
  • Manual tagging of persons
  • Automatic detection and recognition of persons can be enabled during compile time
  • HiDPI support for the image viewer
  • Simpler handling of hierarchical tags

The new version should pop up on flathub soon, and if you were subscribing to the GNOME nightly version, I would also recommend to switch to the flathub version, the GNOME nightly version will start to become quite unstable soonish.

dLeyna updates and general project things

I have too many projects. That’s why I also picked up dLeyna which was laying around looking a bit unloved, smacked fixes, GUPnP 1.2 and meson support on top and made new releases. They are available at

  • https://github.com/phako/dleyna-core/archive/refs/tags/v0.7.0.tar.gz
  • https://github.com/phako/dleyna-connector-dbus/archive/refs/tags/v0.4.0.tar.gz
  • https://github.com/phako/dleyna-server/archive/refs/tags/v0.7.0.tar.gz
  • https://github.com/phako/dleyna-renderer/archive/refs/tags/v0.7.0.tar.gz

Furthermore I have filed an issue on upstream’s dLeyna-core component asking for the project to be transferred to GNOME infrastructure officially (https://github.com/intel/dleyna-core/issues/55).

As for all the other things I do. I was trying to write many versions of this blog post and each one sounded like an apology, which sounded wrong. Ever since I changed jobs in 2018 I’m much more involved in coding during my work-time again and that seems to suck my “mental code reservoir” dry, meaning I have very little motivation to spend much time on designing and adding features, limiting most of the work on Rygel, GUPnP and Shotwell to the bare minimum. And I don’t know how and when this might change.

Introducing Shotwell profiles

I just uploaded a new unstable release version of Shotwell, 0.31.1. Why that took roughly a year and why that still doesn’t contain everything I wanted it to contain will be the content for some following posts.

Previously, there was already a way to have separate databases, but you would share the settings and thus the import folder between the two databases. Even more so, developing on the machine where you have your own photo collection caused me to import test data into my collection more than once.

A profile is really just a separated database and set of settings. To create or use a profile, just call shotwell with its name:

$ shotwell --profile="Development environment"

It is possible to set the storage directory of the profile using the old -d/--datadir command line options when using a profile name for the first time. Be careful, though: currently there is no protection against typos. If a profile you select does not exist yet, it will create a new one.

To list the available profiles, use --list-profiles

$ shotwell --list-profiles
Available profiles:
Profile name: Development environment
Profile Id: 98d7b5b1-b7a6-4862-ae29-a65d99ed90e1
Data dir: /home/jens/.local/share/profiles/98d7b5b1-b7a6-4862-ae29-a65d99ed90e1

And that’s it.

On the way to 0.30

Another “On the way to” post for Shotwell.


There is now a nightly flatpak for Shotwell available. You can use this flatpakref for installation. To protect your database, it will work on its own private database. If you really want to work with your current data, I have described a way to make it access your normal Shotwell database in this comment on issue 6. The upcoming unstable flatpak as well as any potentially stable flatpaks on flathub will have the access enabled by default, though.

The nice benefit of the flatpak is that you will have access to the latest versions on Ubuntu 16.04 again. In fact that’s how all the screenshots below were done.

A note to snap enthusiasts: There is some preliminary work available at https://github.com/phako/shotwell-snap (not from me, I just made a minor fix) which unfortunately I could not even convince to compile anymore. If anyone wants to pick up from there, you are definitely welcome to do so!



If you have run an unstable version or GIT version of Shotwell you might notice that it looks different:

Shotwell library view with dark theme
Shotwell with dark theme

Yes, there is a dark theme variant now. If you don’t like it, you may switch it back to the light theme in settings.

Shotwell library view with bright theme
Shotwell with bright theme

Extended information

Working with the extended information panel was always somewhat awkward in the past with the extra window floating on top, sometimes not even showing anything because it was opened before selecting something, staying at its minimum size etc. The extended information panel was reworked to sit in the sidebar now:

Face detection

Face detection is available in the main line again. I have merged it to master after Ricardo took the code and massaged it to apply again after recent Shotwell changes.

Due to the persisting issues, main one is that it has slightly bad UX, it is disabled by default currently. The flatpak has it enabled, if you want to check it out yourself, use -Dface-detection=true when calling meson.

There is work going on to improve the user experience of the face detection as well as improving the face detection itself. I am really looking forward to the outcome.

Facebook integration

Facebook integration will likely cease to work August 1st, 2018. This is due to the recent changes in the graph API. The current permission Shotwell uses to upload images is no longer supported. I think that I will not have the time to fix this in time for the API shutdown. Sorry about that.

On the way to 0.28

Shotwell 0.28 “Braunschweig” is out.

Shotwell 0.28 about box

Half a year later than I was expecting it to be, sorry. This release fixes 60 Bugs! Get it at GNOME’s download server, from GIT or in the Shotwell PPA really soon™. A big thank you to all contributors that make up all the bits and pieces for such a release.

Notable features:

  • The viewer can now be started in full screen mode
  • We have added better support for images with transparent backgrounds
  • The image processing pipeline got much faster
  • Importing RAW images got much faster
  • Finally got rid of one of the “Cannot claim USB device” errors for camera import
  • Tumblr got promoted to be in the main export plugin set
  • It can be build using meson

Things we have lost:

  • We removed F-Spot import. I believe that this is not necessary anymore now.
  • Racje and Yandex plugins are no longer in the plugin set that is build by default

A tale of three build systems


While we’re still 30s behind hand-written make, I totally would use any of the two over hand-written Makefiles.
As you might have noticed, meson is the new kid on the block. Step by step I am currently converting some projects to it, spearheading Shotwell. Since Shotwell only “recently” became an autotools project, you may ask why. Shotwell had a hand-written makefile system. This made some tasks that would have been incredibly easy with autotools, such as mallard documentation handling, more complicated than it should be. Since autotools provides all the nice features that you want for your GNOME environment, it made sense to leverage that.

Number games

Here are some numbers from the various transition phases. All taken on my i5 X201 laptop.

  • We build from a fresh git checkout (or git clean -dxf)
  • All builds are generated on the same machine with make -j $(($(nproc) + 2))
  • In the case of Meson, the ccache cache was emptied before

Shotwell 0.22

real	0m0,011s
user	0m0,004s
sys	0m0,004s
real	5m15,892s
user	17m30,392s
sys	1m10,984s

Shotwell 0.23.0

Shotwell’s makefile had a subtle rule issue that caused the plugins to be compiled several times over with valac. Also it was calling pkg-config with each compiler call, so after fixing that, we get these numbers for the compile step:

real	2m1,760s
user	6m31,788s
sys	0m26,788s

Shotwell master


autogen.sh (including configure run):

real	0m32,315s
user	0m26,900s
sys	0m0,984s


real	2m25,164s
user	7m47,380s
sys	0m29,028s


mkdir build && meson build

real	0m1,529s
user	0m1,056s
sys	0m0,304s

ninja -C build

real	2m9,369s
user	7m17,276s
sys	0m33,660s


The time of the year…

Springtime is releasetime!
Monday saw a couple of new releases:


Shotwell 0.26.0 “Aachen” was released. No “grand” new features, more slashing of papercuts and internal reworks. I removed a big chunk of deprecated functions from it, with more to come for 0.28 on our way to GTK+4 and laid the groundworks for better integration into desktop online account systems such as UOA and GOA.
GExiv2 also received a bugfix release with its main highlight of proper documentation generation.


In Rygel, things are more quiet. Version 0.34.0 moved some helpful classes for configuration handling to librygel-core and a couple of bugs were fixed. GSSDP and GUPnP also saw a small bugfix release.



First, a wrap-up of the last Quiztime. For an excellent explanation of the issue, read this comment. Also note that this is not the most nice way to do plugins with C++, it’s a boiled down piece of code I debugged.


I’m not sure if there is some confusion about the current development model of Shotwell. I noticed that some distributions seem to try to pick up the current development branch (0.25.x). I strongly advise against that at this point in time. It has just seen a major change in the Menu handling code and might still have severe usability regressions.
While I appreciate any testing of the code, I would really not have the current unstable version of Shotwell stuck in a released distribution. If you want to try those releases on Ubuntu, there is an unstable PPA available.
So to sum up: Shotwell follows the “traditional” version scheme of “Odd is unstable, even is stable” and roughly tries to stick to the GNOME release schedule.