Here in the U.S., we have a big holiday coming up this week: Thanksgiving.
Serendipitously, this holiday also happens to fall when a few neat things are happening around the community, and what better time is there to recognize some folks and to give thanks of our own? No time like the present!
I feel a special “Thank You” should first go to a photographer and fantastic supporter of the community, Dimitrios Psychogios. Last year for our trip to Libre Graphics Meeting, London he stepped up with an awesome donation to help us bring some fun folks together.
Fun folks together.
Mairi, the darktable nerds, a RawTherapee nerd, and a PhotoFlow nerd.
(and the nerd taking the photo, patdavid)
This year he was incredibly kind by offering a donation to the community (completely unsolicited) that covers our hosting and infrastructure costs for an entire year! So on behalf of the community, Thank You for your support, Dimitrios!
I’ll be creating a page soon that will list our supporters as a means of showing our gratitude. Speaking of supporters and a new page on the site…
Someone had asked about the possibility of donating to the community on a post. We were talking about providing support in darktable for using a midi controller deck and the costs for some of the options weren’t too extravagant. This got us thinking that enough small donations could probably cover something like this pretty easily, and if it was community hardware we could make sure it got passed around to each of the projects that would be interested in creating support for it.
An example midi-controller that we might get support for in darktable and other projects.
That conversation had me thinking about ways to allow folks to support the community. In particular, ways to make it easy to provide support on an on-going basis if possible (in addition to simple, single donations). There are goal-oriented options out there that folks are probably already familiar with (Kickstarter, Indiegogo and others) but the model for us is less goal-oriented and more about continuous support.
Patreon was an option as well (and I already had a skeleton Patreon account set up), but the fees were just too much in the end. They wanted a flat 5% along with the regular PayPal fees. The general consensus among the staff was that we wanted to maximize the funds getting to the community.
The best option in the end was to create a merchant account on PayPal and manually set up the various payment options. I’ve set them up similar to how a service like Patreon might run with four different recurring funding levels and an option for a single one-time payment of whatever a user would like. Recurring levels are nice because they make it easier to plan with.
Our requirements for the infrastructure of the site are modest and we haven’t actively pursued support or donations for the site before. That hasn’t changed.
We’re not asking for support now. The best way that someone can help the community is by being an active part of it.
Engaging others, sharing what you’ve done or learned, and helping other users out wherever you can. This is the best way to support the community.
I purposely didn’t talk about funding before because I don’t want folks to have to worry or think about it. And before you ask: no, we are not and will not run any advertising on the site. I’d honestly rather just keep paying for things out of my pocket instead.
We’re not asking for support, but we’ll accept it.
With that being said, I understand that there’s still some folks that would like to contribute to the infrastructure or help us to get hardware to add support in projects and more. So if you do want to contribute, the page for doing so can be found here:
There are four recurring funding levels of $1, $3, $5, and $10 per month.
There is also a one-time contribution option as well.
We also have an Amazon Affiliate link option. If you’re not familiar with it, you simply click the link to go to Amazon.com. Then anything you buy for the next 24 hours will give us some small percentage of your purchase price. It doesn’t affect the price of what you’re buying at all. So if you were going to purchase something from Amazon anyway, and don’t mind - then by all means use our link first to help out!
This week we also finally hit 1,000 users registered on discuss! Which is just bananas to me. I am super thankful for each and every member of the community that has taken the time to participate, share, and generally make one of the better parts of my day catching up on what’s been going on. You all rock!
While we’re talking about a number “1” with bunch of zeros after it, we recently made some neat improvements to the forums…
We are a photography community and it seemed stupid to have to restrict users from uploading full quality images or raw files. Previously it was a concern because the server the forums are hosted on have limited disk space (40GB). Luckily, Discourse has an option for storing all uploads to the forum on Amazon S3 buckets.
I went ahead and created some S3 buckets so that any uploads to the forums will now be hosted on Amazon instead of taking up precious space on the server. The costs are quite reasonable (around $0.30/GB right now), and it also means that I’ve been able to bump the upload size to 100MB for forum posts! You can now just drag and drop full resolution raw files directly into the post editor to include the file!
70MB GIMP .xcf file? Just drag-and-drop to upload, no problem! :)
On a slightly geekier note, did you know that the code for the entire website is available on Github? It’s also licensed liberally (CC-BY-SA), so no reason not to come and fiddle with things with us! One of the features of using Github is integration with Travis CI (Continuous Integration).
What this basically means is that every commit to the Github repo for the website gets picked up by Travis and built to test that everything is working ok. You can actually see the history of the website builds there.
I’ve now got it set up so that when a build is successful on Travis, it will automatically publish the results to the main webserver and make it live. Our build system, Metalsmith, is a static site generator. This means that we build the entire website on our local computers when we make changes, and then publish all of those changes to the webserver. This change automates that process for us now by handling the building and publishing if everything is ok.
In fact, if everything is working the way I think it should, this very blog post will be the first one published using the new automated system! Hooray!
You can poke me or @paperdigits on discuss if you want more details or feel like playing with the website.
Speaking of @paperdigits, I want to close this blog post with a great big “Thank You!“ to him as well. He’s the only other person insane enough to try and make sense of all the stuff I’ve done building the site so far, and he’s been extremely helpful hacking at the website code, writing articles, make good infrastructure suggestions, taking the initiative on things (t-shirts and github repos), and generally being awesome all around.
I realize that I’m a little late to this, but photographer João Almeida has created a wonderful set of film emulation presets for darktable that he uses in his own workflow for personal and commisioned work. Even more wonderful is that he has graciously released them for everyone to use.
These film emulations started as a personal side project for João, and he adds a disclaimer to them that he did not optimize them all for each brand or model of his cameras. His end goal was for these to be as simple as possible by using a few darktable modules. He describes it best on his blog post about them:
The end goal of these presets is to be as simple as possible by using few Darktable modules, it works solely by manipulating Lab Tone Curves for color manipulation, black & white films rely heavily on Channel Mixer. Since I what I was aiming for was the color profiles of each film, other traits related with processing, lenses and others are unlikely to be implemented, this includes: grain, vignetting, light leaks, cross-processing, etc.
Some before/after samples from his blog post:
João Portra 400
(Click to compare to original)
João Kodachrome 64
(Click to compare to original)
João Velvia 50
(Click to compare to original)
If you see João around the forums stop and say hi (and maybe a thank you). Even better, if you find these useful, consider buying him a beer (donation link is on his blog post)!
Hugin is an excellent tool for for aligning and stitching images. In this article, we’ll focus on aligning a stack of images. Aligning a stack of images can be useful for achieving several results, such as:
bracketed exposures to make an HDR or fused exposure (using enfuse/enblend), or manually blending the images together in an image editor
photographs taken at different focal distances to extend the depth of field, which can be very useful when taking macros
photographs taken over a period of time to make a time-lapse movie
For the example images included with this tutorial, the focal length is 12mm and the focal length multiplier is 1. A big thank you to @isaac for providing these images.
You can download a zip file of all of the sample Beach Umbrellas images here:
We’re going to align these bracked exposures so we can blend them:
Select Interface → Expert to set the interface to Expert mode. This will expose all of the options offered by Hugin.
Select the Add images… button to load your bracketed images. Select your images from the file chooser dialog and click Open.
Set the optimal setting for aligning images:
Feature Matching Settings: Align image stack
Optimize Geometric: Custom parameters
Optimize Photometric: Low dynamic range
Select the Optimizer tab.
In the Image Orientation section, select the following variables for each image:
Roll
X (TrX) [horizontal translation]
Y (TrY) [vertical translation]
You can Ctrl + left mouse click to enable or disable the variables.
Note that you do not need to select the parameters for the anchor image:
Select Optimize now! and wait for the software to finish the calculations. Select Yes to apply the changes.
Select the Stitcher tab.
Select the Calculate Field of View button.
Select the Calculate Optimal Size button.
Select the Fit Crop to Images button.
To have the maximum number of post-processing options, select the following image outputs:
Panorama Outputs: Exposure fused from any arrangement
Format: TIFF
Compression: LZW
Panorama Outputs: High dynamic range
Format: EXR
Remapped Images: No exposure correction, low dynamic range
Select the Stitch! button and choose a place to save the files. Since Hugin generates quite a few temporary images, save the PTO file in it’s own folder.
Hugin will output the following images:
a tif file blended by enfuse/enblend
an HDR image in the EXR format
the individual images after remapping and without any exposure correction that you can import into the GIMP as layers and blend manually.
You can see the result of the image blended with enblend/enfuse:
With the output images, you can:
edit the enfuse/enblend tif file further in the GIMP or RawTherapee
tone map the EXR file in LuminanceHDR
manually blend the remapped tif files in the GIMP or PhotoFlow
So you can imagine my doubt when confronted with an email about using some material from pixls.us for their latest issue…
If the name sounds familiar to anyone it may be from a recent post by Joe McNally who is featured prominently in the September 2016 issue. He was also just inducted as a fellow into the society!
It turns out my initial doubts were completely unfounded, and they really wanted to run a page based off one of our tutorials.
The editors liked the Open Source Portrait tutorial. In particular, the section on using Wavelet Decompose to touch up the skin tones:
Yay Mairi!
How cool is that? I actually searched the archive and the only other mention I can find of GIMP (or any other F/OSS) is from a “Step By Step” article written by Peter Gawthrop (Vol. 149, February 2009). I think it’s pretty awesome that we can promote a little more exposure for Free Software alternatives. Especially in more mainstream publications and to a broader audience!
Anyone that has spent any time around me would realize that I’m particularly fond of portraits. From the wonderful works of Martin Schoeller to the sublime Dan Winters, I am simply fascinated by a well executed portrait. So I thought it would be fun to take a look at some selections from the “father” of environmental portraits - Arnold Newman.
Newman wanted to become a painter before needing to drop out of college after only two years to take a job shooting portraits in a photo studio in Philadelphia. This experience apparently taught him what he did not want to do with photography…
Luckily it may have started defining what he did want to do with his photography. Namely, his approach to capturing his subjects alongside (or within) the context of the things that made them notable in some way. This would became known as “Environmental Portraiture”. He described it best in an interview for American Photo in 2000:
I didn’t just want to make a photograph with some things in the background. The surroundings had to add to the composition and the understanding of the person. No matter who the subject was, it had to be an interesting photograph. Just to simply do a portrait of a famous person doesn’t mean a thing. 1
Though he has felt that the term might be unnecessarily restrictive (and possibly overshadows his other pursuits including abstractions and photojournalism), there’s no denying the impact of the results. Possibly his most famous portrait, of composer Igor Stravinsky, illustrates this wonderfully. The overall tones are almost monotone (flat - pun intended, and likely intentional on behalf of Newman) and are dominated by the stark duality of the white wall with the black piano.
Igor Stravinsky, New York, NY, 1946 by Arnold Newman
Newman realized that the open lid of the piano “…is like the shape of a musical flat symbol—strong, linear, and beautiful, just like Stravinsky’s work.”1 The geometric construction of the image instantly captures the eye and the aggressive crop makes the final composition even more interesting. In this case the crop was a fundamental part of the original composition as shot, but it was not uncommon for him to find new life in images with different crops.
In a similar theme his portraits of both Salador Dalí and John F. Kennedy show a willingness to allow the crop to bring in different defining characteristics of his subjects. In the case of Dalí it allows an abstraction to hang there mimicking the pose of the artist himself. Kennedy is mostly the only organic form, striking a relaxed pose, while dwarfed by the imposing architecture and hard lines surrounding him.
Salvador Dali, New York, NY, 1951 by Arnold Newman
John F. Kennedy, Washington D.C., 1953 by Arnold Newman
He manages to bring the same deft handling of placing his subjects in the context of their work with other photographers as well. His portrait of Ansel Adams shows the photographer just outside his studio with the surrounding wilderness not only visible around the frame but reflected in the glass of the doors behind him (and the photographers glasses). Perhaps an indication of the nature of Adams work being to capture natural scenes through glass?
For anyone familiar with the pioneer of another form of photography, Newman’s portrait of (the usually camera shy) Henri Cartier-Bresson will instantly evoke a sense of the artists candid street images. In it, Bresson appears to take the place of one of his subjects caught briefly on the streets in a fleeting moment. The portrait has an almost spontaneous feeling to it, (again) mirroring the style of the work of its subject.
Henri Cartier-Bresson, New York, NY, 1947 by Arnold Newman
Eight years after his portrait of surrealist painter Dali, Newman shot another famous (abstraction) artist, Pablo Picasso. This particular portrait is much more intimate and more classically composed, framing the subject as a headshot with little of the surrounding environment as before. I can’t help but think that the placement of the hand being similar in both images is intentional; a nod to the unconventional views both artists brought to the world.
Pablo Picasso,Vallauris, France, 1954 by Arnold Newman
Arnold Newman produced an amazing body of work that warrants some time and consideration for anyone interested in portraiture. These few examples simply do not do his collection of portraits justice. If you have a few moments to peruse some amazing images head over to his website and have a look (I’m particularly fond of his extremely design-oriented portrait of chinese-american architect I.M. Pei):
Of historical interest is a look at Newman’s contact sheet for the Stravinsky image showing various compositions and approaches to his subject with the piano. (I would have easily chosen the last image in the first row as my pick.) I have seen the second image in the second row cropped as indicated, which was also a very strong choice. I adore being able to investigate contact sheets from shoots like this - it helps me to humanize these amazing photographers while simultaneously allowing me an opportunity to learn a little about their thought process and how I might incorporate it into my own photography.
To close, a quote from his interview with American Photo magazine back in 2000 that will likely remain relevant to photographers for a long time:
But a lot of photographers think that if they buy a better camera they’ll be able to take better photographs. A better camera won’t do a thing for you if you don’t have anything in your head or in your heart. 1
Replicating a 'Lucisart'/Dave Hill type illustrative look
Over in the forums community member Sebastien Guyader (@sguyader) posted a neat workflow for emulating a photo-illustrative look popularized by photographers like Dave Hill where the resulting images often seem to have a sort of hyper-real feeling to them. Some of this feeling comes from a local-contrast boost and slight ‘blooming’ of the lighter tones in the image (though arguably most of the look is due to lighting and compositing of multiple elements).
To illustrate, here are a few representative samples of Dave Hill’s work that reflects this feeling:
A video of Dave presenting on how he brought together the idea and images for the series the first image above is from:
This effect is also popularized in Photoshop® filters such as LucisArt in an effort to attain what some would (erroneously) call an “HDR” effect. Really what they likely mean is a not-so-subtle tone-mapping. In particular the exaggerated local contrasts is often what garners folks attention.
We had previously posted about a method for exaggerating fine local contrasts and details using the “Freaky Details” method described by Calvin Hollywood. This workflow provides a similar idea but different results that many might find more appealing (it’s not as gritty as the Freaky Details approach).
Sebastien produced some great looking preview images to give folks a feeling for what the process would produce:
Sebastien’s approach relies only on having the always useful G’MIC plugin for GIMP. The general workflow is to do a high-pass frequency separation, and to apply some effects like local contrast enhancement and some smoothing on the residual low-pass layer. Then recombine the high+low pass layers to get the final result.
Open the image.
Duplicate the base layer. Rename it to “Lowpass”.
With the top layer (“Lowpass”) active, open G’MIC.
Use the Photocomix smoothing filter:
Testing → Photocomix → Photocomix smoothing
Set the Amplitude to 10. Apply. This is to taste, but a good startig place might be around 1% of the image dimensions (so a 2000px wide image - try using an Amplitude of 20).
Change the “Lowpass” layer blend mode to Grain extract.
Right-Click on the layer and choose New from visible. Rename this layer from “Visible“ to something more memorable like “Highpass” and set its layer mode to Grain merge. Turn off this layer visibility for now.
Activate the “Lowpass” layer and set its layer blend mode back to Normal. The rest of the filters are applied to this “Lowpass” layer.
Open G’MIC again. Apply the Simple local contrast filter:
Details → Simple local contrast
Using:
Edge Sensitivity to 25
Iterations to 1
Paint effect to 50
Post-gamma to 1.20
Open G’MIC again. Now apply the Graphic novel filter:
Artistic → Graphic novel
Using:
check the Skip this step checkbox for Apply Local Normalization
Pencil size to 1
Pencil amplitude to 100-200
Pencil smoother sharpness/edge protection/smoothness to 0
Boost merging options Mixer to Soft light
Painter’s touch sharpness to 1.26
Painter’s edge protection flow to 0.37
Painter’s smoothness to 1.05
Finally, make the “Highpass” layer visible again to bring back the fine details.
Trying It Out!
Let’s walk through the process. Sebastien got his sample images from the website https://pixabay.com, so I thought I would follow suit and find something suitable from there also. After some searching I found this neat image from Jerzy Gorecki licensed Create Commons 0/Public Domain.
The first steps (1—7) are to create a High/Low pass frequency separation of the image. If you have a different method for obtaining the separation then feel free to use it. Sebastien uses the Photocomix smoothing filter to create his low-pass layer (other options might be Gaussian blur, bi-lateral smoothing, or even wavelets).
The basic steps to do this are to duplicate the base layer, blur it, then set the layer blend mode to Grain extract and create a new layer from visible. The new layer will be the Highpass (high-frequency) details and should have its layer blend mode set to Grain merge. The original blurred layer is the Lowpass (low-frequency) information and should have its layer blend mode set back to Normal.
So, following Sebastien’s steps, duplicate the base layer and rename the layer to “lowpass”. Then open G’MIC and apply:
Testing → Photocomix → Photocomix smoothing
with an amplitude of around 20. Change this to suit your own taste, but about 1% of the image width is a decent starting point. You’ll now have the base layer and the “lowpass” layer above it that has been smoothed:
“lowpass” layer after Photocomix smoothing with Amplitude set to 20.
Setting the “lowpass” layer blend mode to Grain extract will reveal the high-frequency details:
The high-frequency details visible after setting the blurred “lowpass” layer blend mode to Grain extract.
Now create a new layer from what is currently visible. Either right-click the “lowpass” layer and choose “New from visible” or from the menus:
Layer → New from Visible
Rename this new layer from “Visible” to “highpass” and set its layer blend mode to Grain merge. Select the “lowpass” layer and set its layer blend mode back to Normal.
The visible result should be back to what your starting image looked like.
The rest of the steps for this tutorial will operate on the “lowpass” layer.
You can leave the “highpass” filter visible during the rest of the steps to see what your results will look like.
Modifying the Low-Frequency Layer
These next steps will modify the underlying low-frequency image information to smooth it out and give it a bit of a contrast boost. First the “Simple local contrast” filter will separate tones and do some preliminary smoothing, while the “Graphic novel” filter will provide a nice boost to light tones along with further smoothing.
Simple Local Contrast
On the “lowpass” layer, open G’MIC and find the “Simple local contrast” filter:
Details → Simple local contrast
Change the following settings:
Edge Sensitivity to 25
Iterations to 1
Paint effect to 50
Post-gamma to 1.20
This will smooth out overall tones while simultaneously providing a nice local contrast boost. This is the step that causes small lighting details to “pop”:
After applying the “Simple local contrast” filter. (Click to compare to the original image)
The contrast increase provides a nice visual punch to the image. The addition of the “Graphic novel” filter will push the overall image much closer to a feeling of a photo-illustration.
Graphic Novel
Still on the “lowpass” layer, re-open G’MIC and open the “Graphic Novel” filter:
Artistic → Graphic novel
Change the following settings:
check the Skip this step checkbox for Apply Local Normalization
Pencil size to 1
Pencil amplitude to 100-200
Pencil smoother sharpness/edge protection/smoothness to 0
Boost merging options Mixer to Soft light
Painter’s touch sharpness to 1.26
Painter’s edge protection flow to 0.37
Painter’s smoothness to 1.05
The intent with this filter is to further smooth the overall tones, simplify details, and to give a nice boost to the light tones of the image:
After applying the “Graphic novel” filter. (Click to compare to the local contrast result)
The effect at 100% opacity can be a little strong. If so, simply adjust the opacity of the “lowpass” layer to taste. In some cases it would probably be desirable to mask areas you don’t want the effect applied to.
I’ve included the GIMP .xcf.bz2 file of this image while I was working on it for this article. You can download the file here (34.9MB). I did each step on a new layer so if you want to see the results of each effect step-by-step, simply turn that layer on/off:
Example XCF layers
Finally, a great big Thank You! to Sebastien Guyader (@sguyader) for sharing this with everyone in the community!
A G’MIC Command
Of course, this wouldn’t be complete if someone didn’t come along with the direct G’MIC commands to get a similar result! And we can thank Iain Fergusson (@Iain) for coming up with the commands:
Welcome to the first installment of From the Community, a (hopefully) quarterly blog post to highlight a few of the things our community members have been doing!
Free Software development tends to move at a pretty good pace, so there is always something new to try out! Not all of the new things warrant a new release, but our community steps up and builds the software so that others can use and test! Instead of random links to dropboxes and such, we’ve created a Community-built Software page to help centralize and make it easy for our users to help find and download the freshest builds of software from our great community members. Keep in mind that support may be limited for these builds and they’re considered testing, so quality may vary, but if you covet the newest, shiniest things, this is the place for you!
Watermarking is ugly and takes focus away from your image. Why not try and add an attribution bar to your images? In this post, @patdavid lays out how to add a bar underneath your image with your name, the image title, and a little logo. @David_Tschumperle followed that effort up with an alternate implementation using G’MIC instead of imagemagic. Lastly, @vato rolled the imagemagick version into a bash script with the necessary parameters exposed as variables at the beginning of the script.
Finally, we’re still working on our beginner article to help new users navigate the myriad of free software photography software that is out there. If you have ideas, or better yet, want to author a bit of content with our community, please join and help out! The post is community wiki and has complete revision control, so don’t be afraid to jump in and contribute!
The term Chiaroscuro is derived from the Italian chiaro meaning ‘clear, bright’ and oscuro meaning ‘dark, obscure’. In art the term has come to refer to the use of bold contrasts between light and shadow, particularly across an entire composition, where they are a prominent feature of the work.
This interplay of shadow and light is particularly important in allowing the viewer to extrapolate volume from a flat image. The use of a single light source helps to accentuate the perception of volume as well as adding drama and dynamics to the scene.
Historically the use of chiaroscuro can often be associated with the works of old masters such as Rembrandt and Caravaggio. The use of such extreme lighting immediately evokes a sense of shape and volume, while focusing the attention of the viewer.
The aim of this tutorial will be to emulate the lighting characteristics of chiaroscuro in producing a portrait to evoke the feeling of an old master painting.
Equipment
In examining chiaroscuro portraiture, it becomes apparent that a strong characteristic of the images is the use of single light source on the scene. So this tutorial will focus on using a single source to illuminate the portrait.
Getting the keylight off the camera is essential. The closer the keylight is to the axis of the camera the larger the reduction in shadows. This is counter to the intention of this workflow. Shadows are an essential component in producing this look, and on-camera lighting simply will not work.
The reason to choose a softbox versus the myriad of other light modifiers available is simple: control. Umbrellas can soften the light, but due to their open nature have a tendency to spill light everywhere while doing so. A softbox allows the light to be softened while also retaining a higher level of spill control.
Light spill can still occur with a softbox, so the best option is to bring the light in as close as possible to the subject. Due to the inverse square nature of light attenuation, this will help to drop the background very dark (or black) when exposing properly for the subject.
Left For example, in the sample images above, a 20 inch softbox was initially located about 18 inches away from the subject (first). The rear wall was approximately 48 inches away from the subject or just over twice the distance from the softbox. Thus, on a proper exposure for the subject, the background would be around 3 stops lower in light. This is seen as the background in the first image has dropped to a dark gray.
Middle When the light distance to the subject is doubled and the light distance to the rear wall stays the same, the ratio is not as extreme between them. The light distance from the subject is now 36 inches, while the light distance to the rear wall is still 48 inches. When properly exposing for the subject, the rear wall is now only about 1 stop lower in light.
Right In the final example, the distance from the light to both the subject and the rear wall are very close. As such, a proper exposure for the subject almost brings the wall to a middle exposure.
What this example provides is a good visual guide for how to position the subject and light relative to the surroundings to create the desired look. To accentuate the ratio between dark and light in the image it would be best to move the light as close to the subject as possible.
If there is nothing to reflect light on the shadow side of the subject, then the shadows would fall to very dark or black. Usually, there are at least walls and ceilings in a space that will reflect some light, and the amount falling on the shadow side can be attenuated by either moving the subject nearer to a wall on that side, or using a bounce/reflector as desired.
Shooting
Planning
The setup for the shot would be to push the key light in very close to the model, while still allowing some bounce to slightly fill the shadows.
As noted previously, having the key light close to the model would allow the rest of the scene to become much darker. The softbox is arranged such that the face is almost completely vertical and the bottom edge is just above the models eyes. This was to feather the lower edge of the light falloff along the front of the model.
There are 2 main adjustments that can be made to fine-tune the image result with this setup.
The first is the key light distance/orientation to the subject. This will dictate the proper exposure for the subject. For this image the intention is to push the key light in as close as possible without being in frame. There is also the option of angling the key light relative to the subject. In the diagram above, the softbox is actually angled away from the subject. The intention here was to feather the edge of the light in order to control spill onto the rest of the model (putting more emphasis on her face).
The second adjustment, once the key light is in a good location, is the distance from the key light and subject together, to the surrounding walls (or a reflector if one is being used). Moving both subject and keylight closer to the side wall will increase the amount of reflected light being bounced into the shadows.
Mood Board
If possible, it can be extremely helpful to both the model and photographer to have a Mood Board available. This is usually just a collection or collage of images that help to convey the desired feeling or desired result from the session. For help in directing the model, the images do not necessarily need the same lighting setup. The intention is to help the model understand what your vision is for the pose and facial expressions.
The Shoot
The lighting is set up and the model understands what type of look is desired, so all that’s left is to shoot the image!
In the end, I favored the last image in the sequence for a combination of the models head position/body language and the slight smile she has.
Postprocessing
Having chosen the final image from the contact sheet, it’s now time to proceed with developing the image and retouching as needed.
If you’d like to follow along you can download the raw .ORF file:
This file is licensed
(Creative Commons, By-Attribution, Non-Commercial, Share-Alike), and is the same image that I shared with everyone on the forums for a PlayRaw processing practice. You can see how other folks approached processing this image in the topic on discuss. If you decide to try this out for yourself, come share your results with us!
Not surprisingly the initial image loaded without any modifications is a bit dark and rather flat looking. By default darktable should have recognized that the file is from Olympus, and attempted to apply a sane base curve to the linear raw data. If it doesn’t you can choose the preset “olympus like alternate”.
I found that the preset tended to crush the darkest tones a bit too much, and instead opted for a simple curve with a single point as seen here:
Resist the temptation to try and adjust overall exposure and contrast with the base curve. These parameters will be adjusted shortly in the appropriate modules. The base curve is only intended to transform the linear raw rgb to something that looks good on your output device. The base curve will affect how the contrasts, colors, and saturation all relate in the final output. For the purposes of this tutorial, it is enough to simply choose a preset.
The next series of steps focus on adjusting various exposure parameters for the image. Conceptually they start with the most broad adjustment, exposure, then to slightly more targeted adjustments such as contrast, brightness, and saturation, then finish with targeted tonal adjustments in tone curves.
Once the base curve is set, the next module to adjust would be the overall exposure of the image (and the black point). This is done in the “exposure” module (below the base curve).
The important area to watch while adjusting the exposure for the image is the histogram. The image was exposed a little dark, so increase the exposure overall for the image. In the histogram, avoid clipping any channels by allowing them to be pushed outside the range. In this case, the desire is to provide a nice mid-level brightness to the models face. The exposure can be raised until the channels begin to clip on the far right of the histogram, then brought back down a bit to leave some headroom.
The darkest areas of the histogram on the left are clipped a bit, so raising the black level brings the detail back in the darkest shadows. When in doubt try to let the histogram guide you with data from the image. Particularly around the highest and lowest values (avoid clipping if possible).
An easy way to think of the exposure module is that it allows the entire image exposure to be shifted along with compressing/expanding the overall range by modifying the black point.
Where the Exposure module shifts the overall image values from a global perspective, modules such as the “contrast brightness saturation” allow finer tuning of the image within the range of the exposure.
To emphasis the models face, while also strengthening the interplay of shadow and light on the image, drop the brightness down to taste. I brought the brightness levels down quite a bit (-0.31) to push almost all of the image below medium brightness.
Overall this helps to emphasis the models face over the rest of the image initially. While the rest of the image is comprised of various dark/neutral tones, the models face is not. Pushing the saturation down as well will remove much of the color from the scene and face. This is done to bring the skin tones back down to something slightly more natural looking, while also muting some of those tones.
The skin now looks a bit more natural but muted. The background tones have become more neutral as well. A very slight bump in contrast to taste finishes out this module.
A final modification to the exposure of the image is through a tone curve adjustment. This gives us the ability to make some slight changes to particular tonal ranges. In this case pushing the darker tones down a bit more while boosting the upper mid and high tones.
This is actually a type of contrast increase, but controlled to specific tones based on the curve. The darkest darks (bottom of the curve) get pushed a little bit darker, which will include most of the sweater, background, and shadow side of the models face. The very slight rolling boost to the lighter tones primarily helps to allow the face to brighten up against the background even more.
The changes are very slight and to taste. The tone curve is very sensitive to changes, and often only very small modifications are required to achieve a given result.
By default the sharpen module will apply a small amount of sharpening to the image. The module uses unsharp mask for sharpening, so the radius parameter is the blur radius into the unsharp mask. I wanted to sharpen lightly very fine details, so set the radius to ~1, with an amount around 0.9 and no threshold. This produced results that are very hard to distinguish from the default settings, but appears to sharpen smaller structures just slightly more.
I personally include a final sharpening step as a side effect of using wavelet decompose for skin retouching later in the process with GIMP. As such I am not usually as concerned about sharpening here as much. If I were, there are better modules for adjusting sharpening from wavelets using the equalizer module.
The darktable team and its users profiled many different cameras for noise profiles at various ISOs to build a statistical model with brightness across the three color channels. Using these profiles, darktable can then do a better job at efficiently denoising images. In the case of my camera (Olympus OM-D E-M5), there was a profile already captured for ISO200.
In this case, the chroma noise wasn’t too bad, and a very slight reduction in luma noise would be sufficient for the image. As such, I used a non-local means with a large patch size (to retain sharpness) and a low strength. This was all applied uniformly against the HSV lightness option.
Finally! The image tones and exposure are in a desirable state, so export the results to a new file. I tend to use either TIF or PNG at 16 bit. This is in case I want to work in a full 16 bit workflow with the latest GIMP, or may want to in the future.
GIMP
When there are still some pixel-level modifications that need to be done to the image, the go-to software is GIMP.
Skin retouching
spot healing/touchups
Background rebuild
Skin Retouching with Wavelet Decompose
This step is not always needed, but who doesn’t want their skin to look a little nicer if possible?
The ability to modify an image based on detail scales isolated on their own layers is a very powerful tool. The approach is similar to frequency separation, but has the advantage of providing multiple frequencies to modify simultaneously of progressively larger and larger detail scales. This offers a large range of flexibility and an easier workflow vs. frequency separation (you can work on any detail scale simply by switching to a different layer).
I used to use the wonderful Wavelet Decompose plugin from marcor on the GIMP plugin registry. I have since switched to using the same result from G’MIC once David Tschumperlé added it in for me. It can be found in G’MIC under:
Details → Split details [wavelets]
Running Split details [wavelets] against the image to produce 5 wavelet scales and a residual layer yields (cropped):
The plugin (or script) will produce 5 layers of isolated details plus a residual layer of low-frequency color information. Seen here in ascending size of detail scales. The finest scales (1 & 2) will be hard to discern the details as they are quite fine.
To help visualizing what the different scale levels look like here is a view of the same levels above, normalized:
The normalized view shows clearly the various types of detail scales on each layer.
There are various types of changes that can be made to the final image from these details scales. In this image, we are going to focus on evening out the skin tones overall. The scales with the biggest impact on even skin tones for this image are 4 and 5.
A good workflow when smoothing overall skin tones and using wavelet scales is to work on smoothing from the largest detail scales and working down to finer scales. Usually, a nice amount of pleasing tonal smoothing can be accomplished in the first couple of coarse detail scales.
Skin Retouching Zones
Different portions of a face will often require different levels of smoothing. Below is a rough map of facial contours to consider when retouching. Not all faces will require the exact same regions, but it is a good starting point to consider when approaching a new image.
The selections are made with the Free Select Tool with the “Feather edges” option on and set to roughly 30px.
Smoothing
A good starting point to consider is the forehead on the largest detail scale (5). The basic workflow is to select a region of interest and a layer of detail, then to suppress the features on that detail level. The method of suppressing features is a matter of personal taste but is usually done across the entire selection using a blur filter of some sort.
A good first choice would be to use a gaussian blur (or Selective Gaussian Blur) to smooth the selection. A better choice, if G’MIC is installed, is to use a bilateral blur for its edge-preserving properties. The rest of these examples will use the bilateral blur for smoothing.
Considering the forehead region:
The first image is the original. The second image is after running a bilateral blur (in G’MIC: Smooth [bilateral]), with the default parameter values:
Spatial variance: 10
Value variance: 7
Iterations: 2
These values were chosen from experience using this filter for the same purpose across many, many images. The results of running a single blur on the largest wavelet scale is immediately obvious. The unevenness of the skin and tones overall are smoothed in a pleasing way, while still retaining the finer details that allow the eye to see a realistic skin texture.
The last image is the result of working on the next detail scale layer down (Wavelet scale 4), with much softer blur parameters:
Spatial variance: 5
Value variance: 2
Iterations: 1
This pass does a good job of finishing off the skin tones globally. The overall impression of the skin is much smoother than the original, but crucial fine details are all left intact (wrinkles, pores) to keep the it looking realistic.
This same process is repeated for each of the facial regions described. In some cases the results of running the first bilateral blur on the largest scale level is enough to even out the tones (the cheeks and upper lip for example). The chin got the same treatment as the forehead. The process is entirely subjective, and will vary from person to person for the parameters. Experimentation is encouraged here.
More importantly, the key word to consider while working on skin tones is moderation. It is also important to check your results zoomed out, as this will give you an impression of the image as seen when scaled to something more web-sized. A good rule of thumb might be:
“If it looks good to you, go back and reduce the effect more”.
The original vs. results after wavelet smoothing:
Wavelet Smoothed.
Click to compare original
Original
When the work is finished on the wavelet scales, a new layer from all of the visible layers can be created to continue touching up spot areas that may need it.
Layer → New from Visible
Spot Touchups
The use of wavelets is good for a large-scale selection area smoothing but a different set of tools is required for spot touchups where needed. For example, there is a stray hair that runs across the models forehead that can be removed using the Heal tool.
For best results when using the Heal tool, use a hard edged brush. Soft edges can sometimes lead to a slight smearing in the feathered edge of a brush that is undesirable. Due to the nature of the heal algorithm sampling, it is also advisable to avoid trying to heal across hard/contrasty edges.
This is also a good tool to use for small blemishes that might have been tedious to repair across all of the wavelet scales from the previous section. This is also a good time to repair hot-spots, fly-away hairs, or other small details.
Sweater Enhancement
The model is wearing a nicely textured sweater but the details and texture are a slightly muted. A small increase in contrast and local details will help to bring some enhancement to the textures and tones. One method of enhancing local details would be to use the Unsharp Mask enhancement with a high radius and low amount (HiRaLoAm is an acronym some might use for this).
Create a duplicate of the “Spot Healing” layer that was worked on in the previous step, and apply an Unsharp Mask to the layer using HiRaLoAm values.
For example, a good starting point for parameters might be:
Radius: 200
Amount: 0.25
With these parameters the sharpen function will instead tend to increase local contrast more, providing more “presence” or “pop” to the sweater texture.
Background Rebuild
The background of the image is a little too uniformly dark and could benefit from some lightening and variation. A nice lighter background gradient will enhance the subject a little.
Normally this could be obtained through the use of a second strobe (probably gridded or with a snoot) firing at the background. In our case we will have to fake the same result through some masking.
First, a crop is chosen to focus the composition a little stronger on the subject. I placed the center of the models face along the right-side golden section vertical and tried to place things near the center of the frame:
The slight-centered crop is to emulate the type of crop that might be expected from a classical painting (thereby strengthening the overall theme of the portrait further).
Subject Isolation
There are a few different methods to approach the background modification. The method I describe here is simply one of them.
The image at this point is duplicated and the duplicate has the levels raised to brighten it up considerably. In this way, a simple layer mask can control the brightness and where it occurs in the image at this point.
This is what will give our background a gradient of light. To get our subject back to dark will require masking the subject on a layer mask again. A quick way to get a mask to work from is to add a layer mask to the “Over” layer, letting the background show through, but turning the subject opaque.
Add a layer mask to the “Over” layer as a “Grayscale copy of layer”, and check the “Invert mask” option:
With an initial mask in place, a quick use of the tool:
Colors → Threshold
will allow you to modify the mask to define the shoulder of the model as a good transition. The mask will be quite narrow. Adjust the threshold until the lighter background is speckle-free and there is a good definition of the edge of the sweater against the background.
Once the initial mask is in place it can be cleaned up further by making the subject entirely opaque (white on the mask), and the background fully transparent (black on the mask). This can be done with paint tools easily. For not much work a decent mask and result can be had:
This provides a nice contrast of the background being lighter behind the darker portions of the model and the opposite on the lighter subjects face.
Lighten Face Highlights
Speaking of the subjects face, there’s a nice simple method for applying a small accent on the highlighted portions of the models face in order to draw more attention to her.
Duplicate the lightened layer that was used to create the background gradient, move it to the top of the layer stack, and remove the layer mask from it.
Set the layer mode of the copied layer to “Lighten only.
As before, add a new layer mask to it, “Grayscale copy of layer”, but don’t check the “Invert mask” option. This time use the Levels tool:
Colors → Levels
to raise the blacks of the mask up to about mid-way or more. This will isolate the lightening mask to the brightest tones in the image that happen to correspond to the models face. You should see your adjustments modify the mask on-canvas in real-time. When you are happy with the highlights, apply.
Last Sharpening Pass + Grain
Finally, using I like to apply a last pass of sharpening to the image, and to overlay some grain from a grain field I have to help add some structure to the image as well as mask any gradient issues when rebuilding the background. For this particular image the grain step isn’t really needed as there’s already sufficient luma noise to provide its own structure.
Usually, I will use the smallest of the wavelet scales from the prior steps and sometimes the next largest scale as well (Wavelet scale 1 & 2). I’ll leave Wavelet scale 1 at 100% opacity, and scale 2 usually around 50% opacity (to taste, of course).
Minor touchups that could still be done might include darkening the chair in the bottom right corner, darkening the gradient in the bottom left corner, and possibly adding a slight white overlay to the eyes to subtly give them a small pop.
As it stands now I think the image is a decent representation of a chiaroscuro portrait that mimics the style of a classical composition and interplay between light and shadows across the subject.
While I was out at Texas Linux Fest this past weekend I got to watch a fun presentation from the one and only Brian Beck. He walked through an introduction to Blender, including an overview of creating his great The Lady in the Roses image that was a part of the 2015 Libre Calendar project.
Coincidentally, during my trip home community member @Fotonut asked about software to create an HD slideshow with images. The first answer that jumped into my mind was to consider using Blender (a very close second was OpenShot because I had just spent some time talking with Jon Thomas about it).
I figured this much Blender being talked about deserved at least a post to answer @Fotonut‘s question in greater detail. I know that many community members likely abuse Blender in various ways as well – so please let me know if I get something way off!
The reason that Blender was the first thing that popped into many folks minds when the question was posed is likely because it has been a go-to swiss-army knife of image and video creation for a long, long time. For some it was the only viable video editing application for heavy use (not that there weren’t other projects out there as well). This is partly due to to the fact that it integrates so much capability into a single project.
The part that we’re interested in for the context of Fotonut’s original question is the Video Sequence Editor (VSE). This is a very powerful (though often neglected) part of Blender that lets you arrange audio and video (and image!) assets along a timeline for rendering and some simple effects. Which is actually perfect for creating a simple HD slideshow of images, as we’ll see.
Blenders interface is likely to take some getting used to for newcomers (right-click!) but we’ll be focusing on a very small subset of the overall program—so hopefully nobody gets lost. The overall plan will be:
Setup the environment for video sequence editing
Include assets (images) and how to manipulate them on the timeline
Add effects such as cross-fades between images
Setup exporting options
There’s also an option of using a very helpful add-on for automatically resizing images to the correct size to maintain their aspect ratios. Luckily, Blender’s add-on system makes it trivially easy to set up.
On opening Blender for the first time we’re presented with the comforting view of the default cube in 3D space. Don’t get too cozy, though. We’re about to switch up to a different screen layout that’s already been created for us by default for Video Editing.
The main blender default view.
The developers were nice enough to include various default “Screen Layout” options for different tasks, and one of them happens to be for Video Editing. We can click on the screen layout option on the top menu bar and choose the one we want from the list (Video Editing):
Choosing a new Screen Layout option.
Our screen will then change to the new layout where the top left pane is the F-curve window, the top right is the video preview, the large center section is the sequencer, and the very bottom is a timeline. Blender will let you arrange, combine, and collapse all the various panes into just about any layout that you might want, including changing what each of them are showing. For our example we will mostly leave it all as-is with the exception of the F-curve pane, which we won’t be using and don’t need.
The Video Editing default layout.
What we can do now is to define what the resolution and framerate of our project should be. This is done in the Properties pane, which isn’t shown right now. So we will change the F-Curve pane into the Properties pane by clicking on the button shown in red above to change the panel type. We want to choose Properties from the options in the list:
Which will turn the old F-Curve pane into the Properties pane:
You’ll want to set the appropriate X and Y resolution for your intended output (don’t forget to set the scaling from the default 50% to 100% now as well) as well as your intended framerate. Common rates might be 23.976 (23.98), 25, 30, or even 60 frames per second. If your intended target is something like YouTube or an HD television you can probably safely use 30 or 60 (just remember that a higher frame rate means a longer render time!).
For our example I’m going to set the output resolution to 1920 × 1080 at 30fps.
Blender does need a little bit of help when it comes to using images on the sequence editor. It has a habit of scaling images to whatever the output resolution is set to (ignoring the original aspect ratios). This can be fixed by simply applying a transform to the images but normally requires us to manually compute and enter the correct scaling factors to get the images back to their original aspect ratios.
I did find a nice small add-on on this thread at blenderartists.org that binds some handy shortcuts onto the VSE for us. The author kgeogeo has the add-on hosted on Github, and you can download the Python file directly from here: VSE Transform Tool (you can Right-Click and save the link). Save the .py file somewhere easy to find.
To load the add-on manually we’re going to change the Properties panel to User Preferences:
Click on the Add-ons tab to open that window and at the bottom of the panel is an option to “Install from File…”. Click that and navigate to the VSE_Transform_Tool.py file that you downloaded previously.
Once loaded, you’ll still need to Activate the plugin by clicking on the box:
That’s it! You’re now all set up to begin adding images and creating a slideshow. You can set the User Preferences pane back to Properties if you want to.
Let’s have a look at adding images onto the sequencer.
You can add images by either choosing Add → Image from the VSE menu and navigating to your images location, choosing them:
Or by drag-and-dropping your images onto the sequencer timeline from Nautilus, Finder, Explorer, etc…
When you do, you’ll find that a strip now appears on the VSE window (purple in my case) that represents your image. You should also see a preview of your video in the top-right preview window (sorry for the subject).
At this point we can use the handy add-on we installed previously by Right-Clicking on the purple strip to make sure it’s activated and then hitting the “T” key on the keyboard. This will automatically add a transform to the image that scales it to the correct aspect ratio for you. A small green Transform strip will appear above your purple image strip now:
Your image should now also be scaled to fit at the correct aspect ratio.
If you scroll your mouse wheel in the VSE window, you will zoom in and out of time editor based on time (the x-axis in the sequencer window). You’ll notice that the time compresses or expands as you scroll the mouse wheel.
The middle-mouse button will let you pan around the sequencer.
The right-mouse button will select things. You can try this now by extending how long your image is displayed in the video. Right-Click on the small arrow on the end of the purple strip to activate it. A small number will appear above it indicating which frame it is currently on (26 in my example):
With the right handle active you can now either press “G” on the keyboard and drag the mouse to re-position the end of the strip, or Right-Click and drag to do the same thing. The timeline in seconds is shown along the bottom of the window for reference. If we wanted to let the image be visible for 5 seconds total, we could drag the end to the 5+00 mark on the sequencer window.
Since I set the framerate to 30 frames per second, I can also drag the end to frame 150 (30fps * 5s = 150 frames).
When you drag the image strip, the transform strip will automatically adjust to fit (so you don’t have to worry about it).
If you had selected the center of the image strip instead of the handle on one end and tried to move it, you would find that you can move the entire strip around instead of one end. This is how you can re-position image strips, which you may want to do when you add a second image to your sequencer.
Add a new image to your sequencer now following the same steps as above.
When I do, it adds a new strip back at the beginning of the timeline (basically where the current time is set):
I want to move this new strip so that it overlaps my first image by about half a second (or 15 frames). Then I will pull the right handle to resize the display time to about 5 seconds also.
Click on the new strip (center, not the ends), and press the “G” key to move it. Drag it right until the left side overlaps the previous image strip by a little bit:
When you click on the strip right handle to modify it’s length, notice the window on the far right of the VSE. The Edit Strip window should also show the strip “Length” parameter in case you want to change it by manually inputting a value (like 150):
I forgot to use the add-on to automatically fix the aspect ratio. With the strip selected I can press “T” at any time to invoke the add-on and fix the aspect ratio.
With the two image strips slightly overlapping, we now want to define a simple cross fade between the two images as a transition effect. This is actually something alreayd built into the Blender VSE for us, and is easy to add. We _do_ need to be careful to select the right things to get the transition working correctly, though.
Once you’ve added a transform effect to a strip, you’ll need to make sure that subsequent operations use the transform strip as opposed to the original image strip.
For instance, to add a cross fade transition between these two images, click the first image strip transform (green), then Shift-Click on the second image transform strip (green). Now they are both selected, so add a Gamma Cross by using the Add menu in the VSE (Add → Effect Strip… → Gamma Cross):
This will add a Gamma Cross effect as a new strip that is locked to the two images overlap. It will do a cross-fade between the two images for the duration of the overlap. You can Left-Click now and scrub over the cross-fade strip to see it rendered in the preview window if you’d like:
At any time you can also use the hotkey “Alt-A” to view a render preview. This may run slow if your machine is not super-fast, but it should run enough to give you a general sense of what you’ll get.
If you want to modify the transition effect by changing its length, you can just increase the overlap between the strips as desired (using the original image strip — if you try to drag the transform strip you’ll find it locked to the original image strip and won’t move).
You may notice on the VSE that there are vertical lines outside of which things will appear slightly grayed out. This is a visual indicator of the total start/end of the output. This is controlled via the Start and End frame settings on the timeline (bottom pane):
You’ll need to set the End value to match your last output frame from your video sequence. You can find this value by selecting the last strip in your sequence and pressing the “G” key: the start/end frame numbers of that last strip will be visible (you’ll want the last frame value, of course).
Current last frame of my video is 284
In my example above, my anticipated last frame should be 284, but the last render frame is currently set to 250. I would need to update that End frame to match my video to get output as expected.
Back on the Properties panel (assuming you set the top-left panel back to Properties earlier—if not do so now), if we scroll down a bit we should see a section dedicated to Output.
You can change the various output options here to do frame-by-frame dumps or to encode everything into a video container of some sort. You can set the output directory to be something different if you don’t want it rendered into /tmp here.
For my example I will encode the video with H.264:
By choosing this option, Blender will then expose a new section of the Properties panel for setting the Encoding options:
I will often use the H264 preset and will enable the Lossless Output checkbox option. If I don’t have the disk space to spare I can also set different options to shrink the resulting filesize down further. The Bitrate option will have the largest effect on final file size and image quality.
When everything is ready (or you just want to test it out), you can render your output by scrolling back to the top of the Properties window and pressing the Animation button, or by hitting Ctrl-F12.
This may seem overly complicated, but in reality much of what I covered here is the setup to get started and the settings for output. Once you’ve done this successfully it becomes pretty quick to use. One thing you can do is set up the environment the way you like it and then save the .blend file to use as a template for further work like this in the future. The next time you need to generate a slideshow you’ll have everything all ready to go and will only need to start adding images to the editor.
While looking for information on some VSE shortcuts I did run across a really interesting looking set of functions that I want to try out: the Blender Velvets. I’m going to go off and give it a good look when I get a chance as there’s quite a few interesting additions available.
While in London this past April I got a chance to hang out a bit with LWN.net editor and fellow countryman, Nathan Willis. (It sounds like the setup for a bad joke: “An Alabamian and Texan meet in a London pub…”). Which was awesome because even though we were both at LGM2014, we never got a chance to sit down and chat.
So it was super-exciting for me to hear from Nate about possibly doing a photowalk and Free Software photo workshop at the 2016 Texas Linux Fest, and as soon as I cleared it with my boss, I agreed!
My Boss
So… mosey on down to Austin, Texas on July 8-9 for Texas Linux Fest and join Akkana Peck and myself for a photowalk first thing of the morning on Friday (July 8) to be immediately followed by workshops from both of us. I’ll be talking about Free Software photography workflows and projects and Akkana will be focusing on a GIMP workshop.
Color Manipulation with the Colour Checker LUT Module
hanatos tinkering in darktable again...
I was lucky to get to spend some time in London with the darktable crew.
Being the wonderful nerds they are, they were constantly working on something while we were there.
One of the things that Johannes was working on was the colour checker module for darktable.
Having recently acquired a Fuji camera, he was working on matching color styles from the built-in rendering on the camera.
Here he presents some of the results of what he was working on.
This was originally published on the darktable blog, and is being republished here with permission. —Pat
unfortunately these are eat-it-or-die canned styles or icc lut profiles. you
have to apply them and be happy or tweak them with other tools. but can we
extract meaning from these presets? can we have understandable and tweakable
styles like these?
in a first attempt, i used a non-linear optimiser to control the parameters of
the modules in darktable’s processing pipeline and try to match the output of
such styles. while this worked reasonably well for some of pat’s film luts, it
failed completely on canon’s picture styles. it was very hard to reproduce
generic colour-mapping styles in darktable without parametric blending.
that is, we require a generic colour to colour mapping function. this should be
equally powerful as colour look up tables, but enable us to inspect it and
change small aspects of it (for instance only the way blue tones are treated).
in git master, there is a new module to implement generic colour mappings: the
colour checker lut module (lut: look up table). the following will be a
description how it works internally, how you can use it, and what this is good
for.
in short, it is a colour lut that remains understandable and editable. that is,
it is not a black-box look up table, but you get to see what it actually does
and change the bits that you don’t like about it.
the main use cases are precise control over source colour to target colour
mapping, as well as matching in-camera styles that process raws to jpg in a
certain way to achieve a particular look. an example of this are the fuji film
emulation modes. to this end, we will fit a colour checker lut to achieve their
colour rendition, as well as a tone curve to achieve the tonal contrast.
to create the colour lut, it is currently necessary to take a picture of an
it8 target (well, technically we support any similar target, but
didn’t try them yet so i won’t really comment on it). this gives us a raw
picture with colour values for a few colour patches, as well as a in-camera jpg
reference (in the raw thumbnail..), and measured reference values (what we know
it should look like).
to map all the other colours (that fell in between the patches on the chart) to
meaningful output colours, too, we will need to interpolate this measured
mapping.
we want to express a smooth mapping from input colours \(\mathbf{s}\) to target
colours \(\mathbf{t}\), defined by a couple of sample points (which will in our
case be the 288 patches of an it8 chart).
the following is a quick summary of what we implemented and much better
described in JP’s siggraph course [0].
radial basis functions are a means of interpolating between sample points
via
$$f(x) = \sum_i c_i\cdot\phi(| x - s_i|),$$
with some appropriate kernel \(\phi(r)\) (we’ll get to that later) and a set of
coefficients \(c_i\) chosen to make the mapping \(f(x)\) behave like we want it at
and in between the source colour positions \(s_i\). now to make
sure the function actually passes through the target colours, i.e. \(f(s_i) =
t_i\), we need to solve a linear system. because we want the function to take
on a simple form for simple problems, we also add a polynomial part to it. this
makes sure that black and white profiles turn out to be black and white and
don’t oscillate around zero saturation colours wildly. the system is
is the polynomial part, and \(\mathbf{d}\) are the coefficients to the polynomial
part. these are here so we can for instance easily reproduce \(t = s\) by setting
\(\mathbf{d} = (1, 1, 1, 0)\) in the respective row. we will need to solve this
system for the coefficients \(\mathbf{c}=(c_0,c_1,\cdots)^t\) and \(\mathbf{d}\).
many options will do the trick and solve the system here. we use singular value
decomposition in our implementation. one advantage is that it is robust against
singular matrices as input (accidentally map the same source colour to
different target colours for instance).
we didn’t yet define the radial basis function kernel. it turns out so-called
thin plate splines have very good behaviour in terms of low oscillation/low curvature
of the resulting function. the associated kernel is
$$\phi(r) = r^2 \log r.$$
note that there is a similar functionality in gimp as a gegl colour mapping
operation (which i believe is using a shepard-interpolation-like scheme).
we will feed this system with 288 patches of an it8 colour chart. that means,
with the added four polynomial coefficients, we have a total of 292
source/target colour pairs to manage here. apart from performance issues when
executing the interpolation, we didn’t want that to show up in the gui like
this, so we were looking to reduce this number without introducing large error.
indeed this is possible, and literature provides a nice algorithm to do so, which
is called orthogonal matching pursuit[1].
this algorithm will select the most important hand full of coefficients \(\in
\mathbf{c},\mathbf{d}\), to keep the overall error low. In practice we run it up
to a predefined number of patches (\(24=6\times 4\) or \(49=7\times 7\)), to make
best use of gui real estate.
when you select the module in darkroom mode, it should look something like the
image above (configurations with more than 24 patches are shown in a 7\(\times\)7 grid
instead). by default, it will load the 24 patches of a colour checker classic
and initialise the mapping to identity (no change to the image).
the grid shows a list of coloured patches. the colours of the patches are
the source points \(\mathbf{s}\).
the target colour \(t_i\) of the selected patch \(i\) is shown as
offset controlled by sliders in the ui under the grid of patches.
an outline is drawn around patches that have been altered, i.e. the source
and target colours differ.
the selected patch is marked with a white square, and the number shows
in the combo box below.
to interact with the colour mapping, you can change both source and target
colours. the main use case is to change the target colours however, and start
with an appropriate palette (see the presets menu, or download a style
somewhere).
you can change lightness (L), green-red (a), blue-yellow (b), or saturation
(C) of the target colour via sliders.
select a patch by left clicking on it, or using the combo box, or using the
colour picker
to change source colour, select a new colour from your image by using the
colour picker, and shift-left-click on the patch you want to replace.
to reset a patch, double-click it.
right-click a patch to delete it.
shift-left-click on empty space to add a new patch (with the currently
picked colour as source colour).
to process the following image i took of pat in the overground, i started with
the skin tones preset in the colour checker module (right click on nothing in
the gui or click on the icon with the three horizontal lines in the header and
select the preset).
then, i used the colour picker (little icon to the right of the patch# combo
box) to select two skin tones: very bright highlights and dark shadow tones.
the former i dragged the brightness down a bit, the latter i brightened up a
bit via the lightness (L) slider. this is the result:
in this image, i started with the fuji classic chrome-like style (see below for
a download link), to achieve the subdued look in the skin tones. then, i
picked the iris colour and saturated this tone via the saturation slider.
as a side note, the flash didn’t fire in this image (iso 800) so i needed to
stop it up by 2.5ev and the rest is all natural lighting..
as a starting point, i matched a colour checker lut interpolation function to
the in-camera processing of fuji cameras. these have the names of old film and
generally do a good job at creating pleasant colours. this was done using the
darktable-chart utility, by matching raw colours to the jpg output (both in Lab space in the darktable pipeline).
here is the link to the fuji styles, and how to use them.
i should be doing pat’s film emulation presets with this, too, and maybe
styles from other cameras (canon picture styles?). darktable-chart will
output a dtstyle file, with the mapping split into tone curve and colour
checker module. this allows us to tweak the contrast (tone curve) in isolation
from the colours (lut module).
these styles were created with the X100T model, and reportedly they work so/so
with different camera models. the idea is to create a Lab-space mapping which
is well configured for all cameras. but apparently there may be sufficient
differences between the output of different cameras after applying their colour
matrices (after all these matrices are just an approximation of the real camera
to XYZ mapping).
so if you’re really after maximum precision, you may have to create the styles
yourself for your camera model. here’s how:
this is to make sure we can process high-dynamic range images and not destroy
the bright spots with the lut. this is needed since the it8 does not deliver
any information out of the reflective gamut and for very bright input. to fix
wide gamut input, it may be needed to enable gamut clipping in the input colour
profile module when applying the resulting style to an image with highly
saturated colours. darktable-chart does that automatically in the style it
writes.
fix up style description in csv if you want
run darktable-chart --csv
outputs a .dtstyle with everything properly switched off, and two modules on: colour checker + tonecurve in Lab
when processing the list of colour pairs into a set of coefficients for the
thin plate spline, the program will output the approximation error, indicated
by average and maximum CIE 76 \(\Delta\)E for the input patches (the it8 in the
examples here). of course we don’t know anything about colours which aren’t
represented in the patch. the hope would be that the sampling is dense enough
for all intents and purposes (but nothing is holding us back from using a
target with even more patches).
for the fuji styles, these errors are typically in the range of mean \(\Delta
E\approx 2\) and max \(\Delta E \approx 10\) for 24 patches and a bit less for 49.
unfortunately the error does not decrease very fast in the number of patches
(and will of course drop to zero when using all the patches of the input chart).
provia 24:rank 28/24 avg DE 2.42189 max DE 7.57084
provia 49:rank 53/49 avg DE 1.44376 max DE 5.39751
astia-24:rank 27/24 avg DE 2.12006 max DE 10.0213
astia-49:rank 52/49 avg DE 1.34278 max DE 7.05165
velvia-24:rank 27/24 avg DE 2.87005 max DE 16.7967
velvia-49:rank 53/49 avg DE 1.62934 max DE 6.84697
classic chrome-24:rank 28/24 avg DE 1.99688 max DE 8.76036
classic chrome-49:rank 53/49 avg DE 1.13703 max DE 6.3298
mono-24:rank 27/24 avg DE 0.547846 max DE 3.42563
mono-49:rank 52/49 avg DE 0.339011 max DE 2.08548
it is possible to match the reference values of the it8 instead of a reference
jpg output, to calibrate the camera more precisely than the colour matrix
would.
there is a button for this in the darktable-chart tool
needs careful shooting, to match brightness of reference value closely.
at this point it’s not clear to me how white balance should best be handled here.
need reference reflectances of the it8 (wolf faust ships some for a few illuminants).
another next step we would like to take with this is to match real film footage
(porta etc). both reference and film matching will require some global exposure
calibration though.
[0] Ken Anjyo and J. P. Lewis and Frédéric Pighin, “Scattered data interpolation for computer graphics” in Proceedings of SIGGRAPH 2014 Courses, Article No. 27, 2014. pdf
[1] J. A. Tropp and A. C. Gilbert, “Signal Recovery From Random Measurements Via Orthogonal Matching Pursuit”, in IEEE Transactions on Information Theory, vol. 53, no. 12, pp. 4655-4666, Dec. 2007.
It was always my intention to make the entire PIXLS.US website available under a permissive license. The content is already all licensed Creative Commons, By Attribution, Share-Alike (unless otherwise noted). I just hadn’t gotten around to actually posting the site source.
Until now(ish). I say “ish“ because I apparently released the code back in April and am just now getting around to talking about it.
Also, we finally have a category specifically for all those darktable weenies on discuss!
I finally got around to pushing my code for this site up to Github on April 27 (I’m basing this off git logs because my memory is likely suspect). It took a while, but better late than never? I think part of the delay was a bit of minor embarrassment on my part for being so sloppy with the site code. In fact, I’m still embarrassed - so don’t laugh at me too hard (and if you do, at least don’t point while laughing too).
In fact, we’ve got a couple of other repositories under the Github Organization PIXLS.US including this website, presentation assets, lighting diagram SVG’s, and more. If you’ve got a Github account or wanted to join in with hacking at things, by all means send me a note and we’ll get you added to the organization asap.
Note: you don’t need to do anything special if you just want to grab the site code. You can do this quickly and easily with:
git clone https://github.com/pixlsus/website.git
You actually don’t even need a Github account to clone the repo, but you will need one if you want to fork it on Github itself, or to send pull-requests. You can also feel free to simply email/post patches to us as well:
Speaking of which, I wanted to give a special shout-out to community member @paperdigits (Mica), who has been active in sharing presentation materials in the Presentations repo and has been actively hacking at the website. Mica’s recommendations and pull requests are helping to make the site code cleaner and better for everyone, and I really appreciate all the help (even if I _am_ scared of change).
Yes, after member Claes asked the question on discuss about why we didn’t have a darktable category on the forums, I relented and created one. Normally I want to make sure that any category is going to have active people to maintain and monitor the topics there. I feel like having an empty forum can sometimes be detrimental to the perception of a project/community.
In this case, any topics in the darktable category will also show up in the more general Software category as well. This way the visibility and interactions are still there, but with the added benefit that we can now choose to see only darktable posts, ignore them, or let all those stinky users do what they want in there.
Besides, now we can say that we’ve sufficiently appeased Morgan Hardwood‘s organizational needs…
Community member and RawTherapee hacker Morgan Hardwood brings us a great tutorial + assets from one of his strolls near the Söderåsen National Park (Sweden!). Ofnuts is apparently trying to get me to burn the forum down by sharing his raw file of a questionable subject. After bugging David Tschumperlé he managed to find a neat solution to generating a median (pixel) blend of a large number of images without making your computer throw itself out a window.
So much neat content being shared for everyone to play with and learn from! Come see what everyone is doing!
Sometimes you’re just hanging out minding your own business and talking photography with friends and other Free Software nuts when someone comes running by and drops a great tutorial in your lap. Just as Morgan Hardwood did on the forums a few days ago!
There is an old oak by the southern entrance to the Söderåsen National Park. Rumor has it that this is the oak under which Gandalf sat as he smoked his pipe and penned the famous saga about J.R.R. Tolkien. I don’t know about that, but the valley rabbits sure love it.
The image itself is a treat. I personally love images where the lighting does interesting things and there are some gorgeous things going on in this image. The diffused light flooding in under the canopy on the right with the edge highlights from the light filtering down make this a pleasure to look at.
Of course, Morgan doesn’t stop there. You should absolutely go read his entire post. He not only walks through his entire thought process and workflow starting at his rationale for lens selection (50mm f/2.8) all the way through his corrections and post-processing choices. To top it all off, he has graciously shared his assets for anyone to follow along! He provides the raw file, the flat-field, a shot of his color target + DCP, and finally his RawTherapee .PP3 file with all of his settings! Whew!
If you’re interested I urge you to go check out (and participate!) in his topic on the forums: Old Oak - A Tutorial.
Speaking of sharing material, Ofnuts has decided that he apparently wants me to burn the forums to the ground, put the ashes in a spaceship, fly the spaceship into the sun, and to detonate the entire solar system into a singularity. Why do I say this?
Kill it with fire!
Because he started a topic appropriately entitled: “NSFPAOA (Not Suitable for Pat and Other Arachnophobes)”, in which he shares his raw .CR2 file for everyone to try their hand at processing that cute little spider above. There have already been quite a few awesome interpretations from folks in the community like:
A version by CarVac
By MLC/Morgin
By Jonas Wagner
By iarga
By PkmX
By Kees Guequierre
Of course, I had a chance to try processing it as well. Here’s what I ended up with:
Ahhhh, just writing this post is a giant bag of NOPE*. If you’d like to join in on the fun(?) and share your processing as well - go check out the topic!
Now let’s move on to something more cute and fuzzy, like an ALOT…
* I kid, I’m not really an arachnophobe (within reason), but I can totally see why someone would be.
The ALOT. Borrowed from Allie Brosh and here because I really wanted an excuse to include it.
I count myself lucky to have so many smart friends that I can lean on to figure out or help me do things (more on that in the next post). One of those friends is G’MIC creator and community member David Tschumperlé.
A few years back he helped me with some artwork I was generating with imagemagick at the time. I was averaging images together to see what an amalgamation would look like. For instance, here is what all of the Sports Illustrated swimsuit edition (NSFW) covers (through 2000) look like, all at once:
A natural progression of this idea was to consider doing a median blend vs. mean. The problem is that a mean average is very easy and fast to calculate as you advance through the image stack, but the median is not. This is relevant because I began to look at these for videos (in particular music videos), where the image stack was 5,000+ images for a video easily (that is ALOT of frames!).
It’s relatively easy to generate a running average for a series of numbers, but generating the median value requires that the entire stack of numbers be loaded and sorted. This makes it prohibitive to do on a huge number of images, particularly at HD resolutions.
So it’s awesome that, yet again, David has found a solution to the problem! He explains it in greater detail on his topic:
He basically chops up the image frame into regions, then computes the pixel-median value for those regions. Here’s an example of his result:
Mean/Median samples from P!nk - Try music video.
Now I can start utilizing median blends more often in my experiments, and I’m quite sure folks will find other interesting uses for this type of blending!
Attention: This article is a work in progress, based on my own practical experience up until the time of writing, so you may want to check back periodically to see if it has been updated.
This article outlines how you can calibrate and profile your display on Linux, assuming you have the right equipment (either a colorimeter like for example the i1 Display Pro or a spectrophotometer like for example the ColorMunki Photo). For a general overview of what color management is and details about some of its parlance you may want to read this before continuing.
A Fresh Start
First you may want to check if any kind of color management is already active on your machine, if you see the following then you’re fine:
$ xprop -display :0.0 -len 14 -root _ICC_PROFILE
_ICC_PROFILE: no such atom on any window.
However if you see something like this, then there is already another color management system active:
If this is the case you need to figure out what and why… For GNOME/Unity based desktops this is fairly typical, since they extract a simple profile from the display hardware itself via EDID and use that by default. I’m guessing KDE users may want to look into this before proceeding. I can’t give much advice about other desktop environments though, as I’m not particularly familiar with them. That said, I tested most of the examples in this article with XFCE 4.10 on Xubuntu 14.04 “Trusty”.
Display Types
Modern flat panel displays are comprised of two major components for purposes of our discussion, the backlight and the panel itself. There are various types of backlights, White LED (most common nowadays), CCFL (most common a few years ago), RGB LED and Wide Gamut CCFL, the latter two of which you’d typically find on higher end displays. The backlight primarily defines a displays gamut and maximum brightness. The panel on the other hand primarily defines the maximum contrast and acceptable viewing angles. Most common types are variants of IPS (usually good contrast and viewing angles) and TN (typically mediocre contrast and poor viewing angles).
Display Setup
There are two main cases, there are laptop displays, which usually allow for little configuration, and regular desktop displays. For regular displays there are a few steps to prepare your display to be profiled, first you need to reset your display to its factory defaults. We leave the contrast at its default value. If your display has a feature called dynamic contrast you need to disable it, this is critical, if you’re unlucky enough to have a display for which this cannot be disabled, then there is no use in proceeding any further. Then we set the color temperature setting to custom and set the R/G/B values to equal values (often 100/100/100 or 255/255/255). As for the brightness, set it to a level which is comfortable for prolonged viewing, typically this means reducing the brightness from its default setting, this will often be somewhere around 25–50 on a 0–100 scale. Laptops are a different story, often you’ll be fighting different lighting conditions, so you may want to consider profiling your laptop at its full brightness. We’ll get back to the brightness setting later on.
Before continuing any further, let the display settle for at least half an hour (as its color rendition may change while the backlight is warming up) and make sure the display doesn’t go into power saving mode during this time.
Another point worth considering is cleaning the display before starting the calibration and profiling process, do keep in mind that displays often have relatively fragile coatings, which may be deteriorated by traditional cleaning products, or easily scratched using regular cleaning cloths. There are specialist products available for safely cleaning computer displays.
You may also want to consider dimming the ambient lighting while running the calibration and profiling procedure to prevent (potential) glare from being an issue.
Software
If you’re in a GNOME or Unity environment it’s highly recommend to use GNOME Color Manager (with colord and argyll). If you have recent versions (3.8.3, 1.0.5, 1.6.2 respectively), you can profile and setup your display completely graphically via the Color applet in System Settings. It’s fully wizard driven and couldn’t be much easier in most cases. This is what I personally use and recommend. The rest of this article focuses on the case where you are not using it.
Xubuntu users in particular can get experimental packages for the latest argyll and optionally xiccd from my xiccd-testing PPAs. If you’re using a different distribution you’ll need to source help from its respective community.
Report On The Uncalibrated Display
To get an idea of the displays uncalibrated capabilities we use argyll’s dispcal:
$ dispcal -H -y l -R
Uncalibrated response:
Black level = 0.4179 cd/m^2
50% level = 42.93 cd/m^2
White level = 189.08 cd/m^2
Aprox. gamma = 2.14
Contrast ratio = 452:1
White Visual Daylight Temperature = 7465K, DE 2K to locus = 3.2
Here we see the display has a fairly high uncalibrated native whitepoint at almost 7500K, which means the display is bluer than it should be. When we’re done you’ll notice the display becoming more yellow. If your displays uncalibrated native whitepoint is below 6500K you’ll notice it becoming more blue when loading the profile.
Another point to note is the fairly high white level (brightness) of almost 190 cd/m2, it’s fairly typical to target 120 cd/m2 for the final calibration, keeping in mind that we’ll lose 10 cd/m2 or so because of the calibration itself. So if your display reports a brightness significantly higher than 130 cd/m2 you may want to considering turning down the brightness another notch.
Calibrating And Profiling Your Display
First we’ll use argyll’s dispcal to measure and adjust (calibrate) the display, compensating for the displays whitepoint (targeting 6500K) and gamma (targeting industry standard 2.2, more info on gamma here):
$ dispcal -v -m -H -y l -q l -t 6500 -g 2.2 asus_eee_pc_1215p
Next we’ll use argyll’s targen to generate measurement patches to determine its gamut:
$ targen -v -d 3 -G -f 128 asus_eee_pc_1215p
Then we’ll use argyll’s dispread to apply the calibration file generated by dispcal, and measure (profile) the displays gamut using the patches generated by targen:
$ dispread -v -N -H -y l -k asus_eee_pc_1215p.cal asus_eee_pc_1215p
Finally we’ll use argyll’s colprof to generate a standardized ICC (version 2) color profile:
$ colprof -v -D "Asus Eee PC 1215P" -C "Copyright 2013 Pascal de Bruijn" \
-q m -a G -n c asus_eee_pc_1215p
Profile check complete, peak err = 9.771535, avg err = 3.383640, RMS = 4.094142
The parameters used to generate the ICC color profile are fairly conservative and should be fairly robust. They will likely provide good results for most use-cases. If you’re after better accuracy you may want to try replacing -a G with -a S or even -a s, but I very strongly recommend starting out using -a G.
You can inspect the contents of a standardized ICC (version 2 only) color profile using argyll’s iccdump:
$ iccdump -v 3 asus_eee_pc_1215p.icc
To try the color profile we just generated we can quickly load it using argyll’s dispwin:
$ dispwin -I asus_eee_pc_1215p.icc
Now you’ll likely see a color shift toward the yellow side. For some possibly aged displays you may notice it shifting toward the blue side.
If you’ve used a colorimeter (as opposed to a spectrophotometer) to profile your display and if you feel the profile might be off, you may want to consider reading this and this.
Report On The Calibrated Display
Next we can use argyll’s dispcal again to check our newly calibrated display:
$ dispcal -H -y l -r
Current calibration response:
Black level = 0.3432 cd/m^2
50% level = 40.44 cd/m^2
White level = 179.63 cd/m^2
Aprox. gamma = 2.15
Contrast ratio = 523:1
White Visual Daylight Temperature = 6420K, DE 2K to locus = 1.9
Here we see the calibrated displays whitepoint nicely around 6500K as it should be.
Loading The Profile In Your User Session
If your desktop environment is XDG autostart compliant, you may want to considering creating a .desktop file which will load the ICC color profile during all users session login:
Alternatively you could use colord and xiccd for a more sophisticated setup. If you do make sure you have recent versions of both, particularly for xiccd as it’s still a fairly young project.
First we’ll need to start xiccd (in the background), which detects your connected displays and adds it to colord‘s device inventory:
$ nohup xiccd &
Then we can query colord for its list of available devices:
$ colormgr get-devices
Next we need to query colord for its list of available profiles (or alternatively search by a profile’s full filename):
You should notice your displays color shift within a second or so (xiccd applies it asynchronously), assuming you haven’t already applied it via dispwin earlier (in which case you’ll notice no change).
If you suspect xiccd isn’t properly working, you may be able to debug the issue by stopping all xiccd background processes, and starting it in debug mode in the foreground:
$ killall xiccd
$ G_MESSAGES_DEBUG=all xiccd
Also in xiccd‘s case you’ll need to create a .desktop file to load xiccd during all users session login:
$ cat /etc/xdg/autostart/xiccd.desktop
[Desktop Entry]
Encoding=UTF-8
Name=xiccd
GenericName=X11 ICC Daemon
Comment=Applies color management profiles to your session
Exec=xiccd
Terminal=false
Type=Application
Categories=
OnlyShowIn=XFCE;
You’ll note that xiccd does not need any parameters, since it will query colord‘s database what profile to load.
If your desktop environment is not XDG autostart compliant, you need to ask them how to start custom commands (dispwin or xiccd respectively) during session login.
Dual Screen Caveats
Currently having a dual screen color managed setup is complicated at best. Most programs use the _ICC_PROFILE atom to get the system display profile, and there’s only one such atom. To resolve this issue new atoms were defined to support multiple displays, but not all applications actually honor them. So with a dual screen setup there is always a risk of applications applying the profile for your first display to your second display or vice versa.
So practically speaking, if you need a reliable color managed setup, you should probably avoid dual screen setups altogether.
That said, most of argyll’s commands support a -d parameter for selecting which display to work with during calibration and profiling, but I have no personal experience with them whatsoever, since I purposefully don’t have a dual screen setup.
Application Support Caveats
As my other article explains display color profiles consist of two parts, one part (whitepoint & gamma correction) is applied via X11 and thus benefits all applications. There is however a second part (gamut correction) that needs to be applied by the application. And application support for both input and display color management vary wildly. Many consumer grade applications have no color management awareness whatsoever.
Firefox can do color management and it’s half-enabled by default, read this to properly configure Firefox.
GIMP for example has display color management disabled by default, you need to enable it via its preferences.
Eye of GNOME has display color management enabled by default, but it has nasty corner case behaviors, for example when a file has no metadata no color management is done at all (instead of assuming sRGB input). Some of these issues seem to have been resolved on Ubuntu Trusty (LP #272584).
Darktable has display color management enabled by default and is one of the few applications which directly support colord and the display specific atoms as well as the generic _ICC_PROFILE atom as fallback. There are however a few caveats for darktable as well, documented here.
Community member Damon Lynch happens to make an awesome program called Rapid Photo Downloader in his “spare” time. In fact you may have heard mention of it as part of Riley Brandt’s“The Open Source Photography Course”*. It is a program that specializes in downloading photo and video from media in as efficient a manner as possible while extending the process with extra functionality.
* Riley donates a portion of the proceeds from his course to various projects, and Rapid Photo Downloader is one of them!
Some of the neat new features include being able to preview the download subfolder and storage space of devices before you download:
Also being able to download from multiple devices in parallel, including from all cameras supported by gphoto2:
There is much, much more in this release. Damon goes into much further detail on his post in the forum, copied here:
How about its Timeline, which groups photos and videos based on how much time elapsed between consecutive shots. Use it to identify photos and videos taken at different periods in a single day or
over consecutive days.
You can adjust the time elapsed between consecutive shots that is used to build the Timeline to match your shooting sessions.
For those who’ve used the older version, I’m copying and pasting from the ChangeLog, which covers most but not all changes:
New features compared to the previous release, version 0.4.11:
Every aspect of the user interface has been revised and modernized.
Files can be downloaded from all cameras supported by gPhoto2,
including smartphones. Unfortunately the previous version could download
from only some cameras.
Files that have already been downloaded are remembered. You can still select
previously downloaded files to download again, but they are unchecked by
default, and their thumbnails are dimmed so you can differentiate them
from files that are yet to be downloaded.
The thumbnails for previously downloaded files can be hidden.
Unique to Rapid Photo Downloader is its Timeline, which groups photos and
videos based on how much time elapsed between consecutive shots. Use it
to identify photos and videos taken at different periods in a single day
or over consecutive days. A slider adjusts the time elapsed between
consecutive shots that is used to build the Timeline. Time periods can be
selected to filter which thumbnails are displayed.
Thumbnails are bigger, and different file types are easier to
distinguish.
Thumbnails can be sorted using a variety of criteria, including by device
and file type.
Destination folders are previewed before a download starts, showing which
subfolders photos and videos will be downloaded to. Newly created folders
have their names italicized.
The storage space used by photos, videos, and other files on the devices
being downloaded from is displayed for each device. The projected storage
space on the computer to be used by photos and videos about to be
downloaded is also displayed.
Downloading is disabled when the projected storage space required is more
than the capacity of the download destination.
When downloading from more than one device, thumbnails for a particular
device are briefly highlighted when the mouse is moved over the device.
The order in which thumbnails are generated prioritizes representative
samples, based on time, which is useful for those who download very large
numbers of files at a time.
Thumbnails are generated asynchronously and in parallel, using a load
balancer to assign work to processes utilizing up to 4 CPU cores.
Thumbnail generation is faster than the 0.4 series of program
releases, especially when reading from fast memory cards or SSDs.
(Unfortunately generating thumbnails for a smartphone’s photos is painfully
slow. Unlike photos produced by cameras, smartphone photos do not contain
embedded preview images, which means the entire photo must be downloaded
and cached for its thumbnail to be generated. Although Rapid Photo Downloader
does this for you, nothing can be done to speed it up).
Thumbnails generated when a device is scanned are cached, making thumbnail
generation quicker on subsequent scans.
Libraw is used to render RAW images from which a preview cannot be extracted,
which is the case with Android DNG files, for instance.
Freedesktop.org thumbnails for RAW and TIFF photos are generated once they
have been downloaded, which means they will have thumbnails in programs like
Gnome Files, Nemo, Caja, Thunar, PCManFM and Dolphin. If the path files are being
downloaded to contains symbolic links, a thumbnail will be created for the
path with and without the links. While generating these thumbnails does slow the
download process a little, it’s a worthwhile tradeoff because Linux desktops
typically do not generate thumbnails for RAW images, and thumbnails only for
small TIFFs.
The program can now handle hundreds of thousands of files at a time.
Tooltips display information about the file including name, modification
time, shot taken time, and file size.
Right click on thumbnails to open the file in a file browser or copy the
path.
When downloading from a camera with dual memory cards, an emblem beneath the
thumbnail indicates which memory cards the photo or video is on
Audio files that accompany photos on professional cameras like the Canon
EOS-1D series of cameras are now also downloaded. XMP files associated with
a photo or video on any device are also downloaded.
Comprehensive log files are generated that allow easier diagnosis of
program problems in bug reports. Messages optionally logged to a
terminal window are displayed in color.
When running under Ubuntu‘s Unity desktop, a progress bar and count of files
available for download is displayed on the program’s launcher.
Status bar messages have been significantly revamped.
Determining a video’s correct creation date and time has been improved, using a
combination of the tools MediaInfo and ExifTool. Getting the right date and time
is trickier than it might appear. Depending on the video file and the camera that
produced it, neither MediaInfo nor ExifTool always give the correct result.
Moreover some cameras always use the UTC time zone when recording the creation
date and time in the video’s metadata, whereas other cameras use the time zone
the video was created in, while others ignore time zones altogether.
The time remaining until a download is complete (which is shown in the status
bar) is more stable and more accurate. The algorithm is modelled on that
used by Mozilla Firefox.
The installer has been totally rewritten to take advantage of Python‘s
tool pip, which installs Python packages. Rapid Photo Downloader can now
be easily installed and uninstalled. On Ubuntu, Debian and Fedora-like
Linux distributions, the installation of all dependencies is automated.
On other Linux distrubtions, dependency installation is partially
automated.
When choosing a Job Code, whether to remember the choice or not can be
specified.
Removed feature:
Rotate Jpeg images - to apply lossless rotation, this feature requires the
program jpegtran. Some users reported jpegtran corrupted their jpegs’
metadata – which is bad under any circumstances, but terrible when applied
to the only copy of a file. To preserve file integrity under all circumstances,
unfortunately the rotate jpeg option must therefore be removed.
Under the hood, the code now uses:
PyQt 5.4 +
gPhoto2 to download from cameras
Python 3.4 +
ZeroMQ for interprocess communication
GExiv2 for photo metadata
Exiftool for video metadata
Gstreamer for video thumbnail generation
Please note if you use a system monitor that displays network activity,
don’t be alarmed if it shows increased local network activity while the
program is running. The program uses ZeroMQ over TCP/IP for its
interprocess messaging. Rapid Photo Downloader’s network traffic is
strictly between its own processes, all running solely on your computer.
Missing features, which will be implemented in future releases:
Components of the user interface that are used to configure file
renaming, download subfolder generation, backups, and miscellaneous
other program preferences. While they can be configured by manually
editing the program’s configuration file, that’s far from easy and is
error prone. Meanwhile, some options can be configured using the command
line.
There are no full size photo and video previews.
There is no error log window.
Some main menu items do nothing.
Files can only be copied, not moved.
Of course, Damon doesn’t sit still. He quickly followed up the 0.9.0a1 announcement by announcing 0.9.0a2 which included a few bug fixes from the previous release:
Added command line option to import preferences from from an old program
version (0.4.11 or earlier).
Implemented auto unmount using GIO (which is used on most Linux desktops) and
UDisks2 (all those desktops that don’t use GIO, e.g. KDE).
Fixed bug while logging processes being forcefully terminated.
Fixed bug where stored sequence number was not being correctly used when
renaming files.
Fixed bug where download would crash on Python 3.4 systems due to use of Python
3.5 only math.inf
If you’ve been considering optimizing your workflow for photo import and initial sorting now is as good a time as any - particularly with all of the great new features that have been packed into this release! Head on over to the Rapid Photo Downloader website to have a look and see the instructions for getting a copy:
Remember, this is Alpha software still (though most of the functionality is all in place). If you do run into any problems, please drop in and let Damon know in the forums!
When the flowers are blooming, image filters abound!
A new version 1.7.1 “Spring 2016” of G’MIC (GREYC’s Magic for Image Computing),
the open-source framework for image processing, has been released recently (26 April 2016).
This is a great opportunity to summarize some of the latest advances and features over the last 5 months.
G’MIC is an open-source project started in August 2008. It has been developed in the
IMAGE team of the GREYC laboratory
from the CNRS (one of the major French public research institutes).
This team is made up of researchers and teachers specializing in the algorithms and mathematics of image processing.
G’MIC is released under the free software licence CeCILL
(GPL-compatible) for various platforms (Linux, Mac and Windows). It provides a set of various user interfaces
for the manipulation of generic image data, that is images or image sequences of
multispectral data being _2D_ or _3D_, and with high-bit precision
(up to 32bits floats per channel). Of course, it manages “classical” color images as well.
Logo and (new) mascot of the G’MIC project, the open-source framework for image processing.
Note that the project just got a redesign of its mascot Gmicky, drawn by David Revoy, a French illustrator well-known to free graphics lovers for being responsible for the great libre webcomics Pepper&Carott.
G’MIC is probably best known for it’s GIMPplug-in,
first released in 2009. Today, this popular GIMP extension proposes more than 460 customizable filters and effects
to apply on your images.
Overview of the G’MIC plug-in for GIMP.
But G’MIC is not a plug-in for GIMP only. It also offers a command-line interface, that can
be used in addition with the CLI tools from ImageMagick or
GraphicsMagick
(this is undoubtly the most powerful and flexible interface of the framework).
G’MIC also has a web service G’MIC Online to apply effects on your images
directly from a web browser. Other G’MIC-based interfaces also exist (ZArt,
a plug-in for Krita, filters for Photoflow…).
All these interfaces are based on the generic C++ libraries CImg and
libgmic which are portable, thread-safe and multi-threaded
(through the use of OpenMP).
Today, G’MIC has more than 900 functions to process images, all being
fully configurable, for a library of only approximately 150 kloc of source code.
It’s features cover a wide spectrum of the image processing field, with algorithms for
geometric and color manipulations, image filtering (denoising/sharpening with spectral, variational or
patch-based approaches…), motion estimation and registration, drawing of graphic primitives (up to 3d vector objects),
edge detection, object segmentation, artistic rendering, etc.
This is a versatile tool, useful to visualize and explore complex image data,
as well as elaborate custom image processing pipelines (see these
slides to get more information about
the motivations and goals of the G’MIC project).
Here we look at the descriptions of some of the most significant filters recently added. We illustrate their usage
from the G’MIC plug-in for GIMP. All of these filters are of course available from other interfaces as well
(in particular within the CLI tool gmic).
The filter Artistic / Brushify tries to transform an image into a painting.
Here, the idea is to simulate the process of painting with brushes on a white canvas. One provides a template image
and the algorithm first analyzes the image geometry (local contrasts and orientations of the contours), then
attempt to reproduce the image with a single brush that will be locally rotated and scaled accordingly to the
contour geometry.
By simulating enough of brushstrokes, one gets a “painted” version of the template image, which is more or less close to the original one,
depending on the brush shape, its size, the number of allowed orientations, etc.
All these settings being customizable by the user as parameters of the algorithm:
This filter allows thus to render a wide variety of painting effects.
Overview of the filter “Brushify” in the G’MIC plug-in GIMP. The brush that will be used by the algorithmis visible on the top left.
The animation below illustrates the diversity of results one can get with this filter, applied on the same
input picture of a lion. Various brush shapes and geometries have been supplied to the algorithm.
Brushify is computationally expensive so its implementation is parallelized (each core gives several brushstrokes simultaneously).
A few examples of renderings obtained with “Brushify” from the same template image, but with different brushes and parameters.
Note that it’s particularly fun to invoke this filter from the command line interface (using the option -brushify
available in gmic) to process a sequence of video frames
(see this example of “ brushified “ video):
G’MIC gets a new algorithm to reconstruct missing data in images. This is a classical problem in image processing,
often named “Image Inpainting“, and G’MIC already had a lot of
useful filters to solve this problem.
Here, the newly added interpolation method assumes only a sparse set of image data is known, for instance a few scattered pixels
over the image (instead of continuous chuncks of image data). The analysis and the reconstruction of the global
image geometry is then particularly tough.
The new option -solidify in G’MIC allows the reconstruction of dense image data from such a sparse sampling,
based on a multi-scale diffusion PDE’s-based technique.
The figure below illustrates the ability of the algorithm with an example of image reconstruction. We start from
an input image of a waterdrop,
and we keep only 2.7% of the image data (a very little amount of data!). The algorithm is able to reconstruct
a whole image that looks like the input, even if all the small details have not been
fully reconstructed (of course!). The more samples we have, the finer details we can recover.
Reconstruction of an image from a sparse sampling.
As this reconstruction technique is quite generic, several new G’MIC filters takes advantage of it:
Filter Repair / Solidify applies the algorithm in a direct manner, by reconstructing transparent areas
from the interpolation of opaque regions.
The animation below shows how this filter can be used to create an artistic blur on the image borders.
Overview of the “Solidify” filter, in the G’MIC plug-in for GIMP.
From an artistic point of view, there are many possibilities offered by this filters.
For instance, it becomes really easy to generate color gradients with complex shapes, as shown with the two examples below
(also in this video that details the whole process).
Using the “Solidify” filter of G’MIC to easily create color gradients with complex shapes (input images on the left, filter results on the right).
Filter Artistic / Smooth abstract uses same idea as the one with the waterdrop image:
it purposely sub-samples the image in a sparse way, by choosing keypoints mainly on the image edges, then use the reconstruction
algorithm to get the image back. With a low number of samples, the filter can only render a piecewise smooth image,
i.e. a smooth abstraction of the input image.
Overview of the “Smooth abstract” filter in the G’MIC plug-in for GIMP.
Filter Rendering / Gradient [random] is able to synthetize random colored backgrounds. Here again, the filter initializes
a set of colors keypoints randomly chosen over the image, then interpolate them with the new reconstruction algorithm.
We end up with a psychedelic background composed of randomly oriented color gradients.
Overview of the “Gradient [random]” filter in the G’MIC plug-in for GIMP.
Simulation of analog films : the new reconstruction algorithm also allowed a major improvement
for all the analog film emulation filters that have been present in G’MIC for years.
The section Film emulation/ proposes a wide variety of filters for this purpose. Their goal is to apply color transformations
to simulate the look of a picture shot by an analogue camera with a certain kind of film.
Below, you can see for instance a few of the 300 colorimetric transformations that are available in G’MIC.
A few of the 300+ color transformations available in G’MIC.
From an algorithmic point of view, such a color mapping is extremely simple to implement :
for each of the 300+ presets, G’MIC actually has an HaldCLUT, that is
a function defining for each possible color (R,G,B) (of the original image), a new color (R’,G’,B’) color to set
instead. As this function is not necessarily analytic, a HaldCLUT is stored in a discrete manner as a lookup table that gives
the result of the mapping for all possible colors of the RGB cube (that is 2^24 = 16777216 values
if we work with a 8bits precision per color component). This HaldCLUT-based color mapping is illustrated below for all values of the RGB color cube.
Principle of an HaldCLUT-based colorimetric transformation.
This is a large amount of data: even by subsampling the RGB space (e.g. with 6 bits per component) and compressing the corresponding HaldCLUT file,
you ends up with approximately 200 and 300 kB for each mapping file.
Multiply this number by 300+ (the number of available mappings in G’MIC), and you get a total of 85MB of data, to store all these color transformations.
Definitely not convenient to spread and package!
The idea was then to develop a new lossy compression technique focused on HaldCLUT files, that is volumetric discretised vector-valued functions which are piecewise smooth by nature.
And that what has been done in G’MIC, thanks to the new sparse reconstruction algorithm. Indeed, the reconstruction technique also works with _3D_ image data (such as a HaldCLUT!), so
one simply has to extract a sufficient number of significant keypoints in the RGB cube and interpolate them afterwards to allow the reconstruction of a whole HaldCLUT
(taking care to have a reconstruction error small enough to be sure that
the color mapping we get with the compressed HaldCLUT is indistinguishable from the non-compressed one).
How the decompression of an HaldCLUT now works in G’MIC, from a set of colored keypoints located in the RGB cube.
Thus, G’MIC doesn’t need to store all the color data from a HaldCLUT, but only a sparse sampling of it (i.e. a sequence of { rgb_keypoint, new_rgb_color }).
Depending on the geometric complexity of the HaldCLUTs to encode, more or less keypoints are necessary (roughly from _30_ to 2000).
As a result, the storage of the 300+HaldCLUTs in G’MIC requires now only 850 KiB of data (instead of 85 MiB), that is a compression gain of 99% !
That makes the whole HaldCLUT data storable in a single file that is easy to ship with the G’MIC package. Now, a user can then apply all the G’MIC color transformations
while being offline (previously, each HaldCLUT had to be downloaded separately from the G’MIC server when requested).
It looks like this new reconstruction algorithm from sparse samples is really great, and no doubts it will be used in other filters in the future.
Filter Arrays & tiles / Make seamless [patch-based] tries to transform an input texture to make it tileable, so that it can be duplicated as tiles along the horizontal and vertical axes
without visible seams on the borders of adjacent tiles.
Note that this is something that can be extremely hard to achieve, if the input texture has few auto-similarity or glaring luminosity changes spatially.
That is the case for instance with the “Salmon” texture shown below as four adjacent tiles (configuration 2x2) with a lighting that goes from dark (on the left) to bright (on the right).
Here, the algorithm modifies the texture so that the tiling shows no seams, but where the aspect of the original texture is preserved as much as possible
(only the texture borders are modified).
Overview of the “Make Seamless” filter in the G’MIC plug-in for GIMP.
We can imagine some great uses of this filter, for instance in video games, where texture tiling is common to render large virtual worlds.
Result of the “Make seamless” filter of G’MIC to make a texture tileable.
A “new” filter Details / Split details [wavelets] has been added to decompose an image into several levels of details.
It is based on the so-called “à trous” wavelet decomposition.
For those who already know the popular Wavelet Decompose plug-in for GIMP, there won’t be so much novelty here, as it is mainly the same kind of
decomposition technique that has been implemented.
Having it directly in G’MIC is still a great news: it offers now a preview of the different scales that will be computed, and the implementation is parallelized to take advantage of multiple cores.
Overview of the wavelet-based image decomposition filter, in the G’MIC plug-in for GIMP.
The filter outputs several layers, so that each layer contains the details of the image at a given scale. All those layers blended together gives the original image back.
Thus, one can work on those output layers separately and modify the image details only for a given scale. There are a lot of applications for this kind of image decomposition,
one of the most spectacular being the ability to retouch the skin in portraits : the flaws of the skin are indeed often present in layers with middle-sized scales, while
the natural skin texture (the pores) are present in the fine details. By selectively removing the flaws while keeping the pores, the skin aspect stays natural after the retouch
(see this wonderful link for a detailed tutorial about skin retouching techniques, with GIMP).
Using the wavelet decomposition filter in G’MIC for removing visible skin flaws on a portrait.
G’MIC is also well known to offer a wide range of algorithms for image denoising and smoothing (currently more than a dozen). And he got one more !
Filter Repair / Smooth [patch-pca] proposed a new image denoising algorithm that is both efficient and computationally intensive (despite its multi-threaded implementation, you
probably should avoid it on a machine with less than 8 cores…).
In return, it sometimes does magic to suppress noise while preserving small details.
Result of the new patch-based denoising algorithm added to G’MIC.
The Droste effect (also known as “mise en abyme“ in art) is the effect of a picture appearing within itself recursively.
To achieve this, a new filter Deformations / Continuous droste has been added into G’MIC. It’s actually a complete rewrite of the popular Mathmap’s
Droste filter that has existed for years.
Mathmap was a very popular plug-in for GIMP, but it seems to be not maintained anymore. The Droste effect was one of its most iconic and complex filter.
Martin “Souphead”, one former user of Mathmap then took the bull by the horns and converted the complex code of this filter specifically into a G’MIC script,
resulting in a parallelized implementation of the filter.
Overview of the converted “Droste” filter, in the G’MIC plug-in for GIMP.
This filter allows all artistic delusions. For instance, it becomes trivial to create the result below in a few steps: create a selection around the clock, move it on a transparent background, run the Droste filter,
et voilà!.
A simple example of what the G’MIC “Droste” filter can do.
The filter Deformations / Equirectangular to nadir-zenith is another filter converted from Mathmap to G’MIC.
It is specifically used for the processing of panoramas: it reconstructs both the
Zenith and the
Nadir regions of a panorama so that they can be easily modified
(for instance to reconstruct missing parts), before being reprojected back into the input panorama.
Overview of the “Deformations / Equirectangular to nadir-zenith” filter in the G’MIC plug-in for GIMP.
Morgan Hardwood has wrote a quite detailled tutorial,
here on pixls.us,
about the reconstruction of missing parts in the Zenith/Nadir of an equirectangular panorama. Check it out!
Finally, here are other highlights about the G’MIC project:
Filter Rendering / Kitaoka Spin Illusion is another Mathmap filter converted to G’MIC by Martin “Souphead”. It generates a certain kind of
optical illusions as shown below (close your eyes if you are epileptic!)
Result of the “Kitaoka Spin Illusion” filter.
Filter Colors / Color blindness transforms the colors of an image to simulate different types of color blindness.
This can be very helpful to check the accessibility of a web site or a graphical document for colorblind people.
The color transformations used here are the same as defined on Coblis,
a website that proposes to apply this kind of simulation online. The G’MIC filter gives strictly identical results, but it ease
the batch processing of several images at once.
Overview of the colorblindness simulation filter, in the G’MIC plug-in for GIMP.
Since a few years now, G’MIC has its own parser of mathematical expression, a really convenient module to perform complex calculations when applying image filters
This core feature gets new functionalities: the ability to manage variables that can be complex, vector or matrix-valued, but also the creation of
user-defined mathematical functions. For instance, the classical rendering of the Mandelbrot fractal set
(done by estimating the divergence of a sequence of complex numbers) can be implemented like this, directly on the command line:
$ gmic 512,512,1,1,"c = 2.4*[x/w,y/h] - [1.8,1.2]; z = [0,0]; for (iter = 0, cabs(z)<=2 && ++iter<256, z = z**z + c); 6*iter" -map 7,2
Using the G’MIC math evaluator to implement the rendering of the Mandelbrot set, directly from the command line!_
This clearly enlarge the math evaluator ability, as you are not limited to scalar variables anymore. You can now create complex filters which are able to
solve linear systems or compute eigenvalues/eigenvectors, and this, for each pixel of an input image.
It’s a bit like having a micro-(micro!)-Octave inside G’MIC.
Note that the Brushify filter described earlier uses these new features extensively.
It’s also interesting to know that the G’MIC math expression evaluator has its own JIT compiler
to achieve a fast evaluation of expressions when applied on thousands of image values simultaneously.
Another great contribution has been proposed by Tobias Fleischer, with the creation of a new _C_
API to invoke the functions of the libgmic library
(which is the library containing all the G’MIC features, initially available through a C++API only).
As the _C_ ABI is standardized (unlike C++),
this basically means G’MIC can be interfaced more easily with languages other than C++.
In the future, we can imagine the development of G’MICAPIs for languages such as Python for instance.
Tobias is currently using this new _C_ API to develop G’MIC-based plug-ins compatible with the OpenFX standard.
Those plug-ins should be usable indifferently in video editing software such as After effects, Sony Vegas Pro
or Natron. This is still an on-going work though.
Overview of some G’MIC-based OpenFX plug-ins, running under Natron.
Another contributor Robin “Starfall Robles” started to develop a Python script
to provide some of the G’MIC filters directly in the Blender video sequence editor.
This work is still in a early stage, but you can already apply different G’MIC effects on image sequences (see this video for a demonstration).
Overview of a dedicated G’MIC script running within the Blender VSE.
You can find out G’MIC filters also in the opensource nonlinear video editor Flowblade, thanks to the hard work of
Janne Liljeblad (Flowblade project leader).
Here again, the goal is to allow the application of G’MIC effects and filters directly on image sequences, mainly for artistic purposes
(as shown in this video or this one).
Overview of a G’MIC filter applied under Flowblade, a nonlinear video editor.
As you see, the G’MIC project is doing well, with an active development and cool new features added months after months.
You can find and use interfaces to G’MIC in more and more opensource software, as
GIMP,
Krita,
Blender,
Photoflow,
Flowblade,
Veejay,
EKD and
Natron in a near future (at least we hope so!).
At the same time, we can see more and more external resources available for G’MIC : tutorials, blog articles
(here,
here,
here,…),
or demonstration videos
(here,
here,
here,
here,…).
This shows the project becoming more useful to users of opensource software for graphics and photography.
The development of version 1.7.2 already hit the ground running, so stay tuned and visit the official G’MICforum on pixls.us
to get more info about the project developement and get answers to your questions.
Meanwhile, feel the power of free software for image processing!
This trip report is long overdue, but I wanted to process some of my images to share with everyone before I posted.
It had been a couple of years since I had an opportunity to travel and meet with the GIMP team again (Leipzig was awesome) so I was really looking forward to this trip. I missed the opportunity to head up to the great white North for last years meeting in Toronto.
Passport? Check! Magazine? Check! Ready to head to London!
I was going to attend the pre-LGM photowalk again this year so this time I decided to pack some bigger off-camera lighting modifiers for everyone to play with. Here’s a neat travelling photographer pro-tip: most airlines will let you carry on an umbrella as a “freebie” item. They just don’t specify that it has to be an umbrella to keep the rain off you. So I carried on my big Photek Softlighter II (luckily my light stands fit in my checked luggage). Just be sure not to leave it behind somewhere (which I was paranoid about for most of my trip). Luckily I was only changing planes in Atlanta.
The new ‘futristic’ looking Atlanta airport international terminal.
A couple of (bad) movies and hours later I was in Heathrow. I figured it wouldn’t be much trouble getting through border control.
I may have been a little optimistic about that.
The Border Force agent was quite nice and super inquisitive. So much so that I actually began to worry at some point (I think I must have spent almost 20 minutes talking to her) that she might not let me in!
She kept asking what I was coming to London for and I kept trying to explain to her what a “Libre Graphics Meeting“ was. This was almost a tragic comedy. The idea of Free Software did not seem to compute to her and I was sorry I had even made the passing mention. Her attention then turned to my umbrella and photography. What was I there to photograph? Who? Why? (Come to think of it, I should start asking myself those same questions more often… It was an existential visit to the border control.)
In the end I think she got bored with my answers and figured that I was far too awkward to be a threat to anything. Which pretty much sums up my entire college dating life.
In what I hope will become a tradition we had our photowalk the day before LGM officially kicked off and we could not have asked for a better day of weather! It was partly cloudy and just gorgeous (pretty much the complete opposite to what I was expecting for London weather).
I want to thank Ruth Catlow (http://ruthcatlow.net/) for allowing us to use the awesome space at Furtherfield Commons in Finsbury Park as a base for our photowalk! They were amazingly accommodating and we had a wonderful time chatting in general about art and what they were up to at the gallery and space.
They have some really neat things going on at the gallery and space so be sure to check them out if you can!
This is one of my favorite things about being able to attend LGM. I get to take a stroll and talk about photography with friends that I only usually get to interact with through an IRC window. I also feel like I can finally contribute something back to these awesome people that provide software I use every day.
Mairi between Simon and myself (I’m holding a reflector for him).
Photo by Michael Schumachercbna
We meandered through the park and chatted a bit about various things. Simon had brought along his external flash and wanted to play with off-camera lighting. So we convinced Liam to stand in front of a tree for us and Simon ended up taking one of my favorite images from the entire trip. This was Liam standing in front of the tree under the shade with me holding the flash slightly above him and to the camera right.
Liam by Simon
We even managed to run into Barrie Minney while on our way back to the Commons building. Aryeom and I started talking a little bit while walking when we crossed paths with some locals hanging out in the park. One man in particular was quite outgoing and let Aryeom take his photo, leading to another fun image!
Upon returning to the Commons building we experimented with some of the pretty window light coming into the building along with some black panels and a model (Mairi). This was quite fun as we were experimenting with various setups for the black panels and speedlights. Everyone had a chance to try some shots out and to direct Mairi (who was super patient and accommodating while we played).
I was having so much fun talking and trying things out with everyone that I didn’t even take that many photos of my own! This is one of my only images of Mairi inside the Commons. Mairi Natural Lightcba
Towards the end of our day I decided get my big Softlighter out and to try a few things in the lane outside the Commons building. Luckily Michael Schumacher grabbed an image of us while we were testing some shots with Mairi outside.
A nice behind-the-scenes image from schumaml of the lighting setup used below.
Yes, that’s darktable developer hanatos bracing the umbrella from the wind for me! Photo by Michael Schumachercbna
I loved the lane receding in the background and thought it might make for some fun images of Mairi. I had two YN-560 flashes in the Softlighter both firing around ¾ power. I had to balance the ambient sky with the softlighter so needed the extra power of a second flash (it also helps to keep the cycle times down).
Mairi waiting patiently while we set things up. Mairi Finsburycba
50mm f/8.0 1⁄200 ISO200
Mairi Finsbury Park (In the Lane)cba
The day was awesome and I really enjoyed being able to just hang out with everyone and take some neat photos. The evening at the pub was pretty great also (I got to hang out with Barrie and his friend and have a couple of pints - thanks again Barrie!).
It never fails to amaze me how every year the LGM organizers manage to put together such a great meeting for everyone. The venue was great and the people were just fantastic at the University of Westminster.
View of the lobby and meeting rooms (on the second floor).
Andrea Ferrero (@Carmelo_DrRaw) presenting PhotoFlow in the auditorium!
The opening “State of the Libre Graphics“ presentation was done by our (the GIMP teams) very own João Bueno who did a fantastic job! João will also be the local organizer for the 2017 LGM in Rio.
Thanks to contributions from community members Kees Guequierre, Jonas Wagner, and Philipp Haegi I had some great images to use for the PIXLS.US community slides for the “State of the Libre Graphics“. If anyone is curious, here is what I submitted:
These slides can be found on our Github PIXLS.US Presentations page (along with all of our other presentations that relate to PIXLS.US and promoting the community).
I was given some time to talk about and present our community to everyone at the meeting. (See embedded slides below):
I started by looking at what my primary motivation was to begin the site and what the state of free software photography was like at that time (or not like). Mainly that the majority of resources online for photographers that were high quality (and focused on high-quality results) were usually aimed at proprietary software users. Worse still, in some cases these websites locked away their best tutorials and learning content behind paywalls and subscriptions. I finished by looking at what was done to build this site and forum as a community for everyone to learn and share with each other freely.
A nice change this year was the inclusion of an exhibition space to display works by LGM members and artists. We even got an opportunity to hang a couple of prints (for some reason they really wanted my quad-print of pippin). I was particularly happy that we were able to print and display the Green Tiger Beetle by community member Kees Guequierre:
Hanatos and houz inspecting the prints at the exhibition.
View of the Exhibition. Well attended!
pippin x5
In Leipzig I thought it would be nice to offer portraits/headshots of folks that attended the meeting. I think it’s a great opportunity to get a (hopefully) nice photograph that people can use in social media, avatars, websites, etc. Here’s a sample of portraits from LGM2014 of the GIMP team that sat for me:
In 2014 I was lucky that houz had brought along an umbrella and stand to use, so this time I figured it was only fair that I bring along some gear myself. I had the Softlighter setup on the last couple of days for anyone that was interested in sitting for us. I say us because Marek Kubica (@Leonidas) from the community was right there to shoot with me along with the very famous @Ofnuts (well - famous to me - I’ve lost count of the neat things I’ve picked up from his advice)! Marek took quite a few portraits and managed the subjects very well - he was conversational, engaged, and managed to get some great personality from them.
A couple of samples from the images that I got are here as well, and they are the local organizer Lara with students from the University! I simply can’t thank them enough for the efforts and generosity in making us feel so welcome.
I’m still working through the portraits I took, but I’ll have them uploaded to my Flickr soon to share with everyone!
One of the best parts of attendance is getting to spend some time with the rest of the GIMP crew. Here’s an action shot during the GIMP meeting over lunch with a neat, glitchy schumaml:
There’s even some darktable nerds thrown in there!
It was great to see everyone at the flat on our last evening there as well…
Everyone spending the evening together! Mitch is missing from his seat in this shot (back there by pippin).
Overall this was another incredible meeting bringing together great folks who are building and supporting Free Software and Libre Graphics. Just my kind of crowd!
I even got a chance to speak a bit with the wonderful Susan Spencer of the Valentina project and we roughed out some thoughts about getting together at some point. It turns out she lives just up the same state as me (Alabama)! This is simply too great to not take advantage of - Free Software Fashion + Photography?! That will have to be a fun story (and photos) for another day…
Keep watching the blog for some more images from the trip - up next are the portraits of everyone and some more shots of the venue and exhibition!
It’s that time of year again! The weather is turning mild, the days are smelling fresh, and a bunch of photography nerds are all going to get together in a new country to roam around and (possibly) annoy locals by taking a ton of photographs! It’s the Pre-Libre Graphics Meeting photowalk of 2016!
Come join us the day before LGM kicks off to have a stroll through a lovely park and get a chance to shoot some photos between making new friends and having a pint.
Thanks to the wonderful work by the local LGM organizing team, we are able to invite everyone out to the photowalk on Thursday, April 14th the day before LGM kicks off.
They were able to get us in touch with the kind folks at Furtherfield Gallery & Commons in Finsbury Park. They’ve graciously offered us the use of their facilities at the Furtherfield Commons as a base to start from. So we will meet at the Commons building at 10:00 on Thursday morning.
Pre-LGM Photowalk 10:00 (AM), Thursday, April 14th Furtherfield Commons Finsbury Gate - Finsbury Park Finsbury Park, London, N4 2NQ
An overview of the photowalk venue relative to the LGM venue at the University of Westminster, Harrow:
If you would like to join us but may not make it to the Commons by 10:00, email me and let me know. I’ll try my best to make arrangements to meet up so you can join us a little later. I can’t imagine we’d be very far away (likely somewhere relatively near by in the park).
We’ll plan on meandering through the park with frequent stops to shoot images that strike our fancy. I will personally be bringing along my off-camera lighting equipment and a model (Mairi) to pose for us during the day. In case anyone wanted to play/learn a little about that type of photography.
There is no set time for finishing up. I figured we would play it by ear through lunch and to possibly all finish up at a nice pub together. (Taking advantage of the golden hour light at the end of the day hopefully).
In the spirit of saying “Thank you!” and sharing, I have also offered the Furtherfield folks our services for headshots and architectural/environmental shots of the Commons and Gallery spaces. For sure I will be taking these images for them but if anyone else wanted to pitch in and try, help, or assist the effort would be very welcome!
Dot in the Leipzig Market from the 2014 Pre-LGM photowalk.
Speaking of which, if you plan on attending and would like to explore some particular aspect of photography please feel free to let me know. I’ll do my best to match folks up based on interest. I sincerely hope this will be a fun opportunity to learn some neat new things, make some new friends, and to maybe grab some great images at the same time!
If there are any questions, please don’t hesitate to reach out to me! `patdavid@gmail.com` patdavid on irc://irc.gimp.org/#gimp
For some reason I was checking my account on the forums earlier today and noticed that it was created in April, 2015. On further inspection it looks like my, and @darix, accounts were created on April 2nd 2015.
(Not to be confused with the main site because apparently it took me about 8 months to get a forum stood up…)
Which means that the forums have been around for just over a year now?!
We’re just over a year old and just under 500 users on the forum!
For fun, I looked for the oldest (public) post we had and it looks like it’s the “Welcome to PIXLS.US Discussion“ thread. In case anyone wanted to revisit a classic…
THANK YOU so much to everyone who has made this an awesome place to be and nerd out about photography and software and more! Since we started we migrated the official G’MIC forums here as well as our friends at RawTherapee!
We’ve been introduced to some awesome projects like PhotoFlow as well as Filmulator. And everyone has just been amazing, supportive, and fun to be around.
Community member Eric Mesa asked on the forums the other day if there might be some Free resources for photographers that want to build a lighting diagram of their work. These are the diagrams that show how a shot might be set up with the locations of lights, what types of modifiers might be used, and where the camera/photographer might be positioned with respect to the subject. These diagrams usually also include lighting power details and notes to help the production.
It turns out there wasn’t really anything openly available and permissively licensed. So we need to fix that…
These diagrams are particularly handy for planning a shoot conceptually or explaining what the lighting setup was to someone after the fact. For instance, here’s a look at the lighting setup for Sarah (Glance):
Sarah (Glance)
YN560 full power into a 60” Photek Softlighter, about 20” from subject.
She was actually a bit further from the rear wall…
There are a few different commercial or restrictive-licensed options for photographers to create a lighting diagram, but nothing truly Free.
So thanks to the prodding by Eric, I thought it was something we should work on as a community!
I already had a couple of simple, basic shapes created in Inkscape for another tutorial so I figured I could at least get those files published for everyone to use.
I don’t have much to start with but that shouldn’t be a problem! I already had a backdrop, person, camera, octabox (+grid), and a softbox (+grid):
Even better: join the organization and fork the repo to add your own additions and to help us flesh out the available diagram assets for all to use!
From the README.md on that repo, I compiled a list of things I thought might be helpful to create:
Cameras
DSLR
Mirrorless
MF
Strobes
Speedlight
Monoblock
Lighting Modifiers
Softbox (+ grid?)
Umbrella (+ grid?)
Octabox (+ grid?)
Brolly
Reflectors
Flags
Barn Doors / Gobo
Light stands? (C-Stands?)
Environmental
Chairs
Stools
Boxes
Backgrounds (+ stands)
Models
If you don’t want to create something from scratch, perhaps grabbing the files and tweaking the existing assets to make them better in some way?
Hopefully we can fill out the list fairly quickly (as it’s a fairly limited subset of required shapes). Even better would be if someone picked up the momentum to possibly create a nice lighting diagram application of some sort!