Monday, December 7, 2015

New PhotoFlow version 0.2.5

A new PhotoFlow version 0.2.5 is out!

This version bring two new cool features that will make the creation of local masks even easier:

  • A path selection tool that creates a closed region by connecting user-defined control points with a spline curve. It also provides an optional smooth falloff edge for feathering the selection. The path selection tool is similar to the path mask in Darktable, and most of the source code is actually derived from Darktable.
    This tool is particularly useful to generate smooth layer opacity masks for local editing.
  • A smoothing option for the brush of freehand drawing tool, with an adjustable smoothness:

Check this video tutorial to see how the new path tool works:

Here is a screenshot showing the adjustable smoothness settings for the freehand brush:

The complete changelog for version 0.2.5 can be found here.

The source code, as well as OSX and Windows installers, will be shortly available from the github repository.

For Ubuntu users, the updated packages are available either from the Highly Explosive PPA or the Photo Video Applications PPA.

Arch Linux PKGBUILD recipes are available from AUR.

Fedora Linux packages are available from COPR.

If you are not afraid to use a potentially more unstable version, you can select the photoflow-git or photoflow-unstable versions either from the PPAs or from AUR. This development versions include all the new features and bug fixes that are being prepared for the next stable release.

Happy Editing!


  1. Thanks a lot for sharing the useful information. The content and info in article was awesome.Image editing companies |Photo editing company in India

  2. I also thank you for this. Is there any information available on using masks, in regards to the Layer Name area at the bottom of the work space. Specifically, at the bottom of the work space on the HSL mask there is something called Layer Name and sub-ima(ge). I know that you have to specify a layer to make the mask work. What I would like to know is how these different layers are chosen for there effect on the image, and the effect of the sub-ima setting. Maybe, when you have time, you could provide some info on this. Thanks so much.

  3. The Layer Name field lets you specify from which layer the input pixels for the HSL mask are taken. For example, if you want to create a luminosity mask by using the "L" curve of the HSL mask, the layer specified by the "Layer Name" field will provide the pixel values from which the luminosity will be calculated.

    Suppose you want to increase the mid-tones contrast using a curves layer with an associated mid-tones luminosity mask. You have a base layer "A" on top of which you add a curves layer "B" with an associated HSL mask. Then you should select "A" as the HSL mask Layer Name, because you want to "modulate" the effect of the curve of layer "B" based on the luminosity of the input pixels from layer "A".

    The sub-image is there for completeness, and should be usually kept at the default value of 0.
    The fact is that PhotoFlow is structured in such a way that one layer might produce more than one image, in which case you need to specify which sub-image of the "multi-image" layer you want to retrieve.

    For the moment there is only one tool that produces more than one output image: the "Multi-level decomposition". All other tools only generate a single output image.

    Do not hesitate to ask more if I've not been clear enough...

    1. That's great, and thank you for the answer. Now, when I choose base layer "A" as input in Layer name:, it gives me two choices for base layer "A". One is base layer "A" and the other choice is base layer "A" (blended). What is the meaning of blended, in base layer "A" (blended)?

    2. The application of a given adjustment is split in two steps: one is the adjustment itself (for example an RGB curve), the second is the "blending" of the adjustment output with the underlaying input layer.

      Suppose that your layer "A" is an RGB curve adjustment, and that you reduce the opacity of layer "A" to 50% to mitigate the effect of the curve: the opacity affects the blending step.

      If you choose layer "A" in the Layer Name, you get the output of the RGB curve BEFORE the blending step, and therefore without the 50% opacity reduction applied.

      If you instead choose layer "A" (blended), you get the output of the blending step AFTER the 50% opacity reduction.

      I would say that in normal cases you can safely choose the "blended" version, unless you really need the layer data before the blending step... I'll try to figure out an example where the "not blended" data needs to be cloned instead of the "blended" one.

  4. I think the new brushes are great. But, I think that there may be a bug. When the brush comes into contact with a border of an image, it ceases to function properly. This is making it impossible to create masks that need to extend to the border. This also happens when the edge of the crop frame comes into contact with the image border. This is easy to work around, though. If there is some place else that you would like me to report problems, please let me know.

    1. Thanks Bill, I confirm the problem and I will look into that.

      The best way to report problems is through the GitHub issue tracker (, because it makes easier to keep track of what is solved and what is still to be fixed...

    2. Thanks, I'll use GitHub from now on.

    3. I forgot to mention that the bug with the brush tool should be fixed in the latest version.