--- title: darktable.gui id: darktable.gui weight: 110 draft: false author: "people" --- This subtable contains function and data to manipulate the darktable user interface with Lua. Most of these function won't do anything if the GUI is not enabled \(i.e you are using the command line version darktable-cli instead of darktable\). # darktable.gui.action_images `table` A table of [types.dt_lua_image_t](../../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](#darktable.gui.hovered) or [darktable.gui.selection](#darktable.gui.selection) to be consistent with darktable's GUI. # darktable.gui.hovered `types.dt_lua_image_t` The image under the cursor or nil if no image is hovered. # 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. Attributes: [implicit_yield](../Attributes#implicit_yield) * **\[selection\]** - _table of [types.dt_lua_image_t](../../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](../../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. * **\[view\]** - [_types.dt_lua_view_t](../../types/dt_lua_view_t)_ - The view to switch to. If empty the current view is unchanged * **return** - [_types.dt_lua_view_t](../../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. * **panel** - _[types.dt_ui_panel_t](../../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. * **panel** - _[types.dt_ui_panel_t](../../types/dt_ui_panel_t)_ - The panel to hide. # darktable.gui.panel_show ``` function( panel : types.dt_ui_panel_t ) ``` Shows the specified panel. * **panel** - _[types.dt_ui_panel_t](../../types/dt_ui_panel_t)_ - The panel to show. # darktable.gui.panel_hide_all ``` function( ) ``` Hide all panels. # darktable.gui.panel_show_all ``` function( ) ``` Show all panels. # 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. * **panel** - _[types.dt_ui_panel_t](../../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. * **panel** - _[types.dt_ui_panel_t](../../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](#darktable.gui.libs.backgroundjobs) * **text** - _string_ - The text to display in the job entry * **\[percentage\]** - _boolean_ - Should a progress bar be displayed * **\[cancel_callback\]** - _[function](#cancel_callback)_ - A function called when the cancel button for that job is pressed. Note: the job won't be destroyed automatically. You need to set [types.dt_lua_backgroundjob_t.valid](../../types/dt_lua_backgroundjob_t#valid) to false for that. * **return** - _[types.dt_lua_backgroundjob_t](../../types/dt_lua_backgroundjob_t)_ - The newly created job object ## cancel_callback ``` function( job : types.dt_lua_backgroundjob_t ) ``` * **job** - _[types.dt_lua_backgroundjob_t](../../types/dt_lua_backgroundjob_t)_ - The job who is being cancelled # darktable.gui.views The different views in darktable ## darktable.gui.views.map The map view Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#paren) : [types.dt_lua_view_t](../../types/dt_lua_view_t) ### darktable.gui.views.map.latitude * number - The latitude of the center of the map Attributes: * [write](../Attributes#write) ### darktable.gui.views.map.longitude * number - The longitude of the center of the map Attributes: * [write](../Attributes#write) ### darktable.gui.views.map.zoom * number - The current zoom level of the map Attributes: * [write](../Attributes#write) ## darktable.gui.views.darkroom The darkroom view Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_view_t](../../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. * **\[image\] - _[types.dt_lua_image_t](../../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](../../types/dt_lua_image_t)_ - The image currently displayed. ## darktable.gui.views.lighttable The lighttable view Attributes: * [has_tostring](../../Attributes#has_tostring) * [parent](../../Attributes#parent) : [types.dt_lua_view_t](../../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. * **image** - _[types.dt_lua_image_t](../../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. * **image** - _[types.dt_lua_image_t](../../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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_view_t](../../types/dt_lua_view_t) ## darktable.gui.views.slideshow The slideshow view Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_view_t](../../types/dt_lua_view_t) ## darktable.gui.views.print The print view Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_view_t](../../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. ``` local dt = require "darktable" local tested_module="global_toolbox" 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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 Attributes: * [write](../Attributes#write) darktable.gui.libs.snapshots.direction [types.snapshot_direction_t](../../types/snapshot_direction_t) - The direction of the snapshot overlay Attributes: * [write](../Attributes#write) ### darktable.gui.libs.snapshots.# [types.snapshot_direction_t](../../types/snapshot_direction_t) - The different snapshots for the image ### darktable.gui.libs.snapshots.selected [types.snapshot_direction_t](../../types/snapshot_direction_t) - The currently selected snapshot ### 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 ### darktable.gui.libs.snapshots.max_snapshot number - The maximum number of snapshots ## darktable.gui.libs.collect The collection UI element that allows to filter images by collection Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 Attributes: * [implicit_yield](../Attributes#implicit_yield) * **\[rules\]** - _array of [types.dt_lib_collect_params_rule_t](../../types/dt_lib_collect_params_rule_t)_ - A table of rules describing the filter. These rules will be applied after this call * **return** - _array of [types.dt_lib_collect_params_rule_t](../../types/dt_lib_collect_params_rule_t)_ - The rules that were applied before this call. ### darktable.gui.libs.collect.new_rule ``` function( ) : types.dt_lib_collect_params_rule_t ``` Returns a newly created rule object * **return** - _[types.dt_lib_collect_params_rule_t](../../types/dt_lib_collect_params_rule_t)_ - The newly created rule ## darktable.gui.libs.import The buttons to start importing images Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 * **widget** - _[types.lua_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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.metadata_view The widget displaying metadata about the current image Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 * **name** - _string_ - The name displayed for the new information * **callback** - _function_ - The function providing the info callback - ``` function( image : types.dt_lua_image_t ) : string ``` * **image** - _[types.dt_lua_image_t](../../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** ``` function( name : string ) ``` Remove the named field from the image information module and it's associated callback * **name** - _string_ - The name of the field, created by [darktable.gui.libs.metadata_view.register_info](#darktable.gui.libs.metadata_view.register_info), to remove ## darktable.gui.libs.metadata The widget allowing modification of metadata fields on the current image Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.filmstrip The filmstrip at the bottom of some views Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.viewswitcher The labels allowing to switch view Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.darktable_label The darktable logo in the upper left corner Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.tagging The tag manipulation UI Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.geotagging The geotagging time synchronisation UI Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.recentcollect The recent collection UI element Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.global_toolbox The common tools to all view \(settings, grouping...\) Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ### darktable.gui.libs.global_toolbox.grouping boolean- The current status of the image grouping option Attributes: * [write](../Attributes#write) ### darktable.gui.libs.global_toolbox.show_overlays boolean - the current status of the image overlays option Attributes: * [write](../Attributes#write) ## darktable.gui.libs.filter The image-filter menus at the top of the UI Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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. * **\[sort\]** - _[types.dt_collection_sort_t](../../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](../../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. * **\[order\]** - _[types.dt_collection_sort_order_t](../../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](../../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. * **\[rating\]** - _[types.dt_collection_filter_t](../../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](../../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. * **\[comparator\]** - _[types.dt_collection_rating_comperator_t](../../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](../../types/dt_collection_rating_comperator_t)_ - The current rating comparison field ## darktable.gui.libs.ratings The stars to set the rating of an image Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.select The buttons that allow to quickly change the selection Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 * **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 - ``` function( event : string, images : table oftypes.dt_lua_image_t ) : table oftypes.dt_lua_image_t ``` The function to call when the button is pressed * **event** - _string_ - The name of the button that was pressed * **images** - _table of [types.dt_lua_image_t](../../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](../../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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.lighttable_mode The navigation and zoom level UI in lighttable Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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. * **\[layout\]** - _[types.dt_lighttable_layout_t](../../types/dt_lighttable_layout_t)_ - The layout to switch to. If empty the current layout is unchanged * **return** - _[types.dt_lighttable_layout_t](../../types/dt_lighttable_layout_t)_ - the current layout ### darktable.gui.libs.lighttable_mode.zoom_level ``` function( [level : int] ) : int ``` Change the lighttable zoom level. * **\[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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.image The UI element that manipulates the current images Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../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 * **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 - ``` function( event : string, images : table oftypes.dt_lua_image_t ) ``` The function to call when the button is pressed * **event** - _string_ - The name of the button that was pressed * **images** - _table of [types.dt_lua_image_t](../../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 Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.module_toolbox The tools on the bottom line of the UI (overexposure) Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.session The session UI when tethering Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.histogram The histogram widget Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.export The export menu Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.history The history manipulation menu Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.colorpicker The colorpicker menu Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.navigation The full image preview to allow navigation Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.masks The masks window Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.view_toolbox The view_toolbox window Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.live_view The liveview window Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.map_settings The map setting window Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.camera The camera selection UI Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.location The location ui Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.backgroundjobs The window displaying the currently running jobs Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t) ## darktable.gui.libs.print_settings The settings window in the print view Attributes: * [has_tostring](../Attributes#has_tostring) * [parent](../Attributes#parent) : [types.dt_lua_lib_t](../../types/dt_lua_lib_t)