From f9d445db740b5613b6540f1cc4e54588678ded00 Mon Sep 17 00:00:00 2001 From: wpferguson Date: Thu, 28 Jan 2021 19:59:40 +0000 Subject: [PATCH] deploy: e2d876dcb273f361eaee2ebf8427f68234f32610 --- index.json | 2 +- lua.api.manual/darktable/darktable.gui/index.html | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/index.json b/index.json index 56fe03a..f9397b8 100644 --- a/index.json +++ b/index.json @@ -1 +1 @@ -[{"categories":null,"content":"🔗Name api_version.lua - show the Lua API version\n🔗Description darktable script to show the Lua API version in the preferences\n🔗Usage start this script from script manager. darktable must be running in lua debug mode in a terminal to see the output. 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/api_version/","tags":null,"title":"api_version"},{"categories":null,"content":"🔗Name AutoGrouper.lua - automatically group images based on time\n🔗Description This plugin groups images based on the time they were shot. Images shot close together in time are grouped together. The interval of time to separate groups is configurable.\n🔗Usage Start the module using script manager.\nSet a gap amount, in seconds, which will be used to determine when images should no longer be added to a group. If an image is more then the specified amount of time from the last image in the group it will not be added. Images without timestamps in exif data will be ignored.\nThere are two buttons. One allows the grouping to be performed only on the currently selected images, the other button performs grouping on the entire active collection\n🔗Additional Software Required 🔗Limitations 🔗Author Kevin Ertel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autogrouper/","tags":null,"title":"AutoGrouper"},{"categories":null,"content":"🔗Name check_for_updates.lua - automatically check for updates\n🔗Description a simple script that will automatically look for newer releases on github and inform when there is something. it will only check on startup and only once a week.\n🔗Usage install luasec and cjson for Lua 5.3 on your system. Luarocks is a good source for lua packages. start this script from script manager restart darktable 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/check_for_updates/","tags":null,"title":"check_for_updates"},{"categories":null,"content":"🔗NAME dtutils.debug\n🔗SYNOPSIS debugging helpers used in developing darktable lua scripts\n🔗USAGE require \u0026quot;lib/dtutils.debug\u0026quot; 🔗DESCRIPTION dtutils.debug provides an interface to the darktable debugging routines.\n🔗RETURN VALUE dd - library - the darktable lua debugging helpers\n🔗FUNCTIONS 🔗dprint pass a variable to darktable.debug.dump and print the results to stdout\n🔗new_tracepoint create a function returning a tracepoint\n🔗terse_dump set darktable.debug.known to shorten all image dumps to a single line\n🔗tracepoint print out a tracepoint and dump the arguments\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗NAME details\n🔗SYNOPSIS common darktable lua file functions\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; 🔗DESCRIPTION The dtutils.file library provides common file manipulation functions used in constructing darktable lua scripts\n🔗RETURN VALUE df - library - the file functions\n🔗FUNCTIONS 🔗check_if_bin_exists check if an executable exists\n🔗check_if_file_exists check if a file or path exist\n🔗chop_filetype remove a filetype from a filename\n🔗create_unique_filename create a unique filename from the supplied argment\n🔗executable_path_widget create a widget to get executable path preferences\n🔗file_copy copy a file to another name/location\n🔗file_move move a file from one directory to another\n🔗filename_increment add a two digit increment to a filename\n🔗get_basename get the filename without the path or extension\n🔗get_executable_path_preference return the path to an executable from a preference\n🔗get_filename get the filename and extension from a file path\n🔗get_filetype get the filetype from a filename\n🔗get_path get the path from a file path\n🔗mkdir create the directory(ies) if they do not already exists\n🔗rmdir recursively remove a directory\n🔗sanitize_filename make a filename safe to pass as an argument\n🔗set_executable_path_preference set a preference for the path to an executable\n🔗split_filepath split a filepath into parts\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗NAME dtutils.log\n🔗SYNOPSIS darktable lua logging library\n🔗USAGE local log = require \u0026quot;lib/dtutils.log\u0026quot; 🔗DESCRIPTION log provides a multi-level logging solution for use with the darktable lua scripts. With this library you can leave log messages scattered through out your code and only turn them on as necessary.\n🔗RETURN VALUE log - library - the darktable lua logging functions\n🔗FUNCTIONS 🔗caller get the name and line number of the calling routine\n🔗engine get and set the output engine\n🔗log_level get or set the log level\n🔗msg print a log message\n🔗EXAMPLE local log = require \u0026quot;lib/dtutils.log\u0026quot; local cur_level = log.log_level() log.log_level(log.warn) print out warning, error and success messages as code is running\nlog.log_level(debug) print out debugging messages too because this isnt working\nlog.log_level(info) I want to make sure this is working ok\nlog.log_level(cur_level) reset the logging level back to normal\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗DTUTILS.STRING 🔗NAME dtutils.string\n🔗SYNOPSIS a library of string utilities for use in darktable lua scripts\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; 🔗DESCRIPTION This library contains string manipulation routines to aid in building darktable lua scripts.\n🔗RETURN VALUE ds - library - the darktable lua string library\n🔗FUNCTIONS 🔗escape_xml_characters escape characters for xml documents\n🔗is_not_sanitized check if a string has been sanitized\n🔗sanitize surround a string in quotes making it safe to pass as an argument\n🔗sanitize_lua escape lua \u0026lsquo;magic\u0026rsquo; characters from a pattern string\n🔗strip_accents strip accents from characters\n🔗urlencode encode a string in a websafe manner\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗DTUTILS.SYSTEM 🔗NAME dtutils.system\n🔗SYNOPSIS a library of system utilities for use in darktable lua scripts\n🔗USAGE local dtsys = require \u0026quot;lib/dtutils.system\u0026quot; 🔗DESCRIPTION This library contains routines for interfacing to the operating system from darktable lua scripts.\n🔗RETURN VALUE dtsys - library - the darktable lua system library\n🔗FUNCTIONS 🔗external_command pass a command to the operating system for execution and return the result\n🔗launch_default_app open file in default application\n🔗windows_command pass a command to the windows operating system for execution and return the result\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗NAME dtutils\n🔗SYNOPSIS A Darktable lua utilities library\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; 🔗DESCRIPTION dtutils provides a common library of functions used to build lua scripts.\n🔗RETURN VALUE du- library - the library of functions\n🔗FUNCTIONS 🔗check_min_api_version check the minimum required api version against the current api version\n🔗check_os check that the operating system is supported\n🔗join join a table of strings with a specified separator\n🔗prequire a protected lua require\n🔗spairs an iterator that provides sorted pairs from a table\n🔗split split a string on a specified separator\n🔗SEE ALSO dtutils.debug, dtutils.file, dtutils.log, dtutils.string, dtutils.system\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n🔗COPYRIGHT Copyright (C) 2016 Bill Ferguson wpferguson@gmail.com.\nCopyright (C) 2016 Tobias Jakobs\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗Name executable_manager.lua - a tool for managing external executables used by darktable lua scripts\n🔗Description executable_manager is a tool for managing the executable preferences stored in the darktablerc file. On startup the darktablerc file is scanned and a widget is built for each executable path. The user can select the executable from a drop down list and then modify the settings as desired.\nAny changes made using executable_manager won\u0026rsquo;t be saved in the darktablerc file until darktable exits, but the preference is updated when the change is made so scripts will pick up the changes without restarting darktable.\n🔗Usage start this script from script manager 🔗Additional Software Required None\n🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/executable_manager/","tags":null,"title":"executable_manager"},{"categories":null,"content":"🔗Current API The Lua API version currently used in darktable 3.4 is 6.1.0.\n🔗Development API The Lua API is currently at version 6.2.0 in the development branch of darktable (currently 3.5). All changes for version 6.2.0 will be identified as such until version 6.2.0 is included in a darktable release.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/version/","tags":null,"title":"Lua API Version"},{"categories":null,"content":"The darktable library is the main entry point for all access to the darktable internals. To access the darktable specific functions you must load the darktable environment:\ndarktable = require \u0026quot;darktable\u0026quot;\nAll functions and data are accessed through the darktable module.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/overview/","tags":null,"title":"overview"},{"categories":null,"content":"This section documents events that can be used to trigger Lua callbacks.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/overview/","tags":null,"title":"overview"},{"categories":null,"content":"This section documents types that are specific to darktable\u0026rsquo;s Lua API.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/overview/","tags":null,"title":"overview"},{"categories":null,"content":"darktable can be customized and extended using the Lua programming language. The lua-scripts repository contains the collected efforts of the darktable developers, maintainers, contributors and community.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/overview/","tags":null,"title":"overview"},{"categories":null,"content":"darktable can be customized and extended using the Lua programming language. The lua-scripts 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.\n🔗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.\n Name Standalone Op/Sys Purpose check_for_updates Yes LMW Check for updates to darktable copy_paste_metadata Yes LMW Copy and paste metadata, tags, ratings, and color labels between images delete_long_tags Yes LMW Delete all tags longer than a specified length delete_unused_tags Yes LMW Delete tags that have no associated images enfuse No L Exposure blend several images (HDR) generate_image_txt No L Generate txt sidecar files to be overlaid on zoomed images image_path_in_ui Yes LMW Plugin to display selected image path import_filter_manager Yes LMW Manager for import filters import_filters No LMW Two import filters for use with import_filter_manager save_selection Yes LMW Provide save and restore from multiple selection buffers selection_to_pdf No L Generate a PDF file from the selected images 🔗Contributed Scripts These scripts are contributed by users. They are meant to have an \u0026ldquo;owner\u0026rdquo;, 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.\n Name Standalone Op/Sys Purpose AutoGrouper Yes LMW Group images together by time autostyle Yes LMW Automatically apply styles on import clear_GPS Yes LMW Reset GPS information for selected images CollectHelper Yes LMW Add buttons to selected images module to manipulate the collection copy_attach_detach_tags Yes LMW Copy and paste tags from/to images cr2hdr Yes L Process image created with Magic Lantern Dual ISO enfuseAdvanced No LMW Merge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images exportLUT Yes LMW Create a LUT from a style and export it ext_editor No LW Export pictures to collection and edit them with up to nine user-defined external editors face_recognition No LM Identify and tag images using facial recognition fujifilm_ratings No LM Support importing Fujifilm ratings geoJSON_export No L Create a geo JSON script with thumbnails for use in \u0026hellip; geoToolbox No LMW A toolbox of geo functions gimp No LMW Open an image in GIMP for editing and return the result gpx_export No LMW Export a GPX track file from selected images GPS data HDRMerge No LMW Combine the selected images into an HDR DNG and return the result hugin No LMW Combine selected images into a panorama and return the result image_stack No LMW Combine a stack of images to remove noise or transient objects image_time Yes LMW Adjust the EXIF image time kml_export No L Export photos with a KML file for usage in Google Earth LabelsToTags Yes LMW Apply tags based on color labels and ratings OpenInExplorer No LMW Open the selected images in the system file manager passport_guide Yes LMW Add passport cropping guide to darkroom crop tool pdf_slideshow No LM Export images to a PDF slideshow photils No LM Automatic tag suggestions for your images quicktag.md Yes LMW Create shortcuts for quickly applying tags rate_group Yes LMW Apply or remove a star rating from grouped images rename-tags Yes LMW Change a tag name RL_out_sharp No LW Output sharpening using GMic (Richardson-Lucy algorithm) select_untagged Yes LMW Enable selection of untagged images slideshowMusic No L Play music during a slideshow transfer_hierarchy Yes LMW Image move/copy preserving directory hierarchy video_ffmpeg No LMW Export 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.\n Name Standalone Op/Sys Purpose api_version Yes LMW Print the current API version darkroom_demo Yes LMW Demonstrate changing images in darkoom gettextExample Yes LM How to use translation hello_world Yes LMW Prints hello world when darktable starts lighttable_demo Yes LMW Demonstrate controlling lighttable mode, zoom, sorting and filtering moduleExample Yes LMW How to create a lighttable module multi_os No LMW How to create a cross platform script that calls an external executable panels_demo Yes LMW Demonstrate hiding and showing darktable panels preferenceExamples Yes LMW How to use preferences in a script printExamples Yes LMW How to use various print functions from a script running_os Yes LMW Print out the running operating system 🔗Tools Tool scripts perform functions relating to the repository, such as generating documentation. They are located in the tools/ directory.\n Name Standalone Op/Sys Purpose executable_manager Yes LMW Manage the external executables used by the lua scripts gen_i18n_mo No LMW Generate compiled translation files (.mo) from source files (.po) get_lib_manpages No LM Retrieve the library documentation and output it in man page and PDF format get_libdoc No LMW Retrieve the library documentation and output it as text script_manager No LMW Manage (install, update, enable, disable) the lua scripts ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/overview/","tags":null,"title":"overview"},{"categories":null,"content":"🔗Name autostyle.lua - automatically apply a given style when an exif tag is present in the image file\n🔗Description Automatically apply a given style when an exif tag is present in the file. This tags are checked with exiftool, in order to be able to match very exotic tags. This was written to be able to apply a style to compensate for Auto-DR from Fujifilm cameras.\n🔗Usage Set the exif configuration string in your lua configuration. For instance, AutoDynamicRange=200%=\u0026gt;DR200 means that I automatically want to apply my DR200 style on all images where exiftool returns \u0026ldquo;200%\u0026rdquo;\u0026quot; for the AutoDynamicRange tag\n If you want to be able to apply it to already imported images, define a shortcut (lua shortcuts). If the history stack is removed from the image, autostyle won\u0026rsquo;t be applied again. This shortcut useful when that happens.\n Import your images, or use the shortcut on already imported images\n To determine which tag you want, list all tags with exiftool: exiftool -j XE021351.RAF, and find the one you want to use. You can check tags with\n\u0026gt; exiftool -AutoDynamicRange XE021351.RAF Auto Dynamic Range : 200% 🔗Additional Software Required exiftool 🔗Limitations 🔗Author Marc Cousin - cousinmarc@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autostyle/","tags":null,"title":"autostyle"},{"categories":null,"content":"🔗NAME caller\n🔗SYNOPSIS get the name and line number of the calling routine\n🔗USAGE local log = require \u0026quot;lib/dtutils.log\u0026quot; result = log.caller(level) level - number - the number of stack levels to go down to retrieve the caller routine information\n🔗DESCRIPTION caller gets the name and line number of the calling routine and returns it\n🔗RETURN VALUE result - string - the name and line number of the calling function or \u0026lsquo;callback: ' if the attempt to get the caller returns nil\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/caller/","tags":null,"title":"caller"},{"categories":null,"content":"🔗NAME check_if_bin_exists\n🔗SYNOPSIS check if an executable exists\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.check_if_bin_exists(bin) bin - string - the binary to check for\n🔗DESCRIPTION check_if_bin_exists checks to see if the specified binary exists. check_if_bin_exists looks for an executable in the following order:\n If an executable preference is registered, then it\u0026rsquo;s checked to make sure it\u0026rsquo;s a file, exists, and is executable. If it passes all these tests it is returned to the caller. On non-windows operating systems a windows binary can be specified and the wine installation will be checked for the executable.\n If an executable preference doesn\u0026rsquo;t exist or a test fails then an attempt is made to find the file in an operating system specific manner:\n unix or linux the user\u0026rsquo;s path is checked for a matching binrary using the which command macos first the user\u0026rsquo;s path is checked for a matching binrary using the which command if the executable isn\u0026rsquo;t found a search of the /Applications directory is performed windows the user\u0026rsquo;s path is checked using the where command if the executable isn\u0026rsquo;t found, then C:\\Program Files is searched for the executable if the executable isn\u0026rsquo;t found, then C:\\Program Files (x86) is searched 🔗RETURN VALUE result - string - the sanitized path of the binary, false if not found\n🔗LIMITATIONS it still can\u0026rsquo;t find GIMP on windows. GIMP on windows is installed in C:\\Program Files\\GIMP 2\\bin\\gimp-2.10.exe, if you use the installer from www.gimp.org. When check_if_bin_exists searches for GIMP it looks for gimp.exe. If the search was for gimp*exe then things like gimptool, gimp-debug-tool, gimp-console, etc. are found. Depending on who packaged gimp,there is an executable called gimp.exe which satisfies the search but is a GIMP launcher that exits immediately so the script returns and the image is not edited. Therefore, if you are a windows user, then you need to specify the location of the GIMP executable either from the Edit with GIMP script or using executable manager.\n flickering windows - on windows every command must run in a window, so every time a script uses a system command a window is opened, the command is run, and the window is closed checking for a binary needs multiple system commands to find the file and then check it which causes \u0026ldquo;flickering windows\u0026rdquo;. If the flickering windows is too disturbing a lua preference is available in the settings to use the old check_if_bin_exists(). The old check_if_bin_exists() still causes flickering windows but it\u0026rsquo;s much less. The downside is that no searching is performed so the user has to specify the location of all executables.\n 🔗CHANGELOG 20201225 - Added search capability and file checking to ensure it\u0026rsquo;s an executable - Merry Christmas\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/check_if_bin_exists/","tags":null,"title":"check_if_bin_exists"},{"categories":null,"content":"🔗NAME check_min_api_version\n🔗SYNOPSIS check the minimum required application programming interface (API) version against the current API version\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.check_min_api_version(min_api, script_name) min_api - string - the API version that the application was written for (example: \u0026ldquo;5.0.0\u0026rdquo;)\nscript_name - string - the name of the script\n🔗DESCRIPTION check_min_api_version compares the minimum API required for the application to run against the current API version. The minimum API version is typically the API version that was current when the application was created. If the minimum API version is not met, then an error message is printed saying the script_name failed to load, then an error is thrown causing the program to stop executing.\nThis function is intended to replace darktable.configuration.check_version(). The application code won\u0026rsquo;t have to be updated each time the API changes because this only checks the minimum version required.\n🔗RETURN VALUE result - boolean - true if the minimum API version is available, false if not.\n🔗LIMITATIONS When using the default handler on a script being executed from the luarc file, the error thrown will stop the luarc file from executing any remaining statements. This limitation does not apply to script_manger.\n🔗EXAMPLE check_min_api_version(\u0026quot;5.0.0\u0026quot;) does nothing if the API is greater than or equal to 5.0.0 otherwise an error message is printed and an error is thrown stopping execution of the script.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/check_min_api_version/","tags":null,"title":"check_min_api_version"},{"categories":null,"content":"🔗Name copy_paste_metadata.lua - copy and paste metadata between images\n🔗Description This script adds keyboard shortcuts and buttons to copy/paste metadata between images.\n🔗Usage start this script from script manager it adds buttons to the selected images module it adds two keyboard shortcuts 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/copy_paste_metadata/","tags":null,"title":"copy_paste_metadata"},{"categories":null,"content":"🔗Name darkroom_demo - an example script demonstrating how to control image display in darkroom mode\n🔗Description darkroom_demo is an example script showing how to control the currently displayed image in darkroom mode using lua.\n🔗Usage start this script from script manager 🔗Additional Software Required None\n🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/darkroom_demo/","tags":null,"title":"darkroom_demo"},{"categories":null,"content":"function( message : string ) Will print a string to the darktable control log (the long overlaid window that appears over the main panel).\n message - string - The string to display which should be a single line. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.print/","tags":null,"title":"darktable.print"},{"categories":null,"content":"🔗NAME dprint\n🔗SYNOPSIS pass a variable to darktable.debug.dump and print the results to stdout\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; dd.dprint(var) var - variable - any variable that you want to see the contents of\n🔗DESCRIPTION dprint is a wrapper around darktable.debug.dump, will directly print to stdout, same calling convention\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/dprint/","tags":null,"title":"dprint"},{"categories":null,"content":"🔗NAME escape_xml_characters\n🔗SYNOPSIS escape characters for xml documents\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.escape_xml_characters(str) str - string - the string that needs escaped\n🔗DESCRIPTION escape_xml_characters provides the escape sequences for\n\u0026quot;\u0026amp;\u0026quot;, '\u0026quot;', \u0026quot;'\u0026quot;, \u0026quot;\u0026lt;\u0026quot;, and \u0026quot;\u0026gt;\u0026quot; with the corresponding\n\u0026quot;\u0026amp;amp;\u0026quot;,\u0026quot;\u0026amp;quot;\u0026quot;, \u0026quot;\u0026amp;apos;\u0026quot;, \u0026quot;\u0026amp;lt;\u0026quot;, and \u0026quot;\u0026amp;gt;\u0026quot; .\n🔗RETURN VALUE result - string - the string containing escapes for the xml characters\n🔗REFERENCE https://stackoverflow.com/questions/1091945/what-characters-do-i-need-to-escape-in-xml-documents\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/escape_xml_characters/","tags":null,"title":"escape_xml_characters"},{"categories":null,"content":"🔗NAME external_command\n🔗SYNOPSIS pass a command to the operating system for execution and return the result\n🔗USAGE local dsys = require \u0026quot;lib/dtutils.system\u0026quot; local result = dsys.external_command(command) command - string - a string containing the command and arguments to be passed to the operating system for execution.\n🔗DESCRIPTION external_command passes a command to the operating system for execution and returns the results.\n🔗RETURN VALUE result - number = the return value signalling success or failure.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/external_command/","tags":null,"title":"external_command"},{"categories":null,"content":"🔗Name gen_i18n_mo - generate translation files from the source and place them in the appropriate locale directory\n🔗Description gen_i18n_mo finds all the .po files scattered throughout the script tree, compiles them into .mo files and places them in the correct locale directory for use by the gettext tools.\n🔗Usage start this script from script manager. Stop the script after it runs or it will regenerate the translation files each time darktable starts. 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/gen_i18n_mo/","tags":null,"title":"gen_i18n_mo"},{"categories":null,"content":"🔗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.\n🔗snap packages The snap version of darktable comes with lua included starting with version 2.4.3snap2.\nEnsure git is installed on your system. If it isn\u0026rsquo;t, use the package manager to install it. Then open a terminal and:\ncd ~/snap/darktable/current git clone https://github.com/darktable-org/lua-scripts.git lua 🔗flatpak packages Flatpak packages now use the internal lua interpreter.\nEnsure git is installed on your system. If it isn\u0026rsquo;t, use the package manager to install it. Then open a terminal and:\ncd ~/.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\u0026rsquo;t have access to a lua interpreter, therefore the scripts can\u0026rsquo;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.\n🔗Linux and MacOS Ensure git is installed on your system. If it isn\u0026rsquo;t, use the package manager to install it. Then open a terminal and:\ncd ~/.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:\ncd %LOCALAPPDATA%\\darktable git clone https://github.com/darktable-org/lua-scripts.git lua If you don\u0026rsquo;t have %LOCALAPPDATA%\\darktable you have to start dartable at least once, because the directory is created at the first start of darktable.\n🔗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 \u0026quot;\u0026lt;directory\u0026gt;/\u0026lt;name\u0026gt;\u0026quot; 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 \u0026quot;contrib/gimp\u0026quot;.\nThe recommended way to enable and disable specific scripts is using the script manager module. To use script manager do the following:\n🔗Linux or MacOS echo 'require \u0026quot;tools/script_manager\u0026quot;' \u0026gt; ~/.config/darktable/luarc 🔗Windows echo \u0026quot;require 'tools/script_manager'\u0026quot; \u0026gt; %LOCALAPPDATA%\\darktable\\luarc 🔗Snap echo 'require \u0026quot;tools/script_manager\u0026quot;' \u0026gt; ~/snap/darktable/current/luarc 🔗Flatpak echo require \u0026quot;tools/script_manager\u0026quot;' \u0026gt; ~/.var/app/org.darktable.Darktable/config/darktable/luarc You can also create or add lines to the luarc file from the command line:\necho 'require \u0026quot;contrib/gimp\u0026quot;' \u0026gt; ~/.config/darktable/luarc to create the file with a gimp entry\nor echo 'require \u0026quot;contrib/hugin\u0026quot;' \u0026gt;\u0026gt; ~/.config/darktable/luarc to add an entry for hugin.\nOn windows from a command prompt:\necho require \u0026quot;contrib/gimp\u0026quot; \u0026gt; %LOCALAPPDATA%\\darktable\\luarc to create the file with a gimp entry\nor echo require \u0026quot;contrib/hugin\u0026quot; \u0026gt;\u0026gt; %LOCALAPPDATA%\\darktable\\luarc to add an entry for hugin.\n🔗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.\n🔗Updating To update the script repository, open a terminal or command prompt and do the following:\n🔗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 ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/installation/","tags":null,"title":"installation"},{"categories":null,"content":"event\nThis event is called each time an image is exported, once for each image after the image has been processed to an image format but before the storage has moved the image to its final destination. The call is blocking.\n🔗intermediate-export-image.callback function( event : string, image : types.dt_lua_image_t, filename : string, format : types.dt_imageio_module_format_t, storage : types.dt_imageio_module_storage_t ) event - string - The name of the event that triggered the callback. image - types.dt_lua_image_t - The image object that has been exported. filename - string - The name of the file that is the result of the image being processed. format - types.dt_imageio_module_format_t - The format used to export the image. storage - types.dt_imageio_module_storage_t - The storage used to export the image (can be nil). 🔗intermediate-export-image.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/intermediate-export-image/","tags":null,"title":"intermediate-export-image"},{"categories":null,"content":"enum The type of OS we darktable can run on\nValues :\n windows macos linux unix ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_os_type/","tags":null,"title":"lua_os_type"},{"categories":null,"content":"🔗NAME check_if_file_exists\n🔗SYNOPSIS check if a file or path exist\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.check_if_file_exists(filepath) filepath - string - a file or path to check\n🔗DESCRIPTION check_if_file_exists checks to see if a file or path exists.\n🔗RETURN VALUE result - boolean - true if the file or path exists, false if it doesn\u0026rsquo;t.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/check_if_file_exists/","tags":null,"title":"check_if_file_exists"},{"categories":null,"content":"🔗NAME check_os\n🔗SYNOPSIS check that the operating system is supported\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.check_os(operating_systems) operating_systems - table - a table of operating system names such as {\u0026ldquo;windows\u0026rdquo;,\u0026ldquo;linux\u0026rdquo;,\u0026ldquo;macos\u0026rdquo;,\u0026ldquo;unix\u0026rdquo;}\n🔗DESCRIPTION check_os checks a supplied table of operating systems against the operating system the script is running on and returns true if the OS is in the list, otherwise false\n🔗RETURN VALUE result - boolean - true if the operating system is supported, false if not.\n🔗EXAMPLE local du = require \u0026quot;lib/dtutils\u0026quot; if du.check_os({\u0026quot;windows\u0026quot;}) then -- run the script else dt.print(\u0026quot;Script \u0026lt;script name\u0026gt; only runs on windows\u0026quot;) return end ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/check_os/","tags":null,"title":"check_os"},{"categories":null,"content":"🔗Name clear_GPS.lua - clear_GPS - clear GPS data from selected image(s)\n🔗Description This shortcut removes the GPS coordinate data from the selected images.\n🔗Usage start the script from script manager select an image or images click the shortcut, or the button in selected images to clear GPS data 🔗Additional Software Required 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/clear_gps/","tags":null,"title":"clear_GPS"},{"categories":null,"content":"function( message : string ) This function will print its parameter if the Lua logdomain is activated. Start darktable with the \u0026quot;-d lua\u0026quot; command line option to enable the Lua logdomain.\n message - string - The string to display. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.print_log/","tags":null,"title":"darktable.print_log"},{"categories":null,"content":"🔗Name delete_long_tags.lua - delete all tags longer than a set length\n🔗Description A simple script that will automatically delete all tags longer than a set length\n🔗Usage start this script from script manager set the the maximum length in darktable\u0026rsquo;s preference restart darktable 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/delete_long_tags/","tags":null,"title":"delete_long_tags"},{"categories":null,"content":"dt_type\nImage objects represent an image in the database. This is slightly different from a file on disk since a file can have multiple developments. Note that this is the real image object; changing the value of a field will immediately change it in darktable and will be reflected on any copy of that image object you may have kept.\nAttributes:\n has_tostring 🔗dt_lua_image_t.attach_tag see darktable.tags.attach\n🔗dt_lua_image_t.detach_tag see darktable.tags.detach\n🔗dt_lua_image_t.get_tags see darktable.tags.get_tags\n🔗dt_lua_image_t.create_style see darktable.styles.create\n🔗dt_lua_image_t.apply_style see darktable.styles.apply\n🔗dt_lua_image_t.duplicate see darktable.database.duplicate\n🔗dt_lua_image_t.move see darktable.database.move_image\n🔗dt_lua_image_t.copy see darktable.database.copy_image\n🔗dt_lua_image_t.id number\nA unique id identifying the image in the database.\n🔗dt_lua_image_t.path string\nThe file the directory containing the image.\n🔗dt_lua_image_t.film types.dt_lua_film_t\nThe film object that contains this image.\n🔗dt_lua_image_t.filename string\nThe filename of the image.\n🔗dt_lua_image_t.sidecar string\nThe filename of the image\u0026rsquo;s sidecar file.\n🔗dt_lua_image_t.duplicate_index number\nIf there are multiple images based on a same file, each will have a unique number, starting from 0.\n🔗dt_lua_image_t.publisher string\nThe publisher field of the image.\nAttributes:\n write 🔗dt_lua_image_t.title string\nThe title field of the image.\nAttributes:\n write 🔗dt_lua_image_t.creator string\nThe creator field of the image.\nAttributes:\n write 🔗dt_lua_image_t.rights string\nThe rights field of the image.\nAttributes:\n write 🔗dt_lua_image_t.description string\nThe description field for the image.\nAttributes:\n write 🔗dt_lua_image_t.notes string\nThe notes field for the image.\nAttributes:\n write 🔗dt_lua_image_t.version_name string\nThe version_name field for the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_maker string\nThe maker exif data.\nAttributes:\n write 🔗dt_lua_image_t.exif_model string\nThe camera model used.\nAttributes:\n write 🔗dt_lua_image_t.exif_lens string\nThe id string of the lens used.\nAttributes:\n write 🔗dt_lua_image_t.exif_aperture number\nThe aperture saved in the exif data.\nAttributes:\n write 🔗dt_lua_image_t.exif_exposure number\nThe exposure time of the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_focal_length number\nThe focal length of the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_iso number\nThe iso used on the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_datetime_taken string\nThe date and time of the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_focus_distance number\nThe distance of the subject.\nAttributes:\n write 🔗dt_lua_image_t.exif_crop number\nThe exif crop data.\nAttributes:\n write 🔗dt_lua_image_t.latitude float or nil\nGPS latitude data of the image, nil if not set.\nAttributes:\n write 🔗dt_lua_image_t.longitude float or nil\nGPS longitude data of the image, nil if not set.\nAttributes:\n write 🔗dt_lua_image_t.elevation float or nil\nGPS altitude data of the image, nil if not set.\nAttributes:\n write 🔗dt_lua_image_t.is_raw boolean\nTrue if the image is a RAW file. WARNING: This is a flag that gets set the first time the image is opened, either by an edit or thumbnail generation. If images are imported using darktable.database.import(), then dt_lua_image_t.is_raw is not guaranteed to be correct.\n🔗dt_lua_image_t.is_ldr boolean\nTrue if the image is a ldr image.\n🔗dt_lua_image_t.is_hdr boolean\nTrue if the image is a hdr image.\n🔗dt_lua_image_t.has_txt boolean\nTrue if the image has a txt sidecar file.\nAttributes:\n write 🔗dt_lua_image_t.width number\nThe width of the image.\n🔗dt_lua_image_t.height number\nThe height of the image.\n🔗dt_lua_image_t.rating number\nThe rating of the image (-1 for rejected).\nAttributes:\n write 🔗dt_lua_image_t.red boolean\nTrue if the image has the corresponding colorlabel.\nAttributes:\n write 🔗dt_lua_image_t.blue see types.dt_lua_image_t.red\n🔗dt_lua_image_t.green see types.dt_lua_image_t.red\n🔗dt_lua_image_t.yellow see types.dt_lua_image_t.red\n🔗dt_lua_image_t.purple see types.dt_lua_image_t.red\n🔗dt_lua_image_t.reset self:function( ) Removes all processing from the image, resetting it back to its original state\n self - types.dt_lua_image_t - The image whose history will be deleted 🔗dt_lua_image_t.delete self:function( ) Removes an image from the database\n self - types.dt_lua_image_t - The image to remove 🔗dt_lua_image_t.group_with self:function( [image : types.dt_lua_image_t] ) Puts the first image in the same group as the second image. If no second image is provided the image will be in its own group.\n self - types.dt_lua_image_t - The image whose group must be changed. [image] - types.dt_lua_image_t - The image we want to group with. 🔗dt_lua_image_t.make_group_leader self:function( ) Makes the image the leader of its group.\n self - types.dt_lua_image_t - The image we want as the leader. 🔗dt_lua_image_t.get_group_members self:function( ) : table of types.dt_lua_image_t Returns a table containing all types.dt_lua_image_t of the group. The group leader is both at a numeric key and at the \u0026ldquo;leader\u0026rdquo; special key (so you probably want to use ipairs to iterate through that table).\n self - types.dt_lua_image_t - The image whose group we are querying. return - table of types.dt_lua_image_t - A table of image objects containing all images that are in the same group as the image. 🔗dt_lua_image_t.group_leader types.dt_lua_image_t\nThe image which is the leader of the group this image is a member of.\n🔗dt_lua_image_t.local_copy boolean\nTrue if the image has a copy in the local cache\nAttributes:\n write 🔗dt_lua_image_t.drop_cache self:function( ) drops the cached version of this image. This function should be called if an image is modified out of darktable to force darktable to regenerate the thumbnail. darktable will regenerate the thumbnail by itself when it is needed.\n self - types.dt_lua_image_t - The image whose cache must be dropped. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_image_t/","tags":null,"title":"dt_lua_image_t"},{"categories":null,"content":"🔗NAME engine\n🔗SYNOPSIS get and set the output engine\n🔗USAGE local log = require \u0026quot;lib/dtutils.log\u0026quot; result = log.engine(level, ...) level - table - the log level to get or set the engine for, one of log.debug, log.info, log.warn, log.error log.success, log.always, log.screen, log.critical\n\u0026hellip; - function - the output function, one of dt.print, dt.print_error, dt.print_log, print if not function is included, the current engine is returned for the specified log level\n🔗DESCRIPTION engine returns the output engine for the specified log level if a second argument is not supplied. If a function is supplied as the second argment, then the output engine for the specified log level is set to that.\n🔗RETURN VALUE result - function - the current output engine\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/engine/","tags":null,"title":"engine"},{"categories":null,"content":"🔗Name get_lib_manpages.lua - retrieve the included library documentation and output it as man pages\n🔗Description This script retrieves the included documentation in the script libaries and outputs them to the system temporary directory as man pages. Stop this script after it runs otherwise it will regenerate the pages each time it runs.\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/get_lib_manpages/","tags":null,"title":"get_lib_manpages"},{"categories":null,"content":"🔗Name gettextExample.lua - darktable script to show how translations works\n🔗Description To create the .po file run: xgettext -l lua gettextExample.lua\nxgettext is not a lua tool, it knows (almost) nothing about Lua, and not enough to do a proper parsing. It takes a text file (In our case a Lua file) and recognises a few (language dependant) keyword in there. It matches those keywords with internal description on how functions are called and creates the .po file accordingly. (For example, it knows that the first argument of gettext() is the translated string, but that it\u0026rsquo;s the second argument for dgettext) This is important because it means that if you use some neat Lua tricks (like renaming functions) xgettext won\u0026rsquo;t recognize those calls and won\u0026rsquo;t extract the string to the .po file. So, this is why we create a local variagle gettext = dt.gettext, so xgettext recognises gettext.gettext as a function but not dt.gettext.gettext\nTo create a .mo file run: msgfmt -v gettextExample.po -o gettextExample.mo\n🔗Usage start this script from script manager copy the gettextExample.mo to .config/darktable/lua/de_DE/LC_MESSAGES You need to start darktable with the Lua debug option: darktable -d lua $LANG must set to: de_DE\nThe script run on darktable startup and should output this three lines:\nLUA ERROR Hello World! LUA ERROR Bild LUA ERROR Hallo Welt! 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/gettextexample/","tags":null,"title":"gettextExample"},{"categories":null,"content":"🔗NAME is_not_sanitized\n🔗SYNOPSIS Check if a string has been sanitized\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.is_not_sanitized(str) str - string - the string that needs to be made safe\n🔗DESCRIPTION is_not_sanitized checks a string to see if it has been made safe use passing as an argument in a system command.\n🔗RETURN VALUE result - boolean - true if the string is not sanitized otherwise false\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/is_not_sanitized/","tags":null,"title":"is_not_sanitized"},{"categories":null,"content":"🔗NAME launch_default_app\n🔗SYNOPSIS open file in default application\n🔗USAGE local dsys = require \u0026quot;lib/dtutils.file\u0026quot; result = dsys.launch_default_app(path) path - string - a file path\n🔗DESCRIPTION launch_default_app allows opening a file in the application that is assigned as default for that filetype in the users\u0026rsquo;s system\n🔗RETURN VALUE result - number - the return value signalling success or failure.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/launch_default_app/","tags":null,"title":"launch_default_app"},{"categories":null,"content":"🔗NAME new_tracepoint\n🔗SYNOPSIS create a function returning a tracepoint\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; local result = dd.new_tracepoint(name, ...) name - string - the name of the tracepoint to print out\n\u0026hellip; - arguments - variables to dump the contents of\n🔗DESCRIPTION new_tracepoint returns a tracepoint function with the given name. This is mainly used to debug callbacks.\n🔗RETURN VALUE result - function - a function that returns the result of a tracepoint\n🔗EXAMPLE register_event(event, dd.new_tracepoint(\u0026quot;hit callback\u0026quot;)) will print the following each time the callback is called\n**** hit callback **** \u0026lt;all the callback's parameters dumped\u0026gt; ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/new_tracepoint/","tags":null,"title":"new_tracepoint"},{"categories":null,"content":"event\nThis event is triggered whenever a new image is imported into the database. This event can be registered multiple times, all callbacks will be called. The call is blocking.\n🔗post-import-image.callback function( event : string, image : types.dt_lua_image_t ) event - string - The name of the event that triggered the callback. image - types.dt_lua_image_t - The image object that has been imported. 🔗post-import-image.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/post-import-image/","tags":null,"title":"post-import-image"},{"categories":null,"content":"Running darktable with Lua debugging enabled provides more information about what is occurring within the scripts.\n🔗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.\n🔗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.\n🔗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.\n🔗Windows Open a command prompt. Start darktable with the command \u0026ldquo;C:\\Program Files\\darktable\\bin\\darktable\u0026rdquo; -d lua \u0026gt; log.txt. This provides debugging information to give you insight into what is happening.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/troubleshooting/","tags":null,"title":"troubleshooting"},{"categories":null,"content":"🔗NAME find_image_by_id\n🔗SYNOPSIS look up an image by ID in the database\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local img = du.find_image_by_id(imgid) imgid - int - the image ID to retrieve\n🔗DESCRIPTION find_image_by_id looks up an image by ID in the database.\n🔗RETURN VALUE img - dt_lua_image_t - image with the given ID if found, nil if not\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/find_image_by_id/","tags":null,"title":"find_image_by_id"},{"categories":null,"content":"🔗NAME chop_filetype\n🔗SYNOPSIS remove a filetype from a filename\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.chop_filetype(path) path - string - a filename with or without a path\n🔗DESCRIPTION chop_filetype removes the filetype from the filename.\n🔗RETURN VALUE result - string - the path and filename without the filetype\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/chop_filetype/","tags":null,"title":"chop_filetype"},{"categories":null,"content":"🔗Name CollectHelper.lua - add buttons to help with collections\n🔗Description This plugin adds the button(s) to the \u0026ldquo;Selected Images\u0026rdquo; module:\n Return to Previous Collection Collect on image\u0026rsquo;s Folder Collect on image\u0026rsquo;s Color Label(s) Collect on All (AND) It also adds 3 preferences to the lua options dialog box which allow the user to activate/deactivate the 3 \u0026ldquo;Collect on\u0026rdquo; buttons.\nButton Behavior:\n Return to Previous Collection - Will reset the collect parameters to the previously active settings Collect on image\u0026rsquo;s Folder - Will change the collect parameters to be \u0026ldquo;Folder\u0026rdquo; with a value of the selected image\u0026rsquo;s folder location Collect on image\u0026rsquo;s Color Label(s) - Will change the collect parameter to be \u0026ldquo;Color\u0026rdquo; with a value of the selected images color labels, will apply multiple parameters with AND logic if multiple exist Collect on All (AND) - Will collect on all parameters activated by the preferences dialog, as such this button is redundant if you only have one of the two other options enabled 🔗Usage start CollectHelper with script manager.\n Select the photo you wish to change you collection based on. In the \u0026ldquo;Selected Images\u0026rdquo; module click on \u0026ldquo;Collect on this Image\u0026rdquo;\n 🔗Additional Software Required 🔗Limitations 🔗Author Kevin Ertel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/collecthelper/","tags":null,"title":"CollectHelper"},{"categories":null,"content":"function( message : string ) This function is similar todarktable.print_log but adds an ERROR prefix for clarity.\n message - string - The string to display. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.print_error/","tags":null,"title":"darktable.print_error"},{"categories":null,"content":"🔗Name delete_unused_tags.lua - automatically delete all tags that are not attached to any images\n🔗Description A simple script that will automatically delete all tags that are not attached to any images\n🔗Usage start this script from script manager restart darktable 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/delete_unused_tags/","tags":null,"title":"delete_unused_tags"},{"categories":null,"content":"dt_type\nA virtual type representing all format types.\n🔗dt_imageio_module_format_t.plugin_name string\nA unique name for the plugin.\n🔗dt_imageio_module_format_t.name string\nA human readable name for the plugin.\n🔗dt_imageio_module_format_t.extension string\nThe typical filename extension for that format.\n🔗dt_imageio_module_format_t.mime string\nThe mime type associated with the format.\n🔗dt_imageio_module_format_t.max_width number\nThe max width allowed for the format (0 = unlimited).\nAttributes:\n write 2.3.6. dt_imageio_module_format_t.max_height\nnumber\nThe max height allowed for the format (0 = unlimited).\nAttributes:\n write 2.3.7. dt_imageio_module_format_t.write_image\nself:function( image : types.dt_lua_image_t, filename : string, [allow_upscale : boolean] ) : boolean Exports an image to a file. This is a blocking operation that will not return until the image is exported.\n self - types.dt_imageio_module_format_t - The format that will be used to export. image - types.dt_lua_image_t - The image object to export. filename - string - The filename to export to. [allow_upscale] - boolean - Set to true to allow upscaling of the image. return - boolean - Returns true on success. Attributes:\n implicit_yield ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_t/","tags":null,"title":"dt_imageio_module_format_t"},{"categories":null,"content":"🔗Name get_libdoc.lua - retrieve the included library documentation and output it as text\n🔗Description 🔗Usage start this script from script manager. Disable it after it finishes or it will generate the pages every time darktable runs. 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/get_libdoc/","tags":null,"title":"get_libdoc"},{"categories":null,"content":"🔗Name hello_world.lua - a simple lua script\n🔗Description prints \u0026ldquo;hello world when DT starts\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/hello_world/","tags":null,"title":"hello_world"},{"categories":null,"content":"🔗NAME join\n🔗SYNOPSIS join a table of strings with a specified separator\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.join(tabl, pat) tabl - table - a table of strings\npat - string - a separator\n🔗DESCRIPTION join assembles a table of strings into a string with the specified pattern in between each string\n🔗RETURN VALUE result - string - the joined string on success, or an empty string on failure\n🔗EXAMPLE join({a, \u0026quot;long\u0026quot;, \u0026quot;path\u0026quot;, \u0026quot;name\u0026quot;, \u0026quot;to\u0026quot;, a, \u0026quot;file.txt\u0026quot;}, \u0026quot; \u0026quot;) would return the string \u0026ldquo;a long path name to a file.txt\u0026rdquo;\n🔗REFERENCE http://lua-users.org/wiki/SplitJoin\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/join/","tags":null,"title":"join"},{"categories":null,"content":"🔗NAME log_level\n🔗SYNOPSIS get or set the log level\n🔗USAGE local log = require \u0026quot;lib/log\u0026quot; local result = log.log_level(...) \u0026hellip; - arguments - if none is supplied, then the current log level is returned as one of: log.debug, log.info, log.warn, log.error, log.success. If one of log.debug, log.info, log.warn, log.error, or log.success is supplied as the argument then the log level is set to that value. All log levels greater than or equal in value will be enabled. Any levels of lesser value will be disabled.\n🔗DESCRIPTION log_level gets and sets the logging level. When called with no arguments the current log level is returned as one of log.debug, log.info, log.warn, log.error, or log.success. When called with one of log.debug, log.info, log.warn, log.error or log.success then the log level is set. When setting the log level all levels equal or greater are enabled and any of lesser value are disabled. See the example.\n🔗RETURN VALUE result - log level - one of log.debug, log.info, log.warn, log.error or log.success\n🔗EXAMPLE Assume that the current log level is log.error. Calling\nlog.log_level() will return log.error. Calling\nlog.log_level(log.info) will leave log.debug disabled, and enable log.info, log.warn, log.error and log.success. log.info will be returned as the log_level.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/log_level/","tags":null,"title":"log_level"},{"categories":null,"content":"🔗NAME sanitize\n🔗SYNOPSIS surround a string in quotes making it safe to pass as an argument\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.sanitize(str) str - string - the string that needs to be made safe\n🔗DESCRIPTION sanitize converts a string into a version suitable for use passing as an argument in a system command.\n🔗RETURN VALUE result - string - a websafe string\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/sanitize/","tags":null,"title":"sanitize"},{"categories":null,"content":"event\nThis event registers a new keyboard shortcut. The shortcut isn\u0026rsquo;t bound to any key until the users does so in the preference panel. The event is triggered whenever the shortcut is triggered. This event can only be registered once per value of shortcut.\n🔗shortcut.callback function( event : string, shortcut : string ) event - string - The name of the event that triggered the callback. shortcut - string - The tooltip string that was given at registration time. 🔗shortcut.extra registration parameters tooltip - string - The string that will be displayed on the shortcut preference panel describing the shortcut. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/shortcut/","tags":null,"title":"shortcut"},{"categories":null,"content":"🔗NAME terse_dump\n🔗SYNOPSIS set darktable.debug.known to shorten all image dumps to a single line\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; dd.terse_dump() 🔗DESCRIPTION terse_dump sets darktable.debug.known to shorten all images to a single line. If you don\u0026rsquo;t need to debug the content of images, this will avoid them flooding your logs.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/terse_dump/","tags":null,"title":"terse_dump"},{"categories":null,"content":"🔗NAME windows_command\n🔗SYNOPSIS pass a command to the windows operating system for execution and return the result\n🔗USAGE local dsys = require \u0026quot;lib/dtutils.system\u0026quot; local result = dsys.windows_command(command) command - string - a string containing the command and arguments to be passed to the operating system for execution.\n🔗DESCRIPTION The normal method of executing an operating system command is using dt.control.execute(), but that doesn\u0026rsquo;t work with Windows when more than one item in the command is quoted. In order to ensure command execution on Windows we create a batch file in the temporary directory, put the command in it, execute the batch file, then return the result.\n🔗RETURN VALUE result - number - the return value signalling success or failure.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/windows_command/","tags":null,"title":"windows_command"},{"categories":null,"content":"This section documents various attributes used throughout the documentation.\n🔗write This object is a variable that can be written to.\n🔗has_tostring This object has a specific reimplementation of the \u0026ldquo;tostring\u0026rdquo; method that allows pretty-printing it.\n🔗implicit_yield This call will release the Lua lock while executing, thus allowing other Lua callbacks to run.\n🔗parent This object inherits some methods from another object. You can call the methods from the parent on the child object\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/attributes/","tags":null,"title":"attributes"},{"categories":null,"content":"🔗Name copy_attach_detach_tags.lua - tools to manipulate image tags\n🔗Description This script that will create four shortcuts and add a module in lighttable mode to copy, paste, replace and remove tags from images.\n🔗Usage set the shortcuts for copy, attach and detach in the preferences dialog \u0026lt;your shortcut1\u0026gt; copy will create a list of tags from all selected images \u0026lt;your shortcut2\u0026gt; paste copied tags to selected images, whereby darktable internal tags starting with \u0026lsquo;darktable|\u0026rsquo; will not be touched \u0026lt;your shortcut3\u0026gt; removes all except darktable internal tags from selected images \u0026lt;your shortcut4\u0026gt; replaces all tags except darktable internals A module reset will empty the clipboard 🔗Additional Software Required 🔗Limitations 🔗Author Christian Kanzian\nHolger Klemm\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/copy_attach_detach_tags/","tags":null,"title":"copy_attach_detach_tags"},{"categories":null,"content":"🔗NAME create_unique_filename\n🔗SYNOPSIS create a unique filename from the supplied argument\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.create_unique_filename(filepath) filepath - string - the path and filename requested\n🔗DESCRIPTION create_unique_filename takes a requested filepath and checks to see if it exists. If if doesn\u0026rsquo;t then it\u0026rsquo;s returned intact. If it already exists, then a two digit increment is added to the filename and it is tested again. The increment keeps increasing until either a unique filename is found or there have been 100 attempts.\n🔗RETURN VALUE result - string - the incremented filename\n🔗LIMITATIONS create_unique_filename will only attempt 100 increments.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/create_unique_filename/","tags":null,"title":"create_unique_filename"},{"categories":null,"content":"function( event_type : string, callback : function, ... : variable ) This function registers a callback to be called when a given event happens. Events are documented in the event section.\n event_type - string - The name of the event to register to. callback - function - The function to call on event. The signature of the function depends on the type of event. \u0026hellip; - variable - Some events need extra parameters at registration time; these must be specified here. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.register_event/","tags":null,"title":"darktable.register_event"},{"categories":null,"content":"function( plugin_name : string, name : string, [store : function], [finalize : function], [supported : function], [initialize : function], [widget : types.lua_widget] ) This function will add a new storage implemented in Lua. A storage is a module that is responsible for handling images once they have been generated during export. Examples of core storages include filesystem, e-mail, pwigo\u0026hellip;\n plugin_name - string - A unique name for the plugin. name - string - A human readable name for the plugin. [store] - function - This function is called once for each exported image. [finalize] - function - This function is called once all images are processed and all store calls are finished. [supported] - function - A function called to check if a given image format is supported by the Lua storage. [initialize] - function - A function called before storage happens. widget - types.lua_widget - A widget to display in the export section of darktable\u0026rsquo;s UI. 🔗[store] function( storage : types.dt_imageio_module_storage_t, image : types.dt_lua_image_t, format : types.dt_imageio_module_format_t, filename : string, number : integer, total : integer, high_quality : boolean, extra_data : table ) This function is called once for each exported image. Images can be exported in parallel but the calls to this function will be serialized.\n storage - types.dt_imageio_module_storage_t - The storage object used for the export. image - types.dt_lua_image_t - The exported image object. format - types.dt_imageio_module_format_t - The format object used for the export. filename - string - The name of a temporary file where the processed image is stored. number - integer - The number of the image out of the export series. total - integer - The total number of images in the export series. high_quality - boolean - True if the export is high quality. extra_data - table- An empty Lua table to take extra data. This table is common to the initialize, store and finalize calls in an export series. 🔗[finalize] function( storage : types.dt_imageio_module_storage_t, image_table : table, extra_data : table ) This function is called once all images are processed and all store calls are finished.\n storage - types.dt_imageio_module_storage_t - The storage object used for the export. image_table - table - A table keyed by the exported image objects and valued with the corresponding temporary export filename. extra_data - table - An empty Lua table to store extra data. This table is common to all calls to store and the call to finalize in a given export series. 🔗[supported] function( storage : types.dt_imageio_module_storage_t, format : types.dt_imageio_module_format_t ) : boolean A function called to check if a given image format is supported by the Lua storage; this is used to build the dropdown format list for the GUI.\nNote that the parameters in the format are the ones currently set in the GUI; the user might change them before export.\n storage - types.dt_imageio_module_storage_t - The storage object tested. format - types.dt_imageio_module_format_t - The format object to report about. return - boolean - True if the corresponding format is supported. 🔗[initialize] function( storage : types.dt_imageio_module_storage_t, format : types.dt_imageio_module_format_t, images : table of types.dt_lua_image_t, high_quality : boolean, extra_data : table ) : table or nil A function called before storage happens This function can change the list of exported functions\n storage - types.dt_imageio_module_storage_t - The storage object tested. format - types.dt_imageio_module_format_t - The format object to report about. images - table of types.dt_lua_image_t - A table containing images to be exported. high_quality - boolean - True if the export is high quality. extra_data - table - An empty Lua table to take extra data. This table is common to the initialize, store and finalize calls in an export series. return - table or nil - The modified table of images to export or nil If nil (or nothing) is returned, the original list of images will be exported If a table of images is returned, that table will be used instead. The table can be empty. The images parameter can be modified and returned ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.register_storage/","tags":null,"title":"darktable.register_storage"},{"categories":null,"content":"dt_type\nType object describing parameters to export to png.\nAttributes:\n parent : types.dt_imageio_module_format_t../types/dt_imageio_module_format_t 🔗dt_imageio_module_format_data_png.bpp number\nThe bpp parameter to use when exporting.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_png/","tags":null,"title":"dt_imageio_module_format_data_png"},{"categories":null,"content":"🔗Name enfuse.lua - merge the selected images into one tonemapped image and import the result\n🔗Description This script uses enfuse to merge the selected images into one tonemapped image and imports the result. It only works on ldr images (like, JPEG).\n🔗Usage start this script from script manager it creates a new lighttable module 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/enfuse/","tags":null,"title":"enfuse"},{"categories":null,"content":"🔗Name lighttable_demo.lua - an example script demonstrating how to control lighttable display modes\n🔗Description lighttable_demo is an example script showing how to control lighttable layout, sorting, and filtering from a lua script. If the selected directory has different ratings, color labels, etc, then the sorting and filtering display is a little clearer.\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/lighttable_demo/","tags":null,"title":"lighttable_demo"},{"categories":null,"content":"🔗NAME msg\n🔗SYNOPSIS print a log message\n🔗USAGE local log = require \u0026quot;lib/log\u0026quot; log.msg(level, ...) level - table - the type of message, one of:\n log.debug - debugging messages log.info - informational messages log.warn - warning messages log.error - error messages log.success - success messages log.always - an internal message for debugging log.screen - output 1 line of text to the screen log.critical - print a critical message to the console \u0026hellip; - string(s) - the message to print, which could be a comma separated set of strings\n🔗DESCRIPTION msg checks the level to see if it is enabled, then prints the level type and message if it is. Messages are output using the engine configured in each log level.\n🔗LIMITATIONS If you use log.msg in a callback, the name of the calling routine can\u0026rsquo;t be determined. A solution is to include some means of reference such as the name of the callback as an argument, i.e.\nlog.msg(log.debug, \u0026quot;libPlugin.format_combobox:\u0026quot;, \u0026quot;value is \u0026quot; .. self.value) which would result in\nDEBUG: callback: libPlugin.format_combobox: value is JPEG ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/msg/","tags":null,"title":"msg"},{"categories":null,"content":"event\nThis event is triggered when an film import is finished (all post-import-image callbacks have already been triggered). This event can be registered multiple times.\n🔗post-import-film.callback function( event : string, film : types.dt_lua_film_t ) event - string - The name of the event that triggered the callback. film - types.dt_lua_film_t - The new film that has been added. If multiple films were added recursively only the top level film is reported. 🔗post-import-film.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/post-import-film/","tags":null,"title":"post-import-film"},{"categories":null,"content":"🔗NAME prequire\n🔗SYNOPSIS a protected lua require\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local status, lib = du.prequire(req_name) req_name - string - the filename of the lua code to load without the \u0026ldquo;.lua\u0026rdquo; filetype\n🔗DESCRIPTION prequire is a protected require that can survive an error in the code being loaded without bringing down the calling routine.\n🔗RETURN VALUE status - boolean - true on success lib - if status is true, then the code, otherwise an error message\n🔗EXAMPLE local status, lib = prequire(\u0026quot;lib/dtutils.file\u0026quot;) which would load lib/dtutils/file.lua which would return a status of true and the reference to the library.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/prequire/","tags":null,"title":"prequire"},{"categories":null,"content":"🔗NAME sanitize_lua\n🔗SYNOPSIS escape lua \u0026lsquo;magic\u0026rsquo; characters from a pattern string\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.sanitize_lua(str) str - string - the string that needs to be made safe\n🔗DESCRIPTION sanitize_lua escapes lua \u0026lsquo;magic\u0026rsquo; characters so that a string may be used in lua string/patten matching.\n🔗RETURN VALUE result - string - a lua pattern safe string\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/sanitize_lua/","tags":null,"title":"sanitize_lua"},{"categories":null,"content":"🔗Name script_manager.lua - a tool for managing the darktable lua scripts\n🔗Description script_manager is designed to be called from the users luarc file and used to manage the lua scripts.\nOn startup script_manager scans the lua scripts directory to see what scripts are present. Scripts are sorted by \u0026lsquo;category\u0026rsquo; based on what sub-directory they are in. With no additional script repositories iinstalled, the categories are contrib, examples, official and tools. When a category is selected the buttons show the script name and whether the script is started or stopped. The button is a toggle, so if the script is stopped click the button to start it and vice versa.\n🔗Features the number of script buttons shown can be changed to any number between 5 and 20. The default is 10 buttons. This can be changed in the configuration action.\n additional repositories of scripts may be installed from the install/update action.\n installed scripts can be updated from the install/update action. This includes extra repositories that have been installed.\n the lua scripts can be disabled if desired from the install/update action.\n script_manager is automatically installed and enabled when the lua scripts are installed by the darktable scripts_installer.\n 🔗Usage start/stop scripts -\n The top part of the window has the category selector. The category corresponds to the directory that the scripts are in. Currently the categories are contrib for community contributed scripts, examples for example scripts, official for developer contributed scripts, and tools containing tools for managing the lua scripts. The lower part of the window contains the paged interface for the scripts contained in the selected category. There are arrow buttons for navigating the pages and an indicator showing what the current page is and how many pages of scripts there are for the current category. The number of buttons defaults to 10, but is configurable anywhere between 5 and 20 depending on how much screen real estate you want to use. The scripts are sorted alphabetically. The button shows the name of the script and it\u0026rsquo;s current status, started or stopped. Clicking the script button toggles the script from started to stopped and back again. configure - this window allows changing the number of buttons used to display scripts. Move the slider to select the number of buttons, click the change number of buttons button and the number of buttons will change and the action will change back to the start/stop scripts window.\n install/update scripts - This window allows installing additional script repositories and updating installed repositories.\n update - select the scripts to update from the scripts to update dropdown. Click the update scripts button to do the update.\n install - additional script repositories can be added to your lua scripts. To add another repository fill in the URL to download additional scripts from and then fill in the new category to place scripts in. Click the install additional scripts button and the category (directory) is created and a git clone is performed to retrieve the git repository. EXAMPLE: fill in URL to download additional scripts from with https://github.com/wpferguson/extra-dt-lua-scripts.git and the new category to place scripts in with wpferguson. Click the button to install the scripts. The scripts are retrieved and added to the user interface and the window changes to the newly installed script category.\n disable scripts - the lua scripts are installed by the darktable scripts installer. If you install them and later decide you no longer want them cluttering up your user interface, this option can disable them and stop them from starting. Once they are disabled, the way to enable them again is to rename a file using the terminal and command line. To disable the scritps first click the checkbox to enable the Disable Scripts button. This is to prevent accidentally disabling the lua scripts. Once the Disable Scripts button is active, click it to disable the scripts. When the button is clicked, the luarc file is renamed to luarc.disabled which results in the scripts not starting the next time darktable starts.\n 🔗Additional Software Required git - wwww.git.org - git is used to install and update the scripts. script_manager will still run if git is not installed or accessible, but installing and updating scripts will not be possible.\n🔗Limitations There isn\u0026rsquo;t currently a way to stop an executing script and remove it from the interface, so when a script is stopped the script preference is set to not start the next time darktable starts.\n If the scripts are disabled by choice the only way to enable them is by renaming the file luarc.disabled to luarc. Then file is located in the user\u0026rsquo;s darktable configuration directory, $HOME/.config/darktable on linux and macos and %LOCALAPPDATA%\\darktable on windows.\n 🔗Author Bill Ferguson \u0026lt;wpferguson@gmail.com\u0026gt;\n🔗Change Log 20201225 - Rewrite for darktable 3.4 - Merry Christmas\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/script_manager/","tags":null,"title":"script_manager"},{"categories":null,"content":"🔗NAME tracepoint\n🔗SYNOPSIS print out a tracepoint and dump the arguments\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; local result = dd.tracepoint(name, ...) name - string - the name of the tracepoint to print out\n\u0026hellip; - arguments - variables to dump the contents of\n🔗DESCRIPTION tracepoint prints its name and dumps its parameters using darktable.debug.\n🔗RETURN VALUE result - \u0026hellip; - the supplied argument list\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/tracepoint/","tags":null,"title":"tracepoint"},{"categories":null,"content":"🔗Name cr2hdr.lua - Magic Lantern Dual ISO processing\n🔗Description cr2hdr Magic Lantern Dual ISO processing.\nThis script automates the steps involved to process an image created with the Magic Lantern Dual ISO module. Upon invoking the script with a shortcut \u0026ldquo;cr2hdr\u0026rdquo; provided by Magic Lantern is run on the selected images. The processed files are imported. They are also made group leaders to hide the original files.\n🔗Usage start this script using script manager trigger conversion on selected/hovered images by shortcut (set shortcut in settings dialog) it is also possible to have the script run after importing a collection (optin, since it is not that fast) 🔗Additional Software Required cr2hdr (sources can be obtained through the Magic Lantern repository) 🔗Limitations 🔗Author Till Theato - theato@ttill.de\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/cr2hdr/","tags":null,"title":"cr2hdr"},{"categories":null,"content":"function( plugin_name : string, name : string, expandable : boolean, resettable : boolean, containers : table of types.dt_lua_view_t =\u0026gt; [ types.dt_ui_container_t, int ], widget : types.lua_widget, view_enter : function, view_leave : function ) Register a new lib object. A lib is a graphical element of darktable\u0026rsquo;s user interface\n plugin_name - string - A unique name for your library name - string - A user-visible name for your library expandable - boolean - whether this lib should be expandable or not resettable - boolean - whether this lib has a reset button or not containers - table of types.dt_lua_view_t =\u0026gt; [ types.dt_ui_container_t, int ] - A table associating to each view containing the lib the corresponding container and position. widget - types.lua_widget - The widget to display in the lib view_enter - function - A callback called when a view displaying the lib is entered. view_leave - function - A callback called when leaving a view displaying the lib. 🔗view_enter self:function( old_view : types.dt_lua_view_t, new_view : types.dt_lua_view_t ) A callback called when a view displaying the lib is entered\n self - types.dt_lua_lib_t - The lib on which the callback is called old_view - types.dt_lua_lib_t - The view that we are leaving new_view - types.dt_lua_lib_t - The view that we are entering 🔗view_leave self:function( old_view : types.dt_lua_view_t, new_view : types.dt_lua_view_t ) A callback called when leaving a view displaying the lib\n self - types.dt_lua_lib_t - The lib on which the callback is called old_view - types.dt_lua_lib_t - The view that we are leaving new_view - types.dt_lua_lib_t - The view that we are entering ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.register_lib/","tags":null,"title":"darktable.register_lib"},{"categories":null,"content":"dt_type\nType object describing parameters to export to tiff.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_tiff.bpp number\nThe bpp parameter to use when exporting.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_tiff/","tags":null,"title":"dt_imageio_module_format_data_tiff"},{"categories":null,"content":"🔗NAME executable_path_widget\n🔗SYNOPSIS create a widget to get executable path preferences\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local widget = df.executable_path_widget(executables) executables - table - a table of strings that are executable names\n🔗DESCRIPTION executable_path_widget takes a table of executable names and builds a set of file selector widgets to get the path to the executable. The resulting widgets are wrapped in a box widget and returned.\n🔗RETURN VALUE widget - widget - a widget containing a file selector widget for each executable.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/executable_path_widget/","tags":null,"title":"executable_path_widget"},{"categories":null,"content":"🔗Name generate_image_txt.lua - generate text metadata\n🔗Description A script to run a command on images to generate text metadata\nThe medata will be displayed as an overlay on the image in lighttable mode\n🔗Usage start this script from script manager set a command to run on all image, this command should output text on stdout enable image file generation 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/generate_image_txt/","tags":null,"title":"generate_image_txt"},{"categories":null,"content":"🔗Name moduleExample.lua - create a new example lighttable module\n🔗Description More informations about building user interface elements: https://www.darktable.org/usermanual/ch09.html.php#lua_gui_example And about new_widget here: https://www.darktable.org/lua-api/index.html.php#darktable_new_widget\n🔗Usage start this script from script manager\n it creates a new example lighttable module\n 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/moduleexample/","tags":null,"title":"moduleExample"},{"categories":null,"content":"🔗NAME spairs\n🔗SYNOPSIS an iterator that provides sorted pairs from a table\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; for key, value in du.spairs(t, order) do -- do something end t - table - table of key, value pairs order - function - an optional function to sort the pairs, if none is supplied, table.sort() is used\n🔗DESCRIPTION spairs is an iterator that returns key, value pairs from a table in sorted order. The sorting order is the result of table.sort() if no function is supplied, otherwise sorting is done as specified in the function.\n🔗EXAMPLE HighScore = { Robin = 8, Jon = 10, Max = 11 } -- basic usage, just sort by the keys for k,v in spairs(HighScore) do print(k,v) end --\u0026gt; Jon 10 --\u0026gt; Max 11 --\u0026gt; Robin 8 -- this uses an custom sorting function ordering by score descending for k,v in spairs(HighScore, function(t,a,b) return t[b] \u0026lt; t[a] end) do print(k,v) end --\u0026gt; Max 11 --\u0026gt; Jon 10 --\u0026gt; Robin 8 🔗REFERENCE Code copied from http://stackoverflow.com/questions/15706270/sort-a-table-in-lua\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/spairs/","tags":null,"title":"spairs"},{"categories":null,"content":"🔗NAME strip_accents\n🔗SYNOPSIS strip accents from characters\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.strip_accents(str) str - string - the string with characters that need accents removed\n🔗DESCRIPTION strip_accents removes accents from accented characters returning the unaccented character.\n🔗RETURN VALUE result - string - the string containing unaccented characters\n🔗REFERENCE Copied from https://forums.coronalabs.com/topic/43048-remove-special-characters-from-string/\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/strip_accents/","tags":null,"title":"strip_accents"},{"categories":null,"content":"event\nThis event is triggered after the user changed the active view\n#view-changed.callback\nfunction( event : string, old_view : types.dt_lua_view_t, new_view : types.dt_lua_view_t ) event - string - The name of the event that triggered the callback. old_view - types.dt_lua_view_t - The view that we just left new_view - types.dt_lua_view_t - The view we are now in #view-changed.extra registration parameters\nThis event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/view-changed/","tags":null,"title":"view_changed"},{"categories":null,"content":"A table containing all the film objects in the database.\n🔗darktable.films.# types.dt_lua_film_t\nEach film has a numeric entry in the database. See types.dt_lua_film_t.\n🔗darktable.films.new function( directory : string ) : types.dt_lua_film_t Creates a new empty film\nsee darktable.database.import to import a directory with all its images and to add images to a film\n directory - string - The directory that the new film will represent. The directory must exist return - types.dt_lua_film_t - The newly created film, or the existing film if the directory is already imported 🔗darktable.films.delete see types.dt_lua_film_t.delete\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.films/","tags":null,"title":"darktable.films"},{"categories":null,"content":"dt_type\nType object describing parameters to export to exr.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_exr.compression string\nThe compression parameter to use when exporting.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_exr/","tags":null,"title":"dt_imageio_module_format_data_exr"},{"categories":null,"content":"🔗Name enfuseAdvanced.lua - process HDR or focus stacked images\n🔗Description This plugin will add the new export module \u0026lsquo;fusion to DRI or DFF image\u0026rsquo;.\nDRI = Dynamic Range Increase (Blend multiple bracket images into a single LDR file)\nDFF = Depth From Focus (\u0026lsquo;Focus Stacking\u0026rsquo; - Blend multiple images with different focus into a single image)\n🔗Usage Start this script using script manager.\nSelect multiple images that are either bracketed, or focus-shifted, set your desired operating parameters, and press the export button. A new image will be created. The image will be auto imported into darktable if you have that option enabled. Additional tags or style can be applied on auto import as well, if you desire.\n🔗image align options See align_image_stack documentation for further explanation of how it specifically works and the options provided (http://hugin.sourceforge.net/docs/manual/Align_image_stack.html)\n🔗image fustion options See enfuse documentation for further explanation of how it specifically works and the options provided (https://wiki.panotools.org/Enfuse) If you have a specific set of parameters you frequently like to use, you can save them to a preset. There are 3 presets available for DRI, and 3 for DFF.\n🔗target file Select your file destination path, or check the \u0026lsquo;save to source image location\u0026rsquo; option. \u0026lsquo;Create Unique Filename\u0026rsquo; is enabled by default at startup, the user can choose to overwrite existing Set any tags or style you desire to be added to the new image (only available if the auto-import option is enabled). You can also change the defaults for this under settings \u0026gt; lua options\n🔗format options Same as other export modules\n🔗global options Same as other export modules\n🔗Additional Software Required align_image_stack enfuse ver. 4.2 or greater exiftool\n🔗Limitations 🔗Author Kevin Ertel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/enfuseadvanced/","tags":null,"title":"enfuseAdvanced"},{"categories":null,"content":"🔗NAME file_copy\n🔗SYNOPSIS copy a file to another name/location\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.file_copy(fromFile, toFile) fromFile - string - name of file to copy from\ntoFile - string - name of file to copy to\n🔗DESCRIPTION copy a file using a succession of methods from operating system to a pure lua solution\n🔗RETURN VALUE result - boolean - nil on error, true on success\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/file_copy/","tags":null,"title":"file_copy"},{"categories":null,"content":"event\nThis event is triggered after the user toggled the grouping button.\n🔗global_toolbox-grouping_toggle.callback function( toggle : boolean ) toggle - boolean - the new grouping status. 🔗global_toolbox-grouping_toggle.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/global_toolbox-grouping_toggle/","tags":null,"title":"global_toolbox-grouping_toggle"},{"categories":null,"content":"🔗Name image_path_in_ui.lua - Add a widget with the path of the selected images\n🔗Description Add a widget with the path of the selected images for easy copy/past Simple shortcuts to have multiple selection bufers\nThis plugin will add a widget at the bottom of the left column in lighttable mode\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Jérémy Rosen\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/image_path_in_ui/","tags":null,"title":"image_path_in_ui"},{"categories":null,"content":"🔗Name multi_os.lua - an example script that runs on linux, MacOS, and Windows.\n🔗Description multi_os is an example of how to write a script that will run on different operating systems. It uses the lua-scripts libraries to lessen the amount of code that needs to be written, as well as gaining access to tested cross-platform routines. This script also performs a function that some may find useful. It creates a button in the lighttable selected images module that extracts the embedded jpeg image from a raw file, then imports it and groups it with the raw file. A keyboard shortcut is also created. A key combination can be assigned to the shortcut in the lua preferences and then the action can be invoked by hovering over the image and pressing the key combination.\n🔗Usage start this script from script manager start darktable, open prefreences, go to lua options and update the executable location if you are running Windows or MacOS, then restart darktable. select an image or images click the button to extract the jpeg 🔗Additional Software Required ufraw-batch - https://ufraw.sourceforge.net MacOS - install with homebrew 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/multi_os/","tags":null,"title":"name"},{"categories":null,"content":"🔗NAME split\n🔗SYNOPSIS split a string on a specified separator\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.split(str, pat) str - string - the string to split\npat - string - the pattern to split on\n🔗DESCRIPTION split separates a string into a table of strings. The strings are separated at each occurrence of the supplied pattern. The pattern may be any pattern as described in the lua docs. Each match of the pattern is consumed and not returned.\n🔗RETURN VALUE result - table - a table of strings on success, or an empty table on error\n🔗EXAMPLE split(\u0026quot;/a/long/path/name/to/a/file.txt\u0026quot;, \u0026quot;/\u0026quot;) would return a table like\n{\u0026quot;a\u0026quot;, \u0026quot;long\u0026quot;, \u0026quot;path\u0026quot;, \u0026quot;name\u0026quot;, \u0026quot;to\u0026quot;, \u0026quot;a\u0026quot;, \u0026quot;file.txt\u0026quot;} 🔗REFERENCE http://lua-users.org/wiki/SplitJoin\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/split/","tags":null,"title":"split"},{"categories":null,"content":"🔗NAME urlencode\n🔗SYNOPSIS encode a string in a websage manner\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.urlencode(str) str - string - the string that needs to be made websafe\n🔗DESCRIPTION urlencode converts a string into a websafe version suitable for use in a web browser.\n🔗RETURN VALUE result - string - a websafe string\n🔗REFERENCE https://forums.coronalabs.com/topic/43048-remove-special-characters-from-string\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/urlencode/","tags":null,"title":"urlencode"},{"categories":null,"content":"function( type : string ) : types.dt_imageio_module_format_t Creates a new format object to export images\n type - string - The type of format object to create, one of :\n copy exr j2k jpeg pdf pfm png ppm tiff webp return - types.dt_imageio_module_format_t - The newly created object. Exact type depends on the type passed\n ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.new_format/","tags":null,"title":"darktable.new_format"},{"categories":null,"content":"dt_type\nType object describing parameters to export to copy.\nAttributes:\n parent : types.dt_imageio_module_format_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_copy/","tags":null,"title":"dt_imageio_module_format_data_copy"},{"categories":null,"content":"🔗Name 🔗Description Given a haldCLUT identity file this script generates haldCLUTS from all the user\u0026rsquo;s styles and exports them to a location of their choosing.\n🔗Usage Start this script from script manager.\n🔗Additional Software Required 🔗Limitations Warning: during export if a naming collision occurs the older file is automatically overwritten silently.\n🔗Author Noah Clarke\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/exportlut/","tags":null,"title":"exportLUT"},{"categories":null,"content":"🔗NAME file_move\n🔗SYNOPSIS move a file from one directory to another\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.file_move(fromFile, toFile) fromFile - string - name of the original file\ntoFile - string - the new file location and name\n🔗DESCRIPTION Move a file from one place to another. Try a succession of methods from builtin to operating system to a pure lua solution.\n🔗RETURN VALUE result - boolean - nil on error, some value on success\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/file_move/","tags":null,"title":"file_move"},{"categories":null,"content":"event\nThis event is triggered after the user toggled the overlay button.\n🔗global_toolbox-overlay_toggle.callback function( toggle : boolean ) toggle - boolean - the new overlay status. 🔗global_toolbox-overlay_toggle.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/global_toolbox-overlay_toggle/","tags":null,"title":"global_toolbox-overlay_toggle"},{"categories":null,"content":"🔗Name import_filter_manager.lua - add a dropdown list with import filters to the import dialog\n🔗Description This script adds a dropdown list with import filters to the import dialog. Scripts can add new filters by registering them with darktable.register_import_filter(name, callback) The callback has type function(event, images), i.e., it is the same as when directly registering the pre-import event.\n🔗Usage start this script from script manager also require some files with import filters, for example import_filters.lua. it is important to add them AFTER this one! 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/import_filter_manager/","tags":null,"title":"import_filter_manager"},{"categories":null,"content":"🔗Name panels_demo.lua - an example script demonstrating how to contol panel visibility\n🔗Description panels_demo is an example script showing how to control panel visibility. It cycles through the panels hiding them one by one, then showing them one by one, then hiding all, then showing all. Finally, the original panel visibility is restored.\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/panels_demo/","tags":null,"title":"panels_demo"},{"categories":null,"content":"function( type : string ) : types.dt_imageio_module_storage_t Creates a new storage object to export images.\n type - string - The type of storage object to create, one of:\n disk email gallery latex piwigo (Other, lua-defined, storage types may appear.) return - [types.dt_imageio_module_storage_t(../../types/dt_imageio_module_storage_t)] - The newly created object. Exact type depends on the type passed\n ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.new_storage/","tags":null,"title":"darktable.new_storage"},{"categories":null,"content":"dt_type\nType object describing parameters to export to pfm.\nAttributes:\n parent : types.dt_imageio_module_format_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_pfm/","tags":null,"title":"dt_imageio_module_format_data_pfm"},{"categories":null,"content":"🔗Name ext_editor.lua - edit images with external editors\n🔗Description This script provides helpers to edit image files with programs external to darktable. It adds:\n a new target storage \u0026ldquo;collection\u0026rdquo;. Image exported will be reimported to collection for further edit with external programs a new lighttable module \u0026ldquo;external editors\u0026rdquo;, to select a program from a list of up to 9 external editors and run it on a selected image (adjust this limit by changing MAX_EDITORS) a set of lua preferences in order to configure name and path of up to 9 external editors a set of lua shortcuts in order to quick launch the external editors 🔗Usage start this script with script manager 🔗setup in \u0026ldquo;preferences/lua options\u0026rdquo; configure name and path/command of external programs note that if a program name is left empty, that and all following entries will be ignored in \u0026ldquo;preferences/shortcuts/lua\u0026rdquo; configure shortcuts for external programs (optional) whenever programs preferences are changed, in lighttable/external editors, press \u0026ldquo;update list\u0026rdquo; 🔗use in the export dialog choose \u0026ldquo;collection\u0026rdquo; and select the format and bit depth for the exported image\n press \u0026ldquo;export\u0026rdquo;\n the exported image will be imported into collection and grouped with the original image\n select an image for editing with en external program, and:\n in lighttable/external editors, select program and press \u0026ldquo;edit\u0026rdquo;\n edit the image with the external editor, overwite the file, quit the external program\n the selected image will be updated or\n in lighttable/external editors, select program and press \u0026ldquo;edit a copy\u0026rdquo;\n edit the image with the external editor, overwite the file, quit the external program\n a copy of the selected image will be created and updated or\n in lighttable select target storage \u0026ldquo;collection\u0026rdquo;\n enter in darkroom\n to create an export or a copy press CRTL+E\n use the shortcut to edit the current image with the corresponding external editor\n overwite the file, quit the external program\n the darkroom view will be updated\n warning: mouseover on lighttable/filmstrip will prevail on current image\n this is the default DT behavior, not a bug of this script\n 🔗Additional Software Required 🔗Limitations MAC compatibility not tested 🔗Author Marco Carrarini - marco.carrarini@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/ext_editor/","tags":null,"title":"ext_editor"},{"categories":null,"content":"🔗NAME filename_increment\n🔗SYNOPSIS add a two digit increment to a filename\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.filename_increment(filepath) filepath - string - filename to increment\n🔗DESCRIPTION filename_increment solves the problem of filename conflict by adding an increment to the filename. If the supplied filename has no increment then \u0026ldquo;01\u0026rdquo; is added to the basename. If the filename already has an increment, then 1 is added to it and the filename returned.\n🔗RETURN VALUE result - string - the incremented filename\n🔗LIMITATIONS The filename will be incremented to a maximum of 99.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/filename_increment/","tags":null,"title":"filename_increment"},{"categories":null,"content":"🔗Name import_filters.lua - add filters for import_filter_manager\n🔗Description This script goes along with the import filter manager. It adds two filters:\n ignore jpegs: this one does the same as the existing option in the import dialog and just skips all JPEGs during import. prefer raw over jpeg: this one is a bit more elaborate, it ignores JPEGs when there is also another file with the same basename, otherwise it allows JPEGs, too. 🔗Usage start this script from script manager AFTER import_filter_manager.lua 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus \u0026amp; Christian Mandel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/import_filters/","tags":null,"title":"import_filters"},{"categories":null,"content":"event\nThis event is triggered whenever the image under the mouse changes\n🔗mouse-over-image-changed.callback function( event : string, image : types.dt_lua_image_t ) event - string - The name of the event that triggered the callback. image - types.dt_lua_image_t - The new image under the mouse, can be nil if there is no image under the mouse 🔗mouse-over-image-changed.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/mouse-over-image-changed/","tags":null,"title":"mouse-over-image-changed"},{"categories":null,"content":"🔗Name preferenceExample.lua - show the different preference types that are possible with Lua\n🔗Description darktable script to show the different preference types that are possible with Lua\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/preferenceexamples/","tags":null,"title":"preferenceExample"},{"categories":null,"content":"function( type : string, ... : variable ) : types.lua_widget Creates a new widget object to display in the UI.\n type - string - The type of storage object to create, one of:\n box button check_button combobox container entry file_chooser_button label section_label separator slider stack text_view \u0026hellip; - variable - Extra parameters, exact value are documented with each type\n return - types.lua_widget - The newly created object. Exact type depends on the type passed\n ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.new_widget/","tags":null,"title":"darktable.new_widget"},{"categories":null,"content":"dt_type\nType object describing parameters to export to jpeg.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_jpeg.quality number\nThe quality to use at export time.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_jpeg/","tags":null,"title":"dt_imageio_module_format_data_jpeg"},{"categories":null,"content":"event\nThis event is triggered when darktable exits, it allows lua scripts to do cleanup jobs\n🔗events.exit.callback function( ) 🔗events.exit.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/exit/","tags":null,"title":"exit"},{"categories":null,"content":"🔗Name face_recognition.lua - add a new storage option and calls face_recognition after export\n🔗Description Add a new storage option to send images to face_recognition. Images are exported to darktable tmp dir first. A directory with known faces must exist, the image name are the tag names which will be used. Multiple images for one face can exist, add a number to it, the number will be removed from the tag, for example: People|IknowYou1.jpg People|IknowYou2.jpg People|Another.jpg People|Youtoo.jpg\n🔗Usage start this script from script manager. 🔗Additional Software Required https://github.com/ageitgey/face_recognition https://github.com/darktable-org/lua-scripts/tree/master/lib 🔗Limitations 🔗Author Sebastian Witt\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/face_recognition/","tags":null,"title":"face_recognition"},{"categories":null,"content":"🔗NAME get_basename\n🔗SYNOPSIS get the filename without the path or extension\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_basename(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_basename returns the name of the file without the path or filetype.\n🔗RETURN VALUE result - string - the basename of the file\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_basename/","tags":null,"title":"get_basename"},{"categories":null,"content":"🔗Name printExamples.lua - prints \u0026ldquo;hello world\u0026rdquo; when darktable starts\n🔗Description prints \u0026ldquo;hello world\u0026rdquo; to the screen when darktable starts\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/printexamples/","tags":null,"title":"printExamples"},{"categories":null,"content":"🔗Name save_selection.lua - simple shortcuts to have multiple selection buffers\n🔗Description Simple shortcuts to have multiple selection buffers\n🔗Usage start this script from script manager go to configuration =\u0026gt; preferences =\u0026gt; lua set the shortcuts you want to use This plugin will provide shortcuts to save to and restore from up to five temporary buffers\nThis plugin also provides a shortcut to swap the current selection with a quick-swap buffer\nThe variable \u0026ldquo;buffer_count\u0026rdquo; controls the number of selection buffers, increase it if you need more temporary selection buffers\n🔗Additional Software Required 🔗Limitations 🔗Author Jérémy Rosen\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/save_selection/","tags":null,"title":"save_selection"},{"categories":null,"content":"This subtable contains function and data to manipulate the darktable user interface with Lua. Most of these function won\u0026rsquo;t do anything if the GUI is not enabled (i.e you are using the command line version darktable-cli instead of darktable).\n🔗darktable.gui.action_images table\nA table of types.dt_lua_image_t on which the user expects UI actions to happen. It is based on both the hovered image and the selection and is consistent with the way darktable works. It is recommended to use this table to implement Lua actions rather than darktable.gui.hovered or darktable.gui.selection to be consistent with darktable\u0026rsquo;s GUI.\n🔗darktable.gui.hovered types.dt_lua_image_t\nThe image under the cursor or nil if no image is hovered.\n🔗darktable.gui.selection function( [selection : table of types.dt_lua_image_t] ) : table of types.dt_lua_image_t Get or change the set of selected images.\nAttributes: implicit_yield\n [selection] - table of types.dt_lua_image_t - A table of images which will define the selected images. If this parameter is not given the selection will be untouched. If an empty table is given the selection will be emptied. return - table of types.dt_lua_image_t - A table containing the selection as it was before the function was called. 🔗darktable.gui.current_view function( [view : types.dt_lua_view_t] ) : types.dt_lua_view_t Get or change the current view.\n [view] - _types.dt_lua_view_t_ - The view to switch to. If empty the current view is unchanged return - _types.dt_lua_view_t_ - the current view 🔗darktable.gui.panel_visible function( panel : types.dt_ui_panel_t ) : boolean Determines if the specified panel is visible.\n panel - types.dt_ui_panel_t - The panel to check. return - boolean - true if the panel is visible, false if not 🔗darktable.gui.panel_hide function( panel : types.dt_ui_panel_t ) Hides the specified panel.\n panel - types.dt_ui_panel_t - The panel to hide. 🔗darktable.gui.panel_show function( panel : types.dt_ui_panel_t ) Shows the specified panel.\n panel - types.dt_ui_panel_t - The panel to show. 🔗darktable.gui.panel_hide_all function( ) Hide all panels.\n🔗darktable.gui.panel_show_all function( ) Show all panels.\n🔗darktable.gui.panel_get_size function( panel : types.dt_ui_panel_t ):int Gets the size in pixels of the specified panel. This only works for the left, right, and bottom panels.\n panel - types.dt_ui_panel_t - The panel to get the size of. 🔗darktable.gui.panel_set_size function( panel : types.dt_ui_panel_t size : int ) Sets the size in pixels of the specified panel. This only works for the left, right, and bottom panels.\n panel - types.dt_ui_panel_t - The panel to set the size of. size - int - The size to set the panel to. 🔗darktable.gui.create_job function( text : string, [percentage : boolean], [cancel_callback : function] ) : types.dt_lua_backgroundjob_t Create a new progress_bar displayed in darktable.gui.libs.backgroundjobs\n text - string - The text to display in the job entry\n [percentage] - boolean - Should a progress bar be displayed\n [cancel_callback] - function - A function called when the cancel button for that job is pressed. Note: the job won\u0026rsquo;t be destroyed automatically. You need to set types.dt_lua_backgroundjob_t.valid to false for that.\n return - types.dt_lua_backgroundjob_t - The newly created job object\n 🔗cancel_callback function( job : types.dt_lua_backgroundjob_t ) job - types.dt_lua_backgroundjob_t - The job who is being cancelled 🔗darktable.gui.views The different views in darktable\n🔗darktable.gui.views.map The map view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.map.latitude number - The latitude of the center of the map Attributes:\n write 🔗darktable.gui.views.map.longitude number - The longitude of the center of the map Attributes:\n write 🔗darktable.gui.views.map.zoom number - The current zoom level of the map Attributes:\n write 🔗darktable.gui.views.darkroom The darkroom view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.darkroom.display_image function( [image : types.dt_lua_image_t] ) : types.dt_lua_image_t Display an image in darkroom view.\n **[image] - types.dt_lua_image_t - The image to be displayed. If the image is not given, nothing will be changed. return - types.dt_lua_image_t - The image currently displayed. 🔗darktable.gui.views.lighttable The lighttable view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.lighttable.is_image_visible function( image : types.dt_lua_image_t ) : types.dt_lua_image_t Check if the image is visible in lighttable view. The lighttable must be in file manager or zoomable mode.\n image - types.dt_lua_image_t - The image to be checked. return - boolean - True if the image is displayed. False if the image is partially displayed or not displayed. 🔗darktable.gui.views.lighttable.set_image_visible function( image : types.dt_lua_image_t ) : types.dt_lua_image_t Set the image visible in lighttable view. The lighttable must be in file manager or zoomable mode.\n image - types.dt_lua_image_t - The image to set visible. return - int - An error is returned if no image is specified. 🔗darktable.gui.views.tethering The tethering view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.slideshow The slideshow view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.print The print view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.libs This table allows referencing all lib objects. lib objects are the graphical blocks within each view. To quickly figure out which lib is which, you can use the following code, which will make a given lib blink.\nlocal dt = require \u0026quot;darktable\u0026quot; local tested_module=\u0026quot;global_toolbox\u0026quot; dt.gui.libs[tested_module].visible=false dt.control.sleep(2000) while true do dt.gui.libs[tested_module].visible = not dt.gui.libs[tested_module].visible dt.control.sleep(2000) end 🔗darktable.gui.libs.snapshots The UI element that manipulates snapshots in darkroom\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.snapshots.ratio number - The place in the screen where the line separating the snapshot is. Between 0 and 1\nAttributes:\n write darktable.gui.libs.snapshots.direction\ntypes.snapshot_direction_t - The direction of the snapshot overlay\nAttributes:\n write 🔗darktable.gui.libs.snapshots.# types.snapshot_direction_t - The different snapshots for the image\n🔗darktable.gui.libs.snapshots.selected types.snapshot_direction_t - The currently selected snapshot\n🔗darktable.gui.libs.snapshots.take_snapshot function( ) Take a snapshot of the current image and add it to the UI The snapshot file will be generated at the next redraw of the main window\n🔗darktable.gui.libs.snapshots.max_snapshot number - The maximum number of snapshots\n🔗darktable.gui.libs.collect The collection UI element that allows to filter images by collection\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.collect.filter function( [rules : array of types.dt_lib_collect_params_rule_t] ) : array oftypes.dt_lib_collect_params_rule_t Get or change the list of visible images\nAttributes:\n implicit_yield\n [rules] - array of types.dt_lib_collect_params_rule_t - A table of rules describing the filter. These rules will be applied after this call\n return - array of types.dt_lib_collect_params_rule_t - The rules that were applied before this call.\n 🔗darktable.gui.libs.collect.new_rule function( ) : types.dt_lib_collect_params_rule_t Returns a newly created rule object\n return - types.dt_lib_collect_params_rule_t - The newly created rule 🔗darktable.gui.libs.import The buttons to start importing images\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.import.register_widget function( widget : types.lua_widget ) Add a widget in the option expander of the import dialog\n widget - types.lua_widget - The widget to add to the dialog. The reset callback of the widget will be called whenever the dialog is opened. 🔗darktable.gui.libs.styles The style selection menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.metadata_view The widget displaying metadata about the current image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.metadata_view.register_info function( name : string, callback : function ) Register a function providing extra info to display in the widget\n name - string - The name displayed for the new information callback - function - The function providing the info callback -\nfunction( image : types.dt_lua_image_t ) : string image - types.dt_lua_image_t - The image to analyze return - string - The extra information to display 🔗darktable.gui.libs.metadata The widget allowing modification of metadata fields on the current image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.hinter The small line of text at the top of the UI showing the number of selected images\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.filmstrip The filmstrip at the bottom of some views\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.viewswitcher The labels allowing to switch view\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.darktable_label The darktable logo in the upper left corner\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.tagging The tag manipulation UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.geotagging The geotagging time synchronisation UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.recentcollect The recent collection UI element\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.global_toolbox The common tools to all view (settings, grouping\u0026hellip;)\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.global_toolbox.grouping boolean- The current status of the image grouping option\nAttributes:\n write 🔗darktable.gui.libs.global_toolbox.show_overlays boolean - the current status of the image overlays option\nAttributes:\n write 🔗darktable.gui.libs.filter The image-filter menus at the top of the UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.filter.sort function( [sort : types.dt_collection_sort_t] ) : types.dt_collection_sort_t Change the collection sort field.\n [sort] - types.dt_collection_sort_t - The new field to sort by. If empty the current sort field is unchanged return - types.dt_collection_sort_t = The current sort field. 🔗darktable.gui.libs.filter.sort_order function( [order : types.dt_collection_sort_order_t] ) : types.dt_collection_sort_order_t Change the collection sort order.\n [order] - types.dt_collection_sort_order_t - The order to sort by. If empty the current sort order is unchanged. return - types.dt_collection_sort_order_t - The current sort order. 🔗darktable.gui.libs.filter.rating function( [rating : types.dt_collection_filter_t] ) : types.dt_collection_filter_t Change the collection rating filter.\n [rating] - types.dt_collection_filter_t - The new rating field to filter by. If empty the current rating field is unchanged. return - types.dt_collection_filter_t - The current rating field. 🔗darktable.gui.libs.filter.rating_comparator function( [comparator : types.dt_collection_rating_comperator_t] ) : types.dt_collection_rating_comperator_t Change the collection filter comparison field.\n [comparator] - types.dt_collection_rating_comperator_t - The new comparison field to filter the rating by. If empty the current rating comparison field is unchanged return - types.dt_collection_rating_comperator_t - The current rating comparison field 🔗darktable.gui.libs.ratings The stars to set the rating of an image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.select The buttons that allow to quickly change the selection\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.select.register_selection function( label : string, callback : function, [tooltip : string] ) Add a new button and call a callback when it is clicked\n label - string - The label to display on the button callback - function - The function to call when the button is pressed [tooltip] - string - The tooltip to use on the new button callback -\nfunction( event : string, images : table oftypes.dt_lua_image_t ) : table oftypes.dt_lua_image_t The function to call when the button is pressed\n event - string - The name of the button that was pressed images - table of types.dt_lua_image_t - The images in the current collection. This is the same content asdarktable.collection return - table of types.dt_lua_image_t - The images to set the selection to 🔗darktable.gui.libs.colorlabels The color buttons that allow to set labels on an image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.lighttable_mode The navigation and zoom level UI in lighttable\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.lighttable_mode.layout function( [layout : types.dt_lighttable_layout_t] ) : types.dt_lighttable_layout_t Change the lighttable layout.\n [layout] - types.dt_lighttable_layout_t - The layout to switch to. If empty the current layout is unchanged return - types.dt_lighttable_layout_t - the current layout 🔗darktable.gui.libs.lighttable_mode.zoom_level function( [level : int] ) : int Change the lighttable zoom level.\n [level] - int - The zoom level to switch to. If empty the current zoom level is unchanged return - int - the current zoom level 🔗darktable.gui.libs.copy_history The UI element that manipulates history\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.image The UI element that manipulates the current images\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.image.register_action function( label : string, callback : function, [tooltip : string] ) Add a new button and call a callback when it is clicked\n label - string - The label to display on the button callback - function - The function to call when the button is pressed [tooltip] - string - The tooltip to use on the new button callback -\nfunction( event : string, images : table oftypes.dt_lua_image_t ) The function to call when the button is pressed\n event - string - The name of the button that was pressed images - table of types.dt_lua_image_t - The images to act on when the button was clicked 🔗darktable.gui.libs.modulegroups The icons describing the different iop groups\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.module_toolbox The tools on the bottom line of the UI (overexposure)\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.session The session UI when tethering\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.histogram The histogram widget\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.export The export menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.history The history manipulation menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.colorpicker The colorpicker menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.navigation The full image preview to allow navigation\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.masks The masks window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.view_toolbox The view_toolbox window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.live_view The liveview window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.map_settings The map setting window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.camera The camera selection UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.location The location ui\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.backgroundjobs The window displaying the currently running jobs\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.print_settings The settings window in the print view\nAttributes:\n has_tostring parent : types.dt_lua_lib_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.gui/","tags":null,"title":"darktable.gui"},{"categories":null,"content":"dt_type\nType object describing parameters to export to ppm.\nAttributes:\n parent : types.dt_imageio_module_format_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_ppm/","tags":null,"title":"dt_imageio_module_format_data_ppm"},{"categories":null,"content":"🔗Name fujifilm_ratings.lua - support for importing Fujifilm in-camera ratings in darktable\n🔗Description Support for importing Fujifilm in-camera ratings in darktable.\n🔗Usage Start this script from script manager\n🔗Additional Software Required exiftool (https://www.sno.phy.queensu.ca/~phil/exiftool/)\n🔗Limitations 🔗Author Ben Mendis - ben.mendis@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_ratings/","tags":null,"title":"fujifilm_ratings"},{"categories":null,"content":"🔗NAME get_executable_path_preference\n🔗SYNOPSIS return the path to an executable from a preference\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_executable_path_preference(executable) executable - string - the name of the executable to get the path for\n🔗DESCRIPTION get_executable_path_preference returns the path preference to the requested executable.\n🔗RETURN VALUE result - string - path to the executable\n🔗LIMITATIONS executable should be the basename of the executable without extensions\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_executable_path_preference/","tags":null,"title":"get_executable_path_preference"},{"categories":null,"content":"event\nThis event is trigger before any import action\n🔗pre-import.callback function( event : string, images : table of string ) event - string - The name of the event that triggered the callback. images - table of string - The files that will be imported. Modifying this table will change the list of files that will be imported. 🔗pre-import.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/pre-import/","tags":null,"title":"pre-import"},{"categories":null,"content":"🔗Name running_os.lua - prints the operating system\n🔗Description prints the operating system\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/running_os/","tags":null,"title":"running_os"},{"categories":null,"content":"🔗Name selection_to_pdf.lua - generate a PDF file (via Latex) containing all selected images\n🔗Description Generates a PDF file (via Latex) containing all selected images\nThis plugin will add a new exporter that will allow you to generate the pdf file\nPlugin allows you to choose how many thumbnails you need per row\n🔗Usage start this script from script manager 🔗Additional Software Required a PDF-Viewer pdflatex (Latex) 🔗Limitations 🔗Author Jérémy Rosen \u0026amp; Pascal Obry\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/selection_to_pdf/","tags":null,"title":"selection_to_pdf"},{"categories":null,"content":"table\nGuide lines to overlay over an image in crop and rotate. All guides are clipped to the drawing area.\n🔗darktable.guides.register_guide function( name : string, draw_callback : function, [gui_callback : function] ) Register a new guide.\n name - string - The name of the guide to show in the GUI. draw_callback - function - The function to call to draw the guide lines. [gui_callback] - function - A function returning a widget to show when the guide is selected. It takes no arguments. draw_callback -\nfunction( cr : types.dt_lua_cairo_t, x : float, y : float, width : float, height : float, zoom_scale : float ) The function to call to draw the guide lines. The drawn lines will be stroked by darktable. THIS IS RUNNING IN THE GUI THREAD AND HAS TO BE FAST!\n cr - types.dt_lua_cairo_t - The cairo object used for drawing. x - float - The x coordinate of the top left corner of the drawing area. y - float - The y coordinate of the top left corner of the drawing area. width - float - The width of the drawing area. height - float - The height of the drawing area. zoom_scale - float -The current zoom_scale. Only needed when setting the line thickness. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.guides/","tags":null,"title":"darktable.guides"},{"categories":null,"content":"dt_type\nType object describing parameters to export to webp.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_webp.quality number\nThe quality to use at export time.\nAttributes:\n write 🔗dt_imageio_module_format_data_webp.comp_type types.comp_type_t\nThe overall quality to use; can be one of \u0026ldquo;webp_lossy\u0026rdquo; or \u0026ldquo;webp_lossless\u0026rdquo;.\nAttributes:\n write 🔗dt_imageio_module_format_data_webp.hint types.hint_t\nA hint on the overall content of the image.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_webp/","tags":null,"title":"dt_imageio_module_format_data_webp"},{"categories":null,"content":"🔗Name geoJSON_export.lua - export a geoJSON file from selected images\n🔗Description darktable geoJSON export script\n🔗Usage start this script using script manager 🔗Additional Software Required mkdir convert (ImageMagick) xdg-open xdg-user-dir 🔗Limitations This script is only tested with Linux\n🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geojson_export/","tags":null,"title":"geoJSON_export"},{"categories":null,"content":"🔗NAME get_filename\n🔗SYNOPSIS get the filename and extension from a file path\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_filename(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_filename strips the path from a filepath and returns the filename\n🔗RETURN VALUE result - string - the file name and type\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_filename/","tags":null,"title":"get_filename"},{"categories":null,"content":"Allows access to all existing tags.\n🔗darktable.tags.# types.dt_lua_tag_t\nEach existing tag has a numeric entry in the tags table - use ipairs to iterate over them.\n🔗darktable.tags.create function( name : string ) Creates a new tag and return it. If the tag exists return the existing tag.\n name - string - The name of the new tag. 🔗darktable.tags.find function( name : string ) : types.dt_lua_tag_t Returns the tag object or nil if the tag doesn\u0026rsquo;t exist.\n name - string - The name of the tag to find. return - _ types.dt_lua_tag_t_ - The tag object or nil. 🔗darktable.tags.delete function( tag : types.dt_lua_tag_t ) Deletes the tag object, detaching it from all images.\n tag - types.dt_lua_tag_t - The tag to be deleted. 🔗darktable.tags.attach function( tag : types.dt_lua_tag_t, image : types.dt_lua_image_t ) Attach a tag to an image; the order of the parameters can be reversed.\n tag - types.dt_lua_tag_t - The tag to be attached. image - types.dt_lua_image_t - The image to attach the tag to. 🔗darktable.tags.detach function( tag : types.dt_lua_tag_t, image : types.dt_lua_image_t ) Detach a tag from an image; the order of the parameters can be reversed.\n tag - types.dt_lua_tag_t - The tag to be detached. image - types.dt_lua_image_t - The image to detach the tag from. 🔗darktable.tags.get_tags function( image : types.dt_lua_image_t ) : table of types.dt_lua_tag_t Gets all tags attached to an image.\n image - types.dt_lua_image_t - The image to get the tags from. return - table of types.dt_lua_tag_t - A table of tags that are attached to the image. 🔗darktable.tags.get_tagged_images function( tag : types.dt_lua_tag_t ) : table of types.dt_lua_image_t Gets all images with the attached tag.\n tag - types.dt_lua_tag_t - The tag to search images for. return - table of types.dt_lua_image_t - A table of images that have the tag attached. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.tags/","tags":null,"title":"darktable.tags"},{"categories":null,"content":"dt_type\nType object describing parameters to export to jpeg2000.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_j2k.quality number\nThe quality to use at export time.\nAttributes:\n write 🔗dt_imageio_module_format_data_j2k.bpp number\nThe bpp parameter to use when exporting.\nAttributes:\n write 🔗dt_imageio_module_format_data_j2k.format types.dt_imageio_j2k_format_t\nThe format to use.\nAttributes:\n write 🔗dt_imageio_module_format_data_j2k.preset types.dt_imageio_j2k_preset_t\nThe preset to use.\nAttributes: 62\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_j2k/","tags":null,"title":"dt_imageio_module_format_data_j2k"},{"categories":null,"content":"🔗Name geoToolbox.lua - a module of geo tools\n🔗Description it creates a new geoToolbox lighttable module 🔗Usage require this script from your main lua file To do this add this line to the file .config/darktable/luarc: require \u0026ldquo;geoToolbox\u0026rdquo; 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geotoolbox/","tags":null,"title":"geoToolbox"},{"categories":null,"content":"🔗NAME get_filetype\n🔗SYNOPSIS get the filetype from a filename\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_filetype(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_filetype returns the filetype from the supplied filepath\n🔗RETURN VALUE result - string - the filetype\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_filetype/","tags":null,"title":"get_filetype"},{"categories":null,"content":"table\nThis table includes values that describe details of the configuration of darktable.\n🔗darktable.configuration.version string\nThe version number of darktable.\n🔗darktable.configuration.has_gui boolean\nTrue if darktable has a GUI (launched through the main darktable command, not darktable-cli).\n🔗darktable.configuration.verbose boolean\nTrue if the Lua logdomain is enabled.\n🔗darktable.configuration.tmp_dir string\nThe name of the directory where darktable will store temporary files.\n🔗darktable.configuration.config_dir string\nThe name of the directory where darktable will find its global configuration objects (modules).\n🔗darktable.configuration.cache_dir string\nThe name of the directory where darktable will store its mipmaps.\n🔗darktable.configuration.api_version_major number\nThe major version number of the lua API.\n🔗darktable.configuration.api_version_minor number\nThe minor version number of the lua API.\n🔗darktable.configuration.api_version_patch number\nThe patch version number of the lua API.\n🔗darktable.configuration.api_version_suffix string\nThe version suffix of the lua API.\n🔗darktable.configuration.api_version_string string\nThe version description of the lua API. This is a string compatible with the semantic versioning convention\n🔗darktable.configuration.running_os string\nThe name of the Operating system darktable is currently running on\n🔗darktable.configuration.check_version function( module_name : string, ... : table... ) Check that a module is compatible with the running version of darktable Add the following line at the top of your module : darktable.configuration.check(...,{M,m,p},{M2,m2,p2}) To document that your module has been tested with API version M.m.p and M2.m2.p2. This will raise an error if the user is running a released version of DT and a warning if he is running a development version (the \u0026hellip; here will automatically expand to your module name if used at the top of your script).\n module_name - string - The name of the module to report on error \u0026hellip; - table - Tables of API versions that are known to work with the script ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.configuration/","tags":null,"title":"darktable.configuration"},{"categories":null,"content":"dt_type\nType object describing parameters to export to pdf.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_pdf.dpi number\nThe dot per inch value to use at export\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.icc boolean\nShould the images be tagged with their embedded profile\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.border string\nEmpty space around the PDF images\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.orientation string\nOrientation of the pages in the document\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.title string\nThe title for the document\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.rotate boolean\nShould the images be rotated to match the PDF orientation\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.mode string\nThe image mode to use at export time\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.size string\nThe paper size to use\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.compression string\nCompression mode to use for images\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.pages string\nThe page type to use\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.rotate boolean\nShould the images be rotated in the resulting PDF\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_pdf/","tags":null,"title":"dt_imageio_module_format_data_pdf"},{"categories":null,"content":"🔗NAME get_path\n🔗SYNOPSIS get the path from a file path\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_path(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_path strips the filename and filetype from a path and returns the path\n🔗RETURN VALUE result - string - the path\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_path/","tags":null,"title":"get_path"},{"categories":null,"content":"🔗Name gimp.lua - export and edit with GIMP\n🔗Description This script provides another storage (export target) for darktable. Selected images are exported in the specified format to temporary storage. GIMP is launched and opens the files. After editing, the exported images are overwritten to save the changes. When GIMP exits, the exported files are moved into the current collection and imported into the database. The imported files then show up grouped with the originally selected images.\n🔗Usage start this script using script manager select an image or images for editing with GIMP in the export dialog select \u0026ldquo;Edit with GIMP\u0026rdquo; and select the format and bit depth for the exported image Press \u0026ldquo;export\u0026rdquo; Edit the image with GIMP then save the changes with File-\u0026gt;Overwrite\u0026hellip;. Exit GIMP The edited image will be imported and grouped with the original image 🔗Additional Software Required GIMP - http://www.gimp.org 🔗Limitations There is no provision for dealing with the xcf files generated by GIMP, since darktable doesn\u0026rsquo;t deal with them. You may want to save the xcf file if you intend on doing further edits to the image or need to save the layers used. Where you save them is up to you. 🔗Author Bill Ferguson - wpferguson@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gimp/","tags":null,"title":"gimp"},{"categories":null,"content":"enum\nThe export mode to use for PDF document\nValues:\n normal draft debug ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/_pdf_mode_t/","tags":null,"title":"_pdf_mode_t"},{"categories":null,"content":"table\nLua allows you to manipulate preferences. Lua has its own namespace for preferences and you can\u0026rsquo;t write normal darktable preferences. Preference handling functions take a script parameter. This is a string used to avoid name collision in preferences (i.e namespace). Set it to something unique, usually the name of the script handling the preference. Preference handling functions can\u0026rsquo;t guess the type of a parameter. You must pass the type of the preference you are handling. Note that the directory, enum, lua and file type preferences are stored internally as string. The user can only select valid values, but a lua script can set it to any string\n🔗darktable.preferences.register function( script : string, name : string, type : types.lua_pref_type, label : string, tooltip : string, [default : depends on type], [min : int or float], [max : int or float], [step : float], [values : string...], [widget : types.lua_widget], [set_callback : function] ) Creates a new preference entry in the Lua tab of the preference screen. If this function is not called the preference can\u0026rsquo;t be set by the user (you can still read and write invisible preferences).\n script - string - Invisible prefix to guarantee unicity of preferences. name - string - A unique name used with the script part to identify the preference. type - _types.lua_pref_type_The type of the preference - one of the string values described above. label - string - The label displayed in the preference screen. tooltip - string - The tooltip to display in the preference menu. [default] - Thedepends on type - Default value to use when not set explicitly or by the user. For the enum type of pref, this is mandatory [mi] - int or float - Minimum value (integer and float preferences only). [max] - int or float - Maximum value (integer and float preferences only). [step] - float - Step of the spinner (float preferences only). [values] - string - Other allowed values (enum preferences only) [widget] - types.lua_widget - The widget to use in preference (lua preferences only) [set_callback] - function_ - A function called when the widget needs to be updated from the preference [set_callback] -\nfunction( widget : types.lua_widget ) A function called when the widget needs to be updated from the preference\n widget - types.lua_widget - The widget to update 🔗darktable.preferences.read function( script : string, name : string, type : types.lua_pref_type ) : depends on type Reads a value from a Lua preference.\n script - string - Invisible prefix to guarantee unicity of preferences. Lua API 6.2.0 Specifying \u0026ldquo;darktable\u0026rdquo; as the script name allows access to the darktable core preferences. name - string - The name of the preference displayed in the preference screen. type - types.lua_pref_type - The type of the preference. return - depends on type - The value of the preference. 🔗darktable.preferences.write function( script : string, name : string, type : types.lua_pref_type, value : depends on type ) Writes a value to a Lua preference.\n script - string - Invisible prefix to guarantee unicity of preferences. name - string - The name of the preference displayed in the preference screen. type - types.lua_pref_type - The type of the preference. value - depends on type - The value to set the preference to. Lua API 6.2.0\n🔗darktable.preferences.destroy function( script : string, name : string, ) : return boolean Destroys a lua preference key and value.\n script - string - Invisible prefix to guarantee unicity of preferences. name - string - The name of the preference displayed in the preference screen. return - boolean - True for success, false otherwise. Lua API 6.2.0\n🔗darktable.preferences.get_keys function( script : string, name : string, ) : return table of strings Get all of the darktable core and lua preference keys and return them in a sorted table.\n return - table of string - Sorted darktable core preference and lua preference keys. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.preferences/","tags":null,"title":"darktable.preferences"},{"categories":null,"content":"🔗Name gpx_export.lua - gpx exporter\n🔗Description Simple darktable GPX generator script\nThis script generates a GPX track from all images having GPS latitude and longitude information. For each source folder, a separate \u0026lt;trk\u0026gt; is generated in the gpx file.\n🔗Usage 🔗Additional Software Required 🔗Limitations 🔗Author Jannis_V\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gpx_export/","tags":null,"title":"gpx_export"},{"categories":null,"content":"🔗NAME mkdir\n🔗SYNOPSIS create the directory(ies) if they do not already exist\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; df.mkdir(path) path - string - a directory path\n🔗DESCRIPTION mkdir creates directories if they do not already exist. It creates parent directories if needed.\n🔗RETURN VALUE path - string - a directory path\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/mkdir/","tags":null,"title":"mkdir"},{"categories":null,"content":"🔗Lua API 6.2.0 Store and retrieve credentials using the darktable password storage backend.\n🔗darktable.password.save function( application : string, username : string, password : string ) :boolean Save a username/password pair for use accessing an application.\n application - string - Name of application or website. username - string - The username used to access the application or website. password - string - The credential used to authenticate the username. return - boolean - True if the credentials are saved, false if they are not. 🔗darktable.password.get function( application : string, username : string ) :string Retrieves the password associated with the username for the application.\n application - string - Name of application or website. username - string - The username used to access the application or website. return - string - The credentials used to authenticate the user. Nil is returned if there is an error or the crendentials don\u0026rsquo;t exist. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/password/","tags":null,"title":"darktable.password"},{"categories":null,"content":"enum\nThe different page types for PDF export\nValues :\n all single contact ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/_pdf_pages_t/","tags":null,"title":"_pdf_pages_t"},{"categories":null,"content":"This pseudo table allows you to access and manipulate styles.\n🔗darktable.styles.# types.dt_style_t\nEach existing style has a numeric index; you can iterate them using ipairs.\n🔗darktable.styles.create function( image : types.dt_lua_image_t, name : string, description : string ) : types.dt_style_t Create a new style based on an image.\n image - types.dt_lua_image_t - The image to create the style from. name - string - The name to give to the new style. description - string - The description of the new style. return - types.dt_style_t - The new style object. 🔗darktable.styles.delete function( style : types.dt_style_t ) Deletes an existing style.\n style - types.dt_style_t - the style to delete 🔗darktable.styles.duplicate function( style : types.dt_style_t, name : string, description : string ) : types.dt_style_t Create a new style based on an existing style.\n style - types.dt_style_t - The style to base the new style on. name - string - The new style\u0026rsquo;s name. description - string - The new style\u0026rsquo;s description. return - types.dt_style_t - The new style object. 🔗darktable.styles.apply function( style : types.dt_style_t, image : types.dt_lua_image_t ) Apply a style to an image. The order of parameters can be inverted.\n style - types.dt_style_t - The style to use. image - types.dt_lua_image_t - The image to apply the style to. 🔗darktable.styles.import function( filename : string ) Import a style from an external .dtstyle file\n filename - string - The file to import 🔗darktable.styles.export function( style : types.dt_style_t, directory : string, overwrite : boolean ) Export a style to an external .dtstyle file\n style - types.dt_style_t - The style to export directory - string - The directory to export to overwrite - boolean - Is overwriting an existing file allowed ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.styles/","tags":null,"title":"darktable.styles"},{"categories":null,"content":"🔗Name HDRMerge.lua - create an HDR image using HDRMerge\n🔗Description This plugin adds the module \u0026lsquo;HDRMerge\u0026rsquo; to darktable\u0026rsquo;s lighttable view\n🔗Usage Start this script using script manager.\nOn the initial startup go to darktable settings \u0026gt; lua options and set your executable paths and other preferences, then restart darktable\nSelect bracketed images and press the Run HDRMerge button. The resulting DNG will be auto-imported into darktable. Additional tags or style can be applied on auto import as well, if you desire.\n🔗Base Options Select your desired BPS (bits per sample and Embedded Preview Size.\n🔗Batch Options Select if you want to run in batch mode or not Select the gap, in seconds, between images for auto grouping in batch mode\nSee HDRMerge manual for further detail: http://jcelaya.github.io/hdrmerge/documentation/2014/07/11/user-manual.html\n🔗Auto-import Options Select a style, whether you want tags to be copied from the original, and any additional tags you desire added when the new image is auto-imported\n🔗Additional Software Required HDRMerge ver. 4.5 or greater\n🔗Limitations 🔗Author Kevin Ertel\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hdrmerge/","tags":null,"title":"HDRMerge"},{"categories":null,"content":"🔗NAME rmdir\n🔗SYNOPSIS recursively remove a directory\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; df.rmdir(path) path - string - a directory path\n🔗DESCRIPTION rmdir allows directories to be removed recursively.\n🔗RETURN VALUE path - string - a directory path\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/rmdir/","tags":null,"title":"rmdir"},{"categories":null,"content":"enum\nThe compression mode for PDF document\nValues:\n uncompressed deflate ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_pdf_stream_encoder_t/","tags":null,"title":"dt_pdf_stream_encoder_t"},{"categories":null,"content":"🔗Name hugin.lua - stitch multiple images into a panorama\n🔗Description Add a new storage option to send images to hugin. Images are exported to darktable tmp dir first.\n🔗Usage start this script from script manager set the hugin tool paths (on some platforms) if hugin gui mode is used, save the final result in the tmp directory with the first file name and _pano as suffix for the image to be automatically imported to DT afterwards 🔗Additional Software Required hugin 🔗Limitations 🔗Author Wolfgang Goetz\nChristian Kanzian\nTobias Jakobs\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hugin/","tags":null,"title":"hugin"},{"categories":null,"content":"🔗NAME sanitize_filename\n🔗SYNOPSIS make a filename safe to pass as an argument\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local sanitized_filename = df.sanitize_filename(filename) filename - string - a filepath and filename\n🔗DESCRIPTION sanitize_filename places quotes around the filename in an operating system specific manner. The result is safe to pass as an argument to the operating system.\n🔗RETURN VALUE sanitized_filename - string - quoted filename\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/sanitize_filename/","tags":null,"title":"sanitize_filename"},{"categories":null,"content":"Allows to access the currently worked on images, i.e the ones selected by the collection lib. Filtering (rating etc) does not change that collection.\n🔗darktable.collection.# types.dt_lua_image_t\nEach image in the collection appears with a numerical index; you can iterate them using ipairs.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.collection/","tags":null,"title":"darktable.collection"},{"categories":null,"content":"Allows access to the database of images. Note that duplicate images (images with the same RAW but different XMP) will appear multiple times with different duplicate indexes. Also note that all images are here. This table is not influenced by any GUI filtering (collections, stars etc\u0026hellip;).\n🔗darktable.database.# types.dt_lua_image_t\nEach image in the database appears with a numerical index; you can iterate over them using ipairs.\n🔗darktable.database.duplicate function( image : types.dt_lua_image_t ) : types.dt_lua_image_t Creates a duplicate of an image and returns it.\n image - types.dt_lua_image_t - the image to duplicate return - types.dt_lua_image_t - The new image object. 🔗darktable.database.import function( location : string ) : types.dt_lua_image_t Imports new images into the database.\n location - string - The filename or directory to import images from. NOTE: If the images are set to be imported recursively in preferences only the toplevel film is returned (the one whose path was given as a parameter). NOTE 2: If the parameter is a directory the call is nonblocking; the film object will not have the newly imported images yet. Use a post-import-film filtering on that film to react when images are actually imported. return - types.dt_lua_image_t - The created image if an image is imported or the toplevel film object if a film was imported. 🔗darktable.database.get_image Lua API 6.2.0\nfunction( image_id : int, ) : types.dt_lua_image_t Get an image, specified by image_id, from the database.\n image_id - int - The id number of the image to get return - types.dt_lua_image_t - The image object if found, otherwise nil 🔗darktable.database.move_image function( image : types.dt_lua_image_t, film : types.dt_lua_film_t, [newname : string] ) Physically moves an image (and all its duplicates) to another film, and/or renames the image file. This will move the image file, the related XMP and all XMP for the duplicates to the directory of the new film and rename them as specified. Note that the order of the two required parameters is not relevant.\n image - types.dt_lua_image_t - The image to move film - types.dt_lua_image_t - The film to move to. To rename a file within the same film, set this to the image\u0026rsquo;s current film. [newname] - string - (Optional) If provided, rename the file with this new name. Must not contain any path separator characters. 🔗darktable.database.copy_image function( image : types.dt_lua_image_t, film : types.dt_lua_film_t, [newname : string] ) : types.dt_lua_image_t Physically copies an image to another film. This will copy the image file and the related XMP to the directory of the new film and rename them as specified. If there is already a file with the same name as the image file, it will create a duplicate from that file instead. Note that the order of the two required parameters is not relevant.\n image - types.dt_lua_image_t - The image to copy film - types.dt_lua_image_t - The film to copy to. To make a copy of a file within the same film, set this to the image\u0026rsquo;s current film. [newname] - string - (Optional) If provided, give the copy this new filename. Must not contain any path separator characters. return - types.dt_lua_image_t - The new image 🔗darktable.database.delete see types.dt_lua_image_t.delete\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.database/","tags":null,"title":"darktable.database"},{"categories":null,"content":"dt_type\nA virtual type representing all storage types.\n🔗dt_imageio_module_storage_t.plugin_name string\nA unique name for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.name string\nA human readable name for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.width number\nThe currently selected width for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.height number\nThe currently selected height for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.recommended_width number The recommended width for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.recommended_height number\nThe recommended height for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.supports_format format : types.dt_imageio_module_format_t ) : boolean Checks if a format is supported by this storage.\n self - types.dt_imageio_module_storage_t - The storage type to check against. format - types.dt_imageio_module_format_t - The format type to check. return - boolean - True if the format is supported by the storage. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_t/","tags":null,"title":"dt_imageio_module_storage_t"},{"categories":null,"content":"🔗Name image_stack.lua - process a stack of images\n🔗Description This script provides another storage (export target) for darktable. Selected images are exported in the specified format to temporary storage. The images are aligned if the user requests it. When the images are ready, imagemagick is launched and uses the selected evaluate-sequence operator to process the images. The output file is written to a filename representing the input files in the format specified by the user. The resulting image is imported into the film roll. The source images can be tagged as part of the file creation so that a user can later find the contributing images.\n🔗Usage start this script using script manager select the images to process with image_stack in the export dialog select \u0026ldquo;image stack\u0026rdquo; and select the format and bit depth for the exported image Select whether the images need to be aligned. Select the stack operator Select the output format Select whether to tag the source images used to create the resulting file Specify executable locations if necessary Press \u0026ldquo;export\u0026rdquo; The resulting image will be imported 🔗Additional Software Required align_image_stack - http://www.hugin.org imagemagick - http://www.imagemagick.org 🔗Limitations Mean is a fairly quick operation. On my machine (i7-6800K, 16G) it takes a few seconds. Median, on the other hand takes approximately 10x longer to complete. Processing 10 and 12 image stacks took over a minute. I didn\u0026rsquo;t test all the other functions, but the ones I did fell between Mean and Median performance wise.\n🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗See Also Thanks to Pat David and his blog entry on blending images, https://patdavid.net/2013/05/noise-removal-in-photos-with-median_6.html ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_stack/","tags":null,"title":"image_stack"},{"categories":null,"content":"🔗NAME set_executable_path_preference\n🔗SYNOPSIS set a preference for the path to an executable\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; df.set_executable_path_preference(executable, path) executable - string - the name of the executable to set the path for\npath - string - the path to the binary\n🔗DESCRIPTION set_executable_path_preference takes an executable name and path to the executable and registers the preference for later use.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/set_executable_path_preference/","tags":null,"title":"set_executable_path_preference"},{"categories":null,"content":"This table contain function to manipulate the control flow of lua programs. It provides ways to do background jobs and other related functions\n🔗darktable.control.ending boolean\nTRUE when darktable is terminating Use this variable to detect when you should finish long running jobs\n🔗darktable.control.dispatch function( function : function, ... : anything ) Runs a function in the background. This function will be run at a later point, after luarc has finished running. If you do a loop in such a function, please check darktable.control.ending in your loop to finish the function when darktable exits\n function - function - The call to dispatch \u0026hellip; - anything - extra parameters to pass to the function 🔗darktable.control.sleep function( delay : int ) Suspends execution while not blocking darktable\n delay - int - The delay in millisecond to sleep 🔗darktable.control.execute function( command : string ) : int Run a command in a shell while not blocking darktable\n command - string - The command to run, as in \u0026lsquo;sh -c\u0026rsquo; return - int - The result of the system call 🔗darktable.control.read function( file : file ) Block until a file is readable while not blocking darktable This function is not available on Windows builds\n file - file - The file object to wait for ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.control/","tags":null,"title":"darktable.control"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to email.\nAttributes:\n parent : types.dt_imageio_module_storage_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_email/","tags":null,"title":"dt_imageio_module_storage_data_email"},{"categories":null,"content":"🔗Name image_time.lua - synchronize image time for images shot with different cameras\n🔗Description image_time non destructively adjusts image times by modifying the database image exif_datetime_taken field. There are 4 modes: adjust time, set time, synchronize time, and reset time.\n🔗ADJUST TIME adjust time mode lets you chose an offset in terms of years, months, days, hours, minutes, and seconds. The adjustment can be added or subtracted.\nWARNING: When adding and subtracting months the result will usually be what is expected unless the time being adjusted is at the end of the month. This is because a month is a variable amount of time that can be 28, 29, 30 or 31 days depending on the month. Example: It\u0026rsquo;s March 31st and I subtract a month which not sets the time to February 31st. When that gets set to a valid time, then the date changes to March 3rd.\n🔗SET TIME set time mode allows you to pick a date and time and set the image time accordingly. Fields may be left out. This is useful when importing scanned images that don\u0026rsquo;t have an embedded date.\n🔗SYNCHRONIZE TIME I recently purchased a 7DmkII to replace my aging 7D. My 7D was still serviceable, so I bought a remote control and figured I\u0026rsquo;d try shooting events from 2 different perspectives. I didn\u0026rsquo;t think to synchonize the time between the 2 cameras, so when I loaded the images and sorted by time it was a disaster. I hacked a script together with hard coded values to adjust the exif_datetime_taken value in the database for the 7D images so that everything sorted properly. I\u0026rsquo;ve tried shooting with 2 cameras several times since that first attempt. I\u0026rsquo;ve gotten better at getting the camera times close, but still haven\u0026rsquo;t managed to get them to sync. So I decided to think the problem through and write a proper script to take care of the problem.\n🔗RESET TIME Select the images and click reset.\n🔗Usage 🔗ADJUST TIME Change the year, month, day, hour, minute, second dropdowns to the amount of change desired. Select add or subtract. Select the images. Click adjust.\n🔗SET TIME Set the time fields to the desired time. Select the images to change. Click set.\n🔗SYNCHRONIZE TIME Select 2 images, one from each camera, of the same moment in time. Click the Calculate button to calculate the time difference. The difference is displayed in the difference entry. You can manually adjust it by changing the value if necessary.\nSelect the images that need their time adjusted. Determine which way to adjust adjust the time (add or subtract) and select the appropriate choice.\nIf the image times get messed up and you just want to start over, select reset time from the mode and reset the image times.\n🔗RESET TIME Select the images and click reset.\n🔗Additional Software Required exiv2 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_time/","tags":null,"title":"image_time"},{"categories":null,"content":"🔗NAME split_filepath\n🔗SYNOPSIS split a filepath into parts\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.split_filepath(filepath) filepath - string - path and filename\n🔗DESCRIPTION split_filepath splits a filepath into the path, filename, basename and filetype and puts that in a table\n🔗RETURN VALUE result - table - a table containing the path, filename, basename, and filetype\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/split_filepath/","tags":null,"title":"split_filepath"},{"categories":null,"content":"table\nThis table contains functions related to translating lua scripts\n🔗darktable.gettext.gettext function( msgid : string ) : string Translate a string using the darktable textdomain\n msgid - string - The string to translate return - string - The translated string 🔗darktable.gettext.dgettext function( domainname : string, msgid : string ) : string Translate a string using the specified textdomain\n domainname - string - The domain to use for that translation msgid - string - The string to translate return - string - The translated string 🔗darktable.gettext.ngettext function( msgid : string, msgid_plural : string, n : int ) : string Translate a string depending on the number of objects using the darktable textdomain\n msgid - string - The string to translate msgid_plural - string - The string to translate in plural form n - int - The number of objects return - string - The translated string 🔗darktable.gettext.dngettext function( domainname : string, msgid : string, msgid_plural : string, n : int ) : string Translate a string depending on the number of objects using the specified textdomain\n domainname - string - The domain to use for that translation msgid - string - The string to translate msgid_plural - string - The string to translate in plural form n - int - The number of objects return - string - The translated string 🔗darktable.gettext.bindtextdomain function( domainname : string, dirname : string ) Tell gettext where to find the .mo file translating messages for a particular domain\n domainname - string - The domain to use for that translation dirname - string - The base directory to look for the file. The file should be placed in dirname/locale name/LC_MESSAGES/domain.mo ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.gettext/","tags":null,"title":"darktable.gettext"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to latex.\nAttributes:\n parent : types.dt_imageio_module_storage_t 🔗dt_imageio_module_storage_data_latex.filename string\nThe filename to export to.\nAttributes:\n write 🔗dt_imageio_module_storage_data_latex.title string\nThe title to use for export.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_latex/","tags":null,"title":"dt_imageio_module_storage_data_latex"},{"categories":null,"content":"🔗Name kml_export.lua - export a kml file from selected images\n🔗Description darktable KML export script\n🔗Usage start this script from script manager when choosing file format, pick JPEG or PNG as Google Earth doesn\u0026rsquo;t support other formats 🔗Additional Software Required zip (at the moment Linux only and only if you create KMZ files) magick (ImageMagick) xdg-user-dir (Linux) 🔗Limitations This script is only tested with Linux\n🔗Author Tobias Jakobs\nErik Augustin\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/kml_export/","tags":null,"title":"kml_export"},{"categories":null,"content":"🔗NAME test_file\n🔗SYNOPSIS test a file to see what it is\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.test_file(path, test) path - string - path and filename test - char - one of d, e, f, x where\n d - directory e - exists f - file x - executable 🔗DESCRIPTION test_file checks a specified path to see if it meets the specified test\n🔗RETURN VALUE result - boolean - true if the path satisfies the test, false if not\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/test_file/","tags":null,"title":"test_file"},{"categories":null,"content":"table\nThis section must be activated separately by calling require darktable.debug\n🔗darktable.debug.dump function( object : anything, [name : string], [known : table] ) : string This will return a string describing everything Lua knows about an object, used to know what an object is. This function is recursion-safe and can be used to dump _G if needed.\n object - anything - The object to dump. [name] - string - A name to use for the object. [known] - table - A table of object,string pairs. Any object in that table will not be dumped, the string will be printed instead. defaults to darktable.debug.known if not set return - string - A string containing a text description of the object - can be very long. 🔗darktable.debug.debug boolean\nInitialized to false; set it to true to also dump information about metatables.\n🔗darktable.debug.max_depth number\nInitialized to 10; The maximum depth to recursively dump content.\n🔗darktable.debug.known table\nA table containing the default value of darktable.debug.dump.known\n🔗darktable.debug.type function( object : anything ) : string Similar to the system function type() but it will return the real type instead of userdata for darktable specific objects.\n object - anything - The object whose type must be reported. return - string - A string describing the type of the object. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.debug/","tags":null,"title":"darktable.debug"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to piwigo.\nAttributes:\n parent : types.dt_imageio_module_storage_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_piwigo/","tags":null,"title":"dt_imageio_module_storage_data_piwigo"},{"categories":null,"content":"🔗Name LabelsToTags.lua - mass apply tags to images\n🔗Description Allows the mass-application of tags using color labels and ratings as a guide.\n🔗Usage In your \u0026lsquo;luarc\u0026rsquo; file or elsewhere, use the function \u0026lsquo;register_tag_mapping\u0026rsquo;, defined in this module, to specify one or more tag mappings for use by the module. Any mappings so registered will be selectable, according to their given names, in the module\u0026rsquo;s \u0026ldquo;mapping\u0026rdquo; combo box.\nA mapping takes the form of a table mapping patterns to lists of tags. A pattern consists of 6 characters, of which the first five represent color labels and the last the rating. Each color label character may be \u0026lsquo;+\u0026rsquo;, \u0026lsquo;-\u0026rsquo;, or \u0026lsquo;\u0026rsquo;, indicating that for this pattern to match, the corresponding color label, respectively, must be on, must be off, or can be either. Similarly, the rating character may be a numeral between 0 and 5, \u0026ldquo;R\u0026rdquo; for rejected, or \u0026ldquo;\u0026rdquo; for \u0026ldquo;any value.\u0026rdquo;\nAn example call to \u0026lsquo;register_tag_mapping\u0026rsquo; is provided in a comment at the end of this file.\nWhen the \u0026ldquo;Start\u0026rdquo; button is pressed, the module will iterate over each selected image and check the state of that image\u0026rsquo;s color labels and rating against each pattern defined in the selected mapping. For each pattern that matches, the corresponding tags will be added to the image. Any such tag not already existing in the database will be created.\n🔗Additional Software Required 🔗Limitations 🔗Author August Schwerdfeger - august@schwerdfeger.name\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/labelstotags/","tags":null,"title":"LabelsToTags"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to gallery.\nAttributes:\n parent : types.dt_imageio_module_storage_t 🔗dt_imageio_module_storage_data_gallery.filename string\nThe filename to export to.\nAttributes:\n write 🔗dt_imageio_module_storage_data_gallery.title string\nThe title to use for export.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_gallery/","tags":null,"title":"dt_imageio_module_storage_data_gallery"},{"categories":null,"content":"🔗Name OpenInExplorer.lua - open an images containing folder\n🔗Description This plugin adds the module \u0026ldquo;OpenInExplorer\u0026rdquo; to darktable\u0026rsquo;s lighttable view.\n🔗Usage Require this file in your luarc file, as with any other dt plug-in\nSelect the photo(s) you wish to find in your operating system\u0026rsquo;s file manager and press \u0026ldquo;show in file explorer\u0026rdquo; in the \u0026ldquo;selected images\u0026rdquo; section.\n Nautilus (Linux), Explorer (Windows), and Finder (macOS prior to Mojave) will open one window for each selected image at the file\u0026rsquo;s location. The file name will be highlighted.\n On macOS Mojave and Catalina the Finder will open one window for each different directory. In these windows only the last one of the corresponding files will be highlighted (bug or feature?).\n Dolphin (Linux) will open one window with tabs for the different directories. All the selected images' file names are highlighted in their respective directories.\n As an alternative option you can choose to show the image file names as symbolic links in an arbitrary directory. Go to preferences|Lua options. This option is not available for Windows users as on Windows only admins are allowed to create links.\n Pros: You do not clutter up your display with multiple windows. So there is no need to limit the number of selections.\n Cons: If you want to work with the files you are one step behind the original data.\n 🔗Additional Software Required 🔗Limitations 🔗Author Kevin Ertel\nVolker Lenhardt\nBill Ferguson\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/openinexplorer/","tags":null,"title":"OpenInExplorer"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to disk.\nAttributes:\n parent : types.dt_imageio_module_storage_t 🔗dt_imageio_module_storage_data_disk.filename string\nThe filename to export to.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_disk/","tags":null,"title":"dt_imageio_module_storage_data_disk"},{"categories":null,"content":"🔗Name 🔗Description guides for cropping passport photos based on documents from the Finnish police (https://www.poliisi.fi/instancedata/prime_product_julkaisu/intermin/embeds/poliisiwwwstructure/38462_Passikuvaohje_EN.pdf) describing passport photo dimensions of 47x36 mm and 500x653 px for digital biometric data stored in passports. They use ISO 19794-5 standard based on ICAO 9303 regulations which should also be compliant for all of Europe.\n🔗Usage add the following line in the file $CONFIGDIR/luarc require \u0026ldquo;passport_guide\u0026rdquo; (optional) add the line: \u0026ldquo;plugins/darkroom/clipping/extra_aspect_ratios/passport 36x47mm=47:36\u0026rdquo; to $CONFIGDIR/darktablerc when using the cropping tool, select \u0026ldquo;passport\u0026rdquo; as guide and if you added the line in your luarc select \u0026ldquo;passport 36x47mm\u0026rdquo; as aspect 🔗Additional Software Required 🔗Limitations 🔗Author Kåre Hampf\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/passport_guide/","tags":null,"title":"passport_guide"},{"categories":null,"content":"dt_type\nA film in darktable; this represents a directory containing imported images.\nAttributes:\n has_tostring 🔗dt_lua_film_t.move_image see darktable.database.move_image\n🔗dt_lua_film_t.copy_image see darktable.database.copy_image\n🔗dt_lua_film_t.# types.dt_lua_image_t\nThe different images within the film.\n🔗dt_lua_film_t.id number A unique numeric id used by this film.\nAttributes:\n write 🔗dt_lua_film_t.path string\nThe path represented by this film.\nAttributes:\n write 🔗dt_lua_film_t.delete self:function( [force : boolean] ) Removes the film from the database.\n self - types.dt_lua_film_t - The film to remove. [force] - boolean - Force removal, even if the film is not empty. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_film_t/","tags":null,"title":"dt_lua_film_t"},{"categories":null,"content":"🔗Name pdf_slideshow.lua - generate a pdf slideshow\n🔗Description Generates a PDF slideshow (via Latex) containing all selected images one per slide.\n🔗Usage start this script from script manager This plugin will add a new exporter that will allow you to generate a pdf slideshow. The interface will let you add:\n a global title for the slideshow (prefix in all slide label) a delay for the transition between each slide Each slide will contain a single picture with a label at the bottom with the format (all fields can be the empty string):\n\u0026lt;global title\u0026gt; / \u0026lt;image creator\u0026gt; / \u0026lt;image title\u0026gt;\n🔗Additional Software Required a PDF-Viewer pdflatex (Latex) 🔗Limitations 🔗Author Pascal Obry\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/pdf_slideshow/","tags":null,"title":"pdf_slideshow"},{"categories":null,"content":"dt_type A style that can be applied to an image. Attributes:\n has_tostring 🔗dt_style_t.delete see darktable.styles.delete\n🔗dt_style_t.duplicate see darktable.styles.duplicate\n🔗dt_style_t.apply see darktable.styles.apply\n🔗dt_style_t.export see darktable.styles.export\n🔗dt_style_t.name string\nThe name of the style.\n🔗dt_style_t.description string\nThe description of the style.\n🔗dt_style_t.# types.dt_style_item_t\nThe different items that make the style.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_style_t/","tags":null,"title":"dt_style_t"},{"categories":null,"content":"🔗Name photils.lua - auto tag images based on feature recognition\n🔗Description A darktable plugin that tries to predict keywords based on the selected image. This plugin uses photils-cli to handle this task. Photils-cli is an application that passes the image through a neural network, classifies it, and extracts the suggested tags. Everything happens offline without the need that your data are sent over the internet.\n🔗Usage start this script from script manager Select an image Press \u0026ldquo;get tags\u0026rdquo; Select the tags you want from a list of suggestions Press \u0026ldquo;Attach .. Tags\u0026rdquo; to add the selected tags to your image 🔗Additional Software Required photils-cli - https://github.com/scheckmedia/photils-cli at the moment only available for Linux and MacOS 🔗Limitations 🔗Author Tobias Scheck\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/photils/","tags":null,"title":"photils"},{"categories":null,"content":"dt_type\nAn element that is part of a style.\nAttributes:\n has_tostring 🔗dt_style_item_t.name string\nThe name of the style item.\n🔗dt_style_item_t.num number\nThe position of the style item within its style.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_style_item_t/","tags":null,"title":"dt_style_item_t"},{"categories":null,"content":"🔗Name quicktag.lua - add shortcuts to speed up tagging\n🔗Description For faster attaching your favorite tags, the script adds shortcuts and the module \u0026ldquo;quicktag\u0026rdquo; in lighttable mode with a changeable number of buttons. A tag can be assigned to each button. If the tags do not exist in your database, they are added to the database the first time they are attached to an image.\nThe number of buttons/shortcuts can be changed in the lua preferences. Changes in the number require a restart of darktable.\n🔗Usage set the number of quicktags between 2 and 10 in the preferences dialog and restart darktable if wanted set the shortcuts in the preferences dialog to add or change a quicktag, first select the old tag with the combobox \u0026ldquo;old quicktag\u0026rdquo;, enter a new tag in the \u0026ldquo;new quicktag\u0026rdquo; filed and press \u0026ldquo;set quicktag\u0026rdquo; use a shortcut or button to attach the tag to selected images 🔗Additional Software Required 🔗Limitations 🔗Author Christian Kanzian\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/quicktag/","tags":null,"title":"quicktag"},{"categories":null,"content":"dt_type\nA tag that can be attached to an image.\nAttributes:\nhas_tostring\n🔗dt_lua_tag_t.delete see darktable.tags.delete\n🔗dt_lua_tag_t.attach see darktable.tags.attach\n🔗dt_lua_tag_t.detach see darktable.tags.detach\n🔗dt_lua_tag_t.name string\nThe name of the tag.\n🔗dt_lua_tag_t.# types.dt_lua_image_t\nThe images that have that tag attached to them.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_tag_t/","tags":null,"title":"dt_lua_tag_t"},{"categories":null,"content":"🔗Name rate_group.lua - rate groups of images\n🔗Description Provide shortcuts for rating or rejecting all images within a group; particularly useful for RAW+JPEG shooters employing a star rating workflow like the below:\nhttp://blog.chasejarvis.com/blog/2011/03/photo-editing-101/\n🔗Usage Assign a keyboard shortcut to each action via settings \u0026gt; shortcuts \u0026gt; lua\nI use the following shortcuts:\n Reject group: Ctrl+R Rate group 1: Ctrl+1 Rate group 2: Ctrl+2 Rate group 3: Ctrl+3 Rate group 4: Ctrl+4 Rate group 5: Ctrl+5 Rate group 0: Ctrl+0 🔗Additional Software Required 🔗Limitations 🔗Author Dom H - dom@hxy.io\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rate_group/","tags":null,"title":"rate_group"},{"categories":null,"content":"dt_type\nThe type of a UI lib\n🔗dt_lua_lib_t.id string\nA unit string identifying the lib\n🔗dt_lua_lib_t.name string\nThe translated title of the UI element\n🔗dt_lua_lib_t.version number\nThe version of the internal data of this lib\n🔗dt_lua_lib_t.visible boolean\nAllow to make a lib module completely invisible to the user. Note that if the module is invisible the user will have no way to restore it without lua\nAttributes:\n implicit_yield write 🔗dt_lua_lib_t.container types.dt_ui_container_t\nThe location of the lib in the darktable UI\n🔗dt_lua_lib_t.expandable boolean\nTrue if the lib can be expanded/retracted\n🔗dt_lua_lib_t.expanded boolean\nTrue if the lib is expanded\nAttributes:\n write 🔗dt_lua_lib_t.position number\nA value deciding the position of the lib within its container\n🔗dt_lua_lib_t.views table\nA table of all the views that display this widget\n🔗dt_lua_lib_t.reset self:function( ) A function to reset the lib to its default values This function will do nothing if the lib is not visible or can\u0026rsquo;t be reset\n self - types.dt_lua_lib_t - The lib to reset 🔗dt_lua_lib_t.on_screen boolean\nTrue if the lib is currently visible on the screen\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_lib_t/","tags":null,"title":"dt_lua_lib_t"},{"categories":null,"content":"🔗Name rename-tags.lua - rename tags\n🔗Description 🔗Usage In lighttable there is a new entry: \u0026lsquo;rename tag\u0026rsquo; Enter old tag (this one gets deleted!) Enter new tag name 🔗Additional Software Required 🔗Limitations 🔗Author Sebastian Witt - se.witt@gmx.net\nBill Ferguson - wpferguson@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename-tags/","tags":null,"title":"rename_tags"},{"categories":null,"content":"dt_type\nA darktable view\n🔗dt_lua_view_t.id string\nA unique string identifying the view\n🔗dt_lua_view_t.name string\nThe name of the view\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_view_t/","tags":null,"title":"dt_lua_view_t"},{"categories":null,"content":"🔗Name RL_out_sharp.lua - Richardson-Lucy output sharpening using GMic\n🔗Description This script provides a new target storage \u0026ldquo;RL output sharpen\u0026rdquo;. Images exported will be sharpened using GMic (RL deblur algorithm)\n🔗EXAMPLE set sigma = 0.7, iterations = 10, jpeg output quality = 95, to correct blur due to image resize for web usage\n🔗Usage start this script from script manager in lua preferences, select the GMic cli executable from \u0026ldquo;export selected\u0026rdquo;, choose \u0026ldquo;RL output sharpen\u0026rdquo; configure output folder configure RL parameters with sliders configure temp files format and quality, jpg 8bpp (good quality) and tif 16bpp (best quality) are supported configure other export options (size, etc.) export, images will be first exported in the temp format, then sharpened sharpened images will be stored in jpg format in the output folder 🔗Additional Software Required GMic command line interface (CLI) https://gmic.eu/download.shtml\n🔗Limitations MAC compatibility not tested Although Darktable can handle file names containing spaces, GMic cli cannot, so if you want to use this script please make sure that your images do not have spaces in the file name and path\n🔗Author Marco Carrarini - marco.carrarini@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rl_out_sharp/","tags":null,"title":"RL_out_sharp"},{"categories":null,"content":"dt_type\nA lua-managed entry in the backgroundjob lib\n🔗dt_lua_backgroundjob_t.percent number\nThe value of the progress bar, between 0 and 1. will return nil if there is no progress bar, will raise an error if read or written on an invalid job\nAttributes:\n write 🔗dt_lua_backgroundjob_t.valid boolean\nTrue if the job is displayed, set it to false to destroy the entry An invalid job cannot be made valid again\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_backgroundjob_t/","tags":null,"title":"dt_lua_backgroundjob_t"},{"categories":null,"content":"dt_type\nThe description of a snapshot in the snapshot lib\nAttributes:\nhas_tostring\n🔗dt_lua_snapshot_t.filename string\nThe filename of an image containing the snapshot\n🔗dt_lua_snapshot_t.select self:function( ) Activates this snapshot on the display. To deactivate all snapshot you need to call this function on the active snapshot\n self - types.dt_lua_snapshot_t - The snapshot to activate 🔗dt_lua_snapshot_t.name string\nThe name of the snapshot, as seen in the UI\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_snapshot_t/","tags":null,"title":"dt_lua_snapshot_t"},{"categories":null,"content":"🔗Name slideshowMusic.lua - play music during a slideshow\n🔗Description darktable script to play music during a Slideshow\n🔗Usage start this script from script manager 🔗Additional Software Required You need rhythmbox-client installed to use this script\n🔗Limitations 🔗Author Tobias Jakobs\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/slideshowmusic/","tags":null,"title":"slideshowMusic"},{"categories":null,"content":"enum\na hint on the way to encode a webp image\nValues:\n hint_default hint_picture hint_photo hint_graphic ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/hint_t/","tags":null,"title":"hint_t"},{"categories":null,"content":"🔗Name transfer_hierarchy.lua - move or copy image hierarchies from one location to another\n🔗Description Allows the moving or copying of images from one directory tree to another, while preserving the existing hierarchy.\n🔗Usage darktable\u0026rsquo;s native operations for moving and copying images in batches allow only one directory to be specified as the destination for each batch. Those wanting to move or copy images from a hierarchy of directories within darktable while preserving the directory structure, must take the laborious step of performing the operation one individual directory at a time.\nThis module allows the intact moving and copying of whole directory trees. It was designed for the specific use case of rapidly transferring images from a customary source (e.g., a staging directory on the local disk) to a customary destination (e.g., a directory on a NAS device).\n🔗Instructions for operation: Select the set of images you want to copy.\n Click the \u0026ldquo;calculate\u0026rdquo; button. This will calculate the lowest directory in the hierarchy that contains every selected file (i.e., the common prefix of all the images' pathnames), and write its path into the \u0026ldquo;existing root\u0026rdquo; text box.\n If (a) you have specified the \u0026ldquo;customary source root\u0026rdquo; and \u0026ldquo;customary destination root\u0026rdquo; preferences, and (b) the selected images are all contained under the directory specified as the customary source root, then the \u0026ldquo;root of destination\u0026rdquo; text box will also be automatically filled out.\nFor example, suppose that you have specified \u0026lsquo;/home/user/Staging\u0026rsquo; as your customary source root and \u0026lsquo;/mnt/storage\u0026rsquo; as your customary destination root. If all selected images fell under the directory \u0026lsquo;/home/user/Staging/2020/Roll0001\u0026rsquo;, the \u0026ldquo;root of destination\u0026rdquo; would be automatically filled out with \u0026lsquo;/mnt/storage/2020/Roll0001\u0026rsquo;.\nBut if all selected images fall under a directory outside the specified customary source root (e.g., \u0026lsquo;/opt/other\u0026rsquo;), the \u0026ldquo;root of destination\u0026rdquo; text box must be filled out manually.\nIt is also possible to edit the \u0026ldquo;root of destination\u0026rdquo; further once it has been automatically filled out.\n Click the \u0026ldquo;move\u0026rdquo; or \u0026ldquo;copy\u0026rdquo; button.\nBefore moving or copying any images, the module will first replicate the necessary directory hierarchy by creating all destination directories that do not already exist; should a directory creation attempt fail, the operation will be aborted, but any directories already created will not be removed.\nDuring the actual move/copy operation, the module transfers an image by taking its path and replacing the string in the \u0026ldquo;existing root\u0026rdquo; text box with that in the \u0026ldquo;root of destination\u0026rdquo; text box (e.g., \u0026lsquo;/home/user/Staging/2020/Roll0001/DSC_0001.jpg\u0026rsquo; would be transferred to \u0026lsquo;/mnt/storage/2020/Roll0001/DSC_0001.jpg\u0026rsquo;).\n 🔗Additional Software Required 🔗Limitations 🔗Author August Schwerdfeger - august@schwerdfeger.name\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/transfer_hierarchy/","tags":null,"title":"transfer_hierarchy"},{"categories":null,"content":"enum\nA place in the darktable UI where a lib can be placed\nValues:\n DT_UI_CONTAINER_PANEL_LEFT_TOP DT_UI_CONTAINER_PANEL_LEFT_CENTER DT_UI_CONTAINER_PANEL_LEFT_BOTTOM DT_UI_CONTAINER_PANEL_RIGHT_TOP DT_UI_CONTAINER_PANEL_RIGHT_CENTER DT_UI_CONTAINER_PANEL_RIGHT_BOTTOM DT_UI_CONTAINER_PANEL_TOP_LEFT DT_UI_CONTAINER_PANEL_TOP_CENTER DT_UI_CONTAINER_PANEL_TOP_RIGHT DT_UI_CONTAINER_PANEL_CENTER_TOP_LEFT DT_UI_CONTAINER_PANEL_CENTER_TOP_CENTER DT_UI_CONTAINER_PANEL_CENTER_TOP_RIGHT DT_UI_CONTAINER_PANEL_CENTER_BOTTOM_LEFT DT_UI_CONTAINER_PANEL_CENTER_BOTTOM_CENTER DT_UI_CONTAINER_PANEL_CENTER_BOTTOM_RIGHT DT_UI_CONTAINER_PANEL_BOTTOM ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_ui_container_t/","tags":null,"title":"dt_ui_container_t"},{"categories":null,"content":"🔗Name video_ffmpeg.lua - create a timelapse video from selected images\n🔗Description This plugin will add the new export module \u0026ldquo;video ffmpeg\u0026rdquo;.\n🔗Usage Go to Lighttable Select images you want to use as a video ffmpeg frames In image export module select \u0026ldquo;video ffmpeg\u0026rdquo; Configure you video settings Export 🔗Additional Software Required ffmpeg\n🔗Limitations This script has been tested under Linux only\n🔗Author Dominik Markiewicz\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/video_ffmpeg/","tags":null,"title":"video_ffmpeg"},{"categories":null,"content":"enum\nWhich part of the main window is occupied by a snapshot\nValues:\n left right top bottom ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/snapshot_direction_t/","tags":null,"title":"snapshot_direction_t"},{"categories":null,"content":"enum\nJ2K format type\nValues:\n j2k jp2 ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_j2k_format_t/","tags":null,"title":"dt_imageio_j2k_format_t"},{"categories":null,"content":"enum\nJ2K preset type\nValues:\n off cinema2k_24 cinema2k_48 cinema4k_24 ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_j2k_preset_t/","tags":null,"title":"dt_imageio_j2k_preset_t"},{"categories":null,"content":"enum\nType of compression for webp\nValues:\n webp_lossy webp_lossless ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/comp_type_t/","tags":null,"title":"comp_type_t"},{"categories":null,"content":"enum\nThe type of value to save in a preference\nValues:\n enum directory file string bool integer float lua ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_pref_type/","tags":null,"title":"lua_pref_type"},{"categories":null,"content":"enum\nThe type of compression to use for the EXR image\nValues:\n off rle zips zip piz pxr24 b44 b44a ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_exr_compression_t/","tags":null,"title":"dt_imageio_exr_compression_t"},{"categories":null,"content":"🔗Name select_untagged.lua - select all images that aren\u0026rsquo;t tagged\n🔗Description Enable selection of untagged images (darktable|* tags are ignored)\n🔗Usage 🔗Additional Software Required 🔗Limitations 🔗Author Jannis_V\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/select_untagged/","tags":null,"title":"select_untagged"},{"categories":null,"content":"dt_type\nA single rule for filtering a collection\n🔗dt_lib_collect_params_rule_t.mode types.dt_lib_collect_mode_t\nHow this rule is applied after the previous one. Unused for the first rule\nAttributes:\n write 🔗dt_lib_collect_params_rule_t.data string\nThe text segment of the rule. Exact content depends on the type of rule\nAttributes:\n write 🔗dt_lib_collect_params_rule_t.item types.dt_collection_properties_t\nThe item on which this rule filter. i.e the type of the rule\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lib_collect_params_rule_t/","tags":null,"title":"dt_lib_collect_params_rule_t"},{"categories":null,"content":"enum\nThe logical operators to apply between rulesAttributes:\nValues:\n DT_LIB_COLLECT_MODE_AND DT_LIB_COLLECT_MODE_OR DT_LIB_COLLECT_MODE_AND_NOT ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lib_collect_mode_t/","tags":null,"title":"dt_lib_collect_mode_t"},{"categories":null,"content":"enum\nThe different elements on which a collection can be filtered\nValues:\n DT_COLLECTION_PROP_FILMROLL DT_COLLECTION_PROP_FOLDERS DT_COLLECTION_PROP_CAMERA DT_COLLECTION_PROP_TAG DT_COLLECTION_PROP_DAY DT_COLLECTION_PROP_TIME DT_COLLECTION_PROP_IMPORT_TIMESTAMP DT_COLLECTION_PROP_CHANGE_TIMESTAMP DT_COLLECTION_PROP_EXPORT_TIMESTAMP DT_COLLECTION_PROP_PRINT_TIMESTAMP DT_COLLECTION_PROP_HISTORY DT_COLLECTION_PROP_COLORLABEL DT_COLLECTION_PROP_TITLE DT_COLLECTION_PROP_DESCRIPTION DT_COLLECTION_PROP_CREATOR DT_COLLECTION_PROP_PUBLISHER DT_COLLECTION_PROP_RIGHTS DT_COLLECTION_PROP_LENS DT_COLLECTION_PROP_FOCAL_LENGTH DT_COLLECTION_PROP_ISO DT_COLLECTION_PROP_APERTURE DT_COLLECTION_PROP_FILENAME DT_COLLECTION_PROP_GEOTAGGING ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_properties_t/","tags":null,"title":"dt_collection_properties_t"},{"categories":null,"content":"enum\nThe different elements on which a collection can be sorted\nValues:\n DT_COLLECTION_SORT_NONE DT_COLLECTION_SORT_FILENAME DT_COLLECTION_SORT_DATETIME DT_COLLECTION_SORT_RATING DT_COLLECTION_SORT_ID DT_COLLECTION_SORT_COLOR DT_COLLECTION_SORT_GROUP DT_COLLECTION_SORT_PATH DT_COLLECTION_SORT_CUSTOM_ORDER DT_COLLECTION_SORT_TITLE DT_COLLECTION_SORT_DESCRIPTION DT_COLLECTION_SORT_ASPECT_RATIO DT_COLLECTION_SORT_SHUFFLE ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_sort_t/","tags":null,"title":"dt_collection_sort_t"},{"categories":null,"content":"enum\nThe different orders that a collection can be sorted in\nValues:\n DT_COLLECTION_SORT_ORDER_ASCENDING DT_COLLECTION_SORT_ORDER_DESCENDING ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_sort_order_t/","tags":null,"title":"dt_collection_sort_order_t"},{"categories":null,"content":"enum\nThe different elements on which a collection can be filtered\nValues:\n DT_COLLECTION_FILTER_ALL DT_COLLECTION_FILTER_STAR_NO DT_COLLECTION_FILTER_STAR_1 DT_COLLECTION_FILTER_STAR_2 DT_COLLECTION_FILTER_STAR_3 DT_COLLECTION_FILTER_STAR_4 DT_COLLECTION_FILTER_STAR_5 DT_COLLECTION_FILTER_REJECT DT_COLLECTION_FILTER_NOT_REJECT ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_filter_t/","tags":null,"title":"dt_collection_filter_t"},{"categories":null,"content":"enum\nThe different ways in which a collection filter can be compared\nValues:\n DT_COLLECTION_RATING_COMP_LT DT_COLLECTION_RATING_COMP_LEQ DT_COLLECTION_RATING_COMP_EQ DT_COLLECTION_RATING_COMP_GEQ DT_COLLECTION_RATING_COMP_GT DT_COLLECTION_RATING_COMP_NE DT_COLLECTION_RATING_N_COMPS ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_rating_comperator_t/","tags":null,"title":"dt_collection_rating_comperator_t"},{"categories":null,"content":"enum\nA possible orientation for a widget\nValues:\n horizontal vertical ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_orientation_t/","tags":null,"title":"dt_lua_orientation_t"},{"categories":null,"content":"enum\nThe alignment of a label\nValues:\n fill start end center baseline ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_align_t/","tags":null,"title":"dt_lua_align_t"},{"categories":null,"content":"enum\nThe ellipsize mode of a label\nValues:\n none start middle end ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_ellipsize_mode_t/","tags":null,"title":"dt_lua_ellipsize_mode_t"},{"categories":null,"content":"dt_type\nA wrapper around a cairo drawing context. You probably shouldn\u0026rsquo;t use this after the callback that got it passed returned. For more details of the member functions have a look at the cairo documentation for the drawing context, transformations and paths.\n🔗dt_lua_cairo_t.save self:function( ) Save the state of the drawing context.\n self - types.dt_lua_cairo_t - The context to modify. 🔗types.dt_lua_cairo_t.restore self:function( ) Restore a previously saved state.\n self - types.dt_lua_cairo_t - The context to modify. 🔗dt_lua_cairo_t.move_to self:function( x : float, y : float ) Begin a new sub-path.\n self - types.dt_lua_cairo_t - The context to modify x - float - The x coordinate of the new position. y - float - The y coordinate of the new position. 🔗dt_lua_cairo_t.line_to self:function( x : float, y : float ) Add a line to the path.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x coordinate of the end of the new line. y - float - The y coordinate of the end of the new line. 🔗types.dt_lua_cairo_t.rectangle self:function( x : float, y : float, width : float, height : float ) Add a closed sub-path rectangle.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x coordinate of the top left corner of the rectangle. y - float - The y coordinate of the top left corner of the rectangle. width - float - The width of the rectangle. height - float - The height of the rectangle. 🔗dt_lua_cairo_t.arc self:function( x : float, y : float, radius : float, angle1 : float, angle2 : float ) Add a circular arc.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x position of the center of the arc. y - float - The y position of the center of the arc. radius - float - The radius of the arc. angle1 - float - The start angle, in radians. angle2 - float - The end angle, in radians. 🔗dt_lua_cairo_t.arc_negative self:function( x : float, y : float, radius : float, angle1 : float, angle2 : float ) Add a circular arc. It only differs in the direction from types.dt_lua_cairo_t.arc.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x position of the center of the arc. y - float - The y position of the center of the arc. radius - float - The radius of the arc. angle1 - float - The start angle, in radians. angle2 - float - The end angle, in radians. 🔗dt_lua_cairo_t.rotate self:function( angle : float ) Add a rotation to the transformation matrix.\n self - types.dt_lua_cairo_t - The context to modify. angle - float - The angle (in radians) by which the user-space axes will be rotated. 🔗dt_lua_cairo_t.scale self:function( x : float, y : float ) Add a scaling to the transformation matrix.\nself** - _types.dt_lua_cairo_t_ - The context to modify.\n x - float - The scale factor for the x dimension. y - float - The scale factor for the y dimension. 🔗dt_lua_cairo_t.translate self:function( x : float, y : float ) Add a translation to the transformation matrix.\n self - types.dt_lua_cairo_t - The context to modify. x - float - Amount to translate in the x direction y - float - Amount to translate in the y direction 🔗dt_lua_cairo_t.new_sub_path self:function( ) Begin a new sub-path.\n self - types.dt_lua_cairo_t - The context to modify. 🔗dt_lua_cairo_t.draw_line self:function( x_start : float, y_start : float, x_end : float, y_end : float ) Helper function to draw a line with a given start and end.\n self - types.dt_lua_cairo_t - The context to modify. x_start - float - The x coordinate of the start of the new line. y_start - float - The y coordinate of the start of the new line. x_end - float - The x coordinate of the end of the new line. y_end - float - The y coordinate of the end of the new line. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_cairo_t/","tags":null,"title":"dt_lua_cairo_t"},{"categories":null,"content":"enum\nThe different user interface panels\nValues:\n DT_UI_PANEL_TOP DT_UI_PANEL_CENTER_TOP DT_UI_PANEL_CENTER_BOTTOM DT_UI_PANEL_LEFT DT_UI_PANEL_RIGHT DT_UI_PANEL_BOTTOM DT_UI_PANEL_SIZE ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_ui_panel_t/","tags":null,"title":"dt_ui_panel_t"},{"categories":null,"content":"enum\nThe different lighttable layouts\nValues:\n DT_LIGHTTABLE_LAYOUT_FIRST DT_LIGHTTABLE_LAYOUT_ZOOMABLE DT_LIGHTTABLE_LAYOUT_FILEMANAGER DT_LIGHTTABLE_LAYOUT_CULLING DT_LIGHTTABLE_LAYOUT_LAST ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lighttable_layout_t/","tags":null,"title":"dt_lighttable_layout_t"},{"categories":null,"content":"dt_type\nCommon parent type for all lua-handled widgets\nAttributes:\n has_tostring 🔗lua_widget.extra registration parameters This widget has no extra registration parameters\n🔗lua_widget.name Lua API 6.2.0\nstring or nil\nName assigned to the widget for CSS styling purposes.\nAttributes:\n write 🔗lua_widget.sensitive boolean\nSet if the widget is enabled/disabled\nAttributes:\n write 🔗lua_widget.tooltip string or nil\nTooltip to display for the widget\nAttributes:\n write 🔗lua_widget.reset_callback function( widget : types.lua_widget ) A function to call when the widget needs to reset itself. Note that some widgets have a default implementation that can be overridden, (containers in particular will recursively reset their children). If you replace that default implementation you need to reimplement that functionality or call the original function within your callback.\nAttributes:\n write\n widget - types.lua_widget - The widget that triggered the callback\n 🔗lua_widget.As a function function( attributes : table ) : types.lua_widget Using a lua widget as a function Allows to set multiple attributes of that widget at once. This is mainly used to create UI elements in a more readable way.\nFor example:\nlocal widget = dt.new_widget(\u0026quot;button\u0026quot;){ label =\u0026quot;my label\u0026quot;, clicked_callback = function() print \u0026quot;hello world\u0026quot; end } attributes - table - A table of attributes =\u0026gt; value to set return - types.lua_widget - The object called itself, to allow chaining ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_widget/","tags":null,"title":"lua_widget"},{"categories":null,"content":"dt_type\nA widget containing other widgets\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_container.__call see types.lua_widget.As a function\n🔗lua_container.extra registration parameters This widget has no extra registration parameters\n🔗lua_container.# types.lua_widget\nThe widgets contained by the box. You can append widgets by adding them at the end of the list. You can remove widgets by setting them to nil.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_container/","tags":null,"title":"lua_container"},{"categories":null,"content":"dt_type\nA checkable button with a label next to it Attributes:\n has_tostring parent : types.lua_widget 🔗lua_check_button.__call see types.lua_widget.As a function\n🔗lua_check_button.extra registration parameters This widget has no extra registration parameters\n🔗lua_check_button.label string\nThe label displayed next to the button\nAttributes:\n write 🔗lua_check_button.value boolean\nIf the widget is checked or not\nAttributes:\n write 🔗lua_check_button.clicked_callback function( widget : types.lua_widget ) A function to call on button click\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_check_button/","tags":null,"title":"lua_check_button"},{"categories":null,"content":"dt_type\nA label containing some text\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_label.__call see types.lua_widget.As a function\n🔗lua_label.extra registration parameters This widget has no extra registration parameters\n🔗lua_label.label string\nThe label displayed\nAttributes:\n write 🔗lua_label.selectable boolean\nTrue if the label content should be selectable\nAttributes:\n write 🔗lua_label.halign types.dt_lua_align_t\nThe horizontal alignment of the label\nAttributes:\n write 🔗lua_label.ellipsize types.dt_lua_ellipsize_mode_t\nThe ellipsize mode of the label\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_label/","tags":null,"title":"lua_label"},{"categories":null,"content":"dt_type\nA clickable button\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_button.__call see types.lua_widget.As a function\n🔗lua_button.extra registration parameters This widget has no extra registration parameters\n🔗lua_button.label string\nThe label displayed on the button\nAttributes:\n write 🔗lua_button.ellipsize types.dt_lua_ellipsize_mode_t\nThe ellipsize mode of the button label\nAttributes:\n write 🔗lua_button.clicked_callback function( widget : types.lua_widget ) A function to call on button click\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_button/","tags":null,"title":"lua_button"},{"categories":null,"content":"dt_type\nA container for widget in a horizontal or vertical list\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_box.__call see types.lua_widget.As a function\n🔗lua_box.extra registration parameters This widget has no extra registration parameters\n🔗lua_box.orientation types.dt_lua_orientation_t\nThe orientation of the box.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_box/","tags":null,"title":"lua_box"},{"categories":null,"content":"dt_type\nA widget in which the user can input text\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_entry.__call see types.lua_widget.As a function\n🔗lua_entry.extra registration parameters This widget has no extra registration parameters\n🔗lua_entry.text string\nThe content of the entry\nAttributes:\n write 🔗lua_entry.placeholder string\nThe text to display when the entry is empty\nAttributes:\n write 🔗lua_entry.is_password boolean\nTrue if the text content should be hidden\nAttributes:\n write 🔗lua_entry.editable boolean\nFalse if the entry should be read-only\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_entry/","tags":null,"title":"lua_entry"},{"categories":null,"content":"dt_type\nA widget providing a separation in the UI.\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_separator.__call see types.lua_widget.As a function\n🔗lua_separator.extra registration parameters This widget has no extra registration parameters\n🔗lua_separator.orientation string\nThe orientation of the separator.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_separator/","tags":null,"title":"lua_separator"},{"categories":null,"content":"dt_type\nA widget with multiple text entries in a menu. This widget can be set as editable at construction time. If it is editable the user can type a value and is not constrained by the values in the menu.\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_combobox.__call see types.lua_widget.As a function\n🔗lua_combobox.extra registration parameters This widget has no extra registration parameters\n🔗lua_combobox.value string\nThe text content of the selected entry, can be nil. You can set it to a number to select the corresponding entry from the menu. If the combobox is editable, you can set it to any string. You can set it to nil to deselect all entries.\nAttributes:\n write 🔗lua_combobox.selected integer\nThe index of the selected entry, or 0 if nothing is selected. You can set it to a number to select the corresponding entry from the menu, or to 0 to select nothing. You can set it to nil to deselect all entries.\nAttributes:\n write 🔗lua_combobox.# string\nThe various menu entries. You can add new entries by writing to the first element beyond the end. You can removes entries by setting them to nil.\nAttributes:\n write 🔗lua_combobox.changed_callback function( widget : types.lua_widget ) A function to call when the value field changes (character entered or value selected)\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write 🔗lua_combobox.editable boolean\nTrue is the user is allowed to type a string in the combobox\nAttributes:\n write 🔗lua_combobox.label string\nThe label displayed on the combobox\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_combobox/","tags":null,"title":"lua_combobox"},{"categories":null,"content":"dt_type\nA button that allows the user to select an existing file\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_file_chooser_button.__call see types.lua_widget.As a function\n🔗lua_file_chooser_button.extra registration parameters This widget has no extra registration parameters\n🔗lua_file_chooser_button.title string\nThe title of the window when choosing a file\nAttributes:\n write 🔗lua_file_chooser_button.value string\nThe currently selected file\nAttributes:\n write 🔗lua_file_chooser_button.changed_callback function( widget : types.lua_widget ) A function to call when the value field changes (character entered or value selected)\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write 🔗lua_file_chooser_button.is_directory boolean\nTrue if the file chooser button only allows directories to be selected\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_file_chooser_button/","tags":null,"title":"lua_file_chooser_button"},{"categories":null,"content":"dt_type\nA container that will only show one of its child at a time\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_stack.__call see types.lua_widget.As a function\n🔗lua_stack.extra registration parameters This widget has no extra registration parameters\n🔗lua_stack.active types.lua_widget or nil\nThe currently selected child, can be nil if the container has no child, can be set to one of the child widget or to an index in the child table\nAttributes:\n write 🔗lua_stack.h_size_fixed boolean\nTrue if horizontal size is fixed, false if stack can be resized horizontally.\nAttributes:\n write 🔗lua_stack.v_size_fixed boolean\nTrue if vertical size is fixed, false if stack can be resized vertically.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_stack/","tags":null,"title":"lua_stack"},{"categories":null,"content":"dt_type\nA slider that can be set by the user\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_slider.__call see types.lua_widget.As a function\n🔗lua_slider.extra registration parameters This widget has no extra registration parameters\n🔗lua_slider.soft_min number\nThe soft minimum value for the slider, the slider can\u0026rsquo;t go beyond this point\nAttributes:\n write 🔗lua_slider.soft_max number\nThe soft maximum value for the slider, the slider can\u0026rsquo;t go beyond this point\nAttributes:\n write 🔗lua_slider.hard_min number\nThe hard minimum value for the slider, the user can\u0026rsquo;t manually enter a value beyond this point Attributes:\n write 🔗lua_slider.hard_max number\nThe hard maximum value for the slider, the user can\u0026rsquo;t manually enter a value beyond this point\nAttributes:\n write 🔗lua_slider.step number\nThe step width of the slider\nAttributes:\n write 🔗lua_slider.digits integer\nThe number of decimal digits shown on the slider\nAttributes:\n write 🔗lua_slider.value number\nThe current value of the slider\nAttributes:\n write 🔗lua_slider.label string\nThe label next to the slider\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_slider/","tags":null,"title":"lua_slider"},{"categories":null,"content":"dt_type\nA multiline text input widget\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_text_view.__call see types.lua_widget.As a function\n🔗lua_text_view.extra registration parameters This widget has no extra registration parameters\n🔗lua_text_view.text string\nThe text in the widget\nAttributes:\n write 🔗lua_text_view.editable boolean\nFalse if the entry should be read-only\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_text_view/","tags":null,"title":"lua_text_view"},{"categories":null,"content":"dt_type\nA section label\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_section_label.__call see types.lua_widget.As a function\n🔗types.lua_section_label.extra registration parameters This widget has no extra registration parameters\n🔗lua_section_label.label string\nThe section name\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_section_label/","tags":null,"title":"lua_section_label"},{"categories":null,"content":"","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/search/","tags":null,"title":"Search"}] \ No newline at end of file +[{"categories":null,"content":"🔗Name api_version.lua - show the Lua API version\n🔗Description darktable script to show the Lua API version in the preferences\n🔗Usage start this script from script manager. darktable must be running in lua debug mode in a terminal to see the output. 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/api_version/","tags":null,"title":"api_version"},{"categories":null,"content":"🔗Name AutoGrouper.lua - automatically group images based on time\n🔗Description This plugin groups images based on the time they were shot. Images shot close together in time are grouped together. The interval of time to separate groups is configurable.\n🔗Usage Start the module using script manager.\nSet a gap amount, in seconds, which will be used to determine when images should no longer be added to a group. If an image is more then the specified amount of time from the last image in the group it will not be added. Images without timestamps in exif data will be ignored.\nThere are two buttons. One allows the grouping to be performed only on the currently selected images, the other button performs grouping on the entire active collection\n🔗Additional Software Required 🔗Limitations 🔗Author Kevin Ertel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autogrouper/","tags":null,"title":"AutoGrouper"},{"categories":null,"content":"🔗Name check_for_updates.lua - automatically check for updates\n🔗Description a simple script that will automatically look for newer releases on github and inform when there is something. it will only check on startup and only once a week.\n🔗Usage install luasec and cjson for Lua 5.3 on your system. Luarocks is a good source for lua packages. start this script from script manager restart darktable 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/check_for_updates/","tags":null,"title":"check_for_updates"},{"categories":null,"content":"🔗NAME dtutils.debug\n🔗SYNOPSIS debugging helpers used in developing darktable lua scripts\n🔗USAGE require \u0026quot;lib/dtutils.debug\u0026quot; 🔗DESCRIPTION dtutils.debug provides an interface to the darktable debugging routines.\n🔗RETURN VALUE dd - library - the darktable lua debugging helpers\n🔗FUNCTIONS 🔗dprint pass a variable to darktable.debug.dump and print the results to stdout\n🔗new_tracepoint create a function returning a tracepoint\n🔗terse_dump set darktable.debug.known to shorten all image dumps to a single line\n🔗tracepoint print out a tracepoint and dump the arguments\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗NAME details\n🔗SYNOPSIS common darktable lua file functions\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; 🔗DESCRIPTION The dtutils.file library provides common file manipulation functions used in constructing darktable lua scripts\n🔗RETURN VALUE df - library - the file functions\n🔗FUNCTIONS 🔗check_if_bin_exists check if an executable exists\n🔗check_if_file_exists check if a file or path exist\n🔗chop_filetype remove a filetype from a filename\n🔗create_unique_filename create a unique filename from the supplied argment\n🔗executable_path_widget create a widget to get executable path preferences\n🔗file_copy copy a file to another name/location\n🔗file_move move a file from one directory to another\n🔗filename_increment add a two digit increment to a filename\n🔗get_basename get the filename without the path or extension\n🔗get_executable_path_preference return the path to an executable from a preference\n🔗get_filename get the filename and extension from a file path\n🔗get_filetype get the filetype from a filename\n🔗get_path get the path from a file path\n🔗mkdir create the directory(ies) if they do not already exists\n🔗rmdir recursively remove a directory\n🔗sanitize_filename make a filename safe to pass as an argument\n🔗set_executable_path_preference set a preference for the path to an executable\n🔗split_filepath split a filepath into parts\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗NAME dtutils.log\n🔗SYNOPSIS darktable lua logging library\n🔗USAGE local log = require \u0026quot;lib/dtutils.log\u0026quot; 🔗DESCRIPTION log provides a multi-level logging solution for use with the darktable lua scripts. With this library you can leave log messages scattered through out your code and only turn them on as necessary.\n🔗RETURN VALUE log - library - the darktable lua logging functions\n🔗FUNCTIONS 🔗caller get the name and line number of the calling routine\n🔗engine get and set the output engine\n🔗log_level get or set the log level\n🔗msg print a log message\n🔗EXAMPLE local log = require \u0026quot;lib/dtutils.log\u0026quot; local cur_level = log.log_level() log.log_level(log.warn) print out warning, error and success messages as code is running\nlog.log_level(debug) print out debugging messages too because this isnt working\nlog.log_level(info) I want to make sure this is working ok\nlog.log_level(cur_level) reset the logging level back to normal\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗DTUTILS.STRING 🔗NAME dtutils.string\n🔗SYNOPSIS a library of string utilities for use in darktable lua scripts\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; 🔗DESCRIPTION This library contains string manipulation routines to aid in building darktable lua scripts.\n🔗RETURN VALUE ds - library - the darktable lua string library\n🔗FUNCTIONS 🔗escape_xml_characters escape characters for xml documents\n🔗is_not_sanitized check if a string has been sanitized\n🔗sanitize surround a string in quotes making it safe to pass as an argument\n🔗sanitize_lua escape lua \u0026lsquo;magic\u0026rsquo; characters from a pattern string\n🔗strip_accents strip accents from characters\n🔗urlencode encode a string in a websafe manner\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗DTUTILS.SYSTEM 🔗NAME dtutils.system\n🔗SYNOPSIS a library of system utilities for use in darktable lua scripts\n🔗USAGE local dtsys = require \u0026quot;lib/dtutils.system\u0026quot; 🔗DESCRIPTION This library contains routines for interfacing to the operating system from darktable lua scripts.\n🔗RETURN VALUE dtsys - library - the darktable lua system library\n🔗FUNCTIONS 🔗external_command pass a command to the operating system for execution and return the result\n🔗launch_default_app open file in default application\n🔗windows_command pass a command to the windows operating system for execution and return the result\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗NAME dtutils\n🔗SYNOPSIS A Darktable lua utilities library\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; 🔗DESCRIPTION dtutils provides a common library of functions used to build lua scripts.\n🔗RETURN VALUE du- library - the library of functions\n🔗FUNCTIONS 🔗check_min_api_version check the minimum required api version against the current api version\n🔗check_os check that the operating system is supported\n🔗join join a table of strings with a specified separator\n🔗prequire a protected lua require\n🔗spairs an iterator that provides sorted pairs from a table\n🔗split split a string on a specified separator\n🔗SEE ALSO dtutils.debug, dtutils.file, dtutils.log, dtutils.string, dtutils.system\n🔗LICENSE This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.\n🔗COPYRIGHT Copyright (C) 2016 Bill Ferguson wpferguson@gmail.com.\nCopyright (C) 2016 Tobias Jakobs\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/details/","tags":null,"title":"details"},{"categories":null,"content":"🔗Name executable_manager.lua - a tool for managing external executables used by darktable lua scripts\n🔗Description executable_manager is a tool for managing the executable preferences stored in the darktablerc file. On startup the darktablerc file is scanned and a widget is built for each executable path. The user can select the executable from a drop down list and then modify the settings as desired.\nAny changes made using executable_manager won\u0026rsquo;t be saved in the darktablerc file until darktable exits, but the preference is updated when the change is made so scripts will pick up the changes without restarting darktable.\n🔗Usage start this script from script manager 🔗Additional Software Required None\n🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/executable_manager/","tags":null,"title":"executable_manager"},{"categories":null,"content":"🔗Current API The Lua API version currently used in darktable 3.4 is 6.1.0.\n🔗Development API The Lua API is currently at version 6.2.0 in the development branch of darktable (currently 3.5). All changes for version 6.2.0 will be identified as such until version 6.2.0 is included in a darktable release.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/version/","tags":null,"title":"Lua API Version"},{"categories":null,"content":"The darktable library is the main entry point for all access to the darktable internals. To access the darktable specific functions you must load the darktable environment:\ndarktable = require \u0026quot;darktable\u0026quot;\nAll functions and data are accessed through the darktable module.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/overview/","tags":null,"title":"overview"},{"categories":null,"content":"This section documents events that can be used to trigger Lua callbacks.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/overview/","tags":null,"title":"overview"},{"categories":null,"content":"This section documents types that are specific to darktable\u0026rsquo;s Lua API.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/overview/","tags":null,"title":"overview"},{"categories":null,"content":"darktable can be customized and extended using the Lua programming language. The lua-scripts repository contains the collected efforts of the darktable developers, maintainers, contributors and community.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/overview/","tags":null,"title":"overview"},{"categories":null,"content":"darktable can be customized and extended using the Lua programming language. The lua-scripts 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.\n🔗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.\n Name Standalone Op/Sys Purpose check_for_updates Yes LMW Check for updates to darktable copy_paste_metadata Yes LMW Copy and paste metadata, tags, ratings, and color labels between images delete_long_tags Yes LMW Delete all tags longer than a specified length delete_unused_tags Yes LMW Delete tags that have no associated images enfuse No L Exposure blend several images (HDR) generate_image_txt No L Generate txt sidecar files to be overlaid on zoomed images image_path_in_ui Yes LMW Plugin to display selected image path import_filter_manager Yes LMW Manager for import filters import_filters No LMW Two import filters for use with import_filter_manager save_selection Yes LMW Provide save and restore from multiple selection buffers selection_to_pdf No L Generate a PDF file from the selected images 🔗Contributed Scripts These scripts are contributed by users. They are meant to have an \u0026ldquo;owner\u0026rdquo;, 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.\n Name Standalone Op/Sys Purpose AutoGrouper Yes LMW Group images together by time autostyle Yes LMW Automatically apply styles on import clear_GPS Yes LMW Reset GPS information for selected images CollectHelper Yes LMW Add buttons to selected images module to manipulate the collection copy_attach_detach_tags Yes LMW Copy and paste tags from/to images cr2hdr Yes L Process image created with Magic Lantern Dual ISO enfuseAdvanced No LMW Merge multiple images into Dynamic Range Increase (DRI) or Depth From Focus (DFF) images exportLUT Yes LMW Create a LUT from a style and export it ext_editor No LW Export pictures to collection and edit them with up to nine user-defined external editors face_recognition No LM Identify and tag images using facial recognition fujifilm_ratings No LM Support importing Fujifilm ratings geoJSON_export No L Create a geo JSON script with thumbnails for use in \u0026hellip; geoToolbox No LMW A toolbox of geo functions gimp No LMW Open an image in GIMP for editing and return the result gpx_export No LMW Export a GPX track file from selected images GPS data HDRMerge No LMW Combine the selected images into an HDR DNG and return the result hugin No LMW Combine selected images into a panorama and return the result image_stack No LMW Combine a stack of images to remove noise or transient objects image_time Yes LMW Adjust the EXIF image time kml_export No L Export photos with a KML file for usage in Google Earth LabelsToTags Yes LMW Apply tags based on color labels and ratings OpenInExplorer No LMW Open the selected images in the system file manager passport_guide Yes LMW Add passport cropping guide to darkroom crop tool pdf_slideshow No LM Export images to a PDF slideshow photils No LM Automatic tag suggestions for your images quicktag.md Yes LMW Create shortcuts for quickly applying tags rate_group Yes LMW Apply or remove a star rating from grouped images rename-tags Yes LMW Change a tag name RL_out_sharp No LW Output sharpening using GMic (Richardson-Lucy algorithm) select_untagged Yes LMW Enable selection of untagged images slideshowMusic No L Play music during a slideshow transfer_hierarchy Yes LMW Image move/copy preserving directory hierarchy video_ffmpeg No LMW Export 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.\n Name Standalone Op/Sys Purpose api_version Yes LMW Print the current API version darkroom_demo Yes LMW Demonstrate changing images in darkoom gettextExample Yes LM How to use translation hello_world Yes LMW Prints hello world when darktable starts lighttable_demo Yes LMW Demonstrate controlling lighttable mode, zoom, sorting and filtering moduleExample Yes LMW How to create a lighttable module multi_os No LMW How to create a cross platform script that calls an external executable panels_demo Yes LMW Demonstrate hiding and showing darktable panels preferenceExamples Yes LMW How to use preferences in a script printExamples Yes LMW How to use various print functions from a script running_os Yes LMW Print out the running operating system 🔗Tools Tool scripts perform functions relating to the repository, such as generating documentation. They are located in the tools/ directory.\n Name Standalone Op/Sys Purpose executable_manager Yes LMW Manage the external executables used by the lua scripts gen_i18n_mo No LMW Generate compiled translation files (.mo) from source files (.po) get_lib_manpages No LM Retrieve the library documentation and output it in man page and PDF format get_libdoc No LMW Retrieve the library documentation and output it as text script_manager No LMW Manage (install, update, enable, disable) the lua scripts ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/overview/","tags":null,"title":"overview"},{"categories":null,"content":"🔗Name autostyle.lua - automatically apply a given style when an exif tag is present in the image file\n🔗Description Automatically apply a given style when an exif tag is present in the file. This tags are checked with exiftool, in order to be able to match very exotic tags. This was written to be able to apply a style to compensate for Auto-DR from Fujifilm cameras.\n🔗Usage Set the exif configuration string in your lua configuration. For instance, AutoDynamicRange=200%=\u0026gt;DR200 means that I automatically want to apply my DR200 style on all images where exiftool returns \u0026ldquo;200%\u0026rdquo;\u0026quot; for the AutoDynamicRange tag\n If you want to be able to apply it to already imported images, define a shortcut (lua shortcuts). If the history stack is removed from the image, autostyle won\u0026rsquo;t be applied again. This shortcut useful when that happens.\n Import your images, or use the shortcut on already imported images\n To determine which tag you want, list all tags with exiftool: exiftool -j XE021351.RAF, and find the one you want to use. You can check tags with\n\u0026gt; exiftool -AutoDynamicRange XE021351.RAF Auto Dynamic Range : 200% 🔗Additional Software Required exiftool 🔗Limitations 🔗Author Marc Cousin - cousinmarc@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/autostyle/","tags":null,"title":"autostyle"},{"categories":null,"content":"🔗NAME caller\n🔗SYNOPSIS get the name and line number of the calling routine\n🔗USAGE local log = require \u0026quot;lib/dtutils.log\u0026quot; result = log.caller(level) level - number - the number of stack levels to go down to retrieve the caller routine information\n🔗DESCRIPTION caller gets the name and line number of the calling routine and returns it\n🔗RETURN VALUE result - string - the name and line number of the calling function or \u0026lsquo;callback: ' if the attempt to get the caller returns nil\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/caller/","tags":null,"title":"caller"},{"categories":null,"content":"🔗NAME check_if_bin_exists\n🔗SYNOPSIS check if an executable exists\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.check_if_bin_exists(bin) bin - string - the binary to check for\n🔗DESCRIPTION check_if_bin_exists checks to see if the specified binary exists. check_if_bin_exists looks for an executable in the following order:\n If an executable preference is registered, then it\u0026rsquo;s checked to make sure it\u0026rsquo;s a file, exists, and is executable. If it passes all these tests it is returned to the caller. On non-windows operating systems a windows binary can be specified and the wine installation will be checked for the executable.\n If an executable preference doesn\u0026rsquo;t exist or a test fails then an attempt is made to find the file in an operating system specific manner:\n unix or linux the user\u0026rsquo;s path is checked for a matching binrary using the which command macos first the user\u0026rsquo;s path is checked for a matching binrary using the which command if the executable isn\u0026rsquo;t found a search of the /Applications directory is performed windows the user\u0026rsquo;s path is checked using the where command if the executable isn\u0026rsquo;t found, then C:\\Program Files is searched for the executable if the executable isn\u0026rsquo;t found, then C:\\Program Files (x86) is searched 🔗RETURN VALUE result - string - the sanitized path of the binary, false if not found\n🔗LIMITATIONS it still can\u0026rsquo;t find GIMP on windows. GIMP on windows is installed in C:\\Program Files\\GIMP 2\\bin\\gimp-2.10.exe, if you use the installer from www.gimp.org. When check_if_bin_exists searches for GIMP it looks for gimp.exe. If the search was for gimp*exe then things like gimptool, gimp-debug-tool, gimp-console, etc. are found. Depending on who packaged gimp,there is an executable called gimp.exe which satisfies the search but is a GIMP launcher that exits immediately so the script returns and the image is not edited. Therefore, if you are a windows user, then you need to specify the location of the GIMP executable either from the Edit with GIMP script or using executable manager.\n flickering windows - on windows every command must run in a window, so every time a script uses a system command a window is opened, the command is run, and the window is closed checking for a binary needs multiple system commands to find the file and then check it which causes \u0026ldquo;flickering windows\u0026rdquo;. If the flickering windows is too disturbing a lua preference is available in the settings to use the old check_if_bin_exists(). The old check_if_bin_exists() still causes flickering windows but it\u0026rsquo;s much less. The downside is that no searching is performed so the user has to specify the location of all executables.\n 🔗CHANGELOG 20201225 - Added search capability and file checking to ensure it\u0026rsquo;s an executable - Merry Christmas\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/check_if_bin_exists/","tags":null,"title":"check_if_bin_exists"},{"categories":null,"content":"🔗NAME check_min_api_version\n🔗SYNOPSIS check the minimum required application programming interface (API) version against the current API version\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.check_min_api_version(min_api, script_name) min_api - string - the API version that the application was written for (example: \u0026ldquo;5.0.0\u0026rdquo;)\nscript_name - string - the name of the script\n🔗DESCRIPTION check_min_api_version compares the minimum API required for the application to run against the current API version. The minimum API version is typically the API version that was current when the application was created. If the minimum API version is not met, then an error message is printed saying the script_name failed to load, then an error is thrown causing the program to stop executing.\nThis function is intended to replace darktable.configuration.check_version(). The application code won\u0026rsquo;t have to be updated each time the API changes because this only checks the minimum version required.\n🔗RETURN VALUE result - boolean - true if the minimum API version is available, false if not.\n🔗LIMITATIONS When using the default handler on a script being executed from the luarc file, the error thrown will stop the luarc file from executing any remaining statements. This limitation does not apply to script_manger.\n🔗EXAMPLE check_min_api_version(\u0026quot;5.0.0\u0026quot;) does nothing if the API is greater than or equal to 5.0.0 otherwise an error message is printed and an error is thrown stopping execution of the script.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/check_min_api_version/","tags":null,"title":"check_min_api_version"},{"categories":null,"content":"🔗Name copy_paste_metadata.lua - copy and paste metadata between images\n🔗Description This script adds keyboard shortcuts and buttons to copy/paste metadata between images.\n🔗Usage start this script from script manager it adds buttons to the selected images module it adds two keyboard shortcuts 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/copy_paste_metadata/","tags":null,"title":"copy_paste_metadata"},{"categories":null,"content":"🔗Name darkroom_demo - an example script demonstrating how to control image display in darkroom mode\n🔗Description darkroom_demo is an example script showing how to control the currently displayed image in darkroom mode using lua.\n🔗Usage start this script from script manager 🔗Additional Software Required None\n🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/darkroom_demo/","tags":null,"title":"darkroom_demo"},{"categories":null,"content":"function( message : string ) Will print a string to the darktable control log (the long overlaid window that appears over the main panel).\n message - string - The string to display which should be a single line. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.print/","tags":null,"title":"darktable.print"},{"categories":null,"content":"🔗NAME dprint\n🔗SYNOPSIS pass a variable to darktable.debug.dump and print the results to stdout\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; dd.dprint(var) var - variable - any variable that you want to see the contents of\n🔗DESCRIPTION dprint is a wrapper around darktable.debug.dump, will directly print to stdout, same calling convention\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/dprint/","tags":null,"title":"dprint"},{"categories":null,"content":"🔗NAME escape_xml_characters\n🔗SYNOPSIS escape characters for xml documents\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.escape_xml_characters(str) str - string - the string that needs escaped\n🔗DESCRIPTION escape_xml_characters provides the escape sequences for\n\u0026quot;\u0026amp;\u0026quot;, '\u0026quot;', \u0026quot;'\u0026quot;, \u0026quot;\u0026lt;\u0026quot;, and \u0026quot;\u0026gt;\u0026quot; with the corresponding\n\u0026quot;\u0026amp;amp;\u0026quot;,\u0026quot;\u0026amp;quot;\u0026quot;, \u0026quot;\u0026amp;apos;\u0026quot;, \u0026quot;\u0026amp;lt;\u0026quot;, and \u0026quot;\u0026amp;gt;\u0026quot; .\n🔗RETURN VALUE result - string - the string containing escapes for the xml characters\n🔗REFERENCE https://stackoverflow.com/questions/1091945/what-characters-do-i-need-to-escape-in-xml-documents\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/escape_xml_characters/","tags":null,"title":"escape_xml_characters"},{"categories":null,"content":"🔗NAME external_command\n🔗SYNOPSIS pass a command to the operating system for execution and return the result\n🔗USAGE local dsys = require \u0026quot;lib/dtutils.system\u0026quot; local result = dsys.external_command(command) command - string - a string containing the command and arguments to be passed to the operating system for execution.\n🔗DESCRIPTION external_command passes a command to the operating system for execution and returns the results.\n🔗RETURN VALUE result - number = the return value signalling success or failure.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/external_command/","tags":null,"title":"external_command"},{"categories":null,"content":"🔗Name gen_i18n_mo - generate translation files from the source and place them in the appropriate locale directory\n🔗Description gen_i18n_mo finds all the .po files scattered throughout the script tree, compiles them into .mo files and places them in the correct locale directory for use by the gettext tools.\n🔗Usage start this script from script manager. Stop the script after it runs or it will regenerate the translation files each time darktable starts. 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/gen_i18n_mo/","tags":null,"title":"gen_i18n_mo"},{"categories":null,"content":"🔗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.\n🔗snap packages The snap version of darktable comes with lua included starting with version 2.4.3snap2.\nEnsure git is installed on your system. If it isn\u0026rsquo;t, use the package manager to install it. Then open a terminal and:\ncd ~/snap/darktable/current git clone https://github.com/darktable-org/lua-scripts.git lua 🔗flatpak packages Flatpak packages now use the internal lua interpreter.\nEnsure git is installed on your system. If it isn\u0026rsquo;t, use the package manager to install it. Then open a terminal and:\ncd ~/.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\u0026rsquo;t have access to a lua interpreter, therefore the scripts can\u0026rsquo;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.\n🔗Linux and MacOS Ensure git is installed on your system. If it isn\u0026rsquo;t, use the package manager to install it. Then open a terminal and:\ncd ~/.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:\ncd %LOCALAPPDATA%\\darktable git clone https://github.com/darktable-org/lua-scripts.git lua If you don\u0026rsquo;t have %LOCALAPPDATA%\\darktable you have to start dartable at least once, because the directory is created at the first start of darktable.\n🔗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 \u0026quot;\u0026lt;directory\u0026gt;/\u0026lt;name\u0026gt;\u0026quot; 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 \u0026quot;contrib/gimp\u0026quot;.\nThe recommended way to enable and disable specific scripts is using the script manager module. To use script manager do the following:\n🔗Linux or MacOS echo 'require \u0026quot;tools/script_manager\u0026quot;' \u0026gt; ~/.config/darktable/luarc 🔗Windows echo \u0026quot;require 'tools/script_manager'\u0026quot; \u0026gt; %LOCALAPPDATA%\\darktable\\luarc 🔗Snap echo 'require \u0026quot;tools/script_manager\u0026quot;' \u0026gt; ~/snap/darktable/current/luarc 🔗Flatpak echo require \u0026quot;tools/script_manager\u0026quot;' \u0026gt; ~/.var/app/org.darktable.Darktable/config/darktable/luarc You can also create or add lines to the luarc file from the command line:\necho 'require \u0026quot;contrib/gimp\u0026quot;' \u0026gt; ~/.config/darktable/luarc to create the file with a gimp entry\nor echo 'require \u0026quot;contrib/hugin\u0026quot;' \u0026gt;\u0026gt; ~/.config/darktable/luarc to add an entry for hugin.\nOn windows from a command prompt:\necho require \u0026quot;contrib/gimp\u0026quot; \u0026gt; %LOCALAPPDATA%\\darktable\\luarc to create the file with a gimp entry\nor echo require \u0026quot;contrib/hugin\u0026quot; \u0026gt;\u0026gt; %LOCALAPPDATA%\\darktable\\luarc to add an entry for hugin.\n🔗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.\n🔗Updating To update the script repository, open a terminal or command prompt and do the following:\n🔗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 ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/installation/","tags":null,"title":"installation"},{"categories":null,"content":"event\nThis event is called each time an image is exported, once for each image after the image has been processed to an image format but before the storage has moved the image to its final destination. The call is blocking.\n🔗intermediate-export-image.callback function( event : string, image : types.dt_lua_image_t, filename : string, format : types.dt_imageio_module_format_t, storage : types.dt_imageio_module_storage_t ) event - string - The name of the event that triggered the callback. image - types.dt_lua_image_t - The image object that has been exported. filename - string - The name of the file that is the result of the image being processed. format - types.dt_imageio_module_format_t - The format used to export the image. storage - types.dt_imageio_module_storage_t - The storage used to export the image (can be nil). 🔗intermediate-export-image.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/intermediate-export-image/","tags":null,"title":"intermediate-export-image"},{"categories":null,"content":"enum The type of OS we darktable can run on\nValues :\n windows macos linux unix ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_os_type/","tags":null,"title":"lua_os_type"},{"categories":null,"content":"🔗NAME check_if_file_exists\n🔗SYNOPSIS check if a file or path exist\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.check_if_file_exists(filepath) filepath - string - a file or path to check\n🔗DESCRIPTION check_if_file_exists checks to see if a file or path exists.\n🔗RETURN VALUE result - boolean - true if the file or path exists, false if it doesn\u0026rsquo;t.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/check_if_file_exists/","tags":null,"title":"check_if_file_exists"},{"categories":null,"content":"🔗NAME check_os\n🔗SYNOPSIS check that the operating system is supported\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.check_os(operating_systems) operating_systems - table - a table of operating system names such as {\u0026ldquo;windows\u0026rdquo;,\u0026ldquo;linux\u0026rdquo;,\u0026ldquo;macos\u0026rdquo;,\u0026ldquo;unix\u0026rdquo;}\n🔗DESCRIPTION check_os checks a supplied table of operating systems against the operating system the script is running on and returns true if the OS is in the list, otherwise false\n🔗RETURN VALUE result - boolean - true if the operating system is supported, false if not.\n🔗EXAMPLE local du = require \u0026quot;lib/dtutils\u0026quot; if du.check_os({\u0026quot;windows\u0026quot;}) then -- run the script else dt.print(\u0026quot;Script \u0026lt;script name\u0026gt; only runs on windows\u0026quot;) return end ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/check_os/","tags":null,"title":"check_os"},{"categories":null,"content":"🔗Name clear_GPS.lua - clear_GPS - clear GPS data from selected image(s)\n🔗Description This shortcut removes the GPS coordinate data from the selected images.\n🔗Usage start the script from script manager select an image or images click the shortcut, or the button in selected images to clear GPS data 🔗Additional Software Required 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/clear_gps/","tags":null,"title":"clear_GPS"},{"categories":null,"content":"function( message : string ) This function will print its parameter if the Lua logdomain is activated. Start darktable with the \u0026quot;-d lua\u0026quot; command line option to enable the Lua logdomain.\n message - string - The string to display. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.print_log/","tags":null,"title":"darktable.print_log"},{"categories":null,"content":"🔗Name delete_long_tags.lua - delete all tags longer than a set length\n🔗Description A simple script that will automatically delete all tags longer than a set length\n🔗Usage start this script from script manager set the the maximum length in darktable\u0026rsquo;s preference restart darktable 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/delete_long_tags/","tags":null,"title":"delete_long_tags"},{"categories":null,"content":"dt_type\nImage objects represent an image in the database. This is slightly different from a file on disk since a file can have multiple developments. Note that this is the real image object; changing the value of a field will immediately change it in darktable and will be reflected on any copy of that image object you may have kept.\nAttributes:\n has_tostring 🔗dt_lua_image_t.attach_tag see darktable.tags.attach\n🔗dt_lua_image_t.detach_tag see darktable.tags.detach\n🔗dt_lua_image_t.get_tags see darktable.tags.get_tags\n🔗dt_lua_image_t.create_style see darktable.styles.create\n🔗dt_lua_image_t.apply_style see darktable.styles.apply\n🔗dt_lua_image_t.duplicate see darktable.database.duplicate\n🔗dt_lua_image_t.move see darktable.database.move_image\n🔗dt_lua_image_t.copy see darktable.database.copy_image\n🔗dt_lua_image_t.id number\nA unique id identifying the image in the database.\n🔗dt_lua_image_t.path string\nThe file the directory containing the image.\n🔗dt_lua_image_t.film types.dt_lua_film_t\nThe film object that contains this image.\n🔗dt_lua_image_t.filename string\nThe filename of the image.\n🔗dt_lua_image_t.sidecar string\nThe filename of the image\u0026rsquo;s sidecar file.\n🔗dt_lua_image_t.duplicate_index number\nIf there are multiple images based on a same file, each will have a unique number, starting from 0.\n🔗dt_lua_image_t.publisher string\nThe publisher field of the image.\nAttributes:\n write 🔗dt_lua_image_t.title string\nThe title field of the image.\nAttributes:\n write 🔗dt_lua_image_t.creator string\nThe creator field of the image.\nAttributes:\n write 🔗dt_lua_image_t.rights string\nThe rights field of the image.\nAttributes:\n write 🔗dt_lua_image_t.description string\nThe description field for the image.\nAttributes:\n write 🔗dt_lua_image_t.notes string\nThe notes field for the image.\nAttributes:\n write 🔗dt_lua_image_t.version_name string\nThe version_name field for the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_maker string\nThe maker exif data.\nAttributes:\n write 🔗dt_lua_image_t.exif_model string\nThe camera model used.\nAttributes:\n write 🔗dt_lua_image_t.exif_lens string\nThe id string of the lens used.\nAttributes:\n write 🔗dt_lua_image_t.exif_aperture number\nThe aperture saved in the exif data.\nAttributes:\n write 🔗dt_lua_image_t.exif_exposure number\nThe exposure time of the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_focal_length number\nThe focal length of the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_iso number\nThe iso used on the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_datetime_taken string\nThe date and time of the image.\nAttributes:\n write 🔗dt_lua_image_t.exif_focus_distance number\nThe distance of the subject.\nAttributes:\n write 🔗dt_lua_image_t.exif_crop number\nThe exif crop data.\nAttributes:\n write 🔗dt_lua_image_t.latitude float or nil\nGPS latitude data of the image, nil if not set.\nAttributes:\n write 🔗dt_lua_image_t.longitude float or nil\nGPS longitude data of the image, nil if not set.\nAttributes:\n write 🔗dt_lua_image_t.elevation float or nil\nGPS altitude data of the image, nil if not set.\nAttributes:\n write 🔗dt_lua_image_t.is_raw boolean\nTrue if the image is a RAW file. WARNING: This is a flag that gets set the first time the image is opened, either by an edit or thumbnail generation. If images are imported using darktable.database.import(), then dt_lua_image_t.is_raw is not guaranteed to be correct.\n🔗dt_lua_image_t.is_ldr boolean\nTrue if the image is a ldr image.\n🔗dt_lua_image_t.is_hdr boolean\nTrue if the image is a hdr image.\n🔗dt_lua_image_t.has_txt boolean\nTrue if the image has a txt sidecar file.\nAttributes:\n write 🔗dt_lua_image_t.width number\nThe width of the image.\n🔗dt_lua_image_t.height number\nThe height of the image.\n🔗dt_lua_image_t.rating number\nThe rating of the image (-1 for rejected).\nAttributes:\n write 🔗dt_lua_image_t.red boolean\nTrue if the image has the corresponding colorlabel.\nAttributes:\n write 🔗dt_lua_image_t.blue see types.dt_lua_image_t.red\n🔗dt_lua_image_t.green see types.dt_lua_image_t.red\n🔗dt_lua_image_t.yellow see types.dt_lua_image_t.red\n🔗dt_lua_image_t.purple see types.dt_lua_image_t.red\n🔗dt_lua_image_t.reset self:function( ) Removes all processing from the image, resetting it back to its original state\n self - types.dt_lua_image_t - The image whose history will be deleted 🔗dt_lua_image_t.delete self:function( ) Removes an image from the database\n self - types.dt_lua_image_t - The image to remove 🔗dt_lua_image_t.group_with self:function( [image : types.dt_lua_image_t] ) Puts the first image in the same group as the second image. If no second image is provided the image will be in its own group.\n self - types.dt_lua_image_t - The image whose group must be changed. [image] - types.dt_lua_image_t - The image we want to group with. 🔗dt_lua_image_t.make_group_leader self:function( ) Makes the image the leader of its group.\n self - types.dt_lua_image_t - The image we want as the leader. 🔗dt_lua_image_t.get_group_members self:function( ) : table of types.dt_lua_image_t Returns a table containing all types.dt_lua_image_t of the group. The group leader is both at a numeric key and at the \u0026ldquo;leader\u0026rdquo; special key (so you probably want to use ipairs to iterate through that table).\n self - types.dt_lua_image_t - The image whose group we are querying. return - table of types.dt_lua_image_t - A table of image objects containing all images that are in the same group as the image. 🔗dt_lua_image_t.group_leader types.dt_lua_image_t\nThe image which is the leader of the group this image is a member of.\n🔗dt_lua_image_t.local_copy boolean\nTrue if the image has a copy in the local cache\nAttributes:\n write 🔗dt_lua_image_t.drop_cache self:function( ) drops the cached version of this image. This function should be called if an image is modified out of darktable to force darktable to regenerate the thumbnail. darktable will regenerate the thumbnail by itself when it is needed.\n self - types.dt_lua_image_t - The image whose cache must be dropped. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_image_t/","tags":null,"title":"dt_lua_image_t"},{"categories":null,"content":"🔗NAME engine\n🔗SYNOPSIS get and set the output engine\n🔗USAGE local log = require \u0026quot;lib/dtutils.log\u0026quot; result = log.engine(level, ...) level - table - the log level to get or set the engine for, one of log.debug, log.info, log.warn, log.error log.success, log.always, log.screen, log.critical\n\u0026hellip; - function - the output function, one of dt.print, dt.print_error, dt.print_log, print if not function is included, the current engine is returned for the specified log level\n🔗DESCRIPTION engine returns the output engine for the specified log level if a second argument is not supplied. If a function is supplied as the second argment, then the output engine for the specified log level is set to that.\n🔗RETURN VALUE result - function - the current output engine\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/engine/","tags":null,"title":"engine"},{"categories":null,"content":"🔗Name get_lib_manpages.lua - retrieve the included library documentation and output it as man pages\n🔗Description This script retrieves the included documentation in the script libaries and outputs them to the system temporary directory as man pages. Stop this script after it runs otherwise it will regenerate the pages each time it runs.\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/get_lib_manpages/","tags":null,"title":"get_lib_manpages"},{"categories":null,"content":"🔗Name gettextExample.lua - darktable script to show how translations works\n🔗Description To create the .po file run: xgettext -l lua gettextExample.lua\nxgettext is not a lua tool, it knows (almost) nothing about Lua, and not enough to do a proper parsing. It takes a text file (In our case a Lua file) and recognises a few (language dependant) keyword in there. It matches those keywords with internal description on how functions are called and creates the .po file accordingly. (For example, it knows that the first argument of gettext() is the translated string, but that it\u0026rsquo;s the second argument for dgettext) This is important because it means that if you use some neat Lua tricks (like renaming functions) xgettext won\u0026rsquo;t recognize those calls and won\u0026rsquo;t extract the string to the .po file. So, this is why we create a local variagle gettext = dt.gettext, so xgettext recognises gettext.gettext as a function but not dt.gettext.gettext\nTo create a .mo file run: msgfmt -v gettextExample.po -o gettextExample.mo\n🔗Usage start this script from script manager copy the gettextExample.mo to .config/darktable/lua/de_DE/LC_MESSAGES You need to start darktable with the Lua debug option: darktable -d lua $LANG must set to: de_DE\nThe script run on darktable startup and should output this three lines:\nLUA ERROR Hello World! LUA ERROR Bild LUA ERROR Hallo Welt! 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/gettextexample/","tags":null,"title":"gettextExample"},{"categories":null,"content":"🔗NAME is_not_sanitized\n🔗SYNOPSIS Check if a string has been sanitized\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.is_not_sanitized(str) str - string - the string that needs to be made safe\n🔗DESCRIPTION is_not_sanitized checks a string to see if it has been made safe use passing as an argument in a system command.\n🔗RETURN VALUE result - boolean - true if the string is not sanitized otherwise false\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/is_not_sanitized/","tags":null,"title":"is_not_sanitized"},{"categories":null,"content":"🔗NAME launch_default_app\n🔗SYNOPSIS open file in default application\n🔗USAGE local dsys = require \u0026quot;lib/dtutils.file\u0026quot; result = dsys.launch_default_app(path) path - string - a file path\n🔗DESCRIPTION launch_default_app allows opening a file in the application that is assigned as default for that filetype in the users\u0026rsquo;s system\n🔗RETURN VALUE result - number - the return value signalling success or failure.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/launch_default_app/","tags":null,"title":"launch_default_app"},{"categories":null,"content":"🔗NAME new_tracepoint\n🔗SYNOPSIS create a function returning a tracepoint\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; local result = dd.new_tracepoint(name, ...) name - string - the name of the tracepoint to print out\n\u0026hellip; - arguments - variables to dump the contents of\n🔗DESCRIPTION new_tracepoint returns a tracepoint function with the given name. This is mainly used to debug callbacks.\n🔗RETURN VALUE result - function - a function that returns the result of a tracepoint\n🔗EXAMPLE register_event(event, dd.new_tracepoint(\u0026quot;hit callback\u0026quot;)) will print the following each time the callback is called\n**** hit callback **** \u0026lt;all the callback's parameters dumped\u0026gt; ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/new_tracepoint/","tags":null,"title":"new_tracepoint"},{"categories":null,"content":"event\nThis event is triggered whenever a new image is imported into the database. This event can be registered multiple times, all callbacks will be called. The call is blocking.\n🔗post-import-image.callback function( event : string, image : types.dt_lua_image_t ) event - string - The name of the event that triggered the callback. image - types.dt_lua_image_t - The image object that has been imported. 🔗post-import-image.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/post-import-image/","tags":null,"title":"post-import-image"},{"categories":null,"content":"Running darktable with Lua debugging enabled provides more information about what is occurring within the scripts.\n🔗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.\n🔗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.\n🔗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.\n🔗Windows Open a command prompt. Start darktable with the command \u0026ldquo;C:\\Program Files\\darktable\\bin\\darktable\u0026rdquo; -d lua \u0026gt; log.txt. This provides debugging information to give you insight into what is happening.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/troubleshooting/","tags":null,"title":"troubleshooting"},{"categories":null,"content":"🔗NAME find_image_by_id\n🔗SYNOPSIS look up an image by ID in the database\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local img = du.find_image_by_id(imgid) imgid - int - the image ID to retrieve\n🔗DESCRIPTION find_image_by_id looks up an image by ID in the database.\n🔗RETURN VALUE img - dt_lua_image_t - image with the given ID if found, nil if not\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/find_image_by_id/","tags":null,"title":"find_image_by_id"},{"categories":null,"content":"🔗NAME chop_filetype\n🔗SYNOPSIS remove a filetype from a filename\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.chop_filetype(path) path - string - a filename with or without a path\n🔗DESCRIPTION chop_filetype removes the filetype from the filename.\n🔗RETURN VALUE result - string - the path and filename without the filetype\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/chop_filetype/","tags":null,"title":"chop_filetype"},{"categories":null,"content":"🔗Name CollectHelper.lua - add buttons to help with collections\n🔗Description This plugin adds the button(s) to the \u0026ldquo;Selected Images\u0026rdquo; module:\n Return to Previous Collection Collect on image\u0026rsquo;s Folder Collect on image\u0026rsquo;s Color Label(s) Collect on All (AND) It also adds 3 preferences to the lua options dialog box which allow the user to activate/deactivate the 3 \u0026ldquo;Collect on\u0026rdquo; buttons.\nButton Behavior:\n Return to Previous Collection - Will reset the collect parameters to the previously active settings Collect on image\u0026rsquo;s Folder - Will change the collect parameters to be \u0026ldquo;Folder\u0026rdquo; with a value of the selected image\u0026rsquo;s folder location Collect on image\u0026rsquo;s Color Label(s) - Will change the collect parameter to be \u0026ldquo;Color\u0026rdquo; with a value of the selected images color labels, will apply multiple parameters with AND logic if multiple exist Collect on All (AND) - Will collect on all parameters activated by the preferences dialog, as such this button is redundant if you only have one of the two other options enabled 🔗Usage start CollectHelper with script manager.\n Select the photo you wish to change you collection based on. In the \u0026ldquo;Selected Images\u0026rdquo; module click on \u0026ldquo;Collect on this Image\u0026rdquo;\n 🔗Additional Software Required 🔗Limitations 🔗Author Kevin Ertel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/collecthelper/","tags":null,"title":"CollectHelper"},{"categories":null,"content":"function( message : string ) This function is similar todarktable.print_log but adds an ERROR prefix for clarity.\n message - string - The string to display. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.print_error/","tags":null,"title":"darktable.print_error"},{"categories":null,"content":"🔗Name delete_unused_tags.lua - automatically delete all tags that are not attached to any images\n🔗Description A simple script that will automatically delete all tags that are not attached to any images\n🔗Usage start this script from script manager restart darktable 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/delete_unused_tags/","tags":null,"title":"delete_unused_tags"},{"categories":null,"content":"dt_type\nA virtual type representing all format types.\n🔗dt_imageio_module_format_t.plugin_name string\nA unique name for the plugin.\n🔗dt_imageio_module_format_t.name string\nA human readable name for the plugin.\n🔗dt_imageio_module_format_t.extension string\nThe typical filename extension for that format.\n🔗dt_imageio_module_format_t.mime string\nThe mime type associated with the format.\n🔗dt_imageio_module_format_t.max_width number\nThe max width allowed for the format (0 = unlimited).\nAttributes:\n write 2.3.6. dt_imageio_module_format_t.max_height\nnumber\nThe max height allowed for the format (0 = unlimited).\nAttributes:\n write 2.3.7. dt_imageio_module_format_t.write_image\nself:function( image : types.dt_lua_image_t, filename : string, [allow_upscale : boolean] ) : boolean Exports an image to a file. This is a blocking operation that will not return until the image is exported.\n self - types.dt_imageio_module_format_t - The format that will be used to export. image - types.dt_lua_image_t - The image object to export. filename - string - The filename to export to. [allow_upscale] - boolean - Set to true to allow upscaling of the image. return - boolean - Returns true on success. Attributes:\n implicit_yield ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_t/","tags":null,"title":"dt_imageio_module_format_t"},{"categories":null,"content":"🔗Name get_libdoc.lua - retrieve the included library documentation and output it as text\n🔗Description 🔗Usage start this script from script manager. Disable it after it finishes or it will generate the pages every time darktable runs. 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/get_libdoc/","tags":null,"title":"get_libdoc"},{"categories":null,"content":"🔗Name hello_world.lua - a simple lua script\n🔗Description prints \u0026ldquo;hello world when DT starts\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/hello_world/","tags":null,"title":"hello_world"},{"categories":null,"content":"🔗NAME join\n🔗SYNOPSIS join a table of strings with a specified separator\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.join(tabl, pat) tabl - table - a table of strings\npat - string - a separator\n🔗DESCRIPTION join assembles a table of strings into a string with the specified pattern in between each string\n🔗RETURN VALUE result - string - the joined string on success, or an empty string on failure\n🔗EXAMPLE join({a, \u0026quot;long\u0026quot;, \u0026quot;path\u0026quot;, \u0026quot;name\u0026quot;, \u0026quot;to\u0026quot;, a, \u0026quot;file.txt\u0026quot;}, \u0026quot; \u0026quot;) would return the string \u0026ldquo;a long path name to a file.txt\u0026rdquo;\n🔗REFERENCE http://lua-users.org/wiki/SplitJoin\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/join/","tags":null,"title":"join"},{"categories":null,"content":"🔗NAME log_level\n🔗SYNOPSIS get or set the log level\n🔗USAGE local log = require \u0026quot;lib/log\u0026quot; local result = log.log_level(...) \u0026hellip; - arguments - if none is supplied, then the current log level is returned as one of: log.debug, log.info, log.warn, log.error, log.success. If one of log.debug, log.info, log.warn, log.error, or log.success is supplied as the argument then the log level is set to that value. All log levels greater than or equal in value will be enabled. Any levels of lesser value will be disabled.\n🔗DESCRIPTION log_level gets and sets the logging level. When called with no arguments the current log level is returned as one of log.debug, log.info, log.warn, log.error, or log.success. When called with one of log.debug, log.info, log.warn, log.error or log.success then the log level is set. When setting the log level all levels equal or greater are enabled and any of lesser value are disabled. See the example.\n🔗RETURN VALUE result - log level - one of log.debug, log.info, log.warn, log.error or log.success\n🔗EXAMPLE Assume that the current log level is log.error. Calling\nlog.log_level() will return log.error. Calling\nlog.log_level(log.info) will leave log.debug disabled, and enable log.info, log.warn, log.error and log.success. log.info will be returned as the log_level.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/log_level/","tags":null,"title":"log_level"},{"categories":null,"content":"🔗NAME sanitize\n🔗SYNOPSIS surround a string in quotes making it safe to pass as an argument\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.sanitize(str) str - string - the string that needs to be made safe\n🔗DESCRIPTION sanitize converts a string into a version suitable for use passing as an argument in a system command.\n🔗RETURN VALUE result - string - a websafe string\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/sanitize/","tags":null,"title":"sanitize"},{"categories":null,"content":"event\nThis event registers a new keyboard shortcut. The shortcut isn\u0026rsquo;t bound to any key until the users does so in the preference panel. The event is triggered whenever the shortcut is triggered. This event can only be registered once per value of shortcut.\n🔗shortcut.callback function( event : string, shortcut : string ) event - string - The name of the event that triggered the callback. shortcut - string - The tooltip string that was given at registration time. 🔗shortcut.extra registration parameters tooltip - string - The string that will be displayed on the shortcut preference panel describing the shortcut. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/shortcut/","tags":null,"title":"shortcut"},{"categories":null,"content":"🔗NAME terse_dump\n🔗SYNOPSIS set darktable.debug.known to shorten all image dumps to a single line\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; dd.terse_dump() 🔗DESCRIPTION terse_dump sets darktable.debug.known to shorten all images to a single line. If you don\u0026rsquo;t need to debug the content of images, this will avoid them flooding your logs.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/terse_dump/","tags":null,"title":"terse_dump"},{"categories":null,"content":"🔗NAME windows_command\n🔗SYNOPSIS pass a command to the windows operating system for execution and return the result\n🔗USAGE local dsys = require \u0026quot;lib/dtutils.system\u0026quot; local result = dsys.windows_command(command) command - string - a string containing the command and arguments to be passed to the operating system for execution.\n🔗DESCRIPTION The normal method of executing an operating system command is using dt.control.execute(), but that doesn\u0026rsquo;t work with Windows when more than one item in the command is quoted. In order to ensure command execution on Windows we create a batch file in the temporary directory, put the command in it, execute the batch file, then return the result.\n🔗RETURN VALUE result - number - the return value signalling success or failure.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.system/windows_command/","tags":null,"title":"windows_command"},{"categories":null,"content":"This section documents various attributes used throughout the documentation.\n🔗write This object is a variable that can be written to.\n🔗has_tostring This object has a specific reimplementation of the \u0026ldquo;tostring\u0026rdquo; method that allows pretty-printing it.\n🔗implicit_yield This call will release the Lua lock while executing, thus allowing other Lua callbacks to run.\n🔗parent This object inherits some methods from another object. You can call the methods from the parent on the child object\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/attributes/","tags":null,"title":"attributes"},{"categories":null,"content":"🔗Name copy_attach_detach_tags.lua - tools to manipulate image tags\n🔗Description This script that will create four shortcuts and add a module in lighttable mode to copy, paste, replace and remove tags from images.\n🔗Usage set the shortcuts for copy, attach and detach in the preferences dialog \u0026lt;your shortcut1\u0026gt; copy will create a list of tags from all selected images \u0026lt;your shortcut2\u0026gt; paste copied tags to selected images, whereby darktable internal tags starting with \u0026lsquo;darktable|\u0026rsquo; will not be touched \u0026lt;your shortcut3\u0026gt; removes all except darktable internal tags from selected images \u0026lt;your shortcut4\u0026gt; replaces all tags except darktable internals A module reset will empty the clipboard 🔗Additional Software Required 🔗Limitations 🔗Author Christian Kanzian\nHolger Klemm\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/copy_attach_detach_tags/","tags":null,"title":"copy_attach_detach_tags"},{"categories":null,"content":"🔗NAME create_unique_filename\n🔗SYNOPSIS create a unique filename from the supplied argument\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.create_unique_filename(filepath) filepath - string - the path and filename requested\n🔗DESCRIPTION create_unique_filename takes a requested filepath and checks to see if it exists. If if doesn\u0026rsquo;t then it\u0026rsquo;s returned intact. If it already exists, then a two digit increment is added to the filename and it is tested again. The increment keeps increasing until either a unique filename is found or there have been 100 attempts.\n🔗RETURN VALUE result - string - the incremented filename\n🔗LIMITATIONS create_unique_filename will only attempt 100 increments.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/create_unique_filename/","tags":null,"title":"create_unique_filename"},{"categories":null,"content":"function( event_type : string, callback : function, ... : variable ) This function registers a callback to be called when a given event happens. Events are documented in the event section.\n event_type - string - The name of the event to register to. callback - function - The function to call on event. The signature of the function depends on the type of event. \u0026hellip; - variable - Some events need extra parameters at registration time; these must be specified here. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.register_event/","tags":null,"title":"darktable.register_event"},{"categories":null,"content":"function( plugin_name : string, name : string, [store : function], [finalize : function], [supported : function], [initialize : function], [widget : types.lua_widget] ) This function will add a new storage implemented in Lua. A storage is a module that is responsible for handling images once they have been generated during export. Examples of core storages include filesystem, e-mail, pwigo\u0026hellip;\n plugin_name - string - A unique name for the plugin. name - string - A human readable name for the plugin. [store] - function - This function is called once for each exported image. [finalize] - function - This function is called once all images are processed and all store calls are finished. [supported] - function - A function called to check if a given image format is supported by the Lua storage. [initialize] - function - A function called before storage happens. widget - types.lua_widget - A widget to display in the export section of darktable\u0026rsquo;s UI. 🔗[store] function( storage : types.dt_imageio_module_storage_t, image : types.dt_lua_image_t, format : types.dt_imageio_module_format_t, filename : string, number : integer, total : integer, high_quality : boolean, extra_data : table ) This function is called once for each exported image. Images can be exported in parallel but the calls to this function will be serialized.\n storage - types.dt_imageio_module_storage_t - The storage object used for the export. image - types.dt_lua_image_t - The exported image object. format - types.dt_imageio_module_format_t - The format object used for the export. filename - string - The name of a temporary file where the processed image is stored. number - integer - The number of the image out of the export series. total - integer - The total number of images in the export series. high_quality - boolean - True if the export is high quality. extra_data - table- An empty Lua table to take extra data. This table is common to the initialize, store and finalize calls in an export series. 🔗[finalize] function( storage : types.dt_imageio_module_storage_t, image_table : table, extra_data : table ) This function is called once all images are processed and all store calls are finished.\n storage - types.dt_imageio_module_storage_t - The storage object used for the export. image_table - table - A table keyed by the exported image objects and valued with the corresponding temporary export filename. extra_data - table - An empty Lua table to store extra data. This table is common to all calls to store and the call to finalize in a given export series. 🔗[supported] function( storage : types.dt_imageio_module_storage_t, format : types.dt_imageio_module_format_t ) : boolean A function called to check if a given image format is supported by the Lua storage; this is used to build the dropdown format list for the GUI.\nNote that the parameters in the format are the ones currently set in the GUI; the user might change them before export.\n storage - types.dt_imageio_module_storage_t - The storage object tested. format - types.dt_imageio_module_format_t - The format object to report about. return - boolean - True if the corresponding format is supported. 🔗[initialize] function( storage : types.dt_imageio_module_storage_t, format : types.dt_imageio_module_format_t, images : table of types.dt_lua_image_t, high_quality : boolean, extra_data : table ) : table or nil A function called before storage happens This function can change the list of exported functions\n storage - types.dt_imageio_module_storage_t - The storage object tested. format - types.dt_imageio_module_format_t - The format object to report about. images - table of types.dt_lua_image_t - A table containing images to be exported. high_quality - boolean - True if the export is high quality. extra_data - table - An empty Lua table to take extra data. This table is common to the initialize, store and finalize calls in an export series. return - table or nil - The modified table of images to export or nil If nil (or nothing) is returned, the original list of images will be exported If a table of images is returned, that table will be used instead. The table can be empty. The images parameter can be modified and returned ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.register_storage/","tags":null,"title":"darktable.register_storage"},{"categories":null,"content":"dt_type\nType object describing parameters to export to png.\nAttributes:\n parent : types.dt_imageio_module_format_t../types/dt_imageio_module_format_t 🔗dt_imageio_module_format_data_png.bpp number\nThe bpp parameter to use when exporting.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_png/","tags":null,"title":"dt_imageio_module_format_data_png"},{"categories":null,"content":"🔗Name enfuse.lua - merge the selected images into one tonemapped image and import the result\n🔗Description This script uses enfuse to merge the selected images into one tonemapped image and imports the result. It only works on ldr images (like, JPEG).\n🔗Usage start this script from script manager it creates a new lighttable module 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/enfuse/","tags":null,"title":"enfuse"},{"categories":null,"content":"🔗Name lighttable_demo.lua - an example script demonstrating how to control lighttable display modes\n🔗Description lighttable_demo is an example script showing how to control lighttable layout, sorting, and filtering from a lua script. If the selected directory has different ratings, color labels, etc, then the sorting and filtering display is a little clearer.\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/lighttable_demo/","tags":null,"title":"lighttable_demo"},{"categories":null,"content":"🔗NAME msg\n🔗SYNOPSIS print a log message\n🔗USAGE local log = require \u0026quot;lib/log\u0026quot; log.msg(level, ...) level - table - the type of message, one of:\n log.debug - debugging messages log.info - informational messages log.warn - warning messages log.error - error messages log.success - success messages log.always - an internal message for debugging log.screen - output 1 line of text to the screen log.critical - print a critical message to the console \u0026hellip; - string(s) - the message to print, which could be a comma separated set of strings\n🔗DESCRIPTION msg checks the level to see if it is enabled, then prints the level type and message if it is. Messages are output using the engine configured in each log level.\n🔗LIMITATIONS If you use log.msg in a callback, the name of the calling routine can\u0026rsquo;t be determined. A solution is to include some means of reference such as the name of the callback as an argument, i.e.\nlog.msg(log.debug, \u0026quot;libPlugin.format_combobox:\u0026quot;, \u0026quot;value is \u0026quot; .. self.value) which would result in\nDEBUG: callback: libPlugin.format_combobox: value is JPEG ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.log/msg/","tags":null,"title":"msg"},{"categories":null,"content":"event\nThis event is triggered when an film import is finished (all post-import-image callbacks have already been triggered). This event can be registered multiple times.\n🔗post-import-film.callback function( event : string, film : types.dt_lua_film_t ) event - string - The name of the event that triggered the callback. film - types.dt_lua_film_t - The new film that has been added. If multiple films were added recursively only the top level film is reported. 🔗post-import-film.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/post-import-film/","tags":null,"title":"post-import-film"},{"categories":null,"content":"🔗NAME prequire\n🔗SYNOPSIS a protected lua require\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local status, lib = du.prequire(req_name) req_name - string - the filename of the lua code to load without the \u0026ldquo;.lua\u0026rdquo; filetype\n🔗DESCRIPTION prequire is a protected require that can survive an error in the code being loaded without bringing down the calling routine.\n🔗RETURN VALUE status - boolean - true on success lib - if status is true, then the code, otherwise an error message\n🔗EXAMPLE local status, lib = prequire(\u0026quot;lib/dtutils.file\u0026quot;) which would load lib/dtutils/file.lua which would return a status of true and the reference to the library.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/prequire/","tags":null,"title":"prequire"},{"categories":null,"content":"🔗NAME sanitize_lua\n🔗SYNOPSIS escape lua \u0026lsquo;magic\u0026rsquo; characters from a pattern string\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.sanitize_lua(str) str - string - the string that needs to be made safe\n🔗DESCRIPTION sanitize_lua escapes lua \u0026lsquo;magic\u0026rsquo; characters so that a string may be used in lua string/patten matching.\n🔗RETURN VALUE result - string - a lua pattern safe string\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/sanitize_lua/","tags":null,"title":"sanitize_lua"},{"categories":null,"content":"🔗Name script_manager.lua - a tool for managing the darktable lua scripts\n🔗Description script_manager is designed to be called from the users luarc file and used to manage the lua scripts.\nOn startup script_manager scans the lua scripts directory to see what scripts are present. Scripts are sorted by \u0026lsquo;category\u0026rsquo; based on what sub-directory they are in. With no additional script repositories iinstalled, the categories are contrib, examples, official and tools. When a category is selected the buttons show the script name and whether the script is started or stopped. The button is a toggle, so if the script is stopped click the button to start it and vice versa.\n🔗Features the number of script buttons shown can be changed to any number between 5 and 20. The default is 10 buttons. This can be changed in the configuration action.\n additional repositories of scripts may be installed from the install/update action.\n installed scripts can be updated from the install/update action. This includes extra repositories that have been installed.\n the lua scripts can be disabled if desired from the install/update action.\n script_manager is automatically installed and enabled when the lua scripts are installed by the darktable scripts_installer.\n 🔗Usage start/stop scripts -\n The top part of the window has the category selector. The category corresponds to the directory that the scripts are in. Currently the categories are contrib for community contributed scripts, examples for example scripts, official for developer contributed scripts, and tools containing tools for managing the lua scripts. The lower part of the window contains the paged interface for the scripts contained in the selected category. There are arrow buttons for navigating the pages and an indicator showing what the current page is and how many pages of scripts there are for the current category. The number of buttons defaults to 10, but is configurable anywhere between 5 and 20 depending on how much screen real estate you want to use. The scripts are sorted alphabetically. The button shows the name of the script and it\u0026rsquo;s current status, started or stopped. Clicking the script button toggles the script from started to stopped and back again. configure - this window allows changing the number of buttons used to display scripts. Move the slider to select the number of buttons, click the change number of buttons button and the number of buttons will change and the action will change back to the start/stop scripts window.\n install/update scripts - This window allows installing additional script repositories and updating installed repositories.\n update - select the scripts to update from the scripts to update dropdown. Click the update scripts button to do the update.\n install - additional script repositories can be added to your lua scripts. To add another repository fill in the URL to download additional scripts from and then fill in the new category to place scripts in. Click the install additional scripts button and the category (directory) is created and a git clone is performed to retrieve the git repository. EXAMPLE: fill in URL to download additional scripts from with https://github.com/wpferguson/extra-dt-lua-scripts.git and the new category to place scripts in with wpferguson. Click the button to install the scripts. The scripts are retrieved and added to the user interface and the window changes to the newly installed script category.\n disable scripts - the lua scripts are installed by the darktable scripts installer. If you install them and later decide you no longer want them cluttering up your user interface, this option can disable them and stop them from starting. Once they are disabled, the way to enable them again is to rename a file using the terminal and command line. To disable the scritps first click the checkbox to enable the Disable Scripts button. This is to prevent accidentally disabling the lua scripts. Once the Disable Scripts button is active, click it to disable the scripts. When the button is clicked, the luarc file is renamed to luarc.disabled which results in the scripts not starting the next time darktable starts.\n 🔗Additional Software Required git - wwww.git.org - git is used to install and update the scripts. script_manager will still run if git is not installed or accessible, but installing and updating scripts will not be possible.\n🔗Limitations There isn\u0026rsquo;t currently a way to stop an executing script and remove it from the interface, so when a script is stopped the script preference is set to not start the next time darktable starts.\n If the scripts are disabled by choice the only way to enable them is by renaming the file luarc.disabled to luarc. Then file is located in the user\u0026rsquo;s darktable configuration directory, $HOME/.config/darktable on linux and macos and %LOCALAPPDATA%\\darktable on windows.\n 🔗Author Bill Ferguson \u0026lt;wpferguson@gmail.com\u0026gt;\n🔗Change Log 20201225 - Rewrite for darktable 3.4 - Merry Christmas\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/tools/script_manager/","tags":null,"title":"script_manager"},{"categories":null,"content":"🔗NAME tracepoint\n🔗SYNOPSIS print out a tracepoint and dump the arguments\n🔗USAGE local dd = require \u0026quot;lib/dtutils.debug\u0026quot; local result = dd.tracepoint(name, ...) name - string - the name of the tracepoint to print out\n\u0026hellip; - arguments - variables to dump the contents of\n🔗DESCRIPTION tracepoint prints its name and dumps its parameters using darktable.debug.\n🔗RETURN VALUE result - \u0026hellip; - the supplied argument list\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.debug/tracepoint/","tags":null,"title":"tracepoint"},{"categories":null,"content":"🔗Name cr2hdr.lua - Magic Lantern Dual ISO processing\n🔗Description cr2hdr Magic Lantern Dual ISO processing.\nThis script automates the steps involved to process an image created with the Magic Lantern Dual ISO module. Upon invoking the script with a shortcut \u0026ldquo;cr2hdr\u0026rdquo; provided by Magic Lantern is run on the selected images. The processed files are imported. They are also made group leaders to hide the original files.\n🔗Usage start this script using script manager trigger conversion on selected/hovered images by shortcut (set shortcut in settings dialog) it is also possible to have the script run after importing a collection (optin, since it is not that fast) 🔗Additional Software Required cr2hdr (sources can be obtained through the Magic Lantern repository) 🔗Limitations 🔗Author Till Theato - theato@ttill.de\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/cr2hdr/","tags":null,"title":"cr2hdr"},{"categories":null,"content":"function( plugin_name : string, name : string, expandable : boolean, resettable : boolean, containers : table of types.dt_lua_view_t =\u0026gt; [ types.dt_ui_container_t, int ], widget : types.lua_widget, view_enter : function, view_leave : function ) Register a new lib object. A lib is a graphical element of darktable\u0026rsquo;s user interface\n plugin_name - string - A unique name for your library name - string - A user-visible name for your library expandable - boolean - whether this lib should be expandable or not resettable - boolean - whether this lib has a reset button or not containers - table of types.dt_lua_view_t =\u0026gt; [ types.dt_ui_container_t, int ] - A table associating to each view containing the lib the corresponding container and position. widget - types.lua_widget - The widget to display in the lib view_enter - function - A callback called when a view displaying the lib is entered. view_leave - function - A callback called when leaving a view displaying the lib. 🔗view_enter self:function( old_view : types.dt_lua_view_t, new_view : types.dt_lua_view_t ) A callback called when a view displaying the lib is entered\n self - types.dt_lua_lib_t - The lib on which the callback is called old_view - types.dt_lua_lib_t - The view that we are leaving new_view - types.dt_lua_lib_t - The view that we are entering 🔗view_leave self:function( old_view : types.dt_lua_view_t, new_view : types.dt_lua_view_t ) A callback called when leaving a view displaying the lib\n self - types.dt_lua_lib_t - The lib on which the callback is called old_view - types.dt_lua_lib_t - The view that we are leaving new_view - types.dt_lua_lib_t - The view that we are entering ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.register_lib/","tags":null,"title":"darktable.register_lib"},{"categories":null,"content":"dt_type\nType object describing parameters to export to tiff.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_tiff.bpp number\nThe bpp parameter to use when exporting.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_tiff/","tags":null,"title":"dt_imageio_module_format_data_tiff"},{"categories":null,"content":"🔗NAME executable_path_widget\n🔗SYNOPSIS create a widget to get executable path preferences\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local widget = df.executable_path_widget(executables) executables - table - a table of strings that are executable names\n🔗DESCRIPTION executable_path_widget takes a table of executable names and builds a set of file selector widgets to get the path to the executable. The resulting widgets are wrapped in a box widget and returned.\n🔗RETURN VALUE widget - widget - a widget containing a file selector widget for each executable.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/executable_path_widget/","tags":null,"title":"executable_path_widget"},{"categories":null,"content":"🔗Name generate_image_txt.lua - generate text metadata\n🔗Description A script to run a command on images to generate text metadata\nThe medata will be displayed as an overlay on the image in lighttable mode\n🔗Usage start this script from script manager set a command to run on all image, this command should output text on stdout enable image file generation 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/generate_image_txt/","tags":null,"title":"generate_image_txt"},{"categories":null,"content":"🔗Name moduleExample.lua - create a new example lighttable module\n🔗Description More informations about building user interface elements: https://www.darktable.org/usermanual/ch09.html.php#lua_gui_example And about new_widget here: https://www.darktable.org/lua-api/index.html.php#darktable_new_widget\n🔗Usage start this script from script manager\n it creates a new example lighttable module\n 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/moduleexample/","tags":null,"title":"moduleExample"},{"categories":null,"content":"🔗NAME spairs\n🔗SYNOPSIS an iterator that provides sorted pairs from a table\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; for key, value in du.spairs(t, order) do -- do something end t - table - table of key, value pairs order - function - an optional function to sort the pairs, if none is supplied, table.sort() is used\n🔗DESCRIPTION spairs is an iterator that returns key, value pairs from a table in sorted order. The sorting order is the result of table.sort() if no function is supplied, otherwise sorting is done as specified in the function.\n🔗EXAMPLE HighScore = { Robin = 8, Jon = 10, Max = 11 } -- basic usage, just sort by the keys for k,v in spairs(HighScore) do print(k,v) end --\u0026gt; Jon 10 --\u0026gt; Max 11 --\u0026gt; Robin 8 -- this uses an custom sorting function ordering by score descending for k,v in spairs(HighScore, function(t,a,b) return t[b] \u0026lt; t[a] end) do print(k,v) end --\u0026gt; Max 11 --\u0026gt; Jon 10 --\u0026gt; Robin 8 🔗REFERENCE Code copied from http://stackoverflow.com/questions/15706270/sort-a-table-in-lua\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/spairs/","tags":null,"title":"spairs"},{"categories":null,"content":"🔗NAME strip_accents\n🔗SYNOPSIS strip accents from characters\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.strip_accents(str) str - string - the string with characters that need accents removed\n🔗DESCRIPTION strip_accents removes accents from accented characters returning the unaccented character.\n🔗RETURN VALUE result - string - the string containing unaccented characters\n🔗REFERENCE Copied from https://forums.coronalabs.com/topic/43048-remove-special-characters-from-string/\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/strip_accents/","tags":null,"title":"strip_accents"},{"categories":null,"content":"event\nThis event is triggered after the user changed the active view\n#view-changed.callback\nfunction( event : string, old_view : types.dt_lua_view_t, new_view : types.dt_lua_view_t ) event - string - The name of the event that triggered the callback. old_view - types.dt_lua_view_t - The view that we just left new_view - types.dt_lua_view_t - The view we are now in #view-changed.extra registration parameters\nThis event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/view-changed/","tags":null,"title":"view_changed"},{"categories":null,"content":"A table containing all the film objects in the database.\n🔗darktable.films.# types.dt_lua_film_t\nEach film has a numeric entry in the database. See types.dt_lua_film_t.\n🔗darktable.films.new function( directory : string ) : types.dt_lua_film_t Creates a new empty film\nsee darktable.database.import to import a directory with all its images and to add images to a film\n directory - string - The directory that the new film will represent. The directory must exist return - types.dt_lua_film_t - The newly created film, or the existing film if the directory is already imported 🔗darktable.films.delete see types.dt_lua_film_t.delete\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.films/","tags":null,"title":"darktable.films"},{"categories":null,"content":"dt_type\nType object describing parameters to export to exr.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_exr.compression string\nThe compression parameter to use when exporting.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_exr/","tags":null,"title":"dt_imageio_module_format_data_exr"},{"categories":null,"content":"🔗Name enfuseAdvanced.lua - process HDR or focus stacked images\n🔗Description This plugin will add the new export module \u0026lsquo;fusion to DRI or DFF image\u0026rsquo;.\nDRI = Dynamic Range Increase (Blend multiple bracket images into a single LDR file)\nDFF = Depth From Focus (\u0026lsquo;Focus Stacking\u0026rsquo; - Blend multiple images with different focus into a single image)\n🔗Usage Start this script using script manager.\nSelect multiple images that are either bracketed, or focus-shifted, set your desired operating parameters, and press the export button. A new image will be created. The image will be auto imported into darktable if you have that option enabled. Additional tags or style can be applied on auto import as well, if you desire.\n🔗image align options See align_image_stack documentation for further explanation of how it specifically works and the options provided (http://hugin.sourceforge.net/docs/manual/Align_image_stack.html)\n🔗image fustion options See enfuse documentation for further explanation of how it specifically works and the options provided (https://wiki.panotools.org/Enfuse) If you have a specific set of parameters you frequently like to use, you can save them to a preset. There are 3 presets available for DRI, and 3 for DFF.\n🔗target file Select your file destination path, or check the \u0026lsquo;save to source image location\u0026rsquo; option. \u0026lsquo;Create Unique Filename\u0026rsquo; is enabled by default at startup, the user can choose to overwrite existing Set any tags or style you desire to be added to the new image (only available if the auto-import option is enabled). You can also change the defaults for this under settings \u0026gt; lua options\n🔗format options Same as other export modules\n🔗global options Same as other export modules\n🔗Additional Software Required align_image_stack enfuse ver. 4.2 or greater exiftool\n🔗Limitations 🔗Author Kevin Ertel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/enfuseadvanced/","tags":null,"title":"enfuseAdvanced"},{"categories":null,"content":"🔗NAME file_copy\n🔗SYNOPSIS copy a file to another name/location\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.file_copy(fromFile, toFile) fromFile - string - name of file to copy from\ntoFile - string - name of file to copy to\n🔗DESCRIPTION copy a file using a succession of methods from operating system to a pure lua solution\n🔗RETURN VALUE result - boolean - nil on error, true on success\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/file_copy/","tags":null,"title":"file_copy"},{"categories":null,"content":"event\nThis event is triggered after the user toggled the grouping button.\n🔗global_toolbox-grouping_toggle.callback function( toggle : boolean ) toggle - boolean - the new grouping status. 🔗global_toolbox-grouping_toggle.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/global_toolbox-grouping_toggle/","tags":null,"title":"global_toolbox-grouping_toggle"},{"categories":null,"content":"🔗Name image_path_in_ui.lua - Add a widget with the path of the selected images\n🔗Description Add a widget with the path of the selected images for easy copy/past Simple shortcuts to have multiple selection bufers\nThis plugin will add a widget at the bottom of the left column in lighttable mode\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Jérémy Rosen\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/image_path_in_ui/","tags":null,"title":"image_path_in_ui"},{"categories":null,"content":"🔗Name multi_os.lua - an example script that runs on linux, MacOS, and Windows.\n🔗Description multi_os is an example of how to write a script that will run on different operating systems. It uses the lua-scripts libraries to lessen the amount of code that needs to be written, as well as gaining access to tested cross-platform routines. This script also performs a function that some may find useful. It creates a button in the lighttable selected images module that extracts the embedded jpeg image from a raw file, then imports it and groups it with the raw file. A keyboard shortcut is also created. A key combination can be assigned to the shortcut in the lua preferences and then the action can be invoked by hovering over the image and pressing the key combination.\n🔗Usage start this script from script manager start darktable, open prefreences, go to lua options and update the executable location if you are running Windows or MacOS, then restart darktable. select an image or images click the button to extract the jpeg 🔗Additional Software Required ufraw-batch - https://ufraw.sourceforge.net MacOS - install with homebrew 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/multi_os/","tags":null,"title":"name"},{"categories":null,"content":"🔗NAME split\n🔗SYNOPSIS split a string on a specified separator\n🔗USAGE local du = require \u0026quot;lib/dtutils\u0026quot; local result = du.split(str, pat) str - string - the string to split\npat - string - the pattern to split on\n🔗DESCRIPTION split separates a string into a table of strings. The strings are separated at each occurrence of the supplied pattern. The pattern may be any pattern as described in the lua docs. Each match of the pattern is consumed and not returned.\n🔗RETURN VALUE result - table - a table of strings on success, or an empty table on error\n🔗EXAMPLE split(\u0026quot;/a/long/path/name/to/a/file.txt\u0026quot;, \u0026quot;/\u0026quot;) would return a table like\n{\u0026quot;a\u0026quot;, \u0026quot;long\u0026quot;, \u0026quot;path\u0026quot;, \u0026quot;name\u0026quot;, \u0026quot;to\u0026quot;, \u0026quot;a\u0026quot;, \u0026quot;file.txt\u0026quot;} 🔗REFERENCE http://lua-users.org/wiki/SplitJoin\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils/split/","tags":null,"title":"split"},{"categories":null,"content":"🔗NAME urlencode\n🔗SYNOPSIS encode a string in a websage manner\n🔗USAGE local ds = require \u0026quot;lib/dtutils.string\u0026quot; local result = ds.urlencode(str) str - string - the string that needs to be made websafe\n🔗DESCRIPTION urlencode converts a string into a websafe version suitable for use in a web browser.\n🔗RETURN VALUE result - string - a websafe string\n🔗REFERENCE https://forums.coronalabs.com/topic/43048-remove-special-characters-from-string\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.string/urlencode/","tags":null,"title":"urlencode"},{"categories":null,"content":"function( type : string ) : types.dt_imageio_module_format_t Creates a new format object to export images\n type - string - The type of format object to create, one of :\n copy exr j2k jpeg pdf pfm png ppm tiff webp return - types.dt_imageio_module_format_t - The newly created object. Exact type depends on the type passed\n ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.new_format/","tags":null,"title":"darktable.new_format"},{"categories":null,"content":"dt_type\nType object describing parameters to export to copy.\nAttributes:\n parent : types.dt_imageio_module_format_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_copy/","tags":null,"title":"dt_imageio_module_format_data_copy"},{"categories":null,"content":"🔗Name 🔗Description Given a haldCLUT identity file this script generates haldCLUTS from all the user\u0026rsquo;s styles and exports them to a location of their choosing.\n🔗Usage Start this script from script manager.\n🔗Additional Software Required 🔗Limitations Warning: during export if a naming collision occurs the older file is automatically overwritten silently.\n🔗Author Noah Clarke\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/exportlut/","tags":null,"title":"exportLUT"},{"categories":null,"content":"🔗NAME file_move\n🔗SYNOPSIS move a file from one directory to another\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.file_move(fromFile, toFile) fromFile - string - name of the original file\ntoFile - string - the new file location and name\n🔗DESCRIPTION Move a file from one place to another. Try a succession of methods from builtin to operating system to a pure lua solution.\n🔗RETURN VALUE result - boolean - nil on error, some value on success\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/file_move/","tags":null,"title":"file_move"},{"categories":null,"content":"event\nThis event is triggered after the user toggled the overlay button.\n🔗global_toolbox-overlay_toggle.callback function( toggle : boolean ) toggle - boolean - the new overlay status. 🔗global_toolbox-overlay_toggle.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/global_toolbox-overlay_toggle/","tags":null,"title":"global_toolbox-overlay_toggle"},{"categories":null,"content":"🔗Name import_filter_manager.lua - add a dropdown list with import filters to the import dialog\n🔗Description This script adds a dropdown list with import filters to the import dialog. Scripts can add new filters by registering them with darktable.register_import_filter(name, callback) The callback has type function(event, images), i.e., it is the same as when directly registering the pre-import event.\n🔗Usage start this script from script manager also require some files with import filters, for example import_filters.lua. it is important to add them AFTER this one! 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/import_filter_manager/","tags":null,"title":"import_filter_manager"},{"categories":null,"content":"🔗Name panels_demo.lua - an example script demonstrating how to contol panel visibility\n🔗Description panels_demo is an example script showing how to control panel visibility. It cycles through the panels hiding them one by one, then showing them one by one, then hiding all, then showing all. Finally, the original panel visibility is restored.\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author 🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/panels_demo/","tags":null,"title":"panels_demo"},{"categories":null,"content":"function( type : string ) : types.dt_imageio_module_storage_t Creates a new storage object to export images.\n type - string - The type of storage object to create, one of:\n disk email gallery latex piwigo (Other, lua-defined, storage types may appear.) return - [types.dt_imageio_module_storage_t(../../types/dt_imageio_module_storage_t)] - The newly created object. Exact type depends on the type passed\n ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.new_storage/","tags":null,"title":"darktable.new_storage"},{"categories":null,"content":"dt_type\nType object describing parameters to export to pfm.\nAttributes:\n parent : types.dt_imageio_module_format_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_pfm/","tags":null,"title":"dt_imageio_module_format_data_pfm"},{"categories":null,"content":"🔗Name ext_editor.lua - edit images with external editors\n🔗Description This script provides helpers to edit image files with programs external to darktable. It adds:\n a new target storage \u0026ldquo;collection\u0026rdquo;. Image exported will be reimported to collection for further edit with external programs a new lighttable module \u0026ldquo;external editors\u0026rdquo;, to select a program from a list of up to 9 external editors and run it on a selected image (adjust this limit by changing MAX_EDITORS) a set of lua preferences in order to configure name and path of up to 9 external editors a set of lua shortcuts in order to quick launch the external editors 🔗Usage start this script with script manager 🔗setup in \u0026ldquo;preferences/lua options\u0026rdquo; configure name and path/command of external programs note that if a program name is left empty, that and all following entries will be ignored in \u0026ldquo;preferences/shortcuts/lua\u0026rdquo; configure shortcuts for external programs (optional) whenever programs preferences are changed, in lighttable/external editors, press \u0026ldquo;update list\u0026rdquo; 🔗use in the export dialog choose \u0026ldquo;collection\u0026rdquo; and select the format and bit depth for the exported image\n press \u0026ldquo;export\u0026rdquo;\n the exported image will be imported into collection and grouped with the original image\n select an image for editing with en external program, and:\n in lighttable/external editors, select program and press \u0026ldquo;edit\u0026rdquo;\n edit the image with the external editor, overwite the file, quit the external program\n the selected image will be updated or\n in lighttable/external editors, select program and press \u0026ldquo;edit a copy\u0026rdquo;\n edit the image with the external editor, overwite the file, quit the external program\n a copy of the selected image will be created and updated or\n in lighttable select target storage \u0026ldquo;collection\u0026rdquo;\n enter in darkroom\n to create an export or a copy press CRTL+E\n use the shortcut to edit the current image with the corresponding external editor\n overwite the file, quit the external program\n the darkroom view will be updated\n warning: mouseover on lighttable/filmstrip will prevail on current image\n this is the default DT behavior, not a bug of this script\n 🔗Additional Software Required 🔗Limitations MAC compatibility not tested 🔗Author Marco Carrarini - marco.carrarini@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/ext_editor/","tags":null,"title":"ext_editor"},{"categories":null,"content":"🔗NAME filename_increment\n🔗SYNOPSIS add a two digit increment to a filename\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.filename_increment(filepath) filepath - string - filename to increment\n🔗DESCRIPTION filename_increment solves the problem of filename conflict by adding an increment to the filename. If the supplied filename has no increment then \u0026ldquo;01\u0026rdquo; is added to the basename. If the filename already has an increment, then 1 is added to it and the filename returned.\n🔗RETURN VALUE result - string - the incremented filename\n🔗LIMITATIONS The filename will be incremented to a maximum of 99.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/filename_increment/","tags":null,"title":"filename_increment"},{"categories":null,"content":"🔗Name import_filters.lua - add filters for import_filter_manager\n🔗Description This script goes along with the import filter manager. It adds two filters:\n ignore jpegs: this one does the same as the existing option in the import dialog and just skips all JPEGs during import. prefer raw over jpeg: this one is a bit more elaborate, it ignores JPEGs when there is also another file with the same basename, otherwise it allows JPEGs, too. 🔗Usage start this script from script manager AFTER import_filter_manager.lua 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Ellinghaus \u0026amp; Christian Mandel\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/import_filters/","tags":null,"title":"import_filters"},{"categories":null,"content":"event\nThis event is triggered whenever the image under the mouse changes\n🔗mouse-over-image-changed.callback function( event : string, image : types.dt_lua_image_t ) event - string - The name of the event that triggered the callback. image - types.dt_lua_image_t - The new image under the mouse, can be nil if there is no image under the mouse 🔗mouse-over-image-changed.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/mouse-over-image-changed/","tags":null,"title":"mouse-over-image-changed"},{"categories":null,"content":"🔗Name preferenceExample.lua - show the different preference types that are possible with Lua\n🔗Description darktable script to show the different preference types that are possible with Lua\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/preferenceexamples/","tags":null,"title":"preferenceExample"},{"categories":null,"content":"function( type : string, ... : variable ) : types.lua_widget Creates a new widget object to display in the UI.\n type - string - The type of storage object to create, one of:\n box button check_button combobox container entry file_chooser_button label section_label separator slider stack text_view \u0026hellip; - variable - Extra parameters, exact value are documented with each type\n return - types.lua_widget - The newly created object. Exact type depends on the type passed\n ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.new_widget/","tags":null,"title":"darktable.new_widget"},{"categories":null,"content":"dt_type\nType object describing parameters to export to jpeg.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_jpeg.quality number\nThe quality to use at export time.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_jpeg/","tags":null,"title":"dt_imageio_module_format_data_jpeg"},{"categories":null,"content":"event\nThis event is triggered when darktable exits, it allows lua scripts to do cleanup jobs\n🔗events.exit.callback function( ) 🔗events.exit.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/exit/","tags":null,"title":"exit"},{"categories":null,"content":"🔗Name face_recognition.lua - add a new storage option and calls face_recognition after export\n🔗Description Add a new storage option to send images to face_recognition. Images are exported to darktable tmp dir first. A directory with known faces must exist, the image name are the tag names which will be used. Multiple images for one face can exist, add a number to it, the number will be removed from the tag, for example: People|IknowYou1.jpg People|IknowYou2.jpg People|Another.jpg People|Youtoo.jpg\n🔗Usage start this script from script manager. 🔗Additional Software Required https://github.com/ageitgey/face_recognition https://github.com/darktable-org/lua-scripts/tree/master/lib 🔗Limitations 🔗Author Sebastian Witt\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/face_recognition/","tags":null,"title":"face_recognition"},{"categories":null,"content":"🔗NAME get_basename\n🔗SYNOPSIS get the filename without the path or extension\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_basename(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_basename returns the name of the file without the path or filetype.\n🔗RETURN VALUE result - string - the basename of the file\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_basename/","tags":null,"title":"get_basename"},{"categories":null,"content":"🔗Name printExamples.lua - prints \u0026ldquo;hello world\u0026rdquo; when darktable starts\n🔗Description prints \u0026ldquo;hello world\u0026rdquo; to the screen when darktable starts\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/printexamples/","tags":null,"title":"printExamples"},{"categories":null,"content":"🔗Name save_selection.lua - simple shortcuts to have multiple selection buffers\n🔗Description Simple shortcuts to have multiple selection buffers\n🔗Usage start this script from script manager go to configuration =\u0026gt; preferences =\u0026gt; lua set the shortcuts you want to use This plugin will provide shortcuts to save to and restore from up to five temporary buffers\nThis plugin also provides a shortcut to swap the current selection with a quick-swap buffer\nThe variable \u0026ldquo;buffer_count\u0026rdquo; controls the number of selection buffers, increase it if you need more temporary selection buffers\n🔗Additional Software Required 🔗Limitations 🔗Author Jérémy Rosen\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/save_selection/","tags":null,"title":"save_selection"},{"categories":null,"content":"This subtable contains function and data to manipulate the darktable user interface with Lua. Most of these function won\u0026rsquo;t do anything if the GUI is not enabled (i.e you are using the command line version darktable-cli instead of darktable).\n🔗darktable.gui.action_images table\nA table of types.dt_lua_image_t on which the user expects UI actions to happen. It is based on both the hovered image and the selection and is consistent with the way darktable works. It is recommended to use this table to implement Lua actions rather than darktable.gui.hovered or darktable.gui.selection to be consistent with darktable\u0026rsquo;s GUI.\n🔗darktable.gui.hovered types.dt_lua_image_t\nThe image under the cursor or nil if no image is hovered.\n🔗darktable.gui.selection function( [selection : table of types.dt_lua_image_t] ) : table of types.dt_lua_image_t Get or change the set of selected images.\nAttributes: implicit_yield\n [selection] - table of types.dt_lua_image_t - A table of images which will define the selected images. If this parameter is not given the selection will be untouched. If an empty table is given the selection will be emptied. return - table of types.dt_lua_image_t - A table containing the selection as it was before the function was called. 🔗darktable.gui.current_view function( [view : types.dt_lua_view_t] ) : types.dt_lua_view_t Get or change the current view.\n [view] - _types.dt_lua_view_t_ - The view to switch to. If empty the current view is unchanged return - _types.dt_lua_view_t_ - the current view 🔗darktable.gui.panel_visible function( panel : types.dt_ui_panel_t ) : boolean Determines if the specified panel is visible.\n panel - types.dt_ui_panel_t - The panel to check. return - boolean - true if the panel is visible, false if not 🔗darktable.gui.panel_hide function( panel : types.dt_ui_panel_t ) Hides the specified panel.\n panel - types.dt_ui_panel_t - The panel to hide. 🔗darktable.gui.panel_show function( panel : types.dt_ui_panel_t ) Shows the specified panel.\n panel - types.dt_ui_panel_t - The panel to show. 🔗darktable.gui.panel_hide_all function( ) Hide all panels.\n🔗darktable.gui.panel_show_all function( ) Show all panels.\n🔗darktable.gui.panel_get_size function( panel : types.dt_ui_panel_t ):int Gets the size in pixels of the specified panel. This only works for the left, right, and bottom panels.\n panel - types.dt_ui_panel_t - The panel to get the size of. 🔗darktable.gui.panel_set_size function( panel : types.dt_ui_panel_t size : int ) Sets the size in pixels of the specified panel. This only works for the left, right, and bottom panels.\n panel - types.dt_ui_panel_t - The panel to set the size of. size - int - The size to set the panel to. 🔗darktable.gui.create_job function( text : string, [percentage : boolean], [cancel_callback : function] ) : types.dt_lua_backgroundjob_t Create a new progress_bar displayed in darktable.gui.libs.backgroundjobs\n text - string - The text to display in the job entry\n [percentage] - boolean - Should a progress bar be displayed\n [cancel_callback] - function - A function called when the cancel button for that job is pressed. Note: the job won\u0026rsquo;t be destroyed automatically. You need to set types.dt_lua_backgroundjob_t.valid to false for that.\n return - types.dt_lua_backgroundjob_t - The newly created job object\n 🔗cancel_callback function( job : types.dt_lua_backgroundjob_t ) job - types.dt_lua_backgroundjob_t - The job who is being cancelled 🔗darktable.gui.views The different views in darktable\n🔗darktable.gui.views.map The map view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.map.latitude number - The latitude of the center of the map Attributes:\n write 🔗darktable.gui.views.map.longitude number - The longitude of the center of the map Attributes:\n write 🔗darktable.gui.views.map.zoom number - The current zoom level of the map Attributes:\n write 🔗darktable.gui.views.darkroom The darkroom view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.darkroom.display_image function( [image : types.dt_lua_image_t] ) : types.dt_lua_image_t Display an image in darkroom view.\n **[image] - types.dt_lua_image_t - The image to be displayed. If the image is not given, nothing will be changed. return - types.dt_lua_image_t - The image currently displayed. 🔗darktable.gui.views.lighttable The lighttable view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.lighttable.is_image_visible function( image : types.dt_lua_image_t ) : types.dt_lua_image_t Check if the image is visible in lighttable view. The lighttable must be in file manager or zoomable mode.\n image - types.dt_lua_image_t - The image to be checked. return - boolean - True if the image is displayed. False if the image is partially displayed or not displayed. 🔗darktable.gui.views.lighttable.set_image_visible function( image : types.dt_lua_image_t ) : types.dt_lua_image_t Set the image visible in lighttable view. The lighttable must be in file manager or zoomable mode.\n image - types.dt_lua_image_t - The image to set visible. return - int - An error is returned if no image is specified. 🔗darktable.gui.views.tethering The tethering view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.slideshow The slideshow view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.views.print The print view\nAttributes:\n has_tostring parent : types.dt_lua_view_t 🔗darktable.gui.libs This table allows referencing all lib objects. lib objects are the graphical blocks within each view. To quickly figure out which lib is which, you can use the following code, which will make a given lib blink.\nlocal dt = require \u0026quot;darktable\u0026quot; local tested_module=\u0026quot;global_toolbox\u0026quot; dt.gui.libs[tested_module].visible=false dt.control.sleep(2000) while true do dt.gui.libs[tested_module].visible = not dt.gui.libs[tested_module].visible dt.control.sleep(2000) end 🔗darktable.gui.libs.snapshots The UI element that manipulates snapshots in darkroom\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.snapshots.ratio number - The place in the screen where the line separating the snapshot is. Between 0 and 1\nAttributes:\n write darktable.gui.libs.snapshots.direction\ntypes.snapshot_direction_t - The direction of the snapshot overlay\nAttributes:\n write 🔗darktable.gui.libs.snapshots.# types.snapshot_direction_t - The different snapshots for the image\n🔗darktable.gui.libs.snapshots.selected types.snapshot_direction_t - The currently selected snapshot\n🔗darktable.gui.libs.snapshots.take_snapshot function( ) Take a snapshot of the current image and add it to the UI The snapshot file will be generated at the next redraw of the main window\n🔗darktable.gui.libs.snapshots.max_snapshot number - The maximum number of snapshots\n🔗darktable.gui.libs.collect The collection UI element that allows to filter images by collection\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.collect.filter function( [rules : array of types.dt_lib_collect_params_rule_t] ) : array oftypes.dt_lib_collect_params_rule_t Get or change the list of visible images\nAttributes:\n implicit_yield\n [rules] - array of types.dt_lib_collect_params_rule_t - A table of rules describing the filter. These rules will be applied after this call\n return - array of types.dt_lib_collect_params_rule_t - The rules that were applied before this call.\n 🔗darktable.gui.libs.collect.new_rule function( ) : types.dt_lib_collect_params_rule_t Returns a newly created rule object\n return - types.dt_lib_collect_params_rule_t - The newly created rule 🔗darktable.gui.libs.import The buttons to start importing images\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.import.register_widget function( widget : types.lua_widget ) Add a widget in the option expander of the import dialog\n widget - types.lua_widget - The widget to add to the dialog. The reset callback of the widget will be called whenever the dialog is opened. 🔗darktable.gui.libs.styles The style selection menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.metadata_view The widget displaying metadata about the current image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.metadata_view.register_info function( name : string, callback : function ) Register a field in the image information module with a callback function to update the field\n name - string - The name displayed for the new information callback - function - The function providing the info callback -\nfunction( image : types.dt_lua_image_t ) : string image - types.dt_lua_image_t - The image to analyze return - string - The extra information to display 🔗darktable.gui.libs.metadata_view.destroy_info lua API 6.2.0\nfunction( name : string ) Remove the named field from the image information module and it\u0026rsquo;s associated callback\n name - string - The name of the field, created by darktable.gui.libs.metadata_view.register_info, to remove 🔗darktable.gui.libs.metadata The widget allowing modification of metadata fields on the current image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.hinter The small line of text at the top of the UI showing the number of selected images\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.filmstrip The filmstrip at the bottom of some views\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.viewswitcher The labels allowing to switch view\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.darktable_label The darktable logo in the upper left corner\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.tagging The tag manipulation UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.geotagging The geotagging time synchronisation UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.recentcollect The recent collection UI element\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.global_toolbox The common tools to all view (settings, grouping\u0026hellip;)\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.global_toolbox.grouping boolean- The current status of the image grouping option\nAttributes:\n write 🔗darktable.gui.libs.global_toolbox.show_overlays boolean - the current status of the image overlays option\nAttributes:\n write 🔗darktable.gui.libs.filter The image-filter menus at the top of the UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.filter.sort function( [sort : types.dt_collection_sort_t] ) : types.dt_collection_sort_t Change the collection sort field.\n [sort] - types.dt_collection_sort_t - The new field to sort by. If empty the current sort field is unchanged return - types.dt_collection_sort_t = The current sort field. 🔗darktable.gui.libs.filter.sort_order function( [order : types.dt_collection_sort_order_t] ) : types.dt_collection_sort_order_t Change the collection sort order.\n [order] - types.dt_collection_sort_order_t - The order to sort by. If empty the current sort order is unchanged. return - types.dt_collection_sort_order_t - The current sort order. 🔗darktable.gui.libs.filter.rating function( [rating : types.dt_collection_filter_t] ) : types.dt_collection_filter_t Change the collection rating filter.\n [rating] - types.dt_collection_filter_t - The new rating field to filter by. If empty the current rating field is unchanged. return - types.dt_collection_filter_t - The current rating field. 🔗darktable.gui.libs.filter.rating_comparator function( [comparator : types.dt_collection_rating_comperator_t] ) : types.dt_collection_rating_comperator_t Change the collection filter comparison field.\n [comparator] - types.dt_collection_rating_comperator_t - The new comparison field to filter the rating by. If empty the current rating comparison field is unchanged return - types.dt_collection_rating_comperator_t - The current rating comparison field 🔗darktable.gui.libs.ratings The stars to set the rating of an image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.select The buttons that allow to quickly change the selection\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.select.register_selection function( label : string, callback : function, [tooltip : string] ) Add a new button and call a callback when it is clicked\n label - string - The label to display on the button callback - function - The function to call when the button is pressed [tooltip] - string - The tooltip to use on the new button callback -\nfunction( event : string, images : table oftypes.dt_lua_image_t ) : table oftypes.dt_lua_image_t The function to call when the button is pressed\n event - string - The name of the button that was pressed images - table of types.dt_lua_image_t - The images in the current collection. This is the same content asdarktable.collection return - table of types.dt_lua_image_t - The images to set the selection to 🔗darktable.gui.libs.colorlabels The color buttons that allow to set labels on an image\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.lighttable_mode The navigation and zoom level UI in lighttable\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.lighttable_mode.layout function( [layout : types.dt_lighttable_layout_t] ) : types.dt_lighttable_layout_t Change the lighttable layout.\n [layout] - types.dt_lighttable_layout_t - The layout to switch to. If empty the current layout is unchanged return - types.dt_lighttable_layout_t - the current layout 🔗darktable.gui.libs.lighttable_mode.zoom_level function( [level : int] ) : int Change the lighttable zoom level.\n [level] - int - The zoom level to switch to. If empty the current zoom level is unchanged return - int - the current zoom level 🔗darktable.gui.libs.copy_history The UI element that manipulates history\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.image The UI element that manipulates the current images\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.image.register_action function( label : string, callback : function, [tooltip : string] ) Add a new button and call a callback when it is clicked\n label - string - The label to display on the button callback - function - The function to call when the button is pressed [tooltip] - string - The tooltip to use on the new button callback -\nfunction( event : string, images : table oftypes.dt_lua_image_t ) The function to call when the button is pressed\n event - string - The name of the button that was pressed images - table of types.dt_lua_image_t - The images to act on when the button was clicked 🔗darktable.gui.libs.modulegroups The icons describing the different iop groups\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.module_toolbox The tools on the bottom line of the UI (overexposure)\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.session The session UI when tethering\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.histogram The histogram widget\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.export The export menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.history The history manipulation menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.colorpicker The colorpicker menu\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.navigation The full image preview to allow navigation\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.masks The masks window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.view_toolbox The view_toolbox window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.live_view The liveview window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.map_settings The map setting window\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.camera The camera selection UI\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.location The location ui\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.backgroundjobs The window displaying the currently running jobs\nAttributes:\n has_tostring parent : types.dt_lua_lib_t 🔗darktable.gui.libs.print_settings The settings window in the print view\nAttributes:\n has_tostring parent : types.dt_lua_lib_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.gui/","tags":null,"title":"darktable.gui"},{"categories":null,"content":"dt_type\nType object describing parameters to export to ppm.\nAttributes:\n parent : types.dt_imageio_module_format_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_ppm/","tags":null,"title":"dt_imageio_module_format_data_ppm"},{"categories":null,"content":"🔗Name fujifilm_ratings.lua - support for importing Fujifilm in-camera ratings in darktable\n🔗Description Support for importing Fujifilm in-camera ratings in darktable.\n🔗Usage Start this script from script manager\n🔗Additional Software Required exiftool (https://www.sno.phy.queensu.ca/~phil/exiftool/)\n🔗Limitations 🔗Author Ben Mendis - ben.mendis@gmail.com\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/fujifilm_ratings/","tags":null,"title":"fujifilm_ratings"},{"categories":null,"content":"🔗NAME get_executable_path_preference\n🔗SYNOPSIS return the path to an executable from a preference\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_executable_path_preference(executable) executable - string - the name of the executable to get the path for\n🔗DESCRIPTION get_executable_path_preference returns the path preference to the requested executable.\n🔗RETURN VALUE result - string - path to the executable\n🔗LIMITATIONS executable should be the basename of the executable without extensions\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_executable_path_preference/","tags":null,"title":"get_executable_path_preference"},{"categories":null,"content":"event\nThis event is trigger before any import action\n🔗pre-import.callback function( event : string, images : table of string ) event - string - The name of the event that triggered the callback. images - table of string - The files that will be imported. Modifying this table will change the list of files that will be imported. 🔗pre-import.extra registration parameters This event has no extra registration parameters.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/events/pre-import/","tags":null,"title":"pre-import"},{"categories":null,"content":"🔗Name running_os.lua - prints the operating system\n🔗Description prints the operating system\n🔗Usage start this script from script manager 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/examples/running_os/","tags":null,"title":"running_os"},{"categories":null,"content":"🔗Name selection_to_pdf.lua - generate a PDF file (via Latex) containing all selected images\n🔗Description Generates a PDF file (via Latex) containing all selected images\nThis plugin will add a new exporter that will allow you to generate the pdf file\nPlugin allows you to choose how many thumbnails you need per row\n🔗Usage start this script from script manager 🔗Additional Software Required a PDF-Viewer pdflatex (Latex) 🔗Limitations 🔗Author Jérémy Rosen \u0026amp; Pascal Obry\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/official/selection_to_pdf/","tags":null,"title":"selection_to_pdf"},{"categories":null,"content":"table\nGuide lines to overlay over an image in crop and rotate. All guides are clipped to the drawing area.\n🔗darktable.guides.register_guide function( name : string, draw_callback : function, [gui_callback : function] ) Register a new guide.\n name - string - The name of the guide to show in the GUI. draw_callback - function - The function to call to draw the guide lines. [gui_callback] - function - A function returning a widget to show when the guide is selected. It takes no arguments. draw_callback -\nfunction( cr : types.dt_lua_cairo_t, x : float, y : float, width : float, height : float, zoom_scale : float ) The function to call to draw the guide lines. The drawn lines will be stroked by darktable. THIS IS RUNNING IN THE GUI THREAD AND HAS TO BE FAST!\n cr - types.dt_lua_cairo_t - The cairo object used for drawing. x - float - The x coordinate of the top left corner of the drawing area. y - float - The y coordinate of the top left corner of the drawing area. width - float - The width of the drawing area. height - float - The height of the drawing area. zoom_scale - float -The current zoom_scale. Only needed when setting the line thickness. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.guides/","tags":null,"title":"darktable.guides"},{"categories":null,"content":"dt_type\nType object describing parameters to export to webp.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_webp.quality number\nThe quality to use at export time.\nAttributes:\n write 🔗dt_imageio_module_format_data_webp.comp_type types.comp_type_t\nThe overall quality to use; can be one of \u0026ldquo;webp_lossy\u0026rdquo; or \u0026ldquo;webp_lossless\u0026rdquo;.\nAttributes:\n write 🔗dt_imageio_module_format_data_webp.hint types.hint_t\nA hint on the overall content of the image.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_webp/","tags":null,"title":"dt_imageio_module_format_data_webp"},{"categories":null,"content":"🔗Name geoJSON_export.lua - export a geoJSON file from selected images\n🔗Description darktable geoJSON export script\n🔗Usage start this script using script manager 🔗Additional Software Required mkdir convert (ImageMagick) xdg-open xdg-user-dir 🔗Limitations This script is only tested with Linux\n🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geojson_export/","tags":null,"title":"geoJSON_export"},{"categories":null,"content":"🔗NAME get_filename\n🔗SYNOPSIS get the filename and extension from a file path\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_filename(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_filename strips the path from a filepath and returns the filename\n🔗RETURN VALUE result - string - the file name and type\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_filename/","tags":null,"title":"get_filename"},{"categories":null,"content":"Allows access to all existing tags.\n🔗darktable.tags.# types.dt_lua_tag_t\nEach existing tag has a numeric entry in the tags table - use ipairs to iterate over them.\n🔗darktable.tags.create function( name : string ) Creates a new tag and return it. If the tag exists return the existing tag.\n name - string - The name of the new tag. 🔗darktable.tags.find function( name : string ) : types.dt_lua_tag_t Returns the tag object or nil if the tag doesn\u0026rsquo;t exist.\n name - string - The name of the tag to find. return - _ types.dt_lua_tag_t_ - The tag object or nil. 🔗darktable.tags.delete function( tag : types.dt_lua_tag_t ) Deletes the tag object, detaching it from all images.\n tag - types.dt_lua_tag_t - The tag to be deleted. 🔗darktable.tags.attach function( tag : types.dt_lua_tag_t, image : types.dt_lua_image_t ) Attach a tag to an image; the order of the parameters can be reversed.\n tag - types.dt_lua_tag_t - The tag to be attached. image - types.dt_lua_image_t - The image to attach the tag to. 🔗darktable.tags.detach function( tag : types.dt_lua_tag_t, image : types.dt_lua_image_t ) Detach a tag from an image; the order of the parameters can be reversed.\n tag - types.dt_lua_tag_t - The tag to be detached. image - types.dt_lua_image_t - The image to detach the tag from. 🔗darktable.tags.get_tags function( image : types.dt_lua_image_t ) : table of types.dt_lua_tag_t Gets all tags attached to an image.\n image - types.dt_lua_image_t - The image to get the tags from. return - table of types.dt_lua_tag_t - A table of tags that are attached to the image. 🔗darktable.tags.get_tagged_images function( tag : types.dt_lua_tag_t ) : table of types.dt_lua_image_t Gets all images with the attached tag.\n tag - types.dt_lua_tag_t - The tag to search images for. return - table of types.dt_lua_image_t - A table of images that have the tag attached. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.tags/","tags":null,"title":"darktable.tags"},{"categories":null,"content":"dt_type\nType object describing parameters to export to jpeg2000.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_j2k.quality number\nThe quality to use at export time.\nAttributes:\n write 🔗dt_imageio_module_format_data_j2k.bpp number\nThe bpp parameter to use when exporting.\nAttributes:\n write 🔗dt_imageio_module_format_data_j2k.format types.dt_imageio_j2k_format_t\nThe format to use.\nAttributes:\n write 🔗dt_imageio_module_format_data_j2k.preset types.dt_imageio_j2k_preset_t\nThe preset to use.\nAttributes: 62\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_j2k/","tags":null,"title":"dt_imageio_module_format_data_j2k"},{"categories":null,"content":"🔗Name geoToolbox.lua - a module of geo tools\n🔗Description it creates a new geoToolbox lighttable module 🔗Usage require this script from your main lua file To do this add this line to the file .config/darktable/luarc: require \u0026ldquo;geoToolbox\u0026rdquo; 🔗Additional Software Required 🔗Limitations 🔗Author Tobias Jakobs\n🔗Change Log ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/geotoolbox/","tags":null,"title":"geoToolbox"},{"categories":null,"content":"🔗NAME get_filetype\n🔗SYNOPSIS get the filetype from a filename\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_filetype(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_filetype returns the filetype from the supplied filepath\n🔗RETURN VALUE result - string - the filetype\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_filetype/","tags":null,"title":"get_filetype"},{"categories":null,"content":"table\nThis table includes values that describe details of the configuration of darktable.\n🔗darktable.configuration.version string\nThe version number of darktable.\n🔗darktable.configuration.has_gui boolean\nTrue if darktable has a GUI (launched through the main darktable command, not darktable-cli).\n🔗darktable.configuration.verbose boolean\nTrue if the Lua logdomain is enabled.\n🔗darktable.configuration.tmp_dir string\nThe name of the directory where darktable will store temporary files.\n🔗darktable.configuration.config_dir string\nThe name of the directory where darktable will find its global configuration objects (modules).\n🔗darktable.configuration.cache_dir string\nThe name of the directory where darktable will store its mipmaps.\n🔗darktable.configuration.api_version_major number\nThe major version number of the lua API.\n🔗darktable.configuration.api_version_minor number\nThe minor version number of the lua API.\n🔗darktable.configuration.api_version_patch number\nThe patch version number of the lua API.\n🔗darktable.configuration.api_version_suffix string\nThe version suffix of the lua API.\n🔗darktable.configuration.api_version_string string\nThe version description of the lua API. This is a string compatible with the semantic versioning convention\n🔗darktable.configuration.running_os string\nThe name of the Operating system darktable is currently running on\n🔗darktable.configuration.check_version function( module_name : string, ... : table... ) Check that a module is compatible with the running version of darktable Add the following line at the top of your module : darktable.configuration.check(...,{M,m,p},{M2,m2,p2}) To document that your module has been tested with API version M.m.p and M2.m2.p2. This will raise an error if the user is running a released version of DT and a warning if he is running a development version (the \u0026hellip; here will automatically expand to your module name if used at the top of your script).\n module_name - string - The name of the module to report on error \u0026hellip; - table - Tables of API versions that are known to work with the script ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.configuration/","tags":null,"title":"darktable.configuration"},{"categories":null,"content":"dt_type\nType object describing parameters to export to pdf.\nAttributes:\n parent : types.dt_imageio_module_format_t 🔗dt_imageio_module_format_data_pdf.dpi number\nThe dot per inch value to use at export\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.icc boolean\nShould the images be tagged with their embedded profile\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.border string\nEmpty space around the PDF images\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.orientation string\nOrientation of the pages in the document\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.title string\nThe title for the document\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.rotate boolean\nShould the images be rotated to match the PDF orientation\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.mode string\nThe image mode to use at export time\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.size string\nThe paper size to use\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.compression string\nCompression mode to use for images\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.pages string\nThe page type to use\nAttributes:\n write 🔗dt_imageio_module_format_data_pdf.rotate boolean\nShould the images be rotated in the resulting PDF\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_format_data_pdf/","tags":null,"title":"dt_imageio_module_format_data_pdf"},{"categories":null,"content":"🔗NAME get_path\n🔗SYNOPSIS get the path from a file path\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.get_path(filepath) filepath - string - path and filename\n🔗DESCRIPTION get_path strips the filename and filetype from a path and returns the path\n🔗RETURN VALUE result - string - the path\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/get_path/","tags":null,"title":"get_path"},{"categories":null,"content":"🔗Name gimp.lua - export and edit with GIMP\n🔗Description This script provides another storage (export target) for darktable. Selected images are exported in the specified format to temporary storage. GIMP is launched and opens the files. After editing, the exported images are overwritten to save the changes. When GIMP exits, the exported files are moved into the current collection and imported into the database. The imported files then show up grouped with the originally selected images.\n🔗Usage start this script using script manager select an image or images for editing with GIMP in the export dialog select \u0026ldquo;Edit with GIMP\u0026rdquo; and select the format and bit depth for the exported image Press \u0026ldquo;export\u0026rdquo; Edit the image with GIMP then save the changes with File-\u0026gt;Overwrite\u0026hellip;. Exit GIMP The edited image will be imported and grouped with the original image 🔗Additional Software Required GIMP - http://www.gimp.org 🔗Limitations There is no provision for dealing with the xcf files generated by GIMP, since darktable doesn\u0026rsquo;t deal with them. You may want to save the xcf file if you intend on doing further edits to the image or need to save the layers used. Where you save them is up to you. 🔗Author Bill Ferguson - wpferguson@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gimp/","tags":null,"title":"gimp"},{"categories":null,"content":"enum\nThe export mode to use for PDF document\nValues:\n normal draft debug ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/_pdf_mode_t/","tags":null,"title":"_pdf_mode_t"},{"categories":null,"content":"table\nLua allows you to manipulate preferences. Lua has its own namespace for preferences and you can\u0026rsquo;t write normal darktable preferences. Preference handling functions take a script parameter. This is a string used to avoid name collision in preferences (i.e namespace). Set it to something unique, usually the name of the script handling the preference. Preference handling functions can\u0026rsquo;t guess the type of a parameter. You must pass the type of the preference you are handling. Note that the directory, enum, lua and file type preferences are stored internally as string. The user can only select valid values, but a lua script can set it to any string\n🔗darktable.preferences.register function( script : string, name : string, type : types.lua_pref_type, label : string, tooltip : string, [default : depends on type], [min : int or float], [max : int or float], [step : float], [values : string...], [widget : types.lua_widget], [set_callback : function] ) Creates a new preference entry in the Lua tab of the preference screen. If this function is not called the preference can\u0026rsquo;t be set by the user (you can still read and write invisible preferences).\n script - string - Invisible prefix to guarantee unicity of preferences. name - string - A unique name used with the script part to identify the preference. type - _types.lua_pref_type_The type of the preference - one of the string values described above. label - string - The label displayed in the preference screen. tooltip - string - The tooltip to display in the preference menu. [default] - Thedepends on type - Default value to use when not set explicitly or by the user. For the enum type of pref, this is mandatory [mi] - int or float - Minimum value (integer and float preferences only). [max] - int or float - Maximum value (integer and float preferences only). [step] - float - Step of the spinner (float preferences only). [values] - string - Other allowed values (enum preferences only) [widget] - types.lua_widget - The widget to use in preference (lua preferences only) [set_callback] - function_ - A function called when the widget needs to be updated from the preference [set_callback] -\nfunction( widget : types.lua_widget ) A function called when the widget needs to be updated from the preference\n widget - types.lua_widget - The widget to update 🔗darktable.preferences.read function( script : string, name : string, type : types.lua_pref_type ) : depends on type Reads a value from a Lua preference.\n script - string - Invisible prefix to guarantee unicity of preferences. Lua API 6.2.0 Specifying \u0026ldquo;darktable\u0026rdquo; as the script name allows access to the darktable core preferences. name - string - The name of the preference displayed in the preference screen. type - types.lua_pref_type - The type of the preference. return - depends on type - The value of the preference. 🔗darktable.preferences.write function( script : string, name : string, type : types.lua_pref_type, value : depends on type ) Writes a value to a Lua preference.\n script - string - Invisible prefix to guarantee unicity of preferences. name - string - The name of the preference displayed in the preference screen. type - types.lua_pref_type - The type of the preference. value - depends on type - The value to set the preference to. Lua API 6.2.0\n🔗darktable.preferences.destroy function( script : string, name : string, ) : return boolean Destroys a lua preference key and value.\n script - string - Invisible prefix to guarantee unicity of preferences. name - string - The name of the preference displayed in the preference screen. return - boolean - True for success, false otherwise. Lua API 6.2.0\n🔗darktable.preferences.get_keys function( script : string, name : string, ) : return table of strings Get all of the darktable core and lua preference keys and return them in a sorted table.\n return - table of string - Sorted darktable core preference and lua preference keys. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.preferences/","tags":null,"title":"darktable.preferences"},{"categories":null,"content":"🔗Name gpx_export.lua - gpx exporter\n🔗Description Simple darktable GPX generator script\nThis script generates a GPX track from all images having GPS latitude and longitude information. For each source folder, a separate \u0026lt;trk\u0026gt; is generated in the gpx file.\n🔗Usage 🔗Additional Software Required 🔗Limitations 🔗Author Jannis_V\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/gpx_export/","tags":null,"title":"gpx_export"},{"categories":null,"content":"🔗NAME mkdir\n🔗SYNOPSIS create the directory(ies) if they do not already exist\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; df.mkdir(path) path - string - a directory path\n🔗DESCRIPTION mkdir creates directories if they do not already exist. It creates parent directories if needed.\n🔗RETURN VALUE path - string - a directory path\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/mkdir/","tags":null,"title":"mkdir"},{"categories":null,"content":"🔗Lua API 6.2.0 Store and retrieve credentials using the darktable password storage backend.\n🔗darktable.password.save function( application : string, username : string, password : string ) :boolean Save a username/password pair for use accessing an application.\n application - string - Name of application or website. username - string - The username used to access the application or website. password - string - The credential used to authenticate the username. return - boolean - True if the credentials are saved, false if they are not. 🔗darktable.password.get function( application : string, username : string ) :string Retrieves the password associated with the username for the application.\n application - string - Name of application or website. username - string - The username used to access the application or website. return - string - The credentials used to authenticate the user. Nil is returned if there is an error or the crendentials don\u0026rsquo;t exist. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/password/","tags":null,"title":"darktable.password"},{"categories":null,"content":"enum\nThe different page types for PDF export\nValues :\n all single contact ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/_pdf_pages_t/","tags":null,"title":"_pdf_pages_t"},{"categories":null,"content":"This pseudo table allows you to access and manipulate styles.\n🔗darktable.styles.# types.dt_style_t\nEach existing style has a numeric index; you can iterate them using ipairs.\n🔗darktable.styles.create function( image : types.dt_lua_image_t, name : string, description : string ) : types.dt_style_t Create a new style based on an image.\n image - types.dt_lua_image_t - The image to create the style from. name - string - The name to give to the new style. description - string - The description of the new style. return - types.dt_style_t - The new style object. 🔗darktable.styles.delete function( style : types.dt_style_t ) Deletes an existing style.\n style - types.dt_style_t - the style to delete 🔗darktable.styles.duplicate function( style : types.dt_style_t, name : string, description : string ) : types.dt_style_t Create a new style based on an existing style.\n style - types.dt_style_t - The style to base the new style on. name - string - The new style\u0026rsquo;s name. description - string - The new style\u0026rsquo;s description. return - types.dt_style_t - The new style object. 🔗darktable.styles.apply function( style : types.dt_style_t, image : types.dt_lua_image_t ) Apply a style to an image. The order of parameters can be inverted.\n style - types.dt_style_t - The style to use. image - types.dt_lua_image_t - The image to apply the style to. 🔗darktable.styles.import function( filename : string ) Import a style from an external .dtstyle file\n filename - string - The file to import 🔗darktable.styles.export function( style : types.dt_style_t, directory : string, overwrite : boolean ) Export a style to an external .dtstyle file\n style - types.dt_style_t - The style to export directory - string - The directory to export to overwrite - boolean - Is overwriting an existing file allowed ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.styles/","tags":null,"title":"darktable.styles"},{"categories":null,"content":"🔗Name HDRMerge.lua - create an HDR image using HDRMerge\n🔗Description This plugin adds the module \u0026lsquo;HDRMerge\u0026rsquo; to darktable\u0026rsquo;s lighttable view\n🔗Usage Start this script using script manager.\nOn the initial startup go to darktable settings \u0026gt; lua options and set your executable paths and other preferences, then restart darktable\nSelect bracketed images and press the Run HDRMerge button. The resulting DNG will be auto-imported into darktable. Additional tags or style can be applied on auto import as well, if you desire.\n🔗Base Options Select your desired BPS (bits per sample and Embedded Preview Size.\n🔗Batch Options Select if you want to run in batch mode or not Select the gap, in seconds, between images for auto grouping in batch mode\nSee HDRMerge manual for further detail: http://jcelaya.github.io/hdrmerge/documentation/2014/07/11/user-manual.html\n🔗Auto-import Options Select a style, whether you want tags to be copied from the original, and any additional tags you desire added when the new image is auto-imported\n🔗Additional Software Required HDRMerge ver. 4.5 or greater\n🔗Limitations 🔗Author Kevin Ertel\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hdrmerge/","tags":null,"title":"HDRMerge"},{"categories":null,"content":"🔗NAME rmdir\n🔗SYNOPSIS recursively remove a directory\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; df.rmdir(path) path - string - a directory path\n🔗DESCRIPTION rmdir allows directories to be removed recursively.\n🔗RETURN VALUE path - string - a directory path\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/rmdir/","tags":null,"title":"rmdir"},{"categories":null,"content":"enum\nThe compression mode for PDF document\nValues:\n uncompressed deflate ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_pdf_stream_encoder_t/","tags":null,"title":"dt_pdf_stream_encoder_t"},{"categories":null,"content":"🔗Name hugin.lua - stitch multiple images into a panorama\n🔗Description Add a new storage option to send images to hugin. Images are exported to darktable tmp dir first.\n🔗Usage start this script from script manager set the hugin tool paths (on some platforms) if hugin gui mode is used, save the final result in the tmp directory with the first file name and _pano as suffix for the image to be automatically imported to DT afterwards 🔗Additional Software Required hugin 🔗Limitations 🔗Author Wolfgang Goetz\nChristian Kanzian\nTobias Jakobs\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/hugin/","tags":null,"title":"hugin"},{"categories":null,"content":"🔗NAME sanitize_filename\n🔗SYNOPSIS make a filename safe to pass as an argument\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local sanitized_filename = df.sanitize_filename(filename) filename - string - a filepath and filename\n🔗DESCRIPTION sanitize_filename places quotes around the filename in an operating system specific manner. The result is safe to pass as an argument to the operating system.\n🔗RETURN VALUE sanitized_filename - string - quoted filename\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/sanitize_filename/","tags":null,"title":"sanitize_filename"},{"categories":null,"content":"Allows to access the currently worked on images, i.e the ones selected by the collection lib. Filtering (rating etc) does not change that collection.\n🔗darktable.collection.# types.dt_lua_image_t\nEach image in the collection appears with a numerical index; you can iterate them using ipairs.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.collection/","tags":null,"title":"darktable.collection"},{"categories":null,"content":"Allows access to the database of images. Note that duplicate images (images with the same RAW but different XMP) will appear multiple times with different duplicate indexes. Also note that all images are here. This table is not influenced by any GUI filtering (collections, stars etc\u0026hellip;).\n🔗darktable.database.# types.dt_lua_image_t\nEach image in the database appears with a numerical index; you can iterate over them using ipairs.\n🔗darktable.database.duplicate function( image : types.dt_lua_image_t ) : types.dt_lua_image_t Creates a duplicate of an image and returns it.\n image - types.dt_lua_image_t - the image to duplicate return - types.dt_lua_image_t - The new image object. 🔗darktable.database.import function( location : string ) : types.dt_lua_image_t Imports new images into the database.\n location - string - The filename or directory to import images from. NOTE: If the images are set to be imported recursively in preferences only the toplevel film is returned (the one whose path was given as a parameter). NOTE 2: If the parameter is a directory the call is nonblocking; the film object will not have the newly imported images yet. Use a post-import-film filtering on that film to react when images are actually imported. return - types.dt_lua_image_t - The created image if an image is imported or the toplevel film object if a film was imported. 🔗darktable.database.get_image Lua API 6.2.0\nfunction( image_id : int, ) : types.dt_lua_image_t Get an image, specified by image_id, from the database.\n image_id - int - The id number of the image to get return - types.dt_lua_image_t - The image object if found, otherwise nil 🔗darktable.database.move_image function( image : types.dt_lua_image_t, film : types.dt_lua_film_t, [newname : string] ) Physically moves an image (and all its duplicates) to another film, and/or renames the image file. This will move the image file, the related XMP and all XMP for the duplicates to the directory of the new film and rename them as specified. Note that the order of the two required parameters is not relevant.\n image - types.dt_lua_image_t - The image to move film - types.dt_lua_image_t - The film to move to. To rename a file within the same film, set this to the image\u0026rsquo;s current film. [newname] - string - (Optional) If provided, rename the file with this new name. Must not contain any path separator characters. 🔗darktable.database.copy_image function( image : types.dt_lua_image_t, film : types.dt_lua_film_t, [newname : string] ) : types.dt_lua_image_t Physically copies an image to another film. This will copy the image file and the related XMP to the directory of the new film and rename them as specified. If there is already a file with the same name as the image file, it will create a duplicate from that file instead. Note that the order of the two required parameters is not relevant.\n image - types.dt_lua_image_t - The image to copy film - types.dt_lua_image_t - The film to copy to. To make a copy of a file within the same film, set this to the image\u0026rsquo;s current film. [newname] - string - (Optional) If provided, give the copy this new filename. Must not contain any path separator characters. return - types.dt_lua_image_t - The new image 🔗darktable.database.delete see types.dt_lua_image_t.delete\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.database/","tags":null,"title":"darktable.database"},{"categories":null,"content":"dt_type\nA virtual type representing all storage types.\n🔗dt_imageio_module_storage_t.plugin_name string\nA unique name for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.name string\nA human readable name for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.width number\nThe currently selected width for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.height number\nThe currently selected height for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.recommended_width number The recommended width for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.recommended_height number\nThe recommended height for the plugin.\nAttributes:\n write 🔗dt_imageio_module_storage_t.supports_format format : types.dt_imageio_module_format_t ) : boolean Checks if a format is supported by this storage.\n self - types.dt_imageio_module_storage_t - The storage type to check against. format - types.dt_imageio_module_format_t - The format type to check. return - boolean - True if the format is supported by the storage. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_t/","tags":null,"title":"dt_imageio_module_storage_t"},{"categories":null,"content":"🔗Name image_stack.lua - process a stack of images\n🔗Description This script provides another storage (export target) for darktable. Selected images are exported in the specified format to temporary storage. The images are aligned if the user requests it. When the images are ready, imagemagick is launched and uses the selected evaluate-sequence operator to process the images. The output file is written to a filename representing the input files in the format specified by the user. The resulting image is imported into the film roll. The source images can be tagged as part of the file creation so that a user can later find the contributing images.\n🔗Usage start this script using script manager select the images to process with image_stack in the export dialog select \u0026ldquo;image stack\u0026rdquo; and select the format and bit depth for the exported image Select whether the images need to be aligned. Select the stack operator Select the output format Select whether to tag the source images used to create the resulting file Specify executable locations if necessary Press \u0026ldquo;export\u0026rdquo; The resulting image will be imported 🔗Additional Software Required align_image_stack - http://www.hugin.org imagemagick - http://www.imagemagick.org 🔗Limitations Mean is a fairly quick operation. On my machine (i7-6800K, 16G) it takes a few seconds. Median, on the other hand takes approximately 10x longer to complete. Processing 10 and 12 image stacks took over a minute. I didn\u0026rsquo;t test all the other functions, but the ones I did fell between Mean and Median performance wise.\n🔗Author Bill Ferguson - wpferguson@gmail.com\n🔗See Also Thanks to Pat David and his blog entry on blending images, https://patdavid.net/2013/05/noise-removal-in-photos-with-median_6.html ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_stack/","tags":null,"title":"image_stack"},{"categories":null,"content":"🔗NAME set_executable_path_preference\n🔗SYNOPSIS set a preference for the path to an executable\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; df.set_executable_path_preference(executable, path) executable - string - the name of the executable to set the path for\npath - string - the path to the binary\n🔗DESCRIPTION set_executable_path_preference takes an executable name and path to the executable and registers the preference for later use.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/set_executable_path_preference/","tags":null,"title":"set_executable_path_preference"},{"categories":null,"content":"This table contain function to manipulate the control flow of lua programs. It provides ways to do background jobs and other related functions\n🔗darktable.control.ending boolean\nTRUE when darktable is terminating Use this variable to detect when you should finish long running jobs\n🔗darktable.control.dispatch function( function : function, ... : anything ) Runs a function in the background. This function will be run at a later point, after luarc has finished running. If you do a loop in such a function, please check darktable.control.ending in your loop to finish the function when darktable exits\n function - function - The call to dispatch \u0026hellip; - anything - extra parameters to pass to the function 🔗darktable.control.sleep function( delay : int ) Suspends execution while not blocking darktable\n delay - int - The delay in millisecond to sleep 🔗darktable.control.execute function( command : string ) : int Run a command in a shell while not blocking darktable\n command - string - The command to run, as in \u0026lsquo;sh -c\u0026rsquo; return - int - The result of the system call 🔗darktable.control.read function( file : file ) Block until a file is readable while not blocking darktable This function is not available on Windows builds\n file - file - The file object to wait for ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.control/","tags":null,"title":"darktable.control"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to email.\nAttributes:\n parent : types.dt_imageio_module_storage_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_email/","tags":null,"title":"dt_imageio_module_storage_data_email"},{"categories":null,"content":"🔗Name image_time.lua - synchronize image time for images shot with different cameras\n🔗Description image_time non destructively adjusts image times by modifying the database image exif_datetime_taken field. There are 4 modes: adjust time, set time, synchronize time, and reset time.\n🔗ADJUST TIME adjust time mode lets you chose an offset in terms of years, months, days, hours, minutes, and seconds. The adjustment can be added or subtracted.\nWARNING: When adding and subtracting months the result will usually be what is expected unless the time being adjusted is at the end of the month. This is because a month is a variable amount of time that can be 28, 29, 30 or 31 days depending on the month. Example: It\u0026rsquo;s March 31st and I subtract a month which not sets the time to February 31st. When that gets set to a valid time, then the date changes to March 3rd.\n🔗SET TIME set time mode allows you to pick a date and time and set the image time accordingly. Fields may be left out. This is useful when importing scanned images that don\u0026rsquo;t have an embedded date.\n🔗SYNCHRONIZE TIME I recently purchased a 7DmkII to replace my aging 7D. My 7D was still serviceable, so I bought a remote control and figured I\u0026rsquo;d try shooting events from 2 different perspectives. I didn\u0026rsquo;t think to synchonize the time between the 2 cameras, so when I loaded the images and sorted by time it was a disaster. I hacked a script together with hard coded values to adjust the exif_datetime_taken value in the database for the 7D images so that everything sorted properly. I\u0026rsquo;ve tried shooting with 2 cameras several times since that first attempt. I\u0026rsquo;ve gotten better at getting the camera times close, but still haven\u0026rsquo;t managed to get them to sync. So I decided to think the problem through and write a proper script to take care of the problem.\n🔗RESET TIME Select the images and click reset.\n🔗Usage 🔗ADJUST TIME Change the year, month, day, hour, minute, second dropdowns to the amount of change desired. Select add or subtract. Select the images. Click adjust.\n🔗SET TIME Set the time fields to the desired time. Select the images to change. Click set.\n🔗SYNCHRONIZE TIME Select 2 images, one from each camera, of the same moment in time. Click the Calculate button to calculate the time difference. The difference is displayed in the difference entry. You can manually adjust it by changing the value if necessary.\nSelect the images that need their time adjusted. Determine which way to adjust adjust the time (add or subtract) and select the appropriate choice.\nIf the image times get messed up and you just want to start over, select reset time from the mode and reset the image times.\n🔗RESET TIME Select the images and click reset.\n🔗Additional Software Required exiv2 🔗Limitations 🔗Author Bill Ferguson - wpferguson@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/image_time/","tags":null,"title":"image_time"},{"categories":null,"content":"🔗NAME split_filepath\n🔗SYNOPSIS split a filepath into parts\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.split_filepath(filepath) filepath - string - path and filename\n🔗DESCRIPTION split_filepath splits a filepath into the path, filename, basename and filetype and puts that in a table\n🔗RETURN VALUE result - table - a table containing the path, filename, basename, and filetype\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/split_filepath/","tags":null,"title":"split_filepath"},{"categories":null,"content":"table\nThis table contains functions related to translating lua scripts\n🔗darktable.gettext.gettext function( msgid : string ) : string Translate a string using the darktable textdomain\n msgid - string - The string to translate return - string - The translated string 🔗darktable.gettext.dgettext function( domainname : string, msgid : string ) : string Translate a string using the specified textdomain\n domainname - string - The domain to use for that translation msgid - string - The string to translate return - string - The translated string 🔗darktable.gettext.ngettext function( msgid : string, msgid_plural : string, n : int ) : string Translate a string depending on the number of objects using the darktable textdomain\n msgid - string - The string to translate msgid_plural - string - The string to translate in plural form n - int - The number of objects return - string - The translated string 🔗darktable.gettext.dngettext function( domainname : string, msgid : string, msgid_plural : string, n : int ) : string Translate a string depending on the number of objects using the specified textdomain\n domainname - string - The domain to use for that translation msgid - string - The string to translate msgid_plural - string - The string to translate in plural form n - int - The number of objects return - string - The translated string 🔗darktable.gettext.bindtextdomain function( domainname : string, dirname : string ) Tell gettext where to find the .mo file translating messages for a particular domain\n domainname - string - The domain to use for that translation dirname - string - The base directory to look for the file. The file should be placed in dirname/locale name/LC_MESSAGES/domain.mo ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.gettext/","tags":null,"title":"darktable.gettext"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to latex.\nAttributes:\n parent : types.dt_imageio_module_storage_t 🔗dt_imageio_module_storage_data_latex.filename string\nThe filename to export to.\nAttributes:\n write 🔗dt_imageio_module_storage_data_latex.title string\nThe title to use for export.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_latex/","tags":null,"title":"dt_imageio_module_storage_data_latex"},{"categories":null,"content":"🔗Name kml_export.lua - export a kml file from selected images\n🔗Description darktable KML export script\n🔗Usage start this script from script manager when choosing file format, pick JPEG or PNG as Google Earth doesn\u0026rsquo;t support other formats 🔗Additional Software Required zip (at the moment Linux only and only if you create KMZ files) magick (ImageMagick) xdg-user-dir (Linux) 🔗Limitations This script is only tested with Linux\n🔗Author Tobias Jakobs\nErik Augustin\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/kml_export/","tags":null,"title":"kml_export"},{"categories":null,"content":"🔗NAME test_file\n🔗SYNOPSIS test a file to see what it is\n🔗USAGE local df = require \u0026quot;lib/dtutils.file\u0026quot; local result = df.test_file(path, test) path - string - path and filename test - char - one of d, e, f, x where\n d - directory e - exists f - file x - executable 🔗DESCRIPTION test_file checks a specified path to see if it meets the specified test\n🔗RETURN VALUE result - boolean - true if the path satisfies the test, false if not\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.api.manual/dtutils.file/test_file/","tags":null,"title":"test_file"},{"categories":null,"content":"table\nThis section must be activated separately by calling require darktable.debug\n🔗darktable.debug.dump function( object : anything, [name : string], [known : table] ) : string This will return a string describing everything Lua knows about an object, used to know what an object is. This function is recursion-safe and can be used to dump _G if needed.\n object - anything - The object to dump. [name] - string - A name to use for the object. [known] - table - A table of object,string pairs. Any object in that table will not be dumped, the string will be printed instead. defaults to darktable.debug.known if not set return - string - A string containing a text description of the object - can be very long. 🔗darktable.debug.debug boolean\nInitialized to false; set it to true to also dump information about metatables.\n🔗darktable.debug.max_depth number\nInitialized to 10; The maximum depth to recursively dump content.\n🔗darktable.debug.known table\nA table containing the default value of darktable.debug.dump.known\n🔗darktable.debug.type function( object : anything ) : string Similar to the system function type() but it will return the real type instead of userdata for darktable specific objects.\n object - anything - The object whose type must be reported. return - string - A string describing the type of the object. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/darktable/darktable.debug/","tags":null,"title":"darktable.debug"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to piwigo.\nAttributes:\n parent : types.dt_imageio_module_storage_t ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_piwigo/","tags":null,"title":"dt_imageio_module_storage_data_piwigo"},{"categories":null,"content":"🔗Name LabelsToTags.lua - mass apply tags to images\n🔗Description Allows the mass-application of tags using color labels and ratings as a guide.\n🔗Usage In your \u0026lsquo;luarc\u0026rsquo; file or elsewhere, use the function \u0026lsquo;register_tag_mapping\u0026rsquo;, defined in this module, to specify one or more tag mappings for use by the module. Any mappings so registered will be selectable, according to their given names, in the module\u0026rsquo;s \u0026ldquo;mapping\u0026rdquo; combo box.\nA mapping takes the form of a table mapping patterns to lists of tags. A pattern consists of 6 characters, of which the first five represent color labels and the last the rating. Each color label character may be \u0026lsquo;+\u0026rsquo;, \u0026lsquo;-\u0026rsquo;, or \u0026lsquo;\u0026rsquo;, indicating that for this pattern to match, the corresponding color label, respectively, must be on, must be off, or can be either. Similarly, the rating character may be a numeral between 0 and 5, \u0026ldquo;R\u0026rdquo; for rejected, or \u0026ldquo;\u0026rdquo; for \u0026ldquo;any value.\u0026rdquo;\nAn example call to \u0026lsquo;register_tag_mapping\u0026rsquo; is provided in a comment at the end of this file.\nWhen the \u0026ldquo;Start\u0026rdquo; button is pressed, the module will iterate over each selected image and check the state of that image\u0026rsquo;s color labels and rating against each pattern defined in the selected mapping. For each pattern that matches, the corresponding tags will be added to the image. Any such tag not already existing in the database will be created.\n🔗Additional Software Required 🔗Limitations 🔗Author August Schwerdfeger - august@schwerdfeger.name\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/labelstotags/","tags":null,"title":"LabelsToTags"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to gallery.\nAttributes:\n parent : types.dt_imageio_module_storage_t 🔗dt_imageio_module_storage_data_gallery.filename string\nThe filename to export to.\nAttributes:\n write 🔗dt_imageio_module_storage_data_gallery.title string\nThe title to use for export.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_gallery/","tags":null,"title":"dt_imageio_module_storage_data_gallery"},{"categories":null,"content":"🔗Name OpenInExplorer.lua - open an images containing folder\n🔗Description This plugin adds the module \u0026ldquo;OpenInExplorer\u0026rdquo; to darktable\u0026rsquo;s lighttable view.\n🔗Usage Require this file in your luarc file, as with any other dt plug-in\nSelect the photo(s) you wish to find in your operating system\u0026rsquo;s file manager and press \u0026ldquo;show in file explorer\u0026rdquo; in the \u0026ldquo;selected images\u0026rdquo; section.\n Nautilus (Linux), Explorer (Windows), and Finder (macOS prior to Mojave) will open one window for each selected image at the file\u0026rsquo;s location. The file name will be highlighted.\n On macOS Mojave and Catalina the Finder will open one window for each different directory. In these windows only the last one of the corresponding files will be highlighted (bug or feature?).\n Dolphin (Linux) will open one window with tabs for the different directories. All the selected images' file names are highlighted in their respective directories.\n As an alternative option you can choose to show the image file names as symbolic links in an arbitrary directory. Go to preferences|Lua options. This option is not available for Windows users as on Windows only admins are allowed to create links.\n Pros: You do not clutter up your display with multiple windows. So there is no need to limit the number of selections.\n Cons: If you want to work with the files you are one step behind the original data.\n 🔗Additional Software Required 🔗Limitations 🔗Author Kevin Ertel\nVolker Lenhardt\nBill Ferguson\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/openinexplorer/","tags":null,"title":"OpenInExplorer"},{"categories":null,"content":"dt_type\nAn object containing parameters to export to disk.\nAttributes:\n parent : types.dt_imageio_module_storage_t 🔗dt_imageio_module_storage_data_disk.filename string\nThe filename to export to.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_module_storage_data_disk/","tags":null,"title":"dt_imageio_module_storage_data_disk"},{"categories":null,"content":"🔗Name 🔗Description guides for cropping passport photos based on documents from the Finnish police (https://www.poliisi.fi/instancedata/prime_product_julkaisu/intermin/embeds/poliisiwwwstructure/38462_Passikuvaohje_EN.pdf) describing passport photo dimensions of 47x36 mm and 500x653 px for digital biometric data stored in passports. They use ISO 19794-5 standard based on ICAO 9303 regulations which should also be compliant for all of Europe.\n🔗Usage add the following line in the file $CONFIGDIR/luarc require \u0026ldquo;passport_guide\u0026rdquo; (optional) add the line: \u0026ldquo;plugins/darkroom/clipping/extra_aspect_ratios/passport 36x47mm=47:36\u0026rdquo; to $CONFIGDIR/darktablerc when using the cropping tool, select \u0026ldquo;passport\u0026rdquo; as guide and if you added the line in your luarc select \u0026ldquo;passport 36x47mm\u0026rdquo; as aspect 🔗Additional Software Required 🔗Limitations 🔗Author Kåre Hampf\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/passport_guide/","tags":null,"title":"passport_guide"},{"categories":null,"content":"dt_type\nA film in darktable; this represents a directory containing imported images.\nAttributes:\n has_tostring 🔗dt_lua_film_t.move_image see darktable.database.move_image\n🔗dt_lua_film_t.copy_image see darktable.database.copy_image\n🔗dt_lua_film_t.# types.dt_lua_image_t\nThe different images within the film.\n🔗dt_lua_film_t.id number A unique numeric id used by this film.\nAttributes:\n write 🔗dt_lua_film_t.path string\nThe path represented by this film.\nAttributes:\n write 🔗dt_lua_film_t.delete self:function( [force : boolean] ) Removes the film from the database.\n self - types.dt_lua_film_t - The film to remove. [force] - boolean - Force removal, even if the film is not empty. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_film_t/","tags":null,"title":"dt_lua_film_t"},{"categories":null,"content":"🔗Name pdf_slideshow.lua - generate a pdf slideshow\n🔗Description Generates a PDF slideshow (via Latex) containing all selected images one per slide.\n🔗Usage start this script from script manager This plugin will add a new exporter that will allow you to generate a pdf slideshow. The interface will let you add:\n a global title for the slideshow (prefix in all slide label) a delay for the transition between each slide Each slide will contain a single picture with a label at the bottom with the format (all fields can be the empty string):\n\u0026lt;global title\u0026gt; / \u0026lt;image creator\u0026gt; / \u0026lt;image title\u0026gt;\n🔗Additional Software Required a PDF-Viewer pdflatex (Latex) 🔗Limitations 🔗Author Pascal Obry\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/pdf_slideshow/","tags":null,"title":"pdf_slideshow"},{"categories":null,"content":"dt_type A style that can be applied to an image. Attributes:\n has_tostring 🔗dt_style_t.delete see darktable.styles.delete\n🔗dt_style_t.duplicate see darktable.styles.duplicate\n🔗dt_style_t.apply see darktable.styles.apply\n🔗dt_style_t.export see darktable.styles.export\n🔗dt_style_t.name string\nThe name of the style.\n🔗dt_style_t.description string\nThe description of the style.\n🔗dt_style_t.# types.dt_style_item_t\nThe different items that make the style.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_style_t/","tags":null,"title":"dt_style_t"},{"categories":null,"content":"🔗Name photils.lua - auto tag images based on feature recognition\n🔗Description A darktable plugin that tries to predict keywords based on the selected image. This plugin uses photils-cli to handle this task. Photils-cli is an application that passes the image through a neural network, classifies it, and extracts the suggested tags. Everything happens offline without the need that your data are sent over the internet.\n🔗Usage start this script from script manager Select an image Press \u0026ldquo;get tags\u0026rdquo; Select the tags you want from a list of suggestions Press \u0026ldquo;Attach .. Tags\u0026rdquo; to add the selected tags to your image 🔗Additional Software Required photils-cli - https://github.com/scheckmedia/photils-cli at the moment only available for Linux and MacOS 🔗Limitations 🔗Author Tobias Scheck\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/photils/","tags":null,"title":"photils"},{"categories":null,"content":"dt_type\nAn element that is part of a style.\nAttributes:\n has_tostring 🔗dt_style_item_t.name string\nThe name of the style item.\n🔗dt_style_item_t.num number\nThe position of the style item within its style.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_style_item_t/","tags":null,"title":"dt_style_item_t"},{"categories":null,"content":"🔗Name quicktag.lua - add shortcuts to speed up tagging\n🔗Description For faster attaching your favorite tags, the script adds shortcuts and the module \u0026ldquo;quicktag\u0026rdquo; in lighttable mode with a changeable number of buttons. A tag can be assigned to each button. If the tags do not exist in your database, they are added to the database the first time they are attached to an image.\nThe number of buttons/shortcuts can be changed in the lua preferences. Changes in the number require a restart of darktable.\n🔗Usage set the number of quicktags between 2 and 10 in the preferences dialog and restart darktable if wanted set the shortcuts in the preferences dialog to add or change a quicktag, first select the old tag with the combobox \u0026ldquo;old quicktag\u0026rdquo;, enter a new tag in the \u0026ldquo;new quicktag\u0026rdquo; filed and press \u0026ldquo;set quicktag\u0026rdquo; use a shortcut or button to attach the tag to selected images 🔗Additional Software Required 🔗Limitations 🔗Author Christian Kanzian\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/quicktag/","tags":null,"title":"quicktag"},{"categories":null,"content":"dt_type\nA tag that can be attached to an image.\nAttributes:\nhas_tostring\n🔗dt_lua_tag_t.delete see darktable.tags.delete\n🔗dt_lua_tag_t.attach see darktable.tags.attach\n🔗dt_lua_tag_t.detach see darktable.tags.detach\n🔗dt_lua_tag_t.name string\nThe name of the tag.\n🔗dt_lua_tag_t.# types.dt_lua_image_t\nThe images that have that tag attached to them.\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_tag_t/","tags":null,"title":"dt_lua_tag_t"},{"categories":null,"content":"🔗Name rate_group.lua - rate groups of images\n🔗Description Provide shortcuts for rating or rejecting all images within a group; particularly useful for RAW+JPEG shooters employing a star rating workflow like the below:\nhttp://blog.chasejarvis.com/blog/2011/03/photo-editing-101/\n🔗Usage Assign a keyboard shortcut to each action via settings \u0026gt; shortcuts \u0026gt; lua\nI use the following shortcuts:\n Reject group: Ctrl+R Rate group 1: Ctrl+1 Rate group 2: Ctrl+2 Rate group 3: Ctrl+3 Rate group 4: Ctrl+4 Rate group 5: Ctrl+5 Rate group 0: Ctrl+0 🔗Additional Software Required 🔗Limitations 🔗Author Dom H - dom@hxy.io\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rate_group/","tags":null,"title":"rate_group"},{"categories":null,"content":"dt_type\nThe type of a UI lib\n🔗dt_lua_lib_t.id string\nA unit string identifying the lib\n🔗dt_lua_lib_t.name string\nThe translated title of the UI element\n🔗dt_lua_lib_t.version number\nThe version of the internal data of this lib\n🔗dt_lua_lib_t.visible boolean\nAllow to make a lib module completely invisible to the user. Note that if the module is invisible the user will have no way to restore it without lua\nAttributes:\n implicit_yield write 🔗dt_lua_lib_t.container types.dt_ui_container_t\nThe location of the lib in the darktable UI\n🔗dt_lua_lib_t.expandable boolean\nTrue if the lib can be expanded/retracted\n🔗dt_lua_lib_t.expanded boolean\nTrue if the lib is expanded\nAttributes:\n write 🔗dt_lua_lib_t.position number\nA value deciding the position of the lib within its container\n🔗dt_lua_lib_t.views table\nA table of all the views that display this widget\n🔗dt_lua_lib_t.reset self:function( ) A function to reset the lib to its default values This function will do nothing if the lib is not visible or can\u0026rsquo;t be reset\n self - types.dt_lua_lib_t - The lib to reset 🔗dt_lua_lib_t.on_screen boolean\nTrue if the lib is currently visible on the screen\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_lib_t/","tags":null,"title":"dt_lua_lib_t"},{"categories":null,"content":"🔗Name rename-tags.lua - rename tags\n🔗Description 🔗Usage In lighttable there is a new entry: \u0026lsquo;rename tag\u0026rsquo; Enter old tag (this one gets deleted!) Enter new tag name 🔗Additional Software Required 🔗Limitations 🔗Author Sebastian Witt - se.witt@gmx.net\nBill Ferguson - wpferguson@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rename-tags/","tags":null,"title":"rename_tags"},{"categories":null,"content":"dt_type\nA darktable view\n🔗dt_lua_view_t.id string\nA unique string identifying the view\n🔗dt_lua_view_t.name string\nThe name of the view\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_view_t/","tags":null,"title":"dt_lua_view_t"},{"categories":null,"content":"🔗Name RL_out_sharp.lua - Richardson-Lucy output sharpening using GMic\n🔗Description This script provides a new target storage \u0026ldquo;RL output sharpen\u0026rdquo;. Images exported will be sharpened using GMic (RL deblur algorithm)\n🔗EXAMPLE set sigma = 0.7, iterations = 10, jpeg output quality = 95, to correct blur due to image resize for web usage\n🔗Usage start this script from script manager in lua preferences, select the GMic cli executable from \u0026ldquo;export selected\u0026rdquo;, choose \u0026ldquo;RL output sharpen\u0026rdquo; configure output folder configure RL parameters with sliders configure temp files format and quality, jpg 8bpp (good quality) and tif 16bpp (best quality) are supported configure other export options (size, etc.) export, images will be first exported in the temp format, then sharpened sharpened images will be stored in jpg format in the output folder 🔗Additional Software Required GMic command line interface (CLI) https://gmic.eu/download.shtml\n🔗Limitations MAC compatibility not tested Although Darktable can handle file names containing spaces, GMic cli cannot, so if you want to use this script please make sure that your images do not have spaces in the file name and path\n🔗Author Marco Carrarini - marco.carrarini@gmail.com\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/rl_out_sharp/","tags":null,"title":"RL_out_sharp"},{"categories":null,"content":"dt_type\nA lua-managed entry in the backgroundjob lib\n🔗dt_lua_backgroundjob_t.percent number\nThe value of the progress bar, between 0 and 1. will return nil if there is no progress bar, will raise an error if read or written on an invalid job\nAttributes:\n write 🔗dt_lua_backgroundjob_t.valid boolean\nTrue if the job is displayed, set it to false to destroy the entry An invalid job cannot be made valid again\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_backgroundjob_t/","tags":null,"title":"dt_lua_backgroundjob_t"},{"categories":null,"content":"dt_type\nThe description of a snapshot in the snapshot lib\nAttributes:\nhas_tostring\n🔗dt_lua_snapshot_t.filename string\nThe filename of an image containing the snapshot\n🔗dt_lua_snapshot_t.select self:function( ) Activates this snapshot on the display. To deactivate all snapshot you need to call this function on the active snapshot\n self - types.dt_lua_snapshot_t - The snapshot to activate 🔗dt_lua_snapshot_t.name string\nThe name of the snapshot, as seen in the UI\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_snapshot_t/","tags":null,"title":"dt_lua_snapshot_t"},{"categories":null,"content":"🔗Name slideshowMusic.lua - play music during a slideshow\n🔗Description darktable script to play music during a Slideshow\n🔗Usage start this script from script manager 🔗Additional Software Required You need rhythmbox-client installed to use this script\n🔗Limitations 🔗Author Tobias Jakobs\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/slideshowmusic/","tags":null,"title":"slideshowMusic"},{"categories":null,"content":"enum\na hint on the way to encode a webp image\nValues:\n hint_default hint_picture hint_photo hint_graphic ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/hint_t/","tags":null,"title":"hint_t"},{"categories":null,"content":"🔗Name transfer_hierarchy.lua - move or copy image hierarchies from one location to another\n🔗Description Allows the moving or copying of images from one directory tree to another, while preserving the existing hierarchy.\n🔗Usage darktable\u0026rsquo;s native operations for moving and copying images in batches allow only one directory to be specified as the destination for each batch. Those wanting to move or copy images from a hierarchy of directories within darktable while preserving the directory structure, must take the laborious step of performing the operation one individual directory at a time.\nThis module allows the intact moving and copying of whole directory trees. It was designed for the specific use case of rapidly transferring images from a customary source (e.g., a staging directory on the local disk) to a customary destination (e.g., a directory on a NAS device).\n🔗Instructions for operation: Select the set of images you want to copy.\n Click the \u0026ldquo;calculate\u0026rdquo; button. This will calculate the lowest directory in the hierarchy that contains every selected file (i.e., the common prefix of all the images' pathnames), and write its path into the \u0026ldquo;existing root\u0026rdquo; text box.\n If (a) you have specified the \u0026ldquo;customary source root\u0026rdquo; and \u0026ldquo;customary destination root\u0026rdquo; preferences, and (b) the selected images are all contained under the directory specified as the customary source root, then the \u0026ldquo;root of destination\u0026rdquo; text box will also be automatically filled out.\nFor example, suppose that you have specified \u0026lsquo;/home/user/Staging\u0026rsquo; as your customary source root and \u0026lsquo;/mnt/storage\u0026rsquo; as your customary destination root. If all selected images fell under the directory \u0026lsquo;/home/user/Staging/2020/Roll0001\u0026rsquo;, the \u0026ldquo;root of destination\u0026rdquo; would be automatically filled out with \u0026lsquo;/mnt/storage/2020/Roll0001\u0026rsquo;.\nBut if all selected images fall under a directory outside the specified customary source root (e.g., \u0026lsquo;/opt/other\u0026rsquo;), the \u0026ldquo;root of destination\u0026rdquo; text box must be filled out manually.\nIt is also possible to edit the \u0026ldquo;root of destination\u0026rdquo; further once it has been automatically filled out.\n Click the \u0026ldquo;move\u0026rdquo; or \u0026ldquo;copy\u0026rdquo; button.\nBefore moving or copying any images, the module will first replicate the necessary directory hierarchy by creating all destination directories that do not already exist; should a directory creation attempt fail, the operation will be aborted, but any directories already created will not be removed.\nDuring the actual move/copy operation, the module transfers an image by taking its path and replacing the string in the \u0026ldquo;existing root\u0026rdquo; text box with that in the \u0026ldquo;root of destination\u0026rdquo; text box (e.g., \u0026lsquo;/home/user/Staging/2020/Roll0001/DSC_0001.jpg\u0026rsquo; would be transferred to \u0026lsquo;/mnt/storage/2020/Roll0001/DSC_0001.jpg\u0026rsquo;).\n 🔗Additional Software Required 🔗Limitations 🔗Author August Schwerdfeger - august@schwerdfeger.name\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/transfer_hierarchy/","tags":null,"title":"transfer_hierarchy"},{"categories":null,"content":"enum\nA place in the darktable UI where a lib can be placed\nValues:\n DT_UI_CONTAINER_PANEL_LEFT_TOP DT_UI_CONTAINER_PANEL_LEFT_CENTER DT_UI_CONTAINER_PANEL_LEFT_BOTTOM DT_UI_CONTAINER_PANEL_RIGHT_TOP DT_UI_CONTAINER_PANEL_RIGHT_CENTER DT_UI_CONTAINER_PANEL_RIGHT_BOTTOM DT_UI_CONTAINER_PANEL_TOP_LEFT DT_UI_CONTAINER_PANEL_TOP_CENTER DT_UI_CONTAINER_PANEL_TOP_RIGHT DT_UI_CONTAINER_PANEL_CENTER_TOP_LEFT DT_UI_CONTAINER_PANEL_CENTER_TOP_CENTER DT_UI_CONTAINER_PANEL_CENTER_TOP_RIGHT DT_UI_CONTAINER_PANEL_CENTER_BOTTOM_LEFT DT_UI_CONTAINER_PANEL_CENTER_BOTTOM_CENTER DT_UI_CONTAINER_PANEL_CENTER_BOTTOM_RIGHT DT_UI_CONTAINER_PANEL_BOTTOM ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_ui_container_t/","tags":null,"title":"dt_ui_container_t"},{"categories":null,"content":"🔗Name video_ffmpeg.lua - create a timelapse video from selected images\n🔗Description This plugin will add the new export module \u0026ldquo;video ffmpeg\u0026rdquo;.\n🔗Usage Go to Lighttable Select images you want to use as a video ffmpeg frames In image export module select \u0026ldquo;video ffmpeg\u0026rdquo; Configure you video settings Export 🔗Additional Software Required ffmpeg\n🔗Limitations This script has been tested under Linux only\n🔗Author Dominik Markiewicz\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/video_ffmpeg/","tags":null,"title":"video_ffmpeg"},{"categories":null,"content":"enum\nWhich part of the main window is occupied by a snapshot\nValues:\n left right top bottom ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/snapshot_direction_t/","tags":null,"title":"snapshot_direction_t"},{"categories":null,"content":"enum\nJ2K format type\nValues:\n j2k jp2 ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_j2k_format_t/","tags":null,"title":"dt_imageio_j2k_format_t"},{"categories":null,"content":"enum\nJ2K preset type\nValues:\n off cinema2k_24 cinema2k_48 cinema4k_24 ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_j2k_preset_t/","tags":null,"title":"dt_imageio_j2k_preset_t"},{"categories":null,"content":"enum\nType of compression for webp\nValues:\n webp_lossy webp_lossless ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/comp_type_t/","tags":null,"title":"comp_type_t"},{"categories":null,"content":"enum\nThe type of value to save in a preference\nValues:\n enum directory file string bool integer float lua ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_pref_type/","tags":null,"title":"lua_pref_type"},{"categories":null,"content":"enum\nThe type of compression to use for the EXR image\nValues:\n off rle zips zip piz pxr24 b44 b44a ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_imageio_exr_compression_t/","tags":null,"title":"dt_imageio_exr_compression_t"},{"categories":null,"content":"🔗Name select_untagged.lua - select all images that aren\u0026rsquo;t tagged\n🔗Description Enable selection of untagged images (darktable|* tags are ignored)\n🔗Usage 🔗Additional Software Required 🔗Limitations 🔗Author Jannis_V\n","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.scripts.manual/scripts/contrib/select_untagged/","tags":null,"title":"select_untagged"},{"categories":null,"content":"dt_type\nA single rule for filtering a collection\n🔗dt_lib_collect_params_rule_t.mode types.dt_lib_collect_mode_t\nHow this rule is applied after the previous one. Unused for the first rule\nAttributes:\n write 🔗dt_lib_collect_params_rule_t.data string\nThe text segment of the rule. Exact content depends on the type of rule\nAttributes:\n write 🔗dt_lib_collect_params_rule_t.item types.dt_collection_properties_t\nThe item on which this rule filter. i.e the type of the rule\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lib_collect_params_rule_t/","tags":null,"title":"dt_lib_collect_params_rule_t"},{"categories":null,"content":"enum\nThe logical operators to apply between rulesAttributes:\nValues:\n DT_LIB_COLLECT_MODE_AND DT_LIB_COLLECT_MODE_OR DT_LIB_COLLECT_MODE_AND_NOT ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lib_collect_mode_t/","tags":null,"title":"dt_lib_collect_mode_t"},{"categories":null,"content":"enum\nThe different elements on which a collection can be filtered\nValues:\n DT_COLLECTION_PROP_FILMROLL DT_COLLECTION_PROP_FOLDERS DT_COLLECTION_PROP_CAMERA DT_COLLECTION_PROP_TAG DT_COLLECTION_PROP_DAY DT_COLLECTION_PROP_TIME DT_COLLECTION_PROP_IMPORT_TIMESTAMP DT_COLLECTION_PROP_CHANGE_TIMESTAMP DT_COLLECTION_PROP_EXPORT_TIMESTAMP DT_COLLECTION_PROP_PRINT_TIMESTAMP DT_COLLECTION_PROP_HISTORY DT_COLLECTION_PROP_COLORLABEL DT_COLLECTION_PROP_TITLE DT_COLLECTION_PROP_DESCRIPTION DT_COLLECTION_PROP_CREATOR DT_COLLECTION_PROP_PUBLISHER DT_COLLECTION_PROP_RIGHTS DT_COLLECTION_PROP_LENS DT_COLLECTION_PROP_FOCAL_LENGTH DT_COLLECTION_PROP_ISO DT_COLLECTION_PROP_APERTURE DT_COLLECTION_PROP_FILENAME DT_COLLECTION_PROP_GEOTAGGING ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_properties_t/","tags":null,"title":"dt_collection_properties_t"},{"categories":null,"content":"enum\nThe different elements on which a collection can be sorted\nValues:\n DT_COLLECTION_SORT_NONE DT_COLLECTION_SORT_FILENAME DT_COLLECTION_SORT_DATETIME DT_COLLECTION_SORT_RATING DT_COLLECTION_SORT_ID DT_COLLECTION_SORT_COLOR DT_COLLECTION_SORT_GROUP DT_COLLECTION_SORT_PATH DT_COLLECTION_SORT_CUSTOM_ORDER DT_COLLECTION_SORT_TITLE DT_COLLECTION_SORT_DESCRIPTION DT_COLLECTION_SORT_ASPECT_RATIO DT_COLLECTION_SORT_SHUFFLE ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_sort_t/","tags":null,"title":"dt_collection_sort_t"},{"categories":null,"content":"enum\nThe different orders that a collection can be sorted in\nValues:\n DT_COLLECTION_SORT_ORDER_ASCENDING DT_COLLECTION_SORT_ORDER_DESCENDING ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_sort_order_t/","tags":null,"title":"dt_collection_sort_order_t"},{"categories":null,"content":"enum\nThe different elements on which a collection can be filtered\nValues:\n DT_COLLECTION_FILTER_ALL DT_COLLECTION_FILTER_STAR_NO DT_COLLECTION_FILTER_STAR_1 DT_COLLECTION_FILTER_STAR_2 DT_COLLECTION_FILTER_STAR_3 DT_COLLECTION_FILTER_STAR_4 DT_COLLECTION_FILTER_STAR_5 DT_COLLECTION_FILTER_REJECT DT_COLLECTION_FILTER_NOT_REJECT ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_filter_t/","tags":null,"title":"dt_collection_filter_t"},{"categories":null,"content":"enum\nThe different ways in which a collection filter can be compared\nValues:\n DT_COLLECTION_RATING_COMP_LT DT_COLLECTION_RATING_COMP_LEQ DT_COLLECTION_RATING_COMP_EQ DT_COLLECTION_RATING_COMP_GEQ DT_COLLECTION_RATING_COMP_GT DT_COLLECTION_RATING_COMP_NE DT_COLLECTION_RATING_N_COMPS ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_collection_rating_comperator_t/","tags":null,"title":"dt_collection_rating_comperator_t"},{"categories":null,"content":"enum\nA possible orientation for a widget\nValues:\n horizontal vertical ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_orientation_t/","tags":null,"title":"dt_lua_orientation_t"},{"categories":null,"content":"enum\nThe alignment of a label\nValues:\n fill start end center baseline ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_align_t/","tags":null,"title":"dt_lua_align_t"},{"categories":null,"content":"enum\nThe ellipsize mode of a label\nValues:\n none start middle end ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_ellipsize_mode_t/","tags":null,"title":"dt_lua_ellipsize_mode_t"},{"categories":null,"content":"dt_type\nA wrapper around a cairo drawing context. You probably shouldn\u0026rsquo;t use this after the callback that got it passed returned. For more details of the member functions have a look at the cairo documentation for the drawing context, transformations and paths.\n🔗dt_lua_cairo_t.save self:function( ) Save the state of the drawing context.\n self - types.dt_lua_cairo_t - The context to modify. 🔗types.dt_lua_cairo_t.restore self:function( ) Restore a previously saved state.\n self - types.dt_lua_cairo_t - The context to modify. 🔗dt_lua_cairo_t.move_to self:function( x : float, y : float ) Begin a new sub-path.\n self - types.dt_lua_cairo_t - The context to modify x - float - The x coordinate of the new position. y - float - The y coordinate of the new position. 🔗dt_lua_cairo_t.line_to self:function( x : float, y : float ) Add a line to the path.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x coordinate of the end of the new line. y - float - The y coordinate of the end of the new line. 🔗types.dt_lua_cairo_t.rectangle self:function( x : float, y : float, width : float, height : float ) Add a closed sub-path rectangle.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x coordinate of the top left corner of the rectangle. y - float - The y coordinate of the top left corner of the rectangle. width - float - The width of the rectangle. height - float - The height of the rectangle. 🔗dt_lua_cairo_t.arc self:function( x : float, y : float, radius : float, angle1 : float, angle2 : float ) Add a circular arc.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x position of the center of the arc. y - float - The y position of the center of the arc. radius - float - The radius of the arc. angle1 - float - The start angle, in radians. angle2 - float - The end angle, in radians. 🔗dt_lua_cairo_t.arc_negative self:function( x : float, y : float, radius : float, angle1 : float, angle2 : float ) Add a circular arc. It only differs in the direction from types.dt_lua_cairo_t.arc.\n self - types.dt_lua_cairo_t - The context to modify. x - float - The x position of the center of the arc. y - float - The y position of the center of the arc. radius - float - The radius of the arc. angle1 - float - The start angle, in radians. angle2 - float - The end angle, in radians. 🔗dt_lua_cairo_t.rotate self:function( angle : float ) Add a rotation to the transformation matrix.\n self - types.dt_lua_cairo_t - The context to modify. angle - float - The angle (in radians) by which the user-space axes will be rotated. 🔗dt_lua_cairo_t.scale self:function( x : float, y : float ) Add a scaling to the transformation matrix.\nself** - _types.dt_lua_cairo_t_ - The context to modify.\n x - float - The scale factor for the x dimension. y - float - The scale factor for the y dimension. 🔗dt_lua_cairo_t.translate self:function( x : float, y : float ) Add a translation to the transformation matrix.\n self - types.dt_lua_cairo_t - The context to modify. x - float - Amount to translate in the x direction y - float - Amount to translate in the y direction 🔗dt_lua_cairo_t.new_sub_path self:function( ) Begin a new sub-path.\n self - types.dt_lua_cairo_t - The context to modify. 🔗dt_lua_cairo_t.draw_line self:function( x_start : float, y_start : float, x_end : float, y_end : float ) Helper function to draw a line with a given start and end.\n self - types.dt_lua_cairo_t - The context to modify. x_start - float - The x coordinate of the start of the new line. y_start - float - The y coordinate of the start of the new line. x_end - float - The x coordinate of the end of the new line. y_end - float - The y coordinate of the end of the new line. ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lua_cairo_t/","tags":null,"title":"dt_lua_cairo_t"},{"categories":null,"content":"enum\nThe different user interface panels\nValues:\n DT_UI_PANEL_TOP DT_UI_PANEL_CENTER_TOP DT_UI_PANEL_CENTER_BOTTOM DT_UI_PANEL_LEFT DT_UI_PANEL_RIGHT DT_UI_PANEL_BOTTOM DT_UI_PANEL_SIZE ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_ui_panel_t/","tags":null,"title":"dt_ui_panel_t"},{"categories":null,"content":"enum\nThe different lighttable layouts\nValues:\n DT_LIGHTTABLE_LAYOUT_FIRST DT_LIGHTTABLE_LAYOUT_ZOOMABLE DT_LIGHTTABLE_LAYOUT_FILEMANAGER DT_LIGHTTABLE_LAYOUT_CULLING DT_LIGHTTABLE_LAYOUT_LAST ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/dt_lighttable_layout_t/","tags":null,"title":"dt_lighttable_layout_t"},{"categories":null,"content":"dt_type\nCommon parent type for all lua-handled widgets\nAttributes:\n has_tostring 🔗lua_widget.extra registration parameters This widget has no extra registration parameters\n🔗lua_widget.name Lua API 6.2.0\nstring or nil\nName assigned to the widget for CSS styling purposes.\nAttributes:\n write 🔗lua_widget.sensitive boolean\nSet if the widget is enabled/disabled\nAttributes:\n write 🔗lua_widget.tooltip string or nil\nTooltip to display for the widget\nAttributes:\n write 🔗lua_widget.reset_callback function( widget : types.lua_widget ) A function to call when the widget needs to reset itself. Note that some widgets have a default implementation that can be overridden, (containers in particular will recursively reset their children). If you replace that default implementation you need to reimplement that functionality or call the original function within your callback.\nAttributes:\n write\n widget - types.lua_widget - The widget that triggered the callback\n 🔗lua_widget.As a function function( attributes : table ) : types.lua_widget Using a lua widget as a function Allows to set multiple attributes of that widget at once. This is mainly used to create UI elements in a more readable way.\nFor example:\nlocal widget = dt.new_widget(\u0026quot;button\u0026quot;){ label =\u0026quot;my label\u0026quot;, clicked_callback = function() print \u0026quot;hello world\u0026quot; end } attributes - table - A table of attributes =\u0026gt; value to set return - types.lua_widget - The object called itself, to allow chaining ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_widget/","tags":null,"title":"lua_widget"},{"categories":null,"content":"dt_type\nA widget containing other widgets\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_container.__call see types.lua_widget.As a function\n🔗lua_container.extra registration parameters This widget has no extra registration parameters\n🔗lua_container.# types.lua_widget\nThe widgets contained by the box. You can append widgets by adding them at the end of the list. You can remove widgets by setting them to nil.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_container/","tags":null,"title":"lua_container"},{"categories":null,"content":"dt_type\nA checkable button with a label next to it Attributes:\n has_tostring parent : types.lua_widget 🔗lua_check_button.__call see types.lua_widget.As a function\n🔗lua_check_button.extra registration parameters This widget has no extra registration parameters\n🔗lua_check_button.label string\nThe label displayed next to the button\nAttributes:\n write 🔗lua_check_button.value boolean\nIf the widget is checked or not\nAttributes:\n write 🔗lua_check_button.clicked_callback function( widget : types.lua_widget ) A function to call on button click\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_check_button/","tags":null,"title":"lua_check_button"},{"categories":null,"content":"dt_type\nA label containing some text\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_label.__call see types.lua_widget.As a function\n🔗lua_label.extra registration parameters This widget has no extra registration parameters\n🔗lua_label.label string\nThe label displayed\nAttributes:\n write 🔗lua_label.selectable boolean\nTrue if the label content should be selectable\nAttributes:\n write 🔗lua_label.halign types.dt_lua_align_t\nThe horizontal alignment of the label\nAttributes:\n write 🔗lua_label.ellipsize types.dt_lua_ellipsize_mode_t\nThe ellipsize mode of the label\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_label/","tags":null,"title":"lua_label"},{"categories":null,"content":"dt_type\nA clickable button\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_button.__call see types.lua_widget.As a function\n🔗lua_button.extra registration parameters This widget has no extra registration parameters\n🔗lua_button.label string\nThe label displayed on the button\nAttributes:\n write 🔗lua_button.ellipsize types.dt_lua_ellipsize_mode_t\nThe ellipsize mode of the button label\nAttributes:\n write 🔗lua_button.clicked_callback function( widget : types.lua_widget ) A function to call on button click\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_button/","tags":null,"title":"lua_button"},{"categories":null,"content":"dt_type\nA container for widget in a horizontal or vertical list\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_box.__call see types.lua_widget.As a function\n🔗lua_box.extra registration parameters This widget has no extra registration parameters\n🔗lua_box.orientation types.dt_lua_orientation_t\nThe orientation of the box.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_box/","tags":null,"title":"lua_box"},{"categories":null,"content":"dt_type\nA widget in which the user can input text\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_entry.__call see types.lua_widget.As a function\n🔗lua_entry.extra registration parameters This widget has no extra registration parameters\n🔗lua_entry.text string\nThe content of the entry\nAttributes:\n write 🔗lua_entry.placeholder string\nThe text to display when the entry is empty\nAttributes:\n write 🔗lua_entry.is_password boolean\nTrue if the text content should be hidden\nAttributes:\n write 🔗lua_entry.editable boolean\nFalse if the entry should be read-only\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_entry/","tags":null,"title":"lua_entry"},{"categories":null,"content":"dt_type\nA widget providing a separation in the UI.\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_separator.__call see types.lua_widget.As a function\n🔗lua_separator.extra registration parameters This widget has no extra registration parameters\n🔗lua_separator.orientation string\nThe orientation of the separator.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_separator/","tags":null,"title":"lua_separator"},{"categories":null,"content":"dt_type\nA widget with multiple text entries in a menu. This widget can be set as editable at construction time. If it is editable the user can type a value and is not constrained by the values in the menu.\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_combobox.__call see types.lua_widget.As a function\n🔗lua_combobox.extra registration parameters This widget has no extra registration parameters\n🔗lua_combobox.value string\nThe text content of the selected entry, can be nil. You can set it to a number to select the corresponding entry from the menu. If the combobox is editable, you can set it to any string. You can set it to nil to deselect all entries.\nAttributes:\n write 🔗lua_combobox.selected integer\nThe index of the selected entry, or 0 if nothing is selected. You can set it to a number to select the corresponding entry from the menu, or to 0 to select nothing. You can set it to nil to deselect all entries.\nAttributes:\n write 🔗lua_combobox.# string\nThe various menu entries. You can add new entries by writing to the first element beyond the end. You can removes entries by setting them to nil.\nAttributes:\n write 🔗lua_combobox.changed_callback function( widget : types.lua_widget ) A function to call when the value field changes (character entered or value selected)\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write 🔗lua_combobox.editable boolean\nTrue is the user is allowed to type a string in the combobox\nAttributes:\n write 🔗lua_combobox.label string\nThe label displayed on the combobox\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_combobox/","tags":null,"title":"lua_combobox"},{"categories":null,"content":"dt_type\nA button that allows the user to select an existing file\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_file_chooser_button.__call see types.lua_widget.As a function\n🔗lua_file_chooser_button.extra registration parameters This widget has no extra registration parameters\n🔗lua_file_chooser_button.title string\nThe title of the window when choosing a file\nAttributes:\n write 🔗lua_file_chooser_button.value string\nThe currently selected file\nAttributes:\n write 🔗lua_file_chooser_button.changed_callback function( widget : types.lua_widget ) A function to call when the value field changes (character entered or value selected)\n widget - types.lua_widget - The widget that triggered the callback Attributes:\n write 🔗lua_file_chooser_button.is_directory boolean\nTrue if the file chooser button only allows directories to be selected\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_file_chooser_button/","tags":null,"title":"lua_file_chooser_button"},{"categories":null,"content":"dt_type\nA container that will only show one of its child at a time\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_stack.__call see types.lua_widget.As a function\n🔗lua_stack.extra registration parameters This widget has no extra registration parameters\n🔗lua_stack.active types.lua_widget or nil\nThe currently selected child, can be nil if the container has no child, can be set to one of the child widget or to an index in the child table\nAttributes:\n write 🔗lua_stack.h_size_fixed boolean\nTrue if horizontal size is fixed, false if stack can be resized horizontally.\nAttributes:\n write 🔗lua_stack.v_size_fixed boolean\nTrue if vertical size is fixed, false if stack can be resized vertically.\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_stack/","tags":null,"title":"lua_stack"},{"categories":null,"content":"dt_type\nA slider that can be set by the user\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_slider.__call see types.lua_widget.As a function\n🔗lua_slider.extra registration parameters This widget has no extra registration parameters\n🔗lua_slider.soft_min number\nThe soft minimum value for the slider, the slider can\u0026rsquo;t go beyond this point\nAttributes:\n write 🔗lua_slider.soft_max number\nThe soft maximum value for the slider, the slider can\u0026rsquo;t go beyond this point\nAttributes:\n write 🔗lua_slider.hard_min number\nThe hard minimum value for the slider, the user can\u0026rsquo;t manually enter a value beyond this point Attributes:\n write 🔗lua_slider.hard_max number\nThe hard maximum value for the slider, the user can\u0026rsquo;t manually enter a value beyond this point\nAttributes:\n write 🔗lua_slider.step number\nThe step width of the slider\nAttributes:\n write 🔗lua_slider.digits integer\nThe number of decimal digits shown on the slider\nAttributes:\n write 🔗lua_slider.value number\nThe current value of the slider\nAttributes:\n write 🔗lua_slider.label string\nThe label next to the slider\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_slider/","tags":null,"title":"lua_slider"},{"categories":null,"content":"dt_type\nA multiline text input widget\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_text_view.__call see types.lua_widget.As a function\n🔗lua_text_view.extra registration parameters This widget has no extra registration parameters\n🔗lua_text_view.text string\nThe text in the widget\nAttributes:\n write 🔗lua_text_view.editable boolean\nFalse if the entry should be read-only\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_text_view/","tags":null,"title":"lua_text_view"},{"categories":null,"content":"dt_type\nA section label\nAttributes:\n has_tostring parent : types.lua_widget 🔗lua_section_label.__call see types.lua_widget.As a function\n🔗types.lua_section_label.extra registration parameters This widget has no extra registration parameters\n🔗lua_section_label.label string\nThe section name\nAttributes:\n write ","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/lua.api.manual/types/lua_section_label/","tags":null,"title":"lua_section_label"},{"categories":null,"content":"","date":"0001-01-01T00:00:00Z","href":"https://darktable-org.github.io/luadocs/search/","tags":null,"title":"Search"}] \ No newline at end of file diff --git a/lua.api.manual/darktable/darktable.gui/index.html b/lua.api.manual/darktable/darktable.gui/index.html index 9ea0b87..4efa364 100644 --- a/lua.api.manual/darktable/darktable.gui/index.html +++ b/lua.api.manual/darktable/darktable.gui/index.html @@ -2746,7 +2746,7 @@ The snapshot file will be generated at the next redraw of the main window

name : string, callback : function ) -

Register a function providing extra info to display in the widget

+

Register a field in the image information module with a callback function to update the field

+

đź”—darktable.gui.libs.metadata_view.destroy_info

+

lua API 6.2.0

+
function(
+  name : string
+)
+

Remove the named field from the image information module and it’s associated callback

+

đź”—darktable.gui.libs.metadata

The widget allowing modification of metadata fields on the current image

Attributes: