Announce: Entangle “Top” release 0.7.1 – an app for tethered camera control & capture

Posted: February 21st, 2016 | Author: | Filed under: Entangle, Fedora, Photography | 1 Comment »

I am pleased to announce a new release 0.7.1 of Entangle is available for download from the usual location:

The this is mostly a bug fix release, but there was a little feature work on the film strip viewer widget. It has been rewritten to dynamically scale thumbnails according to the available space, and caches thumbnails at 256px size instead of 128px.

  • Fix linking problem with strict linkers
  • Misc spelling fixes to online help docs
  • Replace use of GSimpleAsyncResult with GTask
  • Specify versions when importing from python plugins
  • Remove use of deprecated GTK APIs
  • Render image stats overlay partially transparent
  • Fix error reporting when saving settings
  • Flush events after capture to avoid accidentally restarting preview
  • Make Nikon fine focus stepping finer
  • Ensure images are sorted by last modified date
  • Switch from 128 px to 256 px thumbnail sizes to benefit larger high dpi screens
  • Rewrite film strip browser to dynamically resize icons to fit available space
  • Draw symbolic icons in film strip if image is not yet loaded
  • Refresh translations from Zanata

Announce: Entangle “Charm” release 0.7.0 – an app for tethered camera control & capture

Posted: March 17th, 2015 | Author: | Filed under: Entangle, Fedora, Photography | Tags: , | No Comments »

I am pleased to announce a new release 0.7.0 of Entangle is available for download from the usual location:

The main features introduced in this release are a brand new logo, a plugin for automated capture of image sequences and the start of a help manual. The full set of changes is

  • Require GLib >= 2.36
  • Import new logo design
  • Switch to using for translations
  • Set default window icon
  • Introduce an initial help manual via yelp
  • Use shared library for core engine to ensure all symbols are exported to plugins
  • Add framework for scripting capture operations
  • Workaround camera busy problems with Nikon cameras
  • Add a plugin for repeated capture sequences
  • Replace progress bar with spinner icon

The Entangle project has a bit of a quantum physics theme in its application name and release code names. So primary inspiration for the new logo was the interference patterns from (electromagnetic) waves. As well as being an alternate representation of an interference pattern, the connecting filaments can also be considered to represent the (USB) cable connecting camera & computer. The screenshot of the about dialog shows the new logo used in the application:


Announce: Entangle “Strange” release 0.6.1 – an app for tethered camera control & capture

Posted: February 5th, 2015 | Author: | Filed under: Entangle, Fedora, Photography | Tags: , | No Comments »

I am pleased to announce a new release 0.6.1 of Entangle is available for download from the usual location:

This release has primarily involved bug fixing, but one major user visible change is a rewrite of the camera control panel. Instead of showing all possible camera controls (which can imply 100’s of widgets), only 7 commonly used controls are displayed initially. Other controls can be optionally enabled at the discretion of the user and customization is remembered per camera model.

  • Require GTK >= 3.4
  • Fix check for GIO package in configure
  • Add missing icons to Makefile
  • Follow freedesktop thumbnail standard storage location
  • Refactor capture code to facilitate plugin script automation
  • Fix bug causing plugin to be displayed more than once
  • Make histogram height larger
  • Strip trailing ‘2’ from widget labels to be more friendly
  • Completely rewrite control panel display to show a small, user configurable subset from all the camera controls.
  • Remember custom list of camera controls per camera model
  • Hide compiler warnings from new glib atomic opertaions
  • Update to newer gnulib compiler warnings code
  • Remove broken double buffering code that’s no required when using GTK3
  • Remove use of deprecated GtkMisc APis
  • Allow camera picker list to show multiple lines
  • Remove crufty broken code from session browser that was breaking with new GTK versions
  • Disable libraw auto brightness since it totally overexposes many images, generally making things look worse
  • Fix memory leak handling camera events
  • Add keywords to desktop & appdata files

Announce: Entangle “Down” release 0.6.0 – An app for tethered camera control & capture

Posted: May 2nd, 2014 | Author: | Filed under: Entangle, Fedora, Photography | Tags: , , | No Comments »

I am pleased to announce a new release 0.6.0 of Entangle is available for download from the usual location:

This release has a mixture of bug fixes and new features / changes and new widget styling

  • Add a demonstration plugin for setting up a captive photo box display mode
  • Switch to use Python3 for plugin engine instead of JavaScript
  • Use GTK dark theme
  • Require GNOME symbolic icon theme to be installed
  • Switch to require lcms2 instead of lcms
  • Move application icon into a standard directory mandated to work with the appdata tools
  • Make manual focus work with Canon EOS cameras
  • Disable flickering progress bar in preview mode with Canon EOS cameras
  • Remove use of deprecated GTK methods/classes/constants
  • Remove use of gexiv2 method which is not long exported
  • Remove use of deprecated libpeas methods
  • Add GTK-DOC transfer annotations / docs to all methods
  • Avoid loosing camera capabilities on disconnect
  • Fix off by one in histogram tables causing memory corruption
  • Mark appdata / desktop files for translation
  • Fix typos in README file
  • Fix inverted tests when checking if range widget changed
  • Avoid storm of expose events due to auto-drawer widget
  • Avoid never ending circular update of controls causing errors in some camera modes
  • Add workaround for crazy D5100 camera serial number
  • Add customizable highlight/background for images
  • Avoid reference leak of windows preventing proper cleanup
  • Remove camera manual/about/driver help windows since it did not contain any info useful to users
  • Filter list of cameras in connect dialog to only those which support capture/preview
  • Don’t auto connect to cameras which don’t support capture or preview
  • Ensure parent window is set on dialogs to prevent them falling behind main window
  • Fix crash with latest GTK due to incorrect overriding of GtkApplication startup method
  • Update to cope with changed GExiv API version
  • Refreshed translations from transifex

Thanks to the great work of the Fedora translation team, Entangle has > 90% translation coverage for Dutch, Polish, Ukrainian, French and Japanese and > 80% coverage for Swedish, Czech, Hungarian, Italian, Spanish, Chinese and German. If you are in a position to help translate Entangle further, consider joining the Fedora translation team.

Entangle at LibreGraphicsMeeting 2014, plugin system and Windows porting

Posted: April 12th, 2014 | Author: | Filed under: Entangle, Fedora, Photography | Tags: , , , , | No Comments »

Libre Graphics Meeting, 2014

Last week I took some time off from my day job working on virtualization, to travel to Leipzig for this years LibreGraphicsMeeting. This was my first visit to LGM, coming about after Jehan Pagès suggested that I present a talk about Entangle in order to attract more developer & user interest. I had a 20 minute slot at the end of the first day where I went through the basic concepts / motivation behind the project, then did a short live demo, finishing up with a look at some of the problems facing / future needs of the project. Historically my talks have always involved death-by-bullet-point style libreoffice slides, but for LGM I decided it was time to up my game. So I turned to the GNOME Pinpoint application:

“a simple presentation tool that hopes to avoid audience death by bullet point and instead encourage presentations containing beautiful images and small amounts of concise text in slides”

I took this to heart, creating a set of slides which consisted entirely of beautiful images I’ve taken myself overlaid with just one or two words of text. I found it quite a liberating experience to give a presentation using such a slide deck, since it freed me from having to read the slides myself or worry that I’d forgotten to talk about a particular bullet point. Hopefully those in the audience found the talk a more fluid & engaging experience as a result. After the talk, and in the days following, I had interesting discussions about Entangle with a number of other attendees, so going to LGM definitely achieved the goal of attracting more interest.

At the end of the last day, we had the usual conference group photo, but Jakub Steiner then raised the bar by getting out his quad-copter with camera mounted to shoot a group video from the air.

Application plugins

Since the very start of the project, it has always been the intention for users to be able to extend the core interface with custom plugins. Thus far though, this has been all talk, with little real action. Entangle is written using GTK/GObject with a fairly well structured object hierarchy / codebase to make it easier to understand / extend and integrates with the libpeas library for plugin infrastructure. What has been missing is proper annotations on the internal APIs to enable GObject Introspection to be able to correctly call them from non-C languages. The past few weeks I’ve been working hard to address all the warnings displayed by g-ir-scanner with the goal that all internal APIs are fully annotated with calling conventions.

I had tentatively setup libpeas to use the ‘gjs’ loader to enable plugins to be written in JavaScript, inspired by the fact that GNOME Shell is extendable using JavaScript. At LGM, Martin Owens (IIRC) mentioned in passing to me that he thought Entangle would be better off using Python. Though we didn’t get into a deep discussion on this matter at the time, it got me thinking about whether JavaScript was the right choice. A few months back I did start hacking on a GNOME Shell extension for displaying an astronomy weather forecast in the top bar, which naturally enough was in JavaScript. One of the frustrating things I found with that effort was a general lack of documentation / examples about JavaScript usage in the context of non-browser apps, as well as the lack of a good archive of reusable library functions. While the GNOME platform APIs are, of course, all available for usage, there’s more to the world than GNOME. In particular I needed code for calculating sunset/sunrise times and lunar phases. With this experience in mind, and since there are no plugins yet written for Entangle, I’ve decided to switch it to use Python for its plugin system. This means that as well as having access to the GNOME platform APIs, plugin authors will be able to leverage the entire Python ecosystem which is truly enormous. Since Entangle requires GTK3, which is pretty modern, I decided I might as well ignore Python 2.x, so Entangle is going to require Python 3 only. This avoids a painful decision later about whether/when to switch from 2 to 3.

To actually prove that the plugin system is useful, I’ve also started work on a simple demonstration plugin. The goal of the plugin is to provide a way to turn the UI into a capture “selfie” photobox. This was inspired by the fact that a user has already used Entangle for such a system in the past. The plugin basically just hides the menu bar, toolbar and camera settings panels, adds a large “capture” button and then puts the app into fullscreen mode. Working on this helped me identify a few issues in the codebase which were making life harder than it needed to be – for example there was no easy way to get access to the GtkBuilder object associated with a window, so getting hold of individual widgets was kind of tedious. With the first cut of the plugin now written and working, it should serve as nice example code for users interested in figuring out how to write more plugins. At the top of the list for plugins I want to work on next is something to automate the shooting of an entire sequence of images. For example with astrophotography it is common to take sequences of many 100’s of images over several hours. You quickly become bored of pressing the shutter button every 30 seconds, so automation is very useful.

Windows porting

One of the memorable quotes from LGM was

“5% of the Windows market is larger than 95% of the Linux [desktop] market”

While I’m not personally interested in using Windows on the desktop, preferring GNOME 3 and open source software exclusively, I realize that not everyone shares this viewpoint. There are plenty of people who want to continue to use Windows for whatever reasons they have, but wish to be able to use cool open source applications like LibreOffice, GIMP, Digikam. The Nikon provided software for DSLR control is not cheap, so there’s clearly an opportunity for Entangle to be useful for Windows users. The key factor from my POV is minimising the overhead / costs of maintaining the port. I don’t want to have to use Windows on a day-to-day basis for this porting work, so getting it working using Mingw64 and hopefully WINE is a pre-requisite.

Entangle depends on a number of 3rd party libraries the most critical of which are of course GTK3 and libgphoto2. GTK3 is available for Minge64 in Fedora already, but libgphoto2 is not in such good shape. There is clear evidence that someone has done some amount of work porting libgphoto2 to Windows in the past, but it is unclear to me if it was ever complete, as today’s codebase certainly does not work. One evening’s hacking was enough to fix the blocking compile errors exposed when cross-compiling with Mingw64, but that left many, many 100’s of compile warnings. Even with the native Linux toolchain, libgphoto2 spews several 100 compiler warning messages, which really obscure the warnings relevant to Mingw64. So I’ve spent several more evenings cleaning up compiler warnings in libgphoto2 on Linux, resulting in a 17 patch series just submitted upstream. Now I can focus on figuring out the rest of the Mingw64 portability problems in the codebase. There’s still a way to go before Entangle will be available on Windows, but at least it looks like it will be a feasible effort overall.