New photo editor focused on streamlined tone mapping for every photo: Filmulator

This is the first real announcement for my program Filmulator, which is designed to give you all the positives of film, with none of the negatives.

When you try to use a tone curve to fit the dynamic range of a real scene into the <1000:1 contrast ratio of a monitor, or worse a print, you inevitably lose contrast at least somewhere (highlights and shadows usually), or you lose the dynamic range of the original scene.

However, your eyes perform tone mapping that preserves local contrast while reducing global contrast. Film does this too, thanks to the consumption and diffusion of the developer between adjacent parts of the film.

There exist tone mapping algorithms that are often applied by cell phones and HDR software, but they are are often linear and don’t behave nonlinearly as our eyes would.

Filmulator on the other hand literally simulates film development from the brightness recorded in a raw file by a digital camera. Because of this, the tone mapping effect it has is far less intrusive than standard tone mapping, and it also gives benefits for colors and highlight rendering.

Now that’s all good, but the important part is that when I started using it, I immediately needed far less time to edit my photos, since the tone mapping did most of what I wanted to 95% of the time, and I didn’t need to fiddle with tone curves for ten minutes per image anymore.

There are lots of other benefits, but for now I would like people to try it and give me their impressions of the workflow and user interface, which are intended to be streamlined and simple.

You can get the code at the above link. Do note that it’s Linux only now and it’s missing tools that you might find important (noise reduction, sharpening, cropping).

Any feedback would be appreciated.


Hey @CarVac

Your project sounds interesting. I’d like to try Filmulator but I don’t have and don’t want to have QtCreator. Can you outline the steps requires to compile your program without it, using command-line tools?
Could you also show some screenshots, and before/after samples?

Do you have the rest of the qt development environment? It’s written in QML so you can’t avoid that. If you just don’t want the IDE I’ll see if I can figure out the qmake and make commands.

You can look at the effect of my program here:

Many of them are just Drama (the main tone mapping parameter) at the subtle default and the high setting, but there is an example with RawTherapee and Filmulator.

All of the rest of my photos are Filmulated, I just don’t have anything to compare them to because it takes 5x longer for me to use RawTherapee to produce decent looking output.

I’ll make some screenshots of the program itself when I get home.

I have enough of Qt5 (5.4.2) to build the other programs I use which need it.

I bit the bullet and installed qtcreator but I get stuck with the same errors I get when trying to build and run it from command-line (qmake, then make to build it), perhaps you can point me what’s wrong:
1- When I open the project, I get these:
Project MESSAGE: Warning: unknown QT: qml
Project MESSAGE: Warning: unknown QT: quick
Project MESSAGE: Warning: unknown QT: quick
Project MESSAGE: Warning: unknown QT: qml

2- When I try to build the project, it fails with

It sounds like you might not have the Qt Quick portion of qt installed. Can you check that in the maintenance tool? (or did you install it from your distribution’s repositories)

I have the following installed:

$ eix -IcC dev-qt
[I] dev-qt/designer (4.8.6-r1(4)@2015-06-28 5.4.2(5)@2015-06-28): WYSIWYG tool for designing and building Qt-based GUIs
[I] dev-qt/linguist-tools (5.4.2(5)@2015-06-28): Tools for working with Qt translation data files
[I] dev-qt/qdbus (5.4.2(5)@2015-07-20): Interface to Qt applications communicating over D-Bus
[I] dev-qt/qt-creator (3.4.2@2015-07-20): Lightweight IDE for C++/QML development centering around Qt
[I] dev-qt/qt3support (4.8.6-r1(4)@2015-05-31): The Qt3Support module for the Qt toolkit
[I] dev-qt/qtchooser (0_p20150102@2015-03-17): Qt4/Qt5 version chooser
[I] dev-qt/qtconcurrent (5.4.2(5)@2015-06-28): Multi-threading concurrence support library for the Qt5 framework
[I] dev-qt/qtcore (4.8.6-r2(4)@2015-05-31 5.4.2(5)@2015-06-28): Cross-platform application development framework
[I] dev-qt/qtdbus (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): The D-Bus module for the Qt5 framework
[I] dev-qt/qtdeclarative (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): The QML and Quick modules for the Qt5 framework
[I] dev-qt/qtgraphicaleffects (5.4.2(5)@2015-07-20): Set of QML types for adding visual effects to user interfaces
[I] dev-qt/qtgui (4.8.6-r4(4)@2015-05-31 5.4.2-r1(5)@2015-07-13): The GUI module and platform plugins for the Qt5 framework
[I] dev-qt/qthelp (5.4.2(5)@2015-07-20): The Help module for the Qt5 framework
[?] dev-qt/qtmultimedia (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28 -> 4.8.6-r1(4)): The Multimedia module for the Qt5 framework
[I] dev-qt/qtnetwork (5.4.2(5)@2015-06-28): Network abstraction library for the Qt5 framework
[I] dev-qt/qtopengl (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): OpenGL support library for the Qt5 framework (deprecated)
[I] dev-qt/qtpaths (5.4.2(5)@2015-07-20): Tool to query Qt path information
[I] dev-qt/qtprintsupport (5.4.2(5)@2015-06-28): Printing support library for the Qt5 framework
[I] dev-qt/qtquick1 (5.4.2(5)@2015-06-28): Legacy declarative UI module for the Qt5 framework
[I] dev-qt/qtquickcontrols (5.4.2(5)@2015-06-28): Set of controls used in conjunction with Qt Quick to build complete interfaces
[I] dev-qt/qtscript (4.8.6-r2(4)@2015-05-31 5.4.2(5)@2015-06-28): Application scripting library for the Qt5 framework
[I] dev-qt/qtsql (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): SQL abstraction library for the Qt5 tooolkit
[I] dev-qt/qtsvg (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): SVG rendering library for the Qt5 framework
[I] dev-qt/qttest (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): Unit testing library for the Qt5 framework
[I] dev-qt/qttranslations (4.8.6-r1(4)@2015-05-31): Translation files for the Qt5 framework
[I] dev-qt/qtwebkit (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): WebKit rendering library for the Qt5 framework
[I] dev-qt/qtwidgets (5.4.2(5)@2015-06-28): Set of UI elements for creating classic desktop-style user interfaces for the Qt5 framework
[I] dev-qt/qtx11extras (5.4.2(5)@2015-06-28): Linux/X11-specific support library for the Qt5 framework
[I] dev-qt/qtxml (5.4.2(5)@2015-06-28): SAX and DOM implementation library for the Qt5 framework
[I] dev-qt/qtxmlpatterns (4.8.6-r1(4)@2015-05-31 5.4.2(5)@2015-06-28): XPath, XQuery, and XSLT support library for the Qt5 framework
Found 30 matches.

What is “the maintenance tool”?

Here’s a post I just made on how simple the workflow for a typical image is.

1 Like

Bookmarking this because I use film emulation in my landscape photography via Rawtherapee. This sounds very interesting indeed. I’ll see if I can compile this tomorrow but I’m usually a bit shit at that sort of thing.

This looks extremely interesting!

Would there be a possibility to bundle the core film emulation algorithm into a separate library? I would really like to include this into PhotoFlow.
As a bonus, it would then be possible to apply several additional adjustments (curves, sharpening, g’mic film emulations, etc…) to the filmulator output, either globally or locally :smiley:

1 Like

It certainly is possible, but I don’t know if it would be usable as a library for filmulator-gui because our pipeline is very tightly integrated and in the latest branch (needed to compile on qt 5.5) has dependencies on the gui for code simplicity reasons. And if I’m not using it, I’m unlikely to maintain it…

The possibilities are huge though because if you apply custom color curves for the “exposure” of the film and pick the filmulation parameters appropriately (there are about a dozen that are just set to sane defaults and aren’t controlled by the UI yet), you should be able to really convincingly mimic particular films. It’s gotta be integrated tightly, because some steps really have to be before it in linear space and others really have to be afterwards in output space.

The ability to dodge and burn and do other local adjustments would be nice (though I intend to eventually include basic stuff in Filmulator itself).

For performance reasons we’re rewriting it in Halide, which may or may not be easy to integrate into other programs, and we haven’t even figured out how best to integrate it into Filmulator.

If there’s a good way during this rewrite to make it a library (not sure if that’ll be possible), then I’ll try to do that. But for right now you’ll have to just copy the code out, and it’s not going to be easy keeping it up to speed with the main Filmulator that way.

1 Like

I’ve merged all of my other branching into master; now that’s the latest stable (hopefully) version.

1 Like

And now I’ve made it import the star rating from Canon cameras (at least recent ones).

If anyone knows where to find the ‘protect’ flag in the exif or xmp data from Nikons and other brands (should they feature ratings and image protection), can you tell me? I haven’t been able to find that online.

1 Like