dtutils.string: build_substitute_list errors when a metadata field (e.g. rights) has been removed
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 78/100
Research direction
Start in lib/dtutils/string.lua at build_substitute_list(), then inspect the call from contrib/rename_images.lua. Reproduce with darktable -d lua after removing the rights metadata field, and verify that variable substitution and image renaming work without the field being registered.
Written by the indexing model from the issue text.
Description
Describe the bug
lib/dtutils/string.lua build_substitute_list() throws when a metadata field it references has been removed from darktable's metadata definitions. Any script using variable substitution (e.g. contrib/rename_images) then fails, regardless of which variables its pattern actually uses.
In darktable 5.x, metadata fields are user-configurable (stored in data.db meta_data). If a user removes e.g. Xmp.dc.rights, the rights field is no longer registered on dt_lua_image_t, and indexing it raises an error rather than returning nil. So the existing guard
image.rights and image.rights or "", -- RIGHTS
doesn't protect against it. The same applies to image.title, image.description, image.creator, image.publisher and image.version_name (lines ~810 and 877–886).
To reproduce
- In the metadata editor preferences, remove the
rights(Xmp.dc.rights) field and restart darktable. - Enable
contrib/rename_images. - Rename any image with any pattern, e.g.
$(EXIF.YEAR)$(EXIF.MONTH)$(EXIF.DAY)_$(SEQUENCE).$(FILE_EXTENSION).
Log (darktable -d lua)
LUA pattern is $(EXIF.YEAR)$(EXIF.MONTH)$(EXIF.DAY)_$(SEQUENCE).$(FILE_EXTENSION)
LUA ERROR : ...urces/share/darktable/lua-scripts/lib/dtutils/string.lua:885: field "rights" not found for type dt_lua_image_t
stack traceback:
[C]: in ?
[C]: in metamethod 'index'
...urces/share/darktable/lua-scripts/lib/dtutils/string.lua:885: in function 'lib/dtutils.string.build_substitute_list'
...es/share/darktable/lua-scripts/contrib/rename_images.lua:144: in upvalue 'do_rename'
...es/share/darktable/lua-scripts/contrib/rename_images.lua:211: in function <...es/share/darktable/lua-scripts/contrib/rename_images.lua:210>
[C]: in ?
Suggested fix
Read the metadata fields through a protected lookup, e.g.
local function get_field(image, field)
local ok, value = pcall(function() return image[field] end)
return (ok and value) and value or ""
end
and use get_field(image, "rights") etc. in the replacements table.
Workaround
Re-add the missing metadata field in the metadata editor preferences.
Platform
- darktable 5.6.0 (Lua API 9.7.0), lua-scripts as bundled with the official macOS package
- macOS 26.6.2, Apple M2
- Dominant language
- Lua
- Stars
- 219
- Forks
- 142
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from darktable-org/lua-scripts
-
Difficulty 2/5 1-3 hours Newbie friendliness 63/100
darktable-org/lua-scripts#706 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
darktable-org/lua-scripts#627 · 2 comments ·
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 65/100
darktable-org/lua-scripts#618 · 3 comments ·
-
Difficulty 3/5 1-2 days Newbie friendliness 52/100
darktable-org/lua-scripts#710 · 3 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
darktable-org/lua-scripts#708 · 1 comment ·
All issues in darktable-org/lua-scripts
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
api7/lua-resty-saml#62 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
nvim-tree/nvim-tree.lua#3357 · 1 comment ·
-
Difficulty 1/5 Under an hour Newbie friendliness 94/100
codymikol/multiverse.nvim#320 ·
-
Data Correction tbc
Difficulty 2/5 1-3 hours Newbie friendliness 68/100