darktable 3.6 is due to be released in the next few hours. Along with a host of new features there are also lots of changes to the lua scripting API enabling lots of new functionality.
Widget naming - widgets now have a name field, making it possible to style them using CSS. This makes it possible for script_manager to provide a color option to show whether a script is running or not. To set the colors the following CSS needs added in the preferences->general CSS tweaks section:
button#sm_started label { color: rgb(50,210,50); }
button#sm_stopped label { color: rgb(210,50,50); }
Starting and stopping scripts from script_manager. script_manager can now stop scripts and remove them from the UI thanks to the following changes:
darktable.gui.libs.visibility is fixed so that setting a lib to hidden (false) removes it from the user interface.
darktable.gui.libs.metadata_view.destroy_info() - function added to remove field added by darktable.gui.libs.metadata_view.register_info() from the image information display. Thanks @phweyland
Event naming - add a name field to darktable.register_event() so that multiple events of the same type can differentiated and the desired one selected and accessed.
Event destruction - added darktable.destroy_event() to remove an event.
Selection naming - add a name field to darktable.gui.libs.select.register_selection() so that the selection button can be selected and manipulated after creation
Selection destruction - add darktable.gui.libs.select.destroy_selection() to remove a selection button from the user interface.
Action naming - add a name field to darktable.gui.libs.image.register_action() so that the action button can be selected and manipulated after creation
Action destruction - add darktable.gui.libs.image.destroy_action() to remove a lua created action button from the user interface.
Storage removal - add darktable.destroy_storage() to remove a lua created storage from the exporter
Select and Action button sensitivity can be controlled so that the behavior matches the core buttons
Add selection-changed to the lua events so that scripts can respond when the selection changes
Selection sensitivity - add darktable.gui.libs.select.set_selection_sensitive() to set selection button sensitivity
Action sensitivity - add darktable.gui.libs.image.set_action_sensitive() to set action button sensitivity
Other
Password storage and retrieval - added darktable.password.save() and darktable.password.get() to save and retrieve passwords using the darktable password storage back end.
Preferences - added darktable.preferences.destroy() to remove a preference. Added darktable.preferences.get_keys() to return a sorted table of all of the preferences for both darktable and lua.
Get image from database by image id - added darktable.database.get_image() to retrieve an image by the image ID
Bugfix - Changed text_view widget to wrap lines when the text exceeds the width of the widget
Widget visibility - add visible member to widgets for visibility control
The Bad
All of the API breaking changes. Users need to update their lua-scripts after upgrading to darktable 3.6. This can be done from script_manager in the install/update section.
Any old scripts that use the following functions must be updated to be compatible with darktable 3.6
darktable.register_event()
darktable.gui.libs.image.register_action()
darktable.gui.libs.select.register_selection()
The Ugly
The way that I tried to handle the API breaking changes this past 6 months. I added lots of conditionals to the code trying to make trying to make it compatible with the existing API as well as the new API. It mostly worked, but was a nightmare to implement and maintain.
Going forward API changes will be handled as follows:
The current production API version will be the master branch of the repository
A development branch will be created for the next API version. This will allow testing of the new API without breaking production code.
Old API versions will each have their own branch. This allows back porting fixes and, in some cases, scripts to previous API versions.
script_manager is now API version aware and capable of using the correct version of the scripts for the API being used.
Somehow I don’t get the lua-scripts working on a clean darktable install on my windows 10. I use the 3.6.0.1-win64 installer and on the first startup after the installation, I can select to install the lua-scripts in the bottom left corner. After a restart, I would expect the script manager to appear in that lower-left corner but nothing is there.
In my user folder, the lua subfolder exists and the luarc has "require “tools/script_manager” " as the only entry. Does anyone have an idea what I am doing wrong? I had it working fine just a few days ago …
5,528015 LUA ERROR : …00_Exchange\XX_darktable_db/lua/tools/script_manager.lua:213: attempt to concatenate a nil value (local ‘branch’)
Note that I run darktable with --configdir …00_Exchange\XX_darktable_db/
Actually, when I run it in the default user folder it works fine But I had it working in that user-defined folder before for sure.
I just tried to install lua scripts in actual master and can reproduce too. On Linux, I have that error when launching darktable with -d lua option:
0,958272 LUA ERROR : /home/nilvus/.config/darktable/lua/tools/script_manager.lua:213: attempt to concatenate a nil value (local ‘branch’). I always compile in master branch (git status is same as MeisterKaos)
I’ve checked my darktable config dir and I have luarc with line "require “tools/script_manager”
To reproduce:
don’t have lua installed but of course darktable compiled with support
launch darktable
execute installer to install lua scripts
wait a little to see lua scripts installed message shown
nothing else happen then
when relaunching darktable, see no lua scripts in darktable windows nor script installer
But luarc file and lua folder are there in darktable config dir.
I just pushed a possible fix. Go to your lua directory and do a git pull which should give you the fix. If it crashes, it should dump some data so I can see what’s going on.
0,978626 LUA ERROR: script_manager.lua: get_current_repo_branch: 214: no branch detected in repo_data
repo_data:
Sur la branche master
Votre branche est à jour avec ‘origin/master’.
Thanks for the effort! I expected it to be a problem on my side^^
Same output for me:
5,731021 LUA ERROR: script_manager.lua: get_current_repo_branch: 214: no branch detected in repo_data
repo_data:
But the script manager now appears as expected and i can load the gimp plugin for example. enfuseAdvanced on the other hand fails with the following message:
121,019851 LUA ERROR: script_manager.lua: activate: 334: Error loading contrib/enfuseAdvanced
121,019983 LUA ERROR: script_manager.lua: activate: 335: Error message: …_Exchange\XX_darktable_db/lua/contrib/enfuseAdvanced.lua:873: attempt to index a nil value (field ‘?’)
If I remember correctly I have to specify the enfuse, align_image_stack and exiftool location in the Lua-options menu, but only after I started the script. Now loading fails and I cannot choose anything in options.
Hmm, in the executable manager I can only choose “git” as the executable to configure. Also enfuseAdvanced still fails to load. And I am very sure that there was a menu option before, right? Something still seems wrong