Home

Awesome

Lua scripts

Description

darktable can be customized and extended using the Lua programming language. This repository contains the collected efforts of the darktable developers, maintainers, contributors and community. The following sections list the scripts contained in the repository, whether they can be run by themselves (Standalone - Yes) or depend on other scripts (Standalone - No), what operating systems they are known to work on (L - Linux, M - MacOS, W - Windows), and their purpose.

For the latest changes, see the ChangeLog

Official Scripts

These scripts are written primarily by the darktable developers and maintained by the authors and/or repository maintainers. They are located in the official/ directory.

NameStandaloneOSPurpose
check_for_updatesYesLMWCheck for updates to darktable
copy_paste_metadataYesLMWCopy and paste metadata, tags, ratings, and color labels between images
delete_long_tagsYesLMWDelete all tags longer than a specified length
delete_unused_tagsYesLMWDelete tags that have no associated images
enfuseNoLExposure blend several images (HDR)
generate_image_txtNoLGenerate txt sidecar files to be overlaid on zoomed images
image_path_in_uiYesLMWPlugin to display selected image path
import_filter_managerYesLMWManager for import filters
import_filtersNoLMWTwo import filters for use with import_filter_manager
save_selectionYesLMWProvide save and restore from multiple selection buffers
selection_to_pdfNoLGenerate a PDF file from the selected images

Contributed Scripts

These scripts are contributed by users. They are meant to have an "owner", i.e. the author, who maintains them. Over time the community has helped maintain these scripts, as well as the authors. They are located in the contrib/ directory.

NameStandaloneOSPurpose
AutoGrouperYesLMWGroup images together by time
autostyleYesLMWAutomatically apply styles on import
change_group_leaderYesLMWChange which image leads group
clear_GPSYesLMWReset GPS information for selected images
CollectHelperYesLMWAdd buttons to selected images module to manipulate the collection
color_profile_managerYesLMWManage darktable input and output color profiles
copy_attach_detach_tagsYesLMWCopy and paste tags from/to images
cr2hdrYesLProcess image created with Magic Lantern Dual ISO
cycle_group_leaderYesLMWcycle through images of a group making each the group leader in turn
dbmaintYesLMWfind and remove database entries for missing film rolls and images
enfuseAdvancedNoLMWMerge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images
exportLUTYesLMWCreate a LUT from a style and export it
ext_editorNoLWExport pictures to collection and edit them with up to nine user-defined external editors
face_recognitionNoLMIdentify and tag images using facial recognition
fujifilm_dynamic_rangeNoLMWCorrect fujifilm exposure based on exposure bias camera setting
fujifilm_ratingsNoLMSupport importing Fujifilm ratings
geoJSON_exportNoLCreate a geo JSON script with thumbnails for use in ...
geoToolboxNoLMWA toolbox of geo functions
gimpNoLMWOpen an image in GIMP for editing and return the result
gpx_exportNoLMWExport a GPX track file from selected images GPS data
harmonic_armatureYesLMWprovide a harmonic armature guide
hif_group_leaderYesLMWchange the group leader in a raw+heif image pair to the heif image
HDRMergeNoLMWCombine the selected images into an HDR DNG and return the result
huginNoLMWCombine selected images into a panorama and return the result
image_stackNoLMWCombine a stack of images to remove noise or transient objects
image_timeYesLMWAdjust the EXIF image time
jpg_group_leaderYesLMWchange the group leader for a raw+jpg pair to the jpg image
kml_exportNoLExport photos with a KML file for usage in Google Earth
LabelsToTagsYesLMWApply tags based on color labels and ratings
OpenInExplorerNoLMWOpen the selected images in the system file manager
passport_guideYesLMWAdd passport cropping guide to darkroom crop tool
passport_guide_germanyYesLMWAdd passport cropping guide for German passports to darkroom crop tool
pdf_slideshowNoLMExport images to a PDF slideshow
photilsNoLMAutomatic tag suggestions for your images
quicktagYesLMWCreate shortcuts for quickly applying tags
rate_groupYesLMWApply or remove a star rating from grouped images
rename_imagesYesLMWRename single or multiple images
rename-tagsYesLMWChange a tag name
RL_out_sharpNoLWOutput sharpening using GMic (Richardson-Lucy algorithm)
select_non_existingYesLMWEnable selection of non-existing images in the the currently worked on images
select_untaggedYesLMWEnable selection of untagged images
slideshowMusicNoLPlay music during a slideshow
transfer_hierarchyYesLMWImage move/copy preserving directory hierarchy
video_ffmpegNoLMWExport video from darktable

Example Scripts

These scripts provide examples of how to use specific portions of the API. They run, but are meant for demonstration purposes only. They are located in the examples/ directory.

NameStandaloneOSPurpose
api_versionYesLMWPrint the current API version
darkroom_demoYesLMWDemonstrate changing images in darkoom
gettextExampleYesLMHow to use translation
gui_actionsYesLMWdemonstrate controlling the GUI using darktable.gui.action calls
hello_worldYesLMWPrints hello world when darktable starts
lighttable_demoYesLMWDemonstrate controlling lighttable mode, zoom, sorting and filtering
moduleExampleYesLMWHow to create a lighttable module
multi_osNoLMWHow to create a cross platform script that calls an external executable
panels_demoYesLMWDemonstrate hiding and showing darktable panels
preferenceExamplesYesLMWHow to use preferences in a script
printExamplesYesLMWHow to use various print functions from a script
running_osYesLMWPrint out the running operating system
x-touchYesLMWdemonstrate how to use an x-touch mini MIDI controller to control the darktable GUI

Tools

Tool scripts perform functions relating to the repository, such as generating documentation. They are located in the tools/ directory.

NameStandaloneOSPurpose
executable_managerYesLMWManage the external executables used by the lua scripts
gen_i18n_moNoLMWGenerate compiled translation files (.mo) from source files (.po)
get_lib_manpagesNoLMRetrieve the library documentation and output it in man page and PDF format
get_libdocNoLMWRetrieve the library documentation and output it as text
script_managerNoLMWManage (install, update, enable, disable) the lua scripts

Related third-party projects

The following third-party projects are listed for information only. Think of this collection as an awesome-darktable-lua-scripts list. Use at your own risk!

Download and Install

The recommended method of installation is using git to clone the repository. This ensures that all dependencies on other scripts are met as well as providing an easy update path. Single scripts listed as standalone may be downloaded and installed by themselves.

snap packages

The snap version of darktable comes with lua included starting with version 2.4.3snap2.

Ensure git is installed on your system. If it isn't, use the package manager to install it. Then open a terminal and:

cd ~/snap/darktable/current
git clone https://github.com/darktable-org/lua-scripts.git lua

flatpak packages

Flatpak packages now use the internal lua interpreter.

Ensure git is installed on your system. If it isn't, use the package manager to install it. Then open a terminal and:

cd ~/.var/app/org.darktable.Darktable/config/darktable
git clone https://github.com/darktable-org/lua-scripts.git lua

appimage packages

These packages run in their own environment and don't have access to a lua interpreter, therefore the scripts can't run. The packagers could enable the internal interpreter, or allow the package to link the interpreter from the operating system, or bundle a copy of lua with the package. If you use one of these packages and wish to use the lua scripts, please contact the package maintainer and suggest the above fixes.

Linux and MacOS

Ensure git is installed on your system. If it isn't, use the package manager to install it. Then open a terminal and:

cd ~/.config/darktable/
git clone https://github.com/darktable-org/lua-scripts.git lua

Windows

Ensure git is installed on your system. Git can be obtained from https://gitforwindows.org/, as well as other places. If you use the gitforwindows.org distribution, install the Git Bash Shell also as it will aid in debugging the scripts if necessary. Then open a command prompt and run:

cd %LOCALAPPDATA%\darktable
git clone https://github.com/darktable-org/lua-scripts.git lua

If you don't have %LOCALAPPDATA%\darktable you have to start dartable at least once, because the directory is created at the first start of darktable.

Enabling

When darktable starts it looks for a file name ~/.config/darktable/luarc (%LOCALAPPDATA%\darktable\luarc for windows) and reads it to see which scripts to include. The file is a plain text file with entries of the form require "<directory>/<name>" where directory is the directory containing the scripts, from the above list, and name is the name from the above list. To include GIMP the line would be require "contrib/gimp".

The recommended way to enable and disable specific scripts is using the script manager module. To use script manager do the following:

Linux or MacOS

echo 'require "tools/script_manager"' > ~/.config/darktable/luarc

Windows

echo require "tools/script_manager" > %LOCALAPPDATA%\darktable\luarc

Snap

echo 'require "tools/script_manager"' > ~/snap/darktable/current/luarc

Flatpak

echo 'require "tools/script_manager"' > ~/.var/app/org.darktable.Darktable/config/darktable/luarc

You can also create or add lines to the luarc file from the command line:

echo 'require "contrib/gimp"' > ~/.config/darktable/luarc to create the file with a gimp entry
or echo 'require "contrib/hugin"' >> ~/.config/darktable/luarc to add an entry for hugin.

On windows from a command prompt:

echo require "contrib/gimp" > %LOCALAPPDATA%\darktable\luarc to create the file with a gimp entry
or echo require "contrib/hugin" >> %LOCALAPPDATA%\darktable\luarc to add an entry for hugin.

Disabling

To disable a script open the luarc file in your text editor and insert -- at the start of the line containing the script you wish to disable, then save the file.

Updating

To update the script repository, open a terminal or command prompt and do the following:

Snap

cd ~/snap/darktable/current/lua
git pull

Flatpak

cd ~/.var/app/org.darktable.Darktable/config/darktable/lua
git pull

Linux and MacOS

cd ~/.config/darktable/lua/
git pull

Windows

cd %LOCALAPPDATA%\darktable\lua
git pull

Documentation

The Lua Scripts Manual provides documentation for the scripts transcribed from the header comments. Each script also contains comments and usage instructions in the header comments.

The Lua Scripts Library API Manual provides documentation of the libraries and functions. Lua-script libraries documentation may also be generated using the tools in the tools/ directory.

More information about the scripting with Lua can be found in the darktable user manual: Scripting with Lua

The Lua API Manual provides docuemntation of the darktable Lua API.

Troubleshooting

Running darktable with Lua debugging enabled provides more information about what is occurring within the scripts.

Snap

Open a terminal and start darktable with the command snap run darktable -d lua. This provides debugging information to give you insight into what is happening.

Linux

Open a terminal and start darktable with the command darktable -d lua. This provides debugging information to give you insight into what is happening.

MacOS

Open a terminal and start darktable with the command /Applications/darktable.app/Contents/MacOS/darktable -d lua. This provides debugging information to give you insight into what is happening.

Windows

Open a command prompt. Start darktable with the command "C:\Program Files\darktable\bin\darktable" -d lua > log.txt. This provides debugging information to give you insight into what is happening.

Contributing

In order to have your own scripts added here they have to be under a free license (GPL2+ will definitely work, others can be discussed).